LoginSignup
1
0

More than 3 years have passed since last update.

RSASSA-PKCS1-v1_5について

Posted at

古典的ですがデジタル署名の話です。
RSASSA-PKCS1-v1_5をPython3で実装しました。

一般的にデジタル署名は、下図のような流れで生成/検証をするという説明が多いと思います。

abst.png

2021年3月現在、よく使われているハッシュはSHA2-256、公開鍵暗号はRSA2048です。しかしSHA2-256の出力は256ビット長、RSA2048の入力は2048ビット長であり、上図の「ハッシュ値1」などで長さが一致しないことになります。

そこで、実際にはハッシュ値に何らかのパディングをします。やり方は何通りか規格がありますが、下図のパディングは、IETF RFC 8017の、RSASSA-PKCS1-v1_5という方式で、SHA2-256とRSA2048を適用する場合のものです。RSASSA-PKCS1-v1_5では、パディングに乱数などは使いません。

pad.png

このRSASSA-PKCS1-v1_5を、Python3で実装しました。
https://github.com/fukuda123/crypto/blob/main/20210321-rsassa_pkcs1_v1_5/rsassa_pkcs1_v1_5.py

一応、簡単な動作確認済みです。NIST ACVP Demo serverで署名生成10問と検証18問が全部パスしましたので、おそらく大きなバグはないと思います。

プログラマさんの中には、暗号は難しいと感じている人もいるかもしれませんが、たとえ理論的なことが分かっていなくて、使いやすいライブラリがすぐ見つからない場合でも、今回のようにIETF RFC 8017をほぼそのまま100行ほどで実装できたりしますので、怖気づかなくても大丈夫です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0