部分的準同型暗号化 (P.H.E。)のみが現代(2011)の使用に実用的であるようです。ただし、このテクノロジーを活用できるライブラリ(FOSSなど)を見つけるのが困難です。
El GamalはPHEを実行するアルゴリズムの example ですが、 wikiページ は、サポートされているブラインド数学演算とその実装方法を明確に説明していません。
潜在的なユースケース
PHEは、その基になる値が何であるかをその当事者が知らなくても、数学的な演算を3番目にオフロードするために抽象的に使用できるものです。例えばx + y = zを実行でき、有効な暗号化結果が得られますが、3つの値すべてが暗号化されていない形式で第三者に知られることはありません。これは、株式市場分析データ、PII、または専有または機密と見なされるものを保護するのに役立ちます。
質問
では、どのような暗号化アルゴリズムが存在し、暗号化されたデータを操作できるようにするライブラリが存在しますか?興味のある操作のサンプルには、
El Gamal 暗号化は乗算を可能にします。これは、El Gamalが実行されているグループ内で発生します。したがって、「単純な」整数ではなく、与えられた素数を法として数値を乗算しています。掛けることができる場合、割り算することができます(サイズのグループの反転qは、累乗qによって行われます-2、これはいくつかの乗算を実行する問題です)。 El Gamalは libgcrypt ( GnuPG で使用)に実装されていますが、乗算を自分で行う必要があります(El GamalはOpenPGP形式で使用されますが、その準同型プロパティでは使用されません)。
Paillier 暗号化で追加できます。ここでも、有限グループで加算が行われます(ここでは、数値モジュロn、大きな複合整数)。私はこのシステムの広範な汎用暗号ライブラリでの実装を認識していません(ただし、私の非認識は存在しないことを意味しません)が、単純なgoogle検索でいくつかのJavaベースの実装が見つかりました(JavaはBigInteger
を提供し、実装していますそのようなシステムの簡単な)。
重要な点は、そのような暗号化システムはランダム化されているということです。特定の平文に対して、多くの可能な暗号文があります。したがって、2つの暗号文が同じ平文に対応しているかどうかはわかりません。 Fortiori、それらは比較を許可しません(とにかく有限グループ内の順序は明確に定義されていません)。比較方法は安全な非対称暗号化と互換性がないことに注意してください:だれでも選択された値を暗号化して、二分探索で暗号化されたデータを推測できます。一般的に、そのためのキーワードは「データマイニング」です。暗号化されたデータに対してデータマイニングを実行することは、未開拓の分野であり、一種の聖杯のように部分文字列照合が行われます。簡単に言えば、すぐに適用できるものはありません。
PHE(特にEl Gamal)の実用例は Helios Voting です。これを使用すると、暗号化された投票済みの投票用紙をクラウドに公開保存できます。また、一般のユーザーがそれらを合計して、各候補者の投票数を確認し、領収書なしで自分の投票が実際に合計に含まれているかどうかを確認できます。それは彼らがどのように第三者に投票したかを証明することができました。
オープンソースです。ソースコード(Python、JavaScript、Djangoに基づく)は、次の場所で入手できます。
Heliosの一部を再利用可能なライブラリに引き出すのがどれほど簡単かはわかりませんが、一目で確認できます。
@トーマスはそれを釘付けにした。加算をサポートするスキームと乗算をサポートするスキームがあります(両方をサポートする実際的なスキームはありません)。セキュリティとの互換性がないため、比較をサポートするスキームはありません。
暗号化されたテキストに特定のキーワードが含まれているかどうかのチェックをサポートするスキームもあります(例: この論文 )。ただし、脅威モデルと達成されることは少し異なります。これらのスキームは、自分がデータをアップロードしたのが自分であり、暗号鍵を覚えていて、読み取り専用(またはほとんどが読み取り)のデータセットに焦点を当てている状況を対象としています。また、トラフィック分析に使用できる情報(たとえば、キーワードのヒット数と暗号化されたファイル内でのそれらの場所)も明らかにします。