В чем разница между 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.