私はopensslで秘密鍵/公開鍵を作成し、いくつかのデータに署名しました:
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
echo 'data to sign' > data.txt
openssl dgst -md5 < data.txt > hash
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash > signature
今Pythonで、私はこのデータを検証しようとしています:
pubKey = open('public.pem').read()
data = open('data.txt').read()
signature = open('signature').read()
from Crypto import PublicKey
key = PublicKey.RSA.importKey(pubKey)
pub = key.publickey()
hash = MD5.new(data).hexdigest()
# here, hash is same, as contents of 'hash' file
print pub.verify(hash, signature) # <-- here
問題は、pub.verify
2 番目のパラメーターが大きな数を持つ 1 つの要素のリストであることを期待することです。signature
ファイル内のバイナリデータをこの整数に変換する方法がわかりません。pycrypto に関するすべての例は、pycrypto から生成された署名を示しており、形式key.sign()
で正しい署名を生成します(1832273432...2340234L, )
。しかし、外部署名の使用方法がわかりません。
これが必要な場合は、以下に追加情報を示しますが、解釈方法が正確にはわかりません。
簡単な技術情報:
- デジタル署名の形式: PKCS#7 “Signed-Data”</li>
- 公開鍵手続き:DSS
- キーの長さ: 512 ~ 1024 ビット
- 公開指数: 2 +1
- 公開鍵形式: X.509 v3 証明書
- MD (メッセージ ダイジェスト) アルゴリズム: MD5 または RIPEMD-160 16