Apa perbedaan antara openssl pkeyutl -sign dan openssl rsautl -sign

0

Apa perbedaan antara openssl pkeyutl -sign -pkeyopt digest:sha256dan openssl rsautl -sign? Apakah mereka melakukan hal yang sama?

demonguy
sumber
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena ini menyangkut penggunaan perangkat lunak kriptografi tertentu.

Jawaban:

9

pkeyutl -signdengan kunci RSA (dan rsa_padding_modedefault ke pkcs1yang secara spesifik berarti pkcs1-v1_5) DAN -pkeyopt digest:$hashmelakukan langkah 2-6 EMSA-PKCS1-v1_5-ENCODE di bagian 9.2 dari rfc3447, kemudian langkah 2 dari RSASSA-PKCS1-v1_5-SIGN di bagian 8.2. Dengan kata lain ia melakukan segalanya kecuali hash data (tetapi ia memeriksa panjang hash input). Perhatikan bahwa jika nama hash yang Anda tentukan di sini berbeda dari hash yang sebenarnya Anda gunakan, tanda tangan yang dihasilkan tidak akan memverifikasi dengan benar.

rsautl -sign(sama-sama default) tidak hanya langkah 4-6 dan langkah 2. Dengan kata lain, itu TIDAK menambahkan ASN.1 AlgorithmIdentifier encoding ke hash mentah, jadi Anda perlu melakukannya sendiri jika Anda ingin tanda tangan Anda dipahami dan diterima oleh orang lain. pkeyutl -signTANPA -pkeyopt digestjuga melewatkan pengkodean ASN.1.

Untuk kelengkapan, dgst -$hash -signatau bentuk $hash -signsingkatnya dengan kunci RSA melakukan seluruh pekerjaan: hash, ASN.1 encode, pad 01FF..00, dan modexp.

dave_thompson_085
sumber