Перейти к содержимому
ecdsa.com

Предварительное хеширование (HashML-DSA)

Подпись дайджеста сообщения, а не самого сообщения: неявно (ECDSA, RSA) или с помощью явно выделенных вариантов с разделением доменов, например Ed25519ph и HashML-DSA.
Другие написанияprehashHashEdDSAEd25519phHashML-DSAHashSLH-DSAexternal mu

ECDSA и RSA всегда подписывают хеш, поэтому данные можно хешировать потоком или на другой машине, а HSM получает лишь 32–64 байта. PureEdDSA и ML-DSA, напротив, обрабатывают всё сообщение вместе со значениями, зависящими от ключа (и nonce, и challenge в EdDSA вычисляются хешированием сообщения; ML-DSA включает хеш открытого ключа в представление сообщения μ), поэтому всё сообщение целиком должно попасть к подписанту.

Для этого случая есть варианты с предварительным хешированием: Ed25519ph и Ed448ph (RFC 8032; HashEdDSA в FIPS 186-5, § 7.8), HashML-DSA (FIPS 204, § 5.4) и HashSLH-DSA (FIPS 205, § 10.2.2); последние два включают в подписываемые данные OID хеш-функции. Это отдельные алгоритмы с отдельными подписями, поэтому код проверки чистого варианта их отклоняет. FIPS 204 также разрешает выполнять вне модуля подписи все шаги ML-DSA, кроме генерации случайности для подписи, и интерфейсы HSM пользуются этим, чтобы принимать заранее вычисленное значение μ.

При предварительном хешировании стойкость зависит от стойкости хеш-функции к коллизиям, тогда как чистый EdDSA устойчив к коллизиям хеша. Используйте чистые варианты, если только потоковая обработка или удалённый подписант не вынуждают поступить иначе, и никогда не смешивайте оба варианта под одним ключом без разделения доменов (RFC 8032, § 8.6; FIPS 204 рекомендует один вариант на ключ).

Стандарты и ссылки

Все термины