暗号鍵管理に関する私的メモ

はじめに

暗号技術は現在では誰もが日常で利用する生活インフラとなっていますが、鍵の管理方法については実はまだ決定的な解は見つかっていません。というと誤解を招きそうですが、今のところ秘密鍵の類いはパスコードや各種認証でロックするかセキュリティチップのようなハードウェア上の工夫により管理するといった方法があり、それでもまあなんとかなっているのですが、今まではそれでなんとかなったというのが正しいかもしれません。

これからIoT時代になれば人間が介在せず自律的に情報を処理・流通させるケースが増えてきます。IoTデバイスで鍵を管理するとなると、パスコードでは自動的な処理ができないですし、低コストなデバイスの場合は追加のチップ搭載は割りとハードルがあります。

そういったこともありIoTでどうやって鍵を管理するかという問題は賢い人たちによって日夜研究されており、様々なアイデアが生まれています。この記事では特に鍵管理に関する諸問題の概要と最新技術の情報を収集・学習・整理したい自分のメモとして書きます。勉強目的ですので間違ったことも書いてしまうかもしれませんが、そのときは優しく指摘していただければ幸いです(笑)

暗号化における鍵管理の課題

まず通常の暗号アルゴリズムというのがどういう考え方に基づいているのかを振り替えりましょう。平文を第3者が解読できない暗号文に変換することが暗号化の目的ですが、これを計算機で実現するには当然計算によって変換することになります。ここで”word”という文字列を暗号化する場合を考えると、計算機では各文字をasciiコードなどの数値(0x77,0x6f,0x72,0x64 のような感じ)に変換して暗号化します。これをアルゴリズムに沿って演算するわけですが、例えば「各数値を+10した数値に変換する」みたいなシンプルで決定的な規則で演算した場合、攻撃者は簡単な分析で暗号文からこの規則を推測することができてしまいます。

なので、できる限り撹乱して「規則性が分からない」ようにすることが重要です。しかも攻撃する側も計算機で大量・高速に演算できることが前提になります。「+10」の例ですと「1から256までの数値を暗号文の各数値から引いた文字コードを計算してみて意味のある単語が現れないかを256回試してみるといったことは0.001秒もかかりません。高い並列演算処理能力を持つスーパーコンピュータが計算を試しても現実的な時間内には計算が終わらないような暗号文を作ることで暗号の秘密は守られます。

攻撃者が計算しなければならない選択肢を天文学的に増やす目的で使われるのが鍵です。鍵の中身はランダムな数値で良いですが、可能な選択肢が多くなければなりません。一般的に良く使われている共通鍵暗号の鍵長は256bitですが、これはつまり2^256の選択肢が存在することを意味します。まさに天文学的な数です。このたった32byteのデータを鍵として暗号化の計算に使えば暗号の解読は極端に難しくなることが分かると思います。(もちろんその他のアルゴリズム的理由で選択肢が狭められないことが前提となります。)逆に言えばこの鍵がバレてしまえば、暗号の秘密などないに等しい訳で、どうやって鍵の秘密を守るのかということは暗号の機密性にとって本丸とも言うべき課題である訳です。

仮想通貨における鍵問題

仮想通貨はブロックチェーンという連鎖的な暗号化によりほぼ改竄を不可能とする強力なセキュリティを誇っている訳ですが、残念ながら記録の書き換えに必要な公開鍵暗号の仕組みは伝統的なものが多く、秘密鍵が盗まれてしまえば正式な手続きで簡単に送金できてしまいます(簡単に送金できるから仮想通貨なんだ、と言うこともできますね)。取引所は「仮想通貨を持っている」というよりは「仮想通貨のブロックチェーンの所有権移転を可能とする顧客の秘密鍵を管理している」という性格を持つので、そこには大量の秘密鍵が保管されています。攻撃者はブロックチェーンをハッキングする必要などなく、取引所をハッキングして大量の秘密鍵を奪いさえすればブロックチェーンの書き換えが実現してしまいます。取引所はコールドウォレットという物理的にネットワークから分離されたサーバで秘密鍵を管理するなどの対策はとっていますが、全てをコールドウォレットにするわけにはいかないので取引に使用される分はネットに繋がるホットウォレットで管理しています。取引所というのは常にそういうリスクがあり、攻撃者にも狙われやすいので巨額盗難事件が後を絶ちません。

「一ヶ所に集めるからダメなんだ」と考えるならば各自が責任をもって秘密鍵を管理することが解となりますが、これについてはなかなか難しいのが実情です。必ずしもITのリテラシーが十分ではない人たちにとって秘密鍵を自分で管理するというのは非常にハードルの高い作業です。もし何らかのオペミスをして秘密鍵を失ってしまえば(セルフGOXと言う)資産はその時点で消失したのと同じことになります。

IoTにおける鍵問題

IoTにおいても機器のデータや通信を暗号化しなければならないケースが増えていくと予想されますが、ここでも鍵をどう管理するのかは難しい問題です。IoTの場合は端末が不特定多数ではない、管理されているケースもあるため仮想通貨ほど多様な環境ではないかもしれませんが、極力人間が介入せずに自動的にかつ安全に情報を処理しなければなりません。都度人間の承認が必要な処理でしたら常時インターネットに繋がるIoTのメリットが生かせません。それならスマホでいいよねってことになります。半自動的に常時稼働するIoT機器に秘密鍵を保存する…。嫌な予感しかしませんね。

もちろんそもそも秘密鍵を端末に持っておく必要はあるのか?という議論もあります。例えばTLS1.3の鍵交換アルゴリズムは前方秘匿性を実現するため通信を終えると鍵を廃棄し、次の通信では別の鍵を作って利用するといった制御を行います。これであれば鍵の有効期限は通信を行っているごく短い時間に限られるため、仮に鍵が漏洩しても影響を限定的にすることができます。(鍵生成の負荷は考慮が必要)

端末には公開鍵だけを載せて秘密鍵は別のサーバーなどで管理するという考え方もあります。この場合は端末側でできることはある程度限られます。データの暗号化だけが必要で復号は必要ない場合や署名の検証さえできれば良いなどの場合ですね。暗号用途を限定できるのであればこれも立派な解になります。しかし、メンテナンスに必要となるようなリモートアクセス、機器認証、セキュアブートなどもう少し高度なセキュリティを実現しようとするとどうしても端末で秘密鍵を管理する必要性に迫られます。

このように鍵の秘密をいかに守るか、鍵の管理をいかに分かりやすくするか、いかに安全な暗号を確立するか、といった課題の解決はIoT時代、常時暗号化の時代にあって待ったなしの状況です。この問題の解決がIoT発展の(まさに)鍵を握っていると言っても過言ではないでしょう。(つづく)

ここからは現在、考案・利用されている鍵の管理手法について簡単に復習・整理していく予定です。例えば、

・パスフレーズ暗号化
→(2019.01.04)記事を公開しました。

・耐タンパチップとTPM

・ホワイトボックス暗号

・秘密分散

などなど他にも書けたらと思いますが、時間もかかりそうなので挫折したらお許しくださいw

コメント

  1. […] 暗号鍵管理に関する私的メモのつづきです。調べていたらいろいろな疑問が発生し記事にするのが遅くなってしまいました。 […]

タイトルとURLをコピーしました