お金の参考書

仮想通貨を支える暗号技術【公開鍵 秘密鍵 ハッシュ関数】

日本ではビットコイン等を仮想通貨と呼ぶことが一般的だが、欧米では「暗号通貨(Cryptocurrency)」と呼ばれることが多い。仮想通貨に限らず、インターネットやICカード、スマートフォン等にも暗号技術は必須の重要要素だ。
コインチェック取引所での不正流出(盗難)事件も、暗号の保持体制と秘密鍵のハッキング(不正取得)が原因と見られている。一方で、ビットコインをはじめ多くの仮想通貨の基本的な暗号技術によるセキュリティは、以前として高い評価をされている。
こうしたすぐれた暗号技術の考え方と基本的な技術の考え方や仕組み等を、ビットコインの利用する暗号技術を中心に簡単に整理してみた。

暗号技術の歴史

古代エジプトのヒエログリフにも暗号はあったようだが、歴史上の暗号技術は主に軍事通信技術として発展してきた。
古代ローマ時代、ジュリアスシーザーが使ったとされる「カエサル暗号」が最古の鍵暗号として有名だが、これは旧約聖書にもあるヘブライ語の換字式暗号アトバシュの「単換字暗号」という仕組みを利用していた。この暗号は、仕組みが分かってしまえば、鍵はアルファベットの文字数-1通りしかなく、読み解くのは比較的簡単だった。
その後、暗号技術は鍵の数を増加させる方法で進化した。

戦国時代の上杉謙信の軍師が作成した暗号も基本的には換字暗号の変形で、西欧でもトリミテウスの多表式暗号やビール暗号(換字表に一冊の本全体を使う)も同様の仕組みであるため、一度暗号の一部が解読出来れば、他の暗号文書も解読可能だった。
しかし、16世紀に発案されたフランスの外交官ヴィジュネルは、トリテミウスの多表式暗号を発展させ「鍵」となる文字を使って変換する暗号を考案し、使用鍵ごとに異なった暗号文ができあがるので、仮に換字表が入手できても鍵が分からなければ解読は非常に困難になる現代の暗号に通じる方式だった。
さらに、暗号技術は乱数表の利用と二度の世界大戦で飛躍的に高度化した。
第一次大戦ドイツのADFGX暗号やエニグマ暗号、日本海軍のD暗号等の複雑な暗号もあったが、いずれも戦時下の大量の暗号文分析とコードブック等の流出で、結局解読されたものが多かった。

暗号技術の種類

その後の暗号技術は、通信技術の進化(セキュリティ保護が必要な金融等の情報が通信回線を通じ、全世界でアクセスできるようになった)につれて、暗号技術の必要性がさらに高まった。
これに対応し、コンピューターが作成する無作為な乱数と共通鍵暗号(秘密鍵・公開鍵)、ハッシュ関数を基本的な構成要素とし、現在ほとんどの暗号システムが、これらの組み合わせで暗号システムを構成している。
ここでは、仮想通貨に使用される最新の暗号技術を以下に紹介したい。

共通鍵暗号

共通鍵暗号は、閉める鍵(暗号を作る)と開ける鍵(暗号を読む)が共通の暗号で、家のドアの施錠と同じ仕組みといえる。
現代の共通鍵は、ストリーム暗号とブロック暗号に区分される。
ストリーム暗号は携帯通信等のリアルタイム通信によく使われており、送りたい情報を1ビットごとに順次暗号化する。
これに対し、ブロック暗号は文字通り、複数のビットをまとめて暗号化するもので、機密性は高いが、ストリーム暗号に比べて暗号システムが複雑(大規模化)になる。

公開鍵暗号

ハッキング事件や盗難事件でよく話題になる秘密鍵を理解する上で重要なのが「公開鍵暗号」の考えだ。
別名「非対称鍵暗号」とも言われる公開鍵暗号システムは、閉める鍵と開ける鍵が別個に存在する(異なる)暗号系で、普通に使用する鍵とは少しイメージが異なる暗号システム固有の技術だ。

ハッシュ関数

ハッシュ関数は、任意の長さのデータを一定の長さのデータ(ハッシュ値)に変換できる関数で、作り出されたハッシュ値から元のデータが推定できない(事実上不可能)ことから暗号作成に適していることが特徴で、ブロックチェーン等の暗号作成に重要な要素となっている「暗号関数」だ。
また、元データを1か所でも変更するとハッシュ値は大きく変化する特性があり、データ改ざんを防ぐ(データが正しいかどうか検証する)ためにも、多くの仮想通貨には欠かせない要素だ。

ハッシュ関数は、一方向性のデータ変換性能の高い関数で「原像計算困難性」とも呼ばれるこの性質は、紙の書類をシュレッダーで細かく切り刻むイメージで考えると分かり易い。
細かい砕片から元の文書を復元するのが困難なように、後述するいくつかの属性により、セキュアな仮想通貨を構成するために、ハッシュ値から元データが推測できない優れたツールとして広く使われている。(ハッシュという言葉はハッシュポテトなどでも使われている、細かく押しつぶし切り刻むという意味)
この他にも、平文と同じ長さの鍵が必要だが、理論的に(鍵を奪われない限り)暗号解析などで絶対破れないバーナム暗号などもあるが、仮想通貨に利用するのは現実的ではなく使われていない。

ブロック暗号と公開鍵

インターネット(ウェブ上)に構築された巨大な取引台帳システムと言われるビットコインの価値を支えているのが、ブロックチェーンの基礎となる「ブロック暗号技術」だ。
ブロック暗号は、情報理論の創始者クロード・シャノンにより提唱されたもので、複数のビットをまとめたブロックを換え字とあみだくじをあわせたような変換により、解読の困難さを増加したものだ。

パブリックブロックチェーンにおける情報は、誰もが閲覧できることから、その秘匿性担保が特に重要で、情報の暗号化のためには公開鍵暗号方式利用が一般的になっている。
この方式では、秘密鍵と公開鍵をつなぐ後述する「楕円曲線」の考え方が、秘匿性の保持に利用されている。
秘密鍵とは公開鍵の逆の性質を持つもので、自分にしか分からない暗号鍵であり、ブロックチェーン上のコイン送付にはコインアドレスに「秘密鍵」で署名をしていなくては送ることが出来ない。秘密鍵は本人だけが持つ鍵で、公開鍵は秘密鍵とペアになっている公開される鍵で、この二つで暗号を解読できる仕組みになっている。

ブロックチェーン技術においては、公開鍵暗号方式における秘密鍵と公開鍵が送信されたデータ送信者(電子署名者)の正当性確認方法として使用される。
なお、ウォレット利用の際は、一般に個人が持つ簡易ウォレットでは秘密鍵は自身で見られず、ウォレット運営が秘密鍵を管理してセキュリティ管理し、署名も勝手に行うため、相手のビットコインアドレスが分かっていれば簡単に送金や入金が可能だ。

秘密鍵の作成方法

公開鍵は、秘密鍵との間に数学的な関係式が存在するため、“原理的には”公開鍵から秘密鍵を知ることが出来る仕組みだ。だが、一般的に秘密鍵は大きな桁数のランダムな数を作成(通常はコンピューターが作成する乱数を利用)し、本人だけが知っていることが前提であるため、他人から見破られることに対する防御は普通考慮する必要が考えない。
逆に言えば、秘密鍵を知られた場合は比較的簡単に暗号が解読できることになる。コインチェック取引所の通貨NEM不正流出事件の詳細は明らかになっていないが、秘密鍵の漏えい又はハッキングによる取得があったと推察されている。今の所、秘密鍵が守られている限り暗号は解読不可能に近いと思われる。

公開鍵は秘密鍵をもとにして計算等で加工して作成され、ネットワーク経由で一般に公開される情報として設計される。そのため、公開鍵から簡単に秘密鍵を逆算されることは暗号の秘匿性を維持できない。
この秘匿性の高い計算方法のアルゴリズムが楕円曲線を利用した暗号化方式で、「楕円曲線暗号」と呼ばれている。
楕円曲線は、数学史上最大の難問と言われた「フェルマーの最終定理」証明にも使われたもので、平面曲線と呼ばれる曲線を表す方程式で作られ、二つの値が変化すると様々な曲線形状となる。それまで主流だったRSA暗号方式等に比べ、高度化する暗号に要する素数の準備が軽くなり鍵の長さが少なくて済む。

2001年に施行された電子署名法(平成12年法律第102号)で使用が認められている「公開鍵暗号」として、RSA暗号方式、DSA署名方式、およびECDAS署名方式の3種類があるが、ビットコイン等のブロックチェーンで利用する電子署名【※1】には、このうち楕円曲線暗号によるECDSA署名方式を公開鍵暗号に採用している。
電子署名の公開鍵暗号の秘密鍵は所有者(署名者)管理の鍵であり、対になる公開鍵を署名検証者がデータの真正さ検証に利用する。


(画像参照元:esac.jipdec.or.jp

【※1】取引の中間に、なりすましで第三者が介在することの無いように、公開鍵に認証を行い、暗号化した電子署名を行うもの。SSL通信やマイナンバーカードでも利用されているもので、電子署名は前述のように秘密鍵で署名を作成し、秘密鍵と対になる公開鍵で検証する。

ハッシュ関数の特徴

ブロックチェーンを利用した仮想通貨の技術では、元のデータの改ざん(不正使用)を防ぐ最大のポイントが、ハッシュ関数の利用と言えるだろう。
ハッシュ関数は、3つの属性を持つ関数だ。

1.入力には、任意のサイズの任意の文字列が使用できる
2.関数の出力(答)として決められたサイズの出力が生成される。(一般的には256ビットのハッシュ関数が作られているが、他のサイズが出来ないわけではない)
3.関数の計算結果が、コンピューターに負荷のかかる様な時間を要さずに計算可能であること。そして、仮想通貨のブロックチェーンで利用するハッシュ関数には「暗号学的に十分に安全な」関数にするために、通常の暗号とはやや異なる下記の3属性がさらに付け加えられている。

  • 衝突耐性
    異なる二つの値、例えばXとYが、関数Hに代入した場合に、H(X)=H(Y)となる様な、XとYの組み合わせがない場合に、その関数は「衝突耐性」があることになる。
    この属性は、関数の出力値が同一なら、その入力内容は同じものであると保証できる性質になる。
  • 秘匿性
    関数の出力結果から入力した値を知ることが、現実的には不可能な事。(計算に十分な時間をかければ、知ることは不可能ではない)ビットコインのブロックチェーンでは、256ビットの無作為に作成した値とハッシュ関数の組み合わせで、十分な困難性を達成している。
  • パズル親和性
    ハッシュ関数から特定の出力値を作る時、入力した値の一部を無作為選択すれば、元の入力推測が事実上不可能になる事をパズル親和性という。上記の「秘匿性」に似ているが、ビットコイン等に特有の属性で、入力値の変化でマイニングの難易度も変えられる性質を持っている。

ビットコインで利用されているブロックチェーンのハッシュ関数

SHA-256

ビットコインでは、このハッシュ関数のうち、SHA-256という名称のハッシュ関数を使用している。
「SHA-256」とは、Secure(セキュア) Hash(ハッシュ) Algorithm(アルゴリズム)な関数で、256ビット長の出力を生成できるものだ。(米国家安全保障局(NSA)によって設計されたもの)
例えばテキストの最初の8文字をハッシュ化する「HASH8」で暗号を作ると、暗号文の頭の8文字が同じ文は、同じハッシュ値となる様に、実用的ではないが十分な長さがあるSHA-256のようなハッシュ関数なら事実上解読不能で、前述の求められる属性を持つことになる。
例えば「仮想通貨を支える暗号技術」という語句をハッシュ化してみると、【692998C6B75AF7F62F233C6AB66618B6E55B93417A84FF8C29D01699324ACEB6】という256ビットの英数字になる。

ビットコインの暗号技術

ビットコインで利用されている「ブロックチェーン」は、これらの暗号技術が使用されることによって、高いセキュリティを持つ優れた台帳システムとなっている。
ブロックチェーンの運用については、この性質を利用して公開された膨大なブロックチェーンの情報を相互検証するユニークなアイデアにより、管理者のいない非中央集権的なシステムが可能になっている。

このコラムの執筆者

和気 厚至
和気 厚至

慶應義塾大学卒業後、損害共済・民間損保で長年勤務し、資金運用担当者や決済責任者等で10年以上数百億円に及ぶ法人資産の単独資金運用(最終決裁)等を行っていた。現在は、ゲームシナリオ作成や、生命科学研究、バンド活動、天体観測、登山等の趣味を行いつつ、マーケットや経済情報をタイムリーに取り入れた株式・為替・債券・仮想通貨等での資産運用を行い、日々実益を出している。


関連記事

お金の参考書
おすすめランキング

記事一覧

仮想通貨とは

仮想通貨の種類

仮想通貨取引所

仮想通貨のニュース

仮想通貨の取引方法

© Copyright 2017 お金の参考書. All rights reserved.

MENU

カテゴリ一覧

仮想通貨

資産管理

保険

クレジットカード

投資関連

インフォメーション