整数演算のためのBGVとBFV方式
BGVを使って、暗号化した整数の加算と乗算を行います。
「整数演算のためのBGVとBFV方式」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
BGVの概要
BGV(Brakerski-Gentry-Vaikuntanathan、2012)は、RLWEに基づくレベル型FHE方式です。パックされた整数平文に対して、任意の加算と乗算を実行できます。レベル型とは、ブートストラッピングなしで、固定された深さLまでの回路を処理できるという意味です。
平文空間
BGVとBFVでは、平文をZ_t[x]/(x^n+1)の多項式として符号化します。ここでtは小さい平文法です(例: t=65537)。各多項式は、係数ごとに1つ、n個の整数値を符号化します。暗号文に対する演算はn個すべての値に同時に適用され、SIMD並列性が実現されます。
BGVにおけるノイズ管理
BGVでは、モジュラススイッチングによってノイズを低減します。各乗算の後、暗号文の法qをQ_LからQ_{L-1}に減らします。これによりノイズがQ_L/Q_{L-1}で割られ、復号可能な範囲に収まります。回路の深さLは、L個のモジュラスレベルに対応します。
BFVの概要
BFV(Brakerski/Fan-Vercauteren、2012)はBGVに似ていますが、異なるノイズ管理戦略であるスケール不変方式を使用します。BFVではモジュラススイッチングは必要ありません。代わりに、乗算後に暗号文を再スケーリングします。実装がより簡単で、Microsoft SEALで使用されています。
バッチ符号化(NTTスロット)
平文環上の中国剰余定理により、各暗号文にn/2個の独立した整数値(スロット)を格納できます。暗号文の加算操作では、n/2個の組をすべて並列に加算します。乗算では、すべての組を乗算します。スループットは、暗号文操作1回あたりn/2個の整数演算です。
乗算の再線形化
次数1の暗号文を2つ乗算すると、結果は次数2(3つの成分)になります。再線形化では、評価鍵(relin keys)を使用して、ノイズの増加というコストを伴いながら次数1に戻します。この手順は、乗算のたびに必要です。
SEALを使ったPythonの例
from seal import EncryptionParameters, scheme_type, SEALContext, KeyGenerator, Encryptor, Evaluator, Decryptor parms = EncryptionParameters(scheme_type.bfv) parms.set_poly_modulus_degree(4096) parms.set_coeff_modulus(CoeffModulus.BFVDefault(4096)) parms.set_plain_modulus(PlainModulus.Batching(4096, 20))
回転
暗号文の回転では、n/2個の平文スロットを巡回シフトします。これは、スロットの総和を1つに集約するsum-reduce、回転と累積による行列ベクトル積、シフトと乗算による畳み込みに役立ちます。Galois keys(事前計算された回転キー)が必要です。
パフォーマンス
n=8192のBFVでは、加算は約10 µs、乗算は約5 msです(再線形化を含む)。必要な場合のブートストラッピングには30-60秒かかります。4096個の整数をバッチ処理すると、乗算1回あたり整数1個の償却コストは約1 µsです。リアルタイム処理には実用的ではありませんが、オフライン分析には利用できます。
パラメータの選択
nとqを選ぶ際、SEALではQ < 2^109の128ビットセキュリティにn=4096、大規模な回路にn=8192を推奨しています。HE標準(homomorphicencryption.org)にはパラメータ表が用意されています。必ず推奨パラメータを使用してください。独自の選択によって、セキュリティが簡単に損なわれる可能性があります。
ユースケース
暗号化データベースクエリでは、復号せずに暗号化されたレコードを検索できます。プライベートゲノム解析では、暗号化されたDNAに対して統計を計算できます。暗号化された金融集計では、個々の残高を見ずに暗号化された口座残高を合計できます。安全なモデル評価にも利用できます。
理解度チェック
BGVは、乗算後のノイズの増加を管理するためにどのような手法を使用しますか?
まとめ
BGVとBFVは、RLWEを使用して暗号化された整数演算を実行します。バッチ符号化によってSIMD並列性が得られます。BGVはモジュラススイッチングを使用し、BFVはスケール不変方式を使用します。再線形化によって、乗算後の次数を元に戻します。次は、近似演算とMLのためのCKKSについて学びます。
よくある質問
「整数演算のためのBGVとBFV方式」レッスンは無料ですか?
はい。「整数演算のためのBGVとBFV方式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「整数演算のためのBGVとBFV方式」で何を学びますか?
BGVを使って、暗号化した整数の加算と乗算を行います。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「整数演算のためのBGVとBFV方式」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 準同型暗号とは
- Learning With Errors(LWE)の基礎
- 整数演算のためのBGVとBFV方式
- 近似算術と機械学習のためのCKKS