b portal

Dapps研究 - イーサリアムブロックチェーンのコード学習備忘録

ブロックチェーン基礎:秘密鍵と公開鍵による署名の仕組み

ブロックチェーンでは、公開鍵暗号の仕組みが使われております。 これは暗号方式の一種で、ブロックチェーンビットコインなどの取引が正しく行われるためにもちいられています。

具体的には、取引を行い際に秘密鍵を使って取引自体に電子署名を行います。署名済みの取引を相手に送り、その送られてきた取引を秘密鍵をベースに生成された公開鍵を使って検証します。

公開鍵を使って検証可能であり、その取引自体も改竄されてなければ、その取引は正しいものだということがわかります。

f:id:topio:20180221171158p:plain

  そこで今回はその公開鍵暗号を使った検証作業をやって行きたいと思います。

秘密鍵と公開鍵の生成

今回はLinuxで利用可能なコマンドを使いますので、ない場合は以下を参考に環境の構築をしていただければと思います。

qiita.com   まずは秘密鍵を生成します。

$ openssl ecparam -genkey -name secp256k1 -out private.pem

そしてその秘密鍵の中身を確認します。

$ cat private.pem
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIJDo+qFBJEzj2OOoXrQDVnzkVxT0nFWWVl3GCZuHAs13oAcGBSuBBAAK
oUQDQgAER5ZUbJwY2o/+XxQZYkkYqTGySj47q3w1iZm1duKjIizInhIaVnzaNYK1
WgbcvxP+XR3i3kJsRlnVwWdE9BXtwQ==
-----END EC PRIVATE KEY-----

BEGIN EC PRIVATE KEYEND EC PRIVATE KEY で囲まれた部分が秘密鍵です。

その後、この秘密鍵から公開鍵を生成します。

$ openssl ec -in private.pem -pubout -out public.pem

そしてその公開鍵の中身を確認します。

$ cat public.pem
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAER5ZUbJwY2o/+XxQZYkkYqTGySj47q3w1
iZm1duKjIizInhIaVnzaNYK1WgbcvxP+XR3i3kJsRlnVwWdE9BXtwQ==
-----END PUBLIC KEY-----

ファイルに電子署名

ここからは任意のファイルを作成し、そのファイルに対して電子署名をしていきます。

まず、任意のファイルを作成します。

$ echo "sample" > sample.txt

そして、そのファイルのハッシュ値を生成します。

$ sha256sum sample.txt | cut -c 1-64 > hashed.txt

ハッシュ値を参照します。

$ cat hashed.txt

このハッシュ値秘密鍵を使って署名していきます。

$ openssl dgst -SHA256 -sign private.pem hashed.txt > hashed.sig

検証作業

ここまでで作成してきた署名データの検証を行います。

この検証作業では公開鍵を使って行きます。

$ openssl dgst -SHA256 -verify public.pem -signature hashed.sig hashed.txt

この結果として

Verified OK

が表示されれば問題ありません。

これで確かに秘密鍵で署名したデータを公開鍵で検証できたことになります。

以上です。