Ключевой вопрос: «Может ли злоумышленник изменить сообщения m1 и m2»? Если это так, злоумышленнику нужно найти m1, m2 такой, что hash (m1) = hash (m2). Это атака на день рождения, и сложность значительно уменьшается - становится квадратным корнем. Если выходное значение хеша составляет 128 бит (MD5), сложность составляет 2 ^ 64, что вполне достижимо для текущей вычислительной мощности.
Обычный приведенный пример - продавец просит своего секретаря напечатать сообщение «Я продам его за 10 миллионов долларов». Секретарь схемы создает 2 документа, один из которых гласит: «Я продам его за 10 миллионов долларов», а другой - «Я продам его за x миллионов долларов», где х намного меньше 10, изменяет оба сообщения, добавляя пробелы и используя заглавные буквы слова и т. д., изменяет х, пока хеш (m1) = хеш (м2). Теперь секретарь показывает правильное сообщение m1 продавцу и подписывает его, используя свой закрытый ключ, в результате чего получается хэш h. Секретарь переключает сообщение и отсылает (м2, ч). Только продавец имеет доступ к своему закрытому ключу, и поэтому он не может отказаться и сказать, что не подписал сообщение.
Для SHA1, который выдает 160 бит, атака на день рождения уменьшает сложность до 2 ^ 80. Это должно быть безопасно в течение 30 лет и более. Новые правительственные постановления, спецификации 4G 3gpp начинают требовать SHA256.
Но если в вашем сценарии использования злоумышленник не может изменить оба сообщения (сценарии с прообразом или вторым прообразом), то для SHA1 сложность составляет 2 ^ 160. Должен быть безопасным для вечности, если не обнаружена атака без перебора.