OpenSSLで電子署名の生成と署名検証 †秘密鍵の生成 †openssl genrsa 1024 > private-key.pem 公開鍵の生成 †openssl rsa -in private-key.pem -pubout -out public-key.pem メッセージを作成 †echo 'test message!!'>test.txt 電子署名を生成する †openssl dgst -sha256 -sign private-key.pem test.txt > signature.dat 電子署名を検証する(OpenSSL) †openssl dgst -sha256 -verify public-key.pem -signature signature.dat test.txt 電子署名を検証する(Python) †pyopensslのインストール †pip install pyopenssl -t . 署名検証 †from OpenSSL.crypto import X509 from OpenSSL.crypto import PKey from OpenSSL.crypto import load_publickey as ssl_load_publickey from OpenSSL.crypto import verify as ssl_verify from OpenSSL.crypto import FILETYPE_PEM from OpenSSL.crypto import Error as SSL_Error # 公開鍵を読み込み certificate = X509() with open("public-key.pem", "r") as f: cleartextPublicKeyPEM = f.read(); certificate.set_pubkey(ssl_load_publickey(FILETYPE_PEM, cleartextPublicKeyPEM)) # 電子署名を読み込み with open("signature.dat", "rb") as f: signature = f.read(); # メッセージを読み込み with open("test.txt", "r") as f: message = f.read(); # 公開鍵を使用して電子署名を検証 try: ret = ssl_verify(certificate, signature, message, "sha256") print("verify OK!") except SSL_Error: print("verify Error!!") 参考: https://pyopenssl.org/en/stable/api/crypto.html#signing-and-verifying-signatures |