Мне нужно подписать сообщение с помощью закрытого ключа и проверить сообщение с помощью открытого ключа, убедившись, что сообщение не было подделано.
Я знаю, что сам SHA-256 подвержен атакам с расширением длины.
Я также знаю, что такие вещи, как HMAC, были специально разработаны для обхода таких атак.
Но что, если я подпишу сообщение с помощью RSA и SHA-256? Безопасны ли они?
Нужно ли подписывать RSA/SHA3 для защиты? Или, может быть, урезанные версии SHA2 (а именно SHA-384 и SHA-512/256), которые якобы нет восприимчивы к атакам с расширением длины?
Будет ли HMAC лучшим подходом к этой проблеме?
Я рассматриваю возможность использования RSA, вероятно, самого известного среди асимметричных криптографов. Не стесняйтесь указывать мне на что-то другое, если есть вариант получше. Мне нужно что-то с поддержкой OpenSSL и криптомодуля Node.js (который, насколько мне известно, тоже основан на OpenSSL).
PS. Я немного новичок в криптосообществе, поэтому надеюсь, что мои слова имеют смысл.
-- дополнение--
Вот мое беспокойство по поводу RSA-SHA256.
Допустим, сообщение $ млн $ и его хэш $SHA256(М)$.
Злоумышленник может использовать их для вычисления $М||Х$ и $SHA256(М||Х)$, даже не зная закрытого ключа.В этом случае получатель $М||Х$ и его подпись $SHA256(М||Х)$ должен полагать, что сообщение является действительным, потому что сообщение и его подпись совпадают.
По крайней мере, так происходит, если RSA_sign просто использует необработанный хэш. Если RSA передает хэш с помощью техники, подобной HMAC, или любого другого алгоритма, который предотвращает подделку подписи злоумышленником, я думаю, мы в безопасности.