SEAL による準同型暗号

.NET

この記事では、準同型暗号を使用する方法とタイミング、およびオープンソースの Microsoft Simple Encrypted Arithmetic Library (SEAL) を使用して準同型暗号を実装する方法について説明します。

アーキテクチャ

Diagram showing traditional and SEAL encryption.

このアーキテクチャの Visio ファイルをダウンロードします。

ワークフロー

従来の暗号化スキームは、キーの生成、暗号化、解読という 3 つの機能で構成されています。 対称キー暗号化スキームでは、暗号化と暗号化解除の両方に同じ秘密鍵が使用されます。 これにより、セキュリティで保護されアウトソーシングされたクラウド ストレージのために、大量のデータを効率的に暗号化できます。 "公開キー" 暗号化スキームでは、暗号化に公開キーが使用され、解読には別の秘密鍵が使用されます。 公開キーを知っている人はだれでもデータを暗号化できますが、秘密鍵を知っている人だけがデータを解読して読み取ることができます。 公開キー暗号化を使用すると、安全なオンライン通信が可能になりますが、通常は対称キー暗号化よりも効率が低下します。

セキュリティで保護されたストレージと通信には従来の暗号化を使用できますが、外部委託された計算では暗号化レイヤーを削除する必要があります。 外部委託された計算を提供するクラウド サービスでは、データとキーへの不正アクセスを防ぐためのアクセス ポリシーを実装する必要があります。 データのプライバシーは、クラウド プロバイダーによって課され、顧客によって信頼されているアクセス制御ポリシーに依存します。

Microsoft SEAL 準同型暗号を使用すると、クラウド プロバイダーは、格納および計算するデータに対して、暗号化なしでアクセスすることはできなくなります。 計算は、暗号化されたデータに対して直接実行できます。 このような暗号化された計算の結果は暗号化されたままになり、データ所有者だけが秘密鍵を使用して解読できます。 ほとんどの準同型暗号では、公開キーの暗号化スキームが使用されますが、公開キーの機能は必ずしも必要ではありません。

シナリオの詳細

多くの場合、企業は暗号化された形式でクラウド データを送信、受信、保存します。 しかし、クラウド コンピューティングを利用するには、企業は暗号化されていないデータ、またはそれを解読するためのキーを提供する必要があります。 この実践方法では、企業のデータのリスクが増大します。 "準同型暗号" では、暗号化されたデータに対して直接計算を行うことができるため、プライバシーが重要なデータに対するクラウドの可能性をより容易に活用できます。

考えられるユース ケース

  • プライバシーが重要なデータやプログラムの一部に対する加算や乗算などの軽量な計算。
  • 1 人の所有者がすべてのデータを所有し、解読キーへの唯一のアクセス権を持っている、外部委託クラウド コンピューティング。

考慮事項

  • 暗号化されたデータでは、一部の計算のみが可能です。 Microsoft SEAL 準同型暗号化ライブラリでは、暗号化された整数または実数に対して加算と乗算を行うことができます。 暗号化された比較、並べ替え、または正規表現は、このテクノロジを使用して暗号化されたデータで評価するには適さないことがしばしばあります。 そのため、プログラムの一部のプライバシーが重視された特定のクラウド計算のみを Microsoft SEAL を使って実装することができます。

  • Microsoft SEAL には、異なるプロパティを持つ 2 つの準同型暗号化スキームが付属しています。 "BFV スキーム" では、暗号化された整数に対してモジュール式の演算を実行できます。 "CKKS スキーム" では、暗号化された実数または複素数に対して加算と乗算が行えますが、結果は概数のみになります。 CKKS が最適な選択肢であるのは、暗号化された実数の合計、暗号化されたデータに対する機械学習モデルの評価、暗号化された場所の距離の計算などを行う場合です。 正確な値が必要なアプリケーションでは、BFV スキームが唯一の選択肢です。

  • 準同型暗号は効率的ではありません。 準同型暗号化には大幅なパフォーマンスのオーバーヘッドが伴うため、暗号化されていないデータに対して実行するのに既にコストがかかっている計算は、暗号化されたデータでは実行できない可能性があります。

  • 準同型暗号で暗号化されたデータは、暗号化されていないデータより何倍も大きいため、このテクノロジを使用して、たとえば大規模なデータベース全体を暗号化することは意味がない可能性があります。 代わりに、厳密なプライバシー要件によって暗号化されていないクラウド計算が禁止されているが、計算自体が非常に軽量なシナリオでは、有意義なユース ケースです。

  • 通常、準同型暗号化スキームには、データ所有者によって保持される 1 つの秘密鍵があります。 複数の異なるプライベート データの所有者が共同で計算を行うことを希望するシナリオには、準同型暗号化は適していません。

  • 暗号化されていない計算を暗号化されたデータの計算に変換することは、常に簡単にできるわけではありません。 新しいユーザーが Microsoft SEAL を使用して計算をプログラムして実行できる場合でも、効率的な実装と非効率的な実装の違いは大きくなる可能性があります。 パフォーマンスを改善する方法を理解するのが難しい場合があります。

  • 準同型暗号化プリミティブ自体は安全ですが、それを使用するアプリとプロトコルが安全であることを保証するものではありません。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパル作成者:

  • Jose Contreras | プリンシパル ソフトウェア エンジニアリング マネージャー

次のステップ

準同型暗号化と Microsoft SEAL ライブラリの詳細については、Microsoft Research の Microsoft SEAL に関するページと、GitHub の SEAL コード プロジェクトを参照してください。

Azure のセキュリティに関する次のリソースをご覧ください。