Weitere ähnliche Inhalte
Mehr von Kindai University (20)
Kürzlich hochgeladen (11)
Bitcoin 3
- 16. 取引記録のデータ構造
Input: インプット
Previous tx:
f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 電子署名と公開鍵
304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b
241501
Output: アウトプット
Value: 5000000000 支払い金額(単位はsatoshi = 1億分の1BTC)
scriptPubKey: OP_DUP OP_HASH160
404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG ← 検証スクリプト
- 26. opensslのECDSA署名を試す
ビットコインの電子署名は、ECDSA Secp256k1 を利用しています。
■openssl version 1.0.1e以上を使う
●プライベート鍵の生成(ランダムに生成されます)
openssl ecparam -genkey -name secp256k1 -out privkey.pem
●プライベート鍵から公開鍵の生成
openssl ec -in privkey.pem -pubout -out pubkey.pem
■Ruby opensslを利用 (require 'openssl')
●ECDSA署名
skey = OpenSSL::PKey::EC.new(File.read('./privkey.pem'))
hash = OpenSSL::Digest::SHA256.digest('abc12345')
sign = skey.dsa_sign_asn1(hash)
●ECDSAの署名検証
pkey = OpenSSL::PKey::EC.new(File.read('./pubkey.pem'))
pkey.dsa_verify_asn1(hash, sign)