古典的ですがデジタル署名の話です。
RSASSA-PKCS1-v1_5をPython3で実装しました。
一般的にデジタル署名は、下図のような流れで生成/検証をするという説明が多いと思います。
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では、パディングに乱数などは使いません。
この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行ほどで実装できたりしますので、怖気づかなくても大丈夫です。