ブロックチェーンでは、公開鍵暗号の仕組みが使われております。 これは暗号方式の一種で、ブロックチェーン、ビットコインなどの取引が正しく行われるためにもちいられています。
具体的には、取引を行い際に秘密鍵を使って取引自体に電子署名を行います。署名済みの取引を相手に送り、その送られてきた取引を秘密鍵をベースに生成された公開鍵を使って検証します。
公開鍵を使って検証可能であり、その取引自体も改竄されてなければ、その取引は正しいものだということがわかります。
そこで今回はその公開鍵暗号を使った検証作業をやって行きたいと思います。
秘密鍵と公開鍵の生成
今回はLinuxで利用可能なコマンドを使いますので、ない場合は以下を参考に環境の構築をしていただければと思います。
$ 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 KEY と END 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
が表示されれば問題ありません。
これで確かに秘密鍵で署名したデータを公開鍵で検証できたことになります。
以上です。