髙妻智一ビットコインで使われるハッシュ関数SHA-256とRIPEMD-160についてツイートシェアはてブLINEPocketハッシュ関数とはハッシュとはあるインプットを変換して得られる固定のアウトプットのことを言います。このインプットを変換して固定のアウトプットを出力するものをハッシュ関数といいます。インプットには数字でも文字列でも使えます。ハッシュ関数の特徴としてアウトプットからインプットを特定するのが非常に困難だという特徴があります。この特徴を活かして、ウェブサイトで入力されるパスワードはハッシュ関数でハッシュ化したパスワードをデータベースに保存さることが多いです。ログイン時は入力したパスワードをハッシュ化し、データベースのハッシュ値と一致しているか確認することで正しいかをチェックしています。文章をハッシュ関数でハッシュ化し、元の文章が改ざんされていないか確かめることもできます。ビットコインでは下記で紹介するハッシュ関数、SHA-256とRIPEMD-160が使われています。256-bit」の略称で、インプットから256ビット(32バイト)長のハッシュ値を得るハッシュ関数のことです。ハッシュ関数なのでアウトプットからインプットを求めるのは非常に難しいという性質を持っています。SHA-256のアルゴリズム初期のハッシュ値が決まっており、この初期ハッシュを変化させるために使われる情報が入力データです。SHA-256では入力データを64Byteごとに分割します。入力データが64Byteを超える場合は、複数のメッセージブロックが形成されます。初期ハッシュは最初のメッセージブロックを使って変化させ、新しいハッシュ値を算出します。そのハッシュ値を次のメッセージブロックで変化させて新しいハッシュ値を算出し、次のメッセージブロックで同様のことを繰り返します。最後のメッセージブロックで算出されたハッシュ値が最終結果の256ビットのハッシュ値となります。SHA-256ハッシュ値の生成shellで簡単に生成することができます。BitcoinとBitCoinで全く異なるハッシュ値が生成できていることが確認できます。16進数が64文字あるので256ビットですね。Digest」の略称で、1996年にルーヴェン・カトリック大学で開発された暗号学的ハッシュ関数です。ちなみにライプエムディーと読むそうです。SHA-1やSHA-2はNSA(アメリカ国家安全保障局)で開発されたのと対照的に、RIPEMDはオープンな学術コミュニティによって開発されたので特許による制限を受けないです。RIPEMD-160とはオリジナルのRIPEMDが128ビットのハッシュ値を生成するものを160ビットにしたうえで改良を加えたものです。RIPEMD-160ハッシュ値の生成opensslコマンドを使うことでRIPEMD-160も簡単に生成することができます。SHA-256よりも短い160ビットのハッシュ値が生成できました。rmd160dc41cf5f6c430587f6053306fcb21d9d07ba2a09ダブルハッシュビットコインでハッシュ関数を扱う場合インプットに対して2回ハッシュ化を行います。公開鍵からビットコインアドレスを導出する時は、公開鍵に対してSHA-256でハッシュ化したものに対してRIPEMD-160でハッシュ化を行いトータル2回のハッシュ化を行います。Base58Checkエンコードを行うときはSHA-256で2回のハッシュ化を行います。このようにダブルハッシュを行うことで手軽により安全なハッシュ値を生成することができます。まとめビットコインの基礎構成技術であるハッシュ関数について見てきました。このハッシュ関数は他の多くのブロックチェーンでも使われているのでしっかりと押さえておきたい技術です!最後に最後にブロックチェーンエンジニアって何?どうやったらなれるの?という人向けに書いた下の記事も読んでみてください。2016年07月14日AmazonKindle楽天ブックスビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。2016年10月18日AmazonKindle楽天ブックスこちらはブロックチェーンの初学者向けになります。ブロックチェーンの応用例の紹介から基礎的な理論まで分かりやすく図解で解説されています。Fabricを実際に稼働させてみて動作を理解するためのサンプルコードの解説もあります。スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。Incにブロックチェーンエンジニアとして入社。コメントをキャンセルメールアドレスが公開されることはありません。*サイトgRPCのサンプルコードをNode.jsで動かしてみる秘密鍵から公開鍵とビットコインアドレスを生成する方法RECOMMENDこちらの記事も人気です。