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


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-02 (金) 22:11:25 (2275d)