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

1 ответ1

6

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .