OpenSSL で RSA 署名をする方法

「padding した私有鍵で暗号化すること」で達成できる様だ.

2004-08-02 RSA_public_encrypt (1024bit)

OpenSSL addition a postscript

libgcryptだけでなく、OpenSSLにも大きな数字を扱う関数(bn - multiprecision integer arithmetics)が用意されていた。

RSA 1024bit (Verilog-HDL RTL)

Register Transfer Levelだが、1024bitのRSA暗号器(hardware)ができた。検証のためにOpenSSLで作った1024bit RSA暗号器(software)の計算結果と同じ暗号文が出てくることを確認。

これからデジタル署名にするには、公開鍵を秘密鍵と入れ替えればいいだけのはず。

次の問題はpadding。SHA-1 (160) or SHA-2 (256/384/512) の出力をRSA暗号(署名)器に入れるのに、paddingが必要。単に0でpaddingしようと思っていたら、それでは頑強(non- malleable)性に欠けるので、推奨されるpadding方法があるらしい。Optimal Asymmetric Encription Padding (OAEP)とか PKCS #1 padding など。暗号って難しいですね(数学苦手なので…)。

http://ao.dip.jp/~okazaki/diary/?date=200408

この手順でなんとかできるのかな.

  1. 私有鍵読み込み
  2. RSA_padding_add_PKCS1_PSS() で padding を追加
  3. RSA_sign() で署名する
  4. 署名データをどこかに書き込む