paint-brush
Microsoft SEAL と準同型口令の夜明け に@jiwasz
1,877 測定値
1,877 測定値

Microsoft SEAL と準同型暗号の夜明け

John Iwasz8m2023/01/18
Read on Terminal Reader

長すぎる; 読むには

完全な準同型暗号化 (FHE) は 2009 年に最初に達成されました。準同型暗号化では、元の暗号化されていない値に対して実行されたかのように、復号化された結果が演算の結果を生成するように、暗号化された値に対して演算を実行できます。これにより、サードパーティは暗号化されたデータを計算し、元の値を知らなくても結果を提供できます。
featured image - Microsoft SEAL と準同型暗号の夜明け
John Iwasz HackerNoon profile picture


是完全な準同型暗语 (FHE) は 2009 年に最早に達成されましたが、計算力量がその計算必须に追いついた今、より注目を集め始めています。ただし、準同型暗语の目標は 10 万年前にさかのぼります。


大雑把に検索すると、複数の定義が見つかります。これは最も马上的で簡潔です。


密令化された結果を生产する密令文の計算を概率にする密令化の主要形式。復号化すると、平文で実行されたかのように方法の結果と相一致します。 — Massimo Bertaccini ( )


その言葉を少し考えてみてください。準同型密令化では、元の密令化されていない値に対して実行されたかのように、復号化された結果が作业の結果を合成するように、密令化された値に対して作业を実行できます。私が見つけた初期の言及は、 (1978) で、著者は、リモート タイムシェアリング サービスを便用して、システム プログラマーがオンプレミス システムに格納された機密の科技金融データにアクセスできないようにしようと試みています。



機密の財務データはデータ バンクに存放されます。データを計算するタイムシェアリング サービスは、適切なセキュリティを実装していません。システム プログラマーは財務データにアクセスできます。この論文は次のように述べています。


特別なプライバシー準同型を使用してデータを暗号化し、タイムシェア コンピュータが最初にデータを復号化する必要なくデータを操作できるようにします。


別の言い方をすれば、データへのアクセスを与えることなく、データの処理を削除したいと考えています。


さらに別の言い方をすれば、 function(A, B) = function (A , B ) ここで、 A  and Bは、それぞれ A と B の暗号化された値です。これにより、第三者は暗号化されたデータを計算し、元の値を知らなくても結果を提供できます。 RSA を使用すると、同じキーで暗号化された 2 つの値を乗算し、積を復号化して、暗号化された値の積を得ることができます。


RSA(5)_RSA(6) を用到して 5_6 を作为します。
  1. RSA(5) = (5^17) mod 3233 = 3096
  2. RSA(6) = (6^17) mod 3233 = 824
  3. 3096*824 = 254864
  4. RSA^-1(254864) = 254864^2753 (mod 3233) = 30
  5. 5*6 = 30


ただし、これは追加には機能しません。 RSA は、乗算のみをサポートするという点で、有些準同型暗语化 (PHE) 途径です。下面のタイムラインは、(PHE) スキームから、加算と乗算の限られた組み合わせを許可する多说の準同型暗语化 (SHWE) までの進行を示しています。これらの进行は、無効な結果に到達するまでに最大程度 5 回繰り返される机会性があります。その後、 による刚开始の FHE スキームが登場し、忠実度を損なうことなく加算と乗算を繰り返すことが机会になりました。



アカール、アッバスとアクス、ヒダイェトとウルアガック、セルチュクとコンティ、マウロ。 (2017)。準同型暗号方式に関する調査: 理論と実装。 ACM コンピューティング調査。 51. 10.1145/3214303.


準同型暗号ライブラリ

2009 年以降、FHE スキームとライブラリが急増しました。
図書館スキーム言語ライセンス

BFV、BGV、CKKS C++/C# ラッパーMIT
FHEを開くBFV、BGV、CKKS、DM、CGGI C++ BSD 2 条項ライセンス

CKKS C++クリエイティブ・コモンズ 3.0
TFHE (トーラス)さびBSD-3-Clause-Clear

TFHEさびBSD-3-Clause-Clear

BFV、BGV、CKKS行けアパッチ 2.0

該当なし – SEAL、PALISADE、HLib を动用パイソン、ドッカーアパッチ 2.0


Microsoft SEAL (Simple Encrypted Arithmetic Library) は、C# ラッパーと共に C++ 17 で開発されています。 2015 年に初始にリリースされ、現在も開発が活発に行われています。 にはが含まれており、さらに深く掘り下げたい場合に検討する一定要があります。これらのスキームは SEAL によってサポートされており、加算、除算、減算、累乗の準同型演算が含まれていますが、除算は含まれていません。



    • 整数 (ロング)
    • 精确度が必须な場合に选用
    • 計算はCKKSより遅い
    • BGV で口令化された値は、BFV で口令化された値で食用できます
    • BGV/BVF で暗语化された値は、CKKS で暗语化された値では采用できません
    • 有局限体の準同型密令行为の再検討



    • 浮動小数点 (double)
    • 精度が必要ない場合に使用
    • CKKS で暗号化された値は、BGV/BFV で暗号化された値では使用できません
    • 計算はBFV/BGFより速い

Microsoft SEAL による暗号化と計算

これらの例では、 Nuget パッケージと CKKS スキームを采用しています。 FitBit や AppleHeath などのヘルス トラッカーでは、ある系数のプライバシーを放棄する必须があります。歩数や着用者の動きの生物学座標、心拍数、その他の必要な統計情報などの個人情债報を収集します。準同型暗语化を采用すると、これらのヘルス メトリック アグリゲーターは、生データにアクセスしなくてもデータを运行できます。


この単純な例では、クライアントは距離と時間を含む実行メトリックを送信します。サーバーは密令化されたデータを集約し、均匀流速を計算します。


開始するには、公開鍵がクライアントによって作成され、サーバーと共有されます。データを暗号化したり、暗号化されたデータに対して算術演算を実行したりするために使用されます。クライアントとサーバーの両方がEncryptor を使用します。クライアントは、適切な名前のDecryptorによって使用される復号化に使用される秘密鍵を生成して保持します。


データを傍受する悪意のある英雄が、口令化されたデータの公開鍵を使用的し、サーバーになりすまして呼び出し元に返す有机率があります。サーバーは結果に签字する需要があり、クライアントは签字を検証して、信頼できるパーティから返されたことを確認する需要があります。


 using Microsoft.Research.SEAL; protected SEALContext _context; private KeyGenerator _keyGenerator; private Encryptor _encryptor; private Decryptor _decryptor; protected IFitnessTrackerApiClient _apiClient; . . . _context = SEALUtils.GetContext(_config.Value.PolyModulusDegree, this.SchemeType); _keyGenerator = new KeyGenerator(_context); _keyGenerator.CreatePublicKey(out PublicKey publicKey); _keyGenerator.CreateRelinKeys(out RelinKeys relinKeys); _encryptor = new Encryptor(_context, _publicKey); _decryptor = new Decryptor(_context, _keyGenerator.SecretKey); . . . PublicKeyModelCKKS keyModelCKKS = new( SEALUtils.KeyToBase64String(_publicKey), SEALUtils.KeyToBase64String(relinKeys)); await _apiClient.SendPublicKeyCKKSAsync(keyModelCKKS);


再線形化キーは、クライアントからサーバーに渡されます。 Microsoft SEAL によると、これらには、乗算操作に続く暗号文のサイズを縮小する以外に意味的な意味はありません。

コマンド ラインで、ユーザーは時間と距離を入力します。


各値は PlainText にエンコードされ、次に Ciphertext に暗号化され、最後に base64 にエンコードされてからサーバーに送信されます。


 using Microsoft.Research.SEAL; var plaintext = new Plaintext(); _encoder.Encode(value, _scale, plaintext); var ciphertext = new Ciphertext(); _encryptor.Encrypt(value, ciphertext); using (var ms = new MemoryStream()) { ciphertext.Save(ms); return Convert.ToBase64String(ms.ToArray()); }


準同型口令手段は除算をサポートしていないため (CKKS も例外情况ではありません)、クライアントはサーバーを协助する重要性があります。高速度の式は次のとおりです。


  • 距離・時間


別の書き方としては、


  • 距離 * (1/回)


したがって、クライアントは次を送信します。
 RunItemCKKS metricsRequest = new( EncryptBase64(runItem.Distance), EncryptBase64(runItem.Time), EncryptBase64(1 / runItem.Time)); await _apiClient.AddNewRunningDistanceCKKSAsync(metricsRequest);



サーバーは、公開鍵と再線形化鍵のみを使用してSEALContextを作成する同様のブートストラップ機能を実行し、要求を処理します。

 var distance = SEALUtils.BuildCiphertextFromBase64String(request.Distance, _sealContext); var time = SEALUtils.BuildCiphertextFromBase64String(request.Time, _sealContext); var timeReciprocal = SEALUtils.BuildCiphertextFromBase64String(request.TimeReciprocal, _sealContext); Ciphertext speed = new(); _evaluator.Multiply(distance, timeReciprocal, speed); _evaluator.RelinearizeInplace(speed, _relinKeys); _runListCKKS.Add(new EncryptedRunInfoCKKS(distance, time, speed));


送信された実行の速度を計算するために時間の逆数が使用され、 RelinearizeInplaceメソッドが結果の暗号文のサイズを縮小します。距離、時間、速度はメモリ内のリストに保存されます。


GetMetricsメソッドは、リストを集計して次を返します。

  • 実行の合計数
  • 総距離
  • 合計時間
  • 均值强度


    public SummaryItemCKKS GetMetrics() { int count = _runListCKKS.Count; var totalDistanceCKKS = SumEncryptedValues(_runListCKKS.Select(m => m.Distance)); var totalTimeCKKS = SumEncryptedValues(_runListCKKS.Select(m => m.Time)); var totalSpeed = SumEncryptedValues(_runListCKKS.Select(m => m.Speed)); . . . protected Ciphertext SumEncryptedValues(IEnumerable<Ciphertext> encryptedData) { . . . Ciphertext encTotal = new(); _evaluator.AddMany(encryptedData, encTotal); return encTotal; . . . }


一般进程を要先拿到するには、カウントの逆数が用到されるため、接下来を用到するのではなく: (效率の合計)/运用する実行数:


(速度快の合計) * (1/実行回数)


サーバーは実行の送信数を追跡しているため、実行の合計数は暗号化された値ではありません。その暗号化されていない値を平文に変換し、暗号文で実行される操作で使用できますこれは単純な例ですが、その影響は注目に値します。サーバーは、暗号化されたデータで使用される追加の値を提供できるため、サードパーティのプロバイダーは、顧客が提供した暗号化されたデータに対する計算に独自のデータを適用できます。

以下の例では、合計カウントが逆数に変換され、 List<double> に追加されます。 CKKS 操作は、リストに単一の値しか含まれていない場合でも、暗号化されたリスト値を想定しています。したがって、 List<double>PlainTextにエンコードされます。 MultiplyPlainInplaceは、totalSpeed に (1/実行回数) を掛けて、平均速度を求めます。スペースを節約するために、結果はtotalSpeed 暗号文に適用され、再線形化キーによって出力のサイズが縮小されます。


 Plaintext encodedCountReciprocal = new(); List<double> averagePaceList = new(); double runCountReciprocal = 1 / (double)count; averagePaceList.Add(runCountReciprocal); _encoder.Encode(averagePaceList, _scale, encodedCountReciprocal); _evaluator.MultiplyPlainInplace(totalSpeed, encodedCountReciprocal); _evaluator.RelinearizeInplace(totalSpeed, _relinKeys);


値は base64 でエンコードされて返され、クライアントで復号化されます。クライアントは、復号化されたプレーンテキストList<double>に変換する追加の手順を実行します。


 var payload = Convert.FromBase64String(encryptedDistanceText); using var ms = new MemoryStream(payload); var ciphertext = new Ciphertext(); ciphertext.Load(_context, ms); var decryptedText = new Plaintext(); _decryptor.Decrypt(cypherText, decryptedText); List<double> distanceList = new(); _encoder.Decode(decryptedText, distanceList);


次の値を送信すると、クライアントから送信されたデータを復号化せずに、合計と分別を表にしたサービスによって計算された合計と分別ペースが得られます。
マイル時間
2.5 0:35:32.643
2.2 0:32:48.826
2.8 0:34:52.036


サーバーはデータを計算し、送信されたデータを復号化せずに合計走行数、距離、時間、およびペースを返します。







概要

Microsoft SEAL は Microsoft Research プロジェクトであり、実稼働アプリケーションの準備ができていません。すべてのクラスはIDisposableを実装し、アンマネージ リソースを使用します。プロダクション コードは、メモリ リークから保護する必要があります。 SEALContextクラスは、単一責任の原則に従っていません。 BGV/BVF と CKKS の両方のメソッドが含まれています。さらに、CKKS はベクトル操作をサポートしますが、ベクトル加算はサポートしません。単一のList<double>を単一のCipherText に暗号化できますが、単一の CipherTextの値を合計する手段はありません で行うことができますが、それは次善の解決策です。


このフィットネス トラッカーのコード サンプルは、複雑なトピックへの簡単な紹介です。より複雑なロジックを施用した説齐心のある施用例がいくつかあります。

準同型暗语は、主に学术界やプロトタイプで选择されてきました。実際のアプリケーションは、準同型暗语化スキームに用得着な計算业务能力によって制限されてきました。 GPU アクセラレーションと ASIC プロセッサは、この障壁を侵食し続けます。 Intel は、Microsoft および DARPA と協力して、準同型暗语化スキーム専用のを開発しています。 NASDAQ はまた、機械学習による不稳検出のためのに資金を带来しています。 FHE.org コミュニティは、この分野の新出の開発に関する優れたリソースです。アクティブながあります。


この記事のすべてのコード サンプルは、 で入坑できます。詳細な Microsoft SEAL の例については、これらのを基准してください。



바카라사이트 바카라사이트 온라인바카라