暗号技術入門

結城浩:「暗号技術入門〜秘密の国のアリス〜」(第3版)、SBクリエイティブ(株)、'15を読む。著者はこの方面の気鋭のジャーナリストでもあり実務家でもあるらしいが、私には初めてのお人である。読む気になった直接のきっかけはNHK BSプレミアムの「刑事フォイル」だ。今再放送中である。2次大戦中のイギリスの海岸沿いの田舎町の刑事事件を扱うが、しばしばドイツとのスパイ合戦が話題になる。独軍のエニグマによる暗号通信の解読が出てくる。
我らの現在の生活はIDとかパスワードとかの暗号と切り離せないし、ビットコインがよく話題になる。なぜ仮想通貨が成り立つのかと気になる。それで暗号の中味をちょっと垣間見てみようという気になった。本書は3部、13章立て全4-500ページの、私にすれば大部の著作なので、好きなところだけを斜交い読みにする。あまり理屈には拘らないこととした。
まずエニグマを先読みする。エニグマは暗号変換機であり同時に暗号解読機である。メカニズムは独特の機械-電気式で、平文を入力として出てきた出力を通信し、受信した暗号文を入力としてエニグマにかければ、出力が平文である。メカニズムの概要説明がしてある。日替わり鍵と通信鍵があって、前者は後者を暗号化するための鍵であった。エニグマは毎日国防軍鍵表によって設定が変えられる。後述の対称暗号方式の1つである。エニグマ暗号の盗読はポーランドの研究者がまず成功し、大戦勃発前にすでにイギリス、フランスに情報提供されていた。約2時間で日替わり鍵を見つけることが出来たという。
盗聴者だって鍵空間を全数探索(ブルート・フォース・アタック)すればいつかは元の平文を見つけることが出来る。先月究極の光量子コンピュータ方式の発明が発表された。汎用の量子コンピュータが現実化しそうだ(「九月の概要(2017)」)。その猛烈速度は今のスパコンの比ではない。エニグマクラスの暗号なんぞ、一瞬で解読できるのかもしれない。本書では最終章(第15章)の「完全な暗号技術を夢見て」と言う項に、量子コンピュータが出てくる。
有限の鍵空間だったらAIとの組合せでたちまち暗号を解かれてしまうだろう。今はあらゆる通信がデジタル化している。そこでは文字は1か0だ。対称暗号(共通鍵暗号)法は1つの鍵で暗号化し、同じ鍵で復号化する。ここではXOR(排他的論理和)を駆使して暗号化する。平文にXORのマスクをかけ、そのマスクを受信者にこっそり渡すのだ。アメリカの標準になったDESは対称暗号法の初期段階のものだが、'99年のコンピュータでさえ22時間ほどで解いてしまった。
でも対称暗号の中で絶対に(理論的に)解読できない暗号がある。使い捨てパッドと言い、乱数を用いる。機密が最優先の、例えば大国間のホットラインにはこれが使われているという。一番の問題はこの乱数を共有する方法で、任務を帯びたエージェントが暗号の鍵を運んでいるのだろうという噂話が載っている。乱数は疑似乱数ではない真の再現性のない乱数だとか保存の方法だとか、とかく面倒で、一般には使われないそうだ。使い捨てパッドはともかくとして後述の各暗号技術は乱数を多用する。
私は疑似乱数を現役時代に使っていた。疑似乱数は、その長い周期性に注意すれば、科学目的には十分役に立つ。本書は第12章を「乱数」に宛てている。コンピュータ言語内蔵のライブラリ関数の多くは、「線形合同法」を採用している。無作為性はあっても予測不可能性に欠ける「弱い疑似乱数」であるから、暗号技術には不向きである。暗号に用いる乱数は少なくとも予測不可能性を満たす「強い疑似乱数」でなければならぬ。熱雑音のような自然現象は再現不可能性をもつので「真の乱数」と呼ばれている。Intelの新しいCPUの乱数発生器はこの熱雑音を利用しているとか。どういう意味かちょっと判らないが、「真の乱数」を種にした「強い疑似乱数」生成器が暗号技術に用いられている。
ビットコインは暗号技術の申し子である。しばしばニュース紙面を賑わす。私はビットコインを扱った経験がない。その実際をhttps://bitflyer.jp/bitcoindigitalcurrencyに篠原裕幸氏が初歩的解説をしている。解説は他にもいろいろ出ている。本書は暗号技術面の解説だ。だから合わせて読むと、なんとか全貌が理解できそうだ。電子マネーにして電子マネーにあらず。中央銀行がなくP2Pネットワークに分散させて、ビットコインのすべての取引記録を、一定期間ごとに、取引台帳に追記する管理方式を採っている。だから、何処の政府からも、勿論大投機企業からも、取引以外ではアンタッチャブルな存在だ。
アンタッチャブルな理由の一つが発行総額(2140年までに2,100万 ビットコイン)が決められており、それまでの発効数増額を採掘(マイニング)者に負んぶしていることだ。天然に産するダイヤや金が地球では有限であり、流通量は、それを掘り起こす採掘業者がその努力に応じてちょっとづつ増やして行くのに似ている。ダイヤや金と同じでビットコインも値上がり著しく、今や60万円台だという。
マイニングとは、ブロックの連鎖であるP2Pネットワークに、新たなブロックを追記する努力を指す。追記はネットワーク上に分散されて保存されている既存の取引台帳(公開取引簿)のデータと整合性(透明性必要)を要する膨大な計算で、世間に余っているコンピュータの計算能力を借りることによって実行される。よって1ブロック創設に報酬が支払われる。ブロックに含まれるトランザクション(取引)手数料も採掘者に支払われる。'15年時点では約25ビットコインだったという。今なら1500万円以上! 日夜採掘に励んでいる人たちが世界中に存在のも当然だ。この報酬が唯一の発行数増額法だ。通貨量が一定で操作されないから、政策的インフレなどおよびでない。
認証に一方向ハッシュ関数を用いる。これによってブロックチェーンの改竄を困難にする。ビットコインの偽造を防ぐためにも、その出力のハッシュ値が必要になる。
一方向ハッシュ関数とはいわばファイル番号を暗号化した固定ビット数出力関数で、膨大なファイルであっても2ファイルの同一性を瞬時に見分けることが出来る。一方向性だから元のファイルの復元は勿論出来ない。P2Pネットワークはアメリカ標準規格のSHA-2の中のSHA-256を採用している。SHA-1は強衝突耐性を破られたが、SHA-2はまだ破られていない。強衝突耐性とは、ハッシュ値が同一になる異なる2つのファイル(メッセージ)を作ることはほぼ不可能だということである。SHAはコンペ方式で決められる。今はSHA-3が発表されている。
トランザクションは公開鍵暗号を使う。公開鍵暗号はコインロッカーのようなものとある。コインはロッカーを閉めるに必要な誰でも持っている公開鍵、抜いたキーはその人だけのプライベート鍵というわけだ。対称暗号(共通鍵暗号)の欠点であった暗号鍵の共有が無くなる代わりに、暗号復号に対称暗号の何百倍もの時間が掛かる。双方の欠点を両者のハイブリッド利用により回避する暗号システムも実用化されている。
数学的にはmod演算子(割り算の余剰を求める)と素数と最大公約数の性質を利用する。素数の選択や冪指数の選択には疑似乱数生成器を使う。プライベート鍵の本質はたった1個の数字である。それでいて全数探索に強い。これは冪演算のために組合せが無限に近くなるためである。開発者の頭文字を取ったRSAがポピュラーだ。すでに特許切れになっている。怖いのは一種のなりすましであるman-in-the-middle(MITM)攻撃である。これには公開鍵の証明書発行で防がれる。もうひとつ、選択暗号文攻撃がある。これには暗号文認証のついたRSA-OAEPなるアルゴリズムが開発されている。
メッセージに当事者しか判らないデジタル署名を付けておけば、改竄もなりすましも出来なくなる。デジタル署名は公開鍵暗号を逆方向に使えばよい。送信者はプライベート鍵によって署名を暗号化して送り、受信者である検証者は公開鍵で署名を確かめる。スマホのOSのAndroidでは、デジタル署名のないアプリケーションは排除されるメカニズムになっている。メッセージの暗号化と署名を組み合わせる方法がPGPである(本稿では解説を省略)。
電子機器を扱う限りパスワードは欠かせない。注意はしているが、どこかで使ったパスワードを使い回しているときがある。新規登録の時に、そのパスワードでは簡単に推測されるから別のを用意せよと、コンピュータが返事をよこしてくることもあった。一番安全な方法は、乱数で作ることだ。でもしょっちゅう忘れてしまってメモ探しに往生する。
パスワードを元にした暗号(PBE)のアルゴリズムの図解がある。パスワードと疑似乱数生成器からの乱数(ソルト)が、一方向ハッシュ関数を潜って出てくるハッシュ値が、鍵暗号化鍵KEKである。メッセージは対称暗号による暗号化を受けるが、そのためのセッション鍵CEKは疑似乱数生成器より供給される。CEKはKEKにより対称暗号による暗号化を受け暗号化されたセッション鍵になる。
暗号化されたメッセージは、保管されているソルトと暗号化されたセッション鍵とパスワードが揃うと、元のメッセージに戻る。パスワードだけではなくソルトも暗号化されたセッション鍵も厳重保管が望まれる。ソルトは不精者が容易に類推できるパスワードを用いても、辞書攻撃からちょっとでも安全な方向に守ってくれる有り難い乱数である。辞書攻撃とは予めKEK候補を大量に用意する暗号破りである。
クレジットカード番号をWebブラウザから送信するとき、入力URLがhttpsから始まると、ブラウザはSSL/(=または)TLSによって暗号通信を行う。クレジット番号は通信中に読み取られる心配はないが、受信者のWebサーバ上のクレジット番号の安全を保障するものではない。ときおり新聞を賑わすニュースにサーバからのデータ流出があるが、送信後の安全は受信者次第なのだと強調してある。
httpsでは暗号化プロトコルSSL/TLSの上に汎用プロトコルHTTP(メール送受信のためのSMTP/POP3その他のプロトコルでも可能)が載っている。機密性保持に対称暗号、その鍵に疑似乱数生成器、対称暗号鍵の配送に公開鍵暗号(別法あり)を使う。メッセージ認証コードには一方向性ハッシュ関数を用い、公開鍵にはデジタル署名を付けた証明書を使う。SSL/TLSはこれらを上手に填め込んだフレームワークのプロトコルである。フレームワークであるからフレーム内の各部品暗号技術は取り替え可能で、脆弱点が発見されたならその時点で別の部品を使えばよい。ただサーバとクライアントは同じ部品交換が必要だ。

('17/10/22)