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 |