В чем разница между openssl pkeyutl -sign и openssl rsautl -sign

В чем разница между openssl pkeyutl -sign -pkeyopt digest:sha256 а также openssl rsautl -sign? Они делают то же самое?

1 ответ

Решение

pkeyutl -sign с ключом RSA (и rsa_padding_mode по умолчанию pkcs1 что конкретно означает pkcs1-v1_5) И -pkeyopt digest:$hash выполняет шаги 2-6 EMSA-PKCS1-v1_5-ENCODE в разделе 9.2 rfc3447, затем шаг 2 RSASSA-PKCS1-v1_5-SIGN в разделе 8.2. Другими словами, он делает все, кроме хэширования данных (но он проверяет длину входного хэша). Обратите внимание, что если имя хеша, которое вы здесь указываете, отличается от хеша, который вы фактически использовали, результирующая подпись не будет проверена правильно.

rsautl -sign (аналогично по умолчанию) выполняет только шаги 4-6 и шаг 2. Другими словами, он НЕ добавляет кодировку AlgorithmIdentifier ASN.1 к необработанному хэшу, поэтому вам нужно сделать это самостоятельно, если вы хотите, чтобы ваши подписи были поняты и приняты другими. pkeyutl -sign БЕЗ -pkeyopt digest также пропускает кодировку ASN.1.

Для полноты dgst -$hash -sign или его сокращенная форма $hash -sign с ключом RSA выполняет всю работу: хэш, кодирование ASN.1, pad 01FF..00 и modexp.

Другие вопросы по тегам