前回のブログでは、暗号化の種類について簡単に説明しました。今回からは、各種暗号化技術の実際の使用事例について取り上げようと思います。今日のテーマは、対称キーアルゴリズムのユースケースである「エンベロープ暗号化」です。
対称鍵暗号化に対して鍵を保護することができない場合は、平文で通信することと変わらないという説明をしました。貴重な財産を最も安全に保管する方法は何でしょう? それは、保管しないことです。 私たちは財産を金庫に置いておくのではなく、銀行に預けてもらいます。銀行の警備が家よりはるかに信頼できるからです。エンベロープ暗号化は、銀行にお金を預けることと同じようにセキュリティに優れたクラウドサービスプロバイダ(CSP)に暗号化キーの管理を預ける方式です。
エンベロープ暗号化を一言で言いますと、「メッセージだけでなく暗号化キーも暗号化する」と言えます。わかりやすく説明するために、下の図で一般的な対称鍵暗号化と比較してみましょう。
過去の対称鍵暗号化では、できるだけ安全だと思われるところに鍵を保管し、これを通じて暗号化、復号化を行いました。
しかし、この方法は、悪意のあるユーザーに鍵を奪取されると、メッセージをすべて復号化されやすい問題がありました。
これに備えて暗号鍵もメッセージのように暗号化しておくとどうでしょうか? 悪意のあるユーザーがキーを奪取しても、「暗号化キーの暗号化キー」が安全に保管されている場合、メッセージを復号化できません。名称が混乱しているので、今後メッセージを暗号化するキーはデータキー、データキーを暗号化するキーはマスターキーと呼びます。
データキーとマスターキーを組み合わせたエンベロープ暗号化のプロセスを見てみましょう。
暗号化キーは暗復号化後すぐに削除されるため、奪いとらわれるリスクが大幅に低下します。完璧なアルゴリズムを見つけたのでしょう。しかし、まだマスターキーを奪取された場合、平文が明らかになるのは同じです。マスターキーを再暗号化し、そのキーを再暗号化する過程を無限に繰り返すことはできないです。2つのキーを別々に管理する努力でデータキーをうまく保護する方がましでしょう。
ただし、AWSなどのCSPがマスターキーを代わりに保管している場合は、話が異なります。これらは、平均的なITサービス企業よりもはるかに優れたセキュリティレベルを持っているからです。データキーのユーザーもマスターキーが何かはわかりません。APIを介してデータキーの暗復号化結果のみを通知するだけです。簡単に画像で表現すると、次のようになります。
エンベロープ暗号化を使用する前よりもキーを奪取するのがはるかに難しくなりました。これは、復号化されたデータキーがメッセージの暗復号化を実行する短時間だけ存在するためです。この時間だけデータキーを守ると、残りの部分はCSPによって保護されます。
前述の方法よりも強力なキー管理ポリシーがあります。最初からキーを復号化しないことです。 暗号キーを知らないのにどのように操作できるでしょう? クラウド環境では、復号化を直接する必要がない場合がかなりあります。
たとえば、AWS RDSなどのクラウドDBMSのデータを暗号化すると考えてみましょう。データベースを構成するインフラは、すべてクラウドプロバイダによって管理されます。したがって、ユーザーがあえて暗号化キーを管理する必要がありません。CSPが管理する暗号化キーはかなり厳密に保護され、定期的に交換されます。ディスク、DBMS、オブジェクトストレージなどの暗号化には、CSPが管理するキーを使用するのが便利です。
今日のポストでは、公開キー暗号化の弱点である暗号キーを安全に保護する「エンベロープ暗号化」技術について学びました。WhaTapでもエンベロープ暗号化を利用して一部の情報を保護しています。WhaTapなどのクラウドネイティブアプリケーションを開発する際に導入を検討してください。