秘密鍵から公開鍵とビットコインアドレスを生成する方法ツイートシェアはてブLINEPocket秘密鍵まずビットコインの秘密鍵は下記のように64個の16進数で表され、256ビットの整数となります。1から2256の間の数字から一つの数字を選ぶということと同じで非常に大きい数字を扱っていることが想像できると思います。公開鍵は楕円曲線上のスカラー倍算を使って、以下の式で秘密鍵から計算されます。秘密鍵はこの逆の計算からも求めることはできません。生成元ビットコインで使われる楕円曲線暗号ビットコインでは楕円曲線が使用されていて、一般的な式は下記です。pしたsecp256k1という特殊な楕円曲線を使用しています。生成元(ベースポイント)Gのx,y座標はそれぞれ下記のようになっています。pをすることで曲線上の点が離散的な値を取るようになります。このように離散的な値を取ることで離散対数問題となり、公開鍵から秘密鍵を求めることを難しくしています。problem)とはxからyを計算するのは容易だが、yからxを求めるのは非常に困難であるという数学的性質のことです。上記K=k*Gで求めることができ、Gはビットコイン全ての鍵に対して常に同じとなっています。秘密鍵が分かれば公開鍵は一意に求めることができるようになっています。y)座標として定義されます。Gをk回足すというのは、楕円曲線において、ある点の接線が楕円曲線で交わる点を求め、その交点をX軸に対して対象に移動した点を見つけることをk回行うことと同義となります。ビットコインアドレスビットコインアドレスは公開鍵を一方向の暗号学的ハッシュ化を行うことで生成します。秘密鍵と公開鍵の関係と同じようにアドレスから公開鍵を求めるのは非常に困難となっています。下記はビットコインアドレスのサンプルです。ビットコインアドレスは先頭に数字の1が付きます。1rdaQ7yvg28uh54gaXww6fupmfgr98wkmn11rdaQ7yvg28uh54gaXww6fupmfgr98wkmnアドレスの生成アドレスを生成するときに使用するハッシュ関数はsha256とRIPEMD160を使用し、160ビット(16進数だと40桁)の数字を生成します。hashとは公開鍵をsha256とRIPEMD160で合わせて2回ハッシュ化を行うのでそのように呼ばれています。Base58とBase58Check上記のダブルハッシュ化の後にさらに一手間加えます。それがBase58Checkエンコードです。Base58エンコードは可読性や送信アドレスの間違いを防止する機能を持った、ビットコインの為に開発されたエンコード形式となります。エンコードには0~9、a~z、A~Zの62種類から0(ゼロ)、O(大文字のオー)、l(小文字のエル)、I(大文字のアイ)を除いた58種類の文字と数字を使います。Base58にチェックサムが組み込まれたものをBase58Checkと言います。Base58Checkエンコードの流れは下記のようになります。sha256とRIPEMD160でハッシュ化した公開鍵(Payload)をsha256で2回ハッシュ化を行います。これをダブルハッシュと呼びます。Preifxというものを付けます。prefixは下記です。xpubこれらを全て合わせた状態でBase58Checkエンコードを行うことでよく見るビットコインアドレスとなります。まとめ秘密鍵、公開鍵、アドレスと理論的な生成方法を見てきましたので、今後はソースコードを交えて実際に秘密鍵からアドレスまで生成して見たいと思います。最後にブロックチェーンエンジニアって何?どうやったらなれるの?という人向けに書いた下の記事も読んでみてください。2016年07月14日AmazonKindle楽天ブックスビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。2016年10月18日AmazonKindle楽天ブックスこちらはブロックチェーンの初学者向けになります。ブロックチェーンの応用例の紹介から基礎的な理論まで分かりやすく図解で解説されています。Fabricを実際に稼働させてみて動作を理解するためのサンプルコードの解説もあります。スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。Incにブロックチェーンエンジニアとして入社。コメントをキャンセルメールアドレスが公開されることはありません。*サイトビットコインで使われるハッシュ関数SHA-256とRIPEMD-160についてReactのルーティングにreact-router-domとreact-router-reduxを導入する方法RECOMMENDこちらの記事も人気です。