ご存じのようにビットコインや普段何気なく使っているインターネットは計算機科学分野での成果物、特に暗号技術に支えられています。ですが、ビットコインを支える暗号技術と、その他のインターネットサービス(例えばブラウザーなど)を支える暗号技術とでは少し毛色が違うモノが使われていることはご存じでしょうか。

例えば、電子署名としてビットコインではECDSA方式のうちsecp256k1という亜種を利用しています。一方、PDFへの電子署名などでは複数の方式がサポートされますが、secp256k1には対応していません。

サトシナカモトはなぜ、こうした技術選考を行ったのでしょうか。今回はこのへんを掘り下げてみようと思います。

ビットコインが利用している技術

現在デファクトの実装であるBitcoin Coreによると、ビットコインでは次のような暗号技術が利用されていることが分かります。

  • SHA-256 - ハッシュ関数: トランザクションIDやアドレスをつくる際に利用されている
  • RIPEMD-160 - ハッシュ関数: アドレスをつくる際に利用されている
  • ECDSA - 楕円曲線デジタル署名方式: ビットコインではsecp256k1というパラメータを用いるバージョンが利用されている

ちょっと面白い事実として、ビットコインホワイトペーパーではハッシュ関数や電子署名方式として上記を採用する、といった言及はされていない点があります。そのため、なぜこれを選んだのか、というところはビットコイン登場の惣明期に、サトシナカモトと直接メーリングリストでやり取りした開発メンバーだけがあずかり知る事なのかもしれません。

ということで、本当のところを分からないわけなので、独自に考察してみようと思います。

なぜSHA-256なのか

SHA-256は、2001年にアメリカ国家安全保障局(NSA)により設計され、アメリカ国立標準技術研究所(NIST)によりFIPS PUB 180-4として標準化されました。標準化というのは、技術仕様をドキュメントとして定めることで、これに準拠してシステムをつくることで関連する機器同士が正しく連携して動作することを保証できます。

NISTによる標準化というのはとても大事な事象で、本日のメイントピックでもあります。なぜ、アメリカという国が標準化をリードしているのでしょうか。

この背景を理解するのには歴史を知る必要があります。歴史上、暗号技術というのは軍事色の強いものでした。第二次世界大戦でのエニグマ暗号機の話が有名ですね。エニグマについては個人的におすすめの映画「イミテーション・ゲーム」にて詳細を楽しめます。まだ見たことない方は是非。機械式の暗号解読機ボンベにワクワクが止まらなくなります。
さて、こうした国家による暗号政策については外務省が「国家による暗号政策」としてレポートにまとめていました。2001年の資料と古いのですが、当時の先進国での暗号に対する認識が垣間見えてとても読み応えがあります。2001年といえば暗号技術が飛躍的に発展し始めた頃であり、NISTがSHA-256やAES暗号化を標準化した年でもあります。そのため、国防から民間への技術開放の様子が伺えます。また、私人のプライバシー保護との観点で方針がガラッと変わった国がでてきた点にも触れられており、歴史の転換点での雰囲気が見て取れ興味深いです。

さて、アメリカの話に戻しますと、その後の冷戦を経て諜報活動と暗号技術とは切り離せない関係になりました。結果、暗号技術はアメリカにおいて軍需品規制の対象となりました。つまり、アメリカ国外への輸出には許可が必要になったということですね。
さらに、ここがアメリカらしい(というか当時の国側の考えは皆おなじ様子)のですが、この規制により国が暗号の強度や方式を制御することで、アメリカは他国の通信を読めるが逆に他国はアメリカの通信が読めない、といった世界を実現しようとしていたようです。上述レポートでは鍵預託型の規制を志向していた歴史が整理されており、なかなか強烈です。

こうした思惑もあり、国防としての側面もあるのですから、アメリカが標準化をリードすることは理にかなっているように思えますね。

2001年のNISTによる暗号技術の標準化は、候補となる技術を公募し、そこからハッシュ関数はこれ、暗号化はこれ、電子署名はこれ、と1つ1つ丁寧に選定する手順が踏まれました。民間でも広く使われることを目的としており、選定過程は比較的透明性高く行われました。結果、標準化された技術は十分に安全な暗号強度があり、ライセンスがフリーであり、且つ一般的には国といえども中を勝手に読むことの出来ないとても公共性の高いものであるとされています。そのため、現在のインターネットではNIST標準化された暗号技術がふんだんに利用されています。上述の通り、ビットコインもSHA-256を利用しています。

ビットコインでの暗号技術選定

ビットコインでもSHA-256を採用してはいるのですが、少し変化球な使い方をしています。PoWの計算をする際に、SHA-256計算を2回行う設計としているんですね。

なぜサトシナカモトがこうした設計としたのかは色々なところで議論されていますが、結論はでていません。SHA-256自体の欠陥、あるいは政府によるバックドア(裏口)の可能性などに対する予防だったという説もあります。

この政府によるバックドアは一般的には否定されていますが、一部の人には根強く疑念を抱かせています。実際、SHA-256を設計したNSAには疑念を抱かざるを得ない行動をとってきた実績があります。

疑念深まる、米政府による暗号解読
米NSA(国家安全保障局)が、暗号技術にバックドア(裏口)を設けて暗号通信を解読している疑念がさらに深まっている。本誌の取材によって、日本政府がエドワード・スノーデン氏の告発より前の2009年の時点で、疑惑対象の技術を「安全上問題がある」とし、政府が使用する暗号技術候補から外していたことが分かった。
NSAのバックドアが疑われているのは、乱数生成アルゴリズムの「Dual_EC_DRBG」だ。米NIST(国立標準技術研究所)は同アルゴリズムの標準化にNSA職員が関与したことを認め、2013年9月末には同アルゴリズムを実装するソフト66種類をWebサイトで公表、ユーザーに注意を促し始めた。米EMCや米シスコシステムズ、米マイクロソフトといった大手の製品や、オープンソースソフトウエアの「OpenSSL」などが挙げられている。

なにやら物騒ですね。エドワード・スノーデンのNSAによる国際的監視網(PRISM)の告発以降、こうした話がちょくちょくでてくる印象です。

そんなサトシナカモトの選定方針はもう一つ別のハッシュ関数であるRIPEMD-160も採用している点にも伺えます。

RIPEMDはNISTによって標準化されたものではなく、学術コミュニティ(ようは大学研究機関)にて1996年に標準化されたものです。NIST一辺倒にならないほうがよい、という予防を張ったのかもしれませんね。

そして、電子署名方式に関しても同様です。ECDSA方式は、NISTによりP-256、P-384、P-521といったパラメータについて標準化されています。暗号資産以外の世界では基本的にはこれらのNIST標準化品を使うことが前提とされており、セキュリティ診断やコンプライアンスを語る際にも如何にNISTに準拠するか、が評価軸とされていたりします。
一方、ビットコインではsecp256k1というパラメータを採用しています。これもRIPEMD同様、学術コミュニティにより2010年に標準化されているものです。

このように、ビットコインは節々に国家主導での標準化品を避ける、あるいはそのまま利用はしないといった予防線を貼る設計思想が見て取れます。

まとめ

軍需規制品としての暗号技術と、ビットコインの設計思想との兼ね合いを見てきました。

このビットコインのスタンスは、その他のコイン、例えばイーサリアムなどにも引き継がれています。イーサリアムではKeccak-256というハッシュ関数が用いられていますが、これはNISTによるSHA-3標準化品と実質的には同じアルゴリズムです。ですが、NISTは標準化する際に少しだけパラメータをいじっています。ここに疑念が抱かれることとなり、議論もあったようですがイーサリアムはあくまでオリジナルのKeccak-256を採用し続ける判断をしたようです。

実は、この暗号資産特有ともいえる一見特異なスタンスは、私たちが普段なにげなく利用しているインターネットそのものへも波及しつつあります。
ブラウザが利用するHTTPS通信についても最近ではNIST標準ではないChaCha20-Poly1305といった暗号方式が導入され、次世代規格であるHTTP/3やTLS1.3では主役級の扱いにまで昇格しています。ここにもNIST標準化品以外の選択肢があるべきだ、という思想があるようです。

こうしてみるとビットコインの登場は資産の話だけでなく、インターネットという私たちの社会そのものを支える基盤へも大きな影響を与えたように思えてきますね。