CKKS パラメータの選択とセキュリティ レベル

セキュリティレベル

暗号化では、通常、セキュリティ レベルを表すためにビット セキュリティが使用され、通常は文字λ \lambdaが使用されます。λで表します。スキームのセキュリティ レベルがλ \lambdaλ。このスキームを破るには少なくとも2 λ 2^\lambda2λの操作。もちろん、これは一般に成功する確率が高いことを指しますが、そうでない場合、非常に幸運な場合には、その人はすぐにキーを正しく推測するでしょう。
スキームが異なればセキュリティ レベルも異なる場合があり、同じセキュリティ スキームでもパラメータの選択が異なればセキュリティ レベルも異なる場合があります。
特定のセキュリティ レベルの計算は、暗号化スキームの基礎となる、またはそれに基づいた困難な問題に関連しています。

CKKS セキュリティ レベルの影響要因

CKKS のセキュリティは、LWE 問題、より具体的には多項式リング上の LWE 問題に基づいています。簡単に言えば、a、s、e があるとします。a はリングから一様にサンプリングされた乱数、s は秘密鍵の分布からサンプリングされた秘密鍵、e は誤差分布からサンプリングされたものです。次に、b 1 = − as + e b_1=-as+eを計算します。b1=s _+ea と b だけがわかっていると仮定すると、s を見つけるのは困難です。これがLWEの問題です。
誤差分布の場合、一般にガウス分布に関連しますが、ガウス分布から独立して誤差多項式の係数をサンプリングするのは安全ではありません。通常、埋め込み表現でガウス分布を使用してサンプリングし、リング要素で乗算し、丸め、モジュロ演算によってリングにマッピングできます。(効率的なサンプリング方法は多数あります)
誤差係数またはノルムは小さい必要があることに注意してください。これは、暗号文内のノイズと動作中のノイズの増加に大きく影響します。
次に、秘密鍵の配布があります。秘密鍵の配布には一般に 3 つのタイプがあります

  • 均一サンプリング: 秘密鍵はリング上の均一サンプリングを通じて取得されます。
  • エラー分布: 秘密キーはエラー分布と同じです。つまり、秘密キーはエラー分布でサンプリングされます。
  • トリプレットのランダム サンプリング: つまり、秘密キーの各係数は {-1, 0, 1} から均一にサンプリングされます。

秘密キーの配布が異なれば、セキュリティ レベルに与える影響も異なります。
分布に加えて、多項式リングのサイズ、つまり使用される円多項式の次数も係数係数のサイズに関係します。
円周多項式の次数が大きいほど (多項式の次数が多項式の最高次数である)、スキームはより安全になります。
多項式の係数係数が大きいほど、スキームの安全性は低くなります。
より詳細な対応関係は、準同型暗号化標準に記載されています。
一般に、実装では、秘密鍵のサンプリング方法としてトリプレットのランダム サンプリングが通常使用されるため、ここに対応するセキュリティ レベルのスクリーンショットを示します。興味がある場合は、原文を直接見て、より詳細な対応を確認できます。 (秘密鍵の配布は3つあり、すべてのセキュリティレベルがあります)
秘密鍵配布は3重項ランダム配布、セキュリティレベル対応表
このうち、nは円周多項式の次数を表し、logq log ql o g q は係数の係数のビット長を表します。セキュリティレベルはセキュリティレベルを示します。

TenSEALでのCKKSパラメータ設定例

TenSEAL のデフォルトのセキュリティ レベルは 128 ビットです。つまり、円多項式の次数が 8192 の場合、多項式係数の法は最大 218 ビットを超えることはできません。

import tenseal as ts
ctx=ts.context(ts.SCHEME_TYPE.CKKS, poly_modulus_degree=8192, coeff_mod_bit_sizes=[40,30,30,30,30,50])
ctx.global_scale=2**30

暗号化コンテキストの生成時、つまりコンテキストクラスのインスタンス化時に渡すことができるパラメータ(セキュリティ関連)polyn_modulus_degreeは、円多項式の次数です。
coeff_mod_bit_sizes は係数モジュロの素因数分解です。この例では、40ビットの素数、4つの30ビットの素数、50ビットの素数を生成し、それらの積を係数法として使用します。
この配列では、最初の素数のサイズは 40 で、これは制御する精度に関連しますが、スケーリング係数 global_size よりも大きくする必要があります。
そして、真ん中の 30 は通常、スケーリング係数のビット長と同じであり、その数は実行する乗算の​​深さに関係します。先頭の暗号文の倍率を s とすると、m 1 m_1のように 1 回乗算した後、メートル1そしてm2m_2メートル2m 1 s ∗ m 2 s = m 1 ∗ m 2 s 2 を乗算しますm_1s*m_2s=m_1*m_2s^2メートル1sメートル2s=メートル1メートル2sCKKS では、再スケーリングは各乗算の後に実行されます。つまり、coeff_modulus_sizes の素数である素数で除算されます。この素数が s とほぼ同じサイズである場合、新しい暗号文の倍率も約 s になります。
最後の値は、キーの生成に関連する特別な素数の長さで、通常は最大 (ただし必須ではありません) です。
coeff_modulus_sizes の合計は、対応する多項式の次数の logq より小さくなければなりません。たとえば、多項式の次数が 8192 の場合、218 未満である必要があります。

おすすめ

転載: blog.csdn.net/watqw/article/details/129976663