格子ベースの公開鍵暗号システム
NTRUEncrypt 公開鍵暗号システムは 、 NTRU 暗号化アルゴリズム とも呼ばれ 、 RSA および 楕円曲線暗号 (ECC)に代わる NTRU 格子ベースの暗号システムであり、格子内の 最短ベクトル問題 に基づいています( 量子コンピュータ を使用して解読できないことは知られています )。
これは、切断された 多項式環 の特定の多項式を、非常に小さな係数を持つ 2 つの多項式の商に因数 分解 することが困難であると想定されることに依存しています。暗号システムの解読は、特定の 格子における 格子縮小 のアルゴリズムの問題と強く関連していますが、同等ではありません 。公開されている攻撃を阻止するには、パラメータを慎重に選択する必要があります。
暗号化と復号化の両方で単純な多項式の乗算のみを使用するため、これらの操作は、RSA、 ElGamal 、 楕円曲線暗号 などの他の非対称暗号化方式と比較して非常に高速です。ただし、NTRUEncrypt は、展開された形式で同等の量の暗号分析をまだ受けていません。
関連するアルゴリズムとして、 NTRUSign デジタル署名 アルゴリズムがあります。
具体的には、NTRU 演算は畳み込み乗算を伴う切り捨て多項式環内のオブジェクトに基づいており 、環内のすべての多項式は 整数 係数 を持ち、次数は最大 N -1 です。
R
=
ず
[
バツ
]
/
(
バツ
いいえ
−
1
)
{\displaystyle \ R=\mathbb {Z} [X]/(X^{N}-1)}
1つの
=
1つの
0
+
1つの
1
バツ
+
1つの
2
バツ
2
+
⋯
+
1つの
いいえ
−
2
バツ
いいえ
−
2
+
1つの
いいえ
−
1
バツ
いいえ
−
1
{\displaystyle {\textbf {a}}=a_{0}+a_{1}X+a_{2}X^{2}+\cdots +a_{N-2}X^{N-2}+a_{N-1}X^{N-1}}
この環では、多項式に を掛けると多項式の係数が回転する 効果があります。 したがって、 を固定した場合の の形式の写像は、 内の非ゼロ係数と同じ 数の からの係数にすべての係数が依存する 新しい多項式を生成します 。
バツ
いいえ
=
1
{\displaystyle X^{N}=1}
バツ
{\displaystyle X}
ふ
↦
ふ
グ
{\displaystyle f\mapsto fg}
グ
∈
R
{\displaystyle g\in R}
ふ
グ
{\displaystyle fg}
ふ
{\displaystyle f}
グ
{\displaystyle g}
NTRU には 3 つの整数パラメータ ( N 、 p 、 q ) があり、 N は多項式の次数境界、 p は小係数、 q は大係数と呼ばれます。 N は 素数 、 q は常に p より (はるかに) 大きく 、 p と q は 互いに素で ある と仮定します 。 平文メッセージは p を 法とする多項式です が、 暗号文メッセージは q を法とする多項式です 。 具体的には、暗号文は平文メッセージとランダムに選択された公開鍵の倍数で構成されますが、公開鍵自体は小係数 p の倍数と見なすことができ、秘密鍵の所有者は暗号文から平文を抽出できます。
歴史
NTRUEncrypt公開鍵暗号システムは比較的新しい暗号システムです。このシステムの最初のバージョンは単にNTRUと呼ばれ、1996年頃に3人の数学者( Jeffrey Hoffstein 、 Jill Pipher 、 Joseph H. Silverman )によって開発されました。1996年にこれらの数学者はDaniel LiemanとともにNTRU Cryptosystems, Inc.を設立し、この暗号システムの特許 [1] (現在は失効)を取得しました 。
過去 10 年間、人々は暗号システムの改善に取り組んできました。暗号システムが初めて発表されて以来、システムのパフォーマンスとセキュリティの両方を改善するためにいくつかの変更が行われました。パフォーマンスの改善のほとんどは、プロセスの高速化に重点が置かれていました。 [ 詳細な説明が必要 ] 2005 年まで、NTRUEncrypt の復号化の失敗について説明した文献が見つかりました。 [ 引用が必要 ] セキュリティに関しては、NTRUEncrypt の最初のバージョン以降、新しいパラメータが導入されました [ 引用が 必要] 。これは、現在 [ 指定 ] 知られているすべての攻撃に対して安全である [ 説明が必要 ] と考えられ、計算能力が適切に向上しています。 [ 説明が必要 ]
現在、このシステムは、格子ベースの公開鍵暗号の仕様 ( IEEE P1363.1 ) に基づく IEEE P1363 標準に完全に承認されています。NTRUEncrypt 公開鍵暗号システムの速度 (ベンチマーク結果については http://bench.cr.yp.to を参照) とメモリ使用量の少なさ (下記を参照) [ 疑わしい – 議論 ]により、モバイル デバイスや スマート カード などのアプリケーションで使用できます 。2011 年 4 月、NTRUEncrypt は金融サービス業界での使用のために X9.98 標準として承認されました。 [2]
公開鍵生成
アリスからボブに秘密のメッセージを送信するには、公開鍵と秘密鍵を生成する必要があります。公開鍵はアリスとボブの両方が知っており、秘密鍵はボブのみが知っています。鍵のペアを生成するには 、次数が最大で係数が {-1,0,1} である 2 つの多項式 f と gが必要です。これらは、 R を法とする 多項式の剰余類の表現と考えることができます 。多項式は、 逆数 modulo q および modulo p ( ユークリッド互除法 ) が存在するという追加要件を満たす必要があり、これは
、およびが成立する必要があることを意味します。したがって、選択された f が逆数でない場合、ボブは戻って別の f を 試す必要があります 。
いいえ
−
1
{\displaystyle \N-1}
バツ
いいえ
−
1
{\displaystyle \X^{N}-1}
ふ
∈
ら
ふ
{\displaystyle {\textbf {f}}\in L_{f}}
ふ
⋅
ふ
p
=
1
(
モッド
p
)
{\displaystyle \ {\textbf {f}}\cdot {\textbf {f}}_{p}=1{\pmod {p}}}
ふ
⋅
ふ
q
=
1
(
モッド
q
)
{\displaystyle \ {\textbf {f}}\cdot {\textbf {f}}_{q}=1{\pmod {q}}}
f と (および) は ボブの秘密鍵です。公開鍵 hは 、次の量を計算し生成されます。
ふ
p
{\displaystyle \\mathbf {f}_{p}}
グ
{\displaystyle g}
h
=
p
ふ
q
⋅
グ
(
モッド
q
)
。
{\displaystyle {\textbf {h}}=p{\textbf {f}}_{q}\cdot {\textbf {g}}{\pmod {q}}.}
例 : この例では、パラメータ ( N 、 p 、 q )は、 N = 11、 p = 3、 q = 32 の値を持ち、したがって多項式 f と g の次数は最大 10 です。システムパラメータ ( N 、 p 、 q ) は誰もが知っています。多項式はランダムに選択されるため、次のように表されるとします。
ふ
=
−
1
+
バツ
+
バツ
2
−
バツ
4
+
バツ
6
+
バツ
9
−
バツ
10
{\displaystyle {\textbf {f}}=-1+X+X^{2}-X^{4}+X^{6}+X^{9}-X^{10}}
グ
=
−
1
+
バツ
2
+
バツ
3
+
バツ
5
−
バツ
8
−
バツ
10
{\displaystyle {\textbf {g}}=-1+X^{2}+X^{3}+X^{5}-X^{8}-X^{10}}
ユークリッドの互除法を用いて、 それぞれ
p を法とする f の逆数と qを法とするfの逆数が計算される。
ふ
p
=
1
+
2
バツ
+
2
バツ
3
+
2
バツ
4
+
バツ
5
+
2
バツ
7
+
バツ
8
+
2
バツ
9
(
モッド
3
)
{\displaystyle {\textbf {f}}_{p}=1+2X+2X^{3}+2X^{4}+X^{5}+2X^{7}+X^{8}+2X^{9}{\pmod {3}}}
ふ
q
=
5
+
9
バツ
+
6
バツ
2
+
16
バツ
3
+
4
バツ
4
+
15
バツ
5
+
16
バツ
6
+
22
バツ
7
+
20
バツ
8
+
18
バツ
9
+
30
バツ
10
(
モッド
32
)
{\displaystyle {\textbf {f}}_{q}=5+9X+6X^{2}+16X^{3}+4X^{4}+15X^{5}+16X^{6}+22X^{7}+20X^{8}+18X^{9}+30X^{10}{\pmod {32}}}
これは、アリスとボブの両方に知られている公開鍵 h を作成し、積を計算する。
h
=
p
ふ
q
⋅
グ
(
モッド
32
)
=
8
−
7
バツ
−
10
バツ
2
−
12
バツ
3
+
12
バツ
4
−
8
バツ
5
+
15
バツ
6
−
13
バツ
7
+
12
バツ
8
−
13
バツ
9
+
16
バツ
10
(
モッド
32
)
{\displaystyle {\textbf {h}}=p{\textbf {f}}_{q}\cdot {\textbf {g}}{\pmod {32}}=8-7X-10X^{2}-12X^{3}+12X^{4}-8X^{5}+15X^{6}-13X^{7}+12X^{8}-13X^{9}+16X^{10}{\pmod {32}}}
暗号化
アリスはボブに秘密のメッセージを送りたいので、係数が の多項式 m の形式でメッセージを記述します。暗号化の最新のアプリケーションでは、メッセージ多項式は 2 進数または 3 進数表現に変換できます。メッセージ多項式を作成した後、アリスは メッセージを隠蔽するために、係数が小さい ({-1,0,1} のセットに限定されない)
多項式 r を ランダムに選択します。
[
−
p
/
2
、
p
/
2
]
{\displaystyle [-p/2,p/2]}
ボブの公開鍵 h を使用して暗号化されたメッセージ e が計算されます。
e
=
r
⋅
h
+
メートル
(
モッド
q
)
{\displaystyle {\textbf {e}}={\textbf {r}}\cdot {\textbf {h}}+{\textbf {m}}{\pmod {q}}}
この暗号文はアリスのメッセージを隠し、ボブに安全に送信できます。
例 : アリスが多項式で表せるメッセージを送信したいとします。
メートル
=
−
1
+
バツ
3
−
バツ
4
−
バツ
8
+
バツ
9
+
バツ
10
{\displaystyle {\textbf {m}}=-1+X^{3}-X^{4}-X^{8}+X^{9}+X^{10}}
そしてランダムに選ばれた「盲検値」は次のように表される。
r
=
−
1
+
バツ
2
+
バツ
3
+
バツ
4
−
バツ
5
−
バツ
7
{\displaystyle {\textbf {r}}=-1+X^{2}+X^{3}+X^{4}-X^{5}-X^{7}}
ボブへの暗号化されたメッセージを表す
暗号文 eは次のようになります。
e
=
r
⋅
h
+
メートル
(
モッド
32
)
=
14
+
11
バツ
+
26
バツ
2
+
24
バツ
3
+
14
バツ
4
+
16
バツ
5
+
30
バツ
6
+
7
バツ
7
+
25
バツ
8
+
6
バツ
9
+
19
バツ
10
(
モッド
32
)
{\displaystyle {\textbf {e}}={\textbf {r}}\cdot {\textbf {h}}+{\textbf {m}}{\pmod {32}}=14+11X+26X^{2}+24X^{3}+14X^{4}+16X^{5}+30X^{6}+7X^{7}+25X^{8}+6X^{9}+19X^{10}{\pmod {32}}}
復号化
r を 知っている人なら誰でも e - rh を 評価することで メッセージ m を 計算できます。したがって、 rはアリスによって明らかにされてはいけません。公開されている情報に加えて、ボブは自分の秘密鍵も知っています 。m を 取得する方法は次のとおりです 。まず、暗号化されたメッセージ e と秘密鍵 fの一部を掛け合わせます。
a
=
f
⋅
e
(
mod
q
)
{\displaystyle {\textbf {a}}={\textbf {f}}\cdot {\textbf {e}}{\pmod {q}}}
多項式を書き直すと、この方程式は実際には次の計算を表します。
a
=
f
⋅
e
(
mod
q
)
{\displaystyle {\textbf {a}}={\textbf {f}}\cdot {\textbf {e}}{\pmod {q}}}
a
=
f
⋅
(
r
⋅
h
+
m
)
(
mod
q
)
{\displaystyle {\textbf {a}}={\textbf {f}}\cdot ({\textbf {r}}\cdot {\textbf {h}}+{\textbf {m}}){\pmod {q}}}
a
=
f
⋅
(
r
⋅
p
f
q
⋅
g
+
m
)
(
mod
q
)
{\displaystyle {\textbf {a}}={\textbf {f}}\cdot ({\textbf {r}}\cdot p{\textbf {f}}_{q}\cdot {\textbf {g}}+{\textbf {m}}){\pmod {q}}}
a
=
p
r
⋅
g
+
f
⋅
m
(
mod
q
)
{\displaystyle {\textbf {a}}=p{\textbf {r}}\cdot {\textbf {g}}+{\textbf {f}}\cdot {\textbf {m}}{\pmod {q}}}
a の係数を 0 から q – 1 の間で選択する代わりに、係数は [- q /2, q /2] の区間で選択されます。これは、アリスがメッセージ m の座標を区間 [- p /2, p /2] で選択するため、元のメッセージが正しく復元されないのを防ぐためです 。これは、 多項式 r 、 g 、 f 、 m と素数 pの係数がすべて q に比べて小さいため、 のすべての係数 がすでに区間 [- q /2, q /2] 内にあることを意味します。これは、 q を法として縮小する間、すべての係数が変更されず、元のメッセージが正しく復元される可能性があること
を意味します。
p
r
⋅
g
+
f
⋅
m
{\displaystyle \ p{\textbf {r}}\cdot {\textbf {g}}+{\textbf {f}}\cdot {\textbf {m}}}
次のステップは、 p を法として a を計算することです 。
b
=
a
(
mod
p
)
=
f
⋅
m
(
mod
p
)
{\displaystyle {\textbf {b}}={\textbf {a}}{\pmod {p}}={\textbf {f}}\cdot {\textbf {m}}{\pmod {p}}}
なぜなら 。
p
r
⋅
g
(
mod
p
)
=
0
{\displaystyle \ p{\textbf {r}}\cdot {\textbf {g}}{\pmod {p}}=0}
b を知っている ボブは、秘密鍵のもう一方の部分を使って 、 b と
(
f
p
)
{\displaystyle \ \left({\textbf {f}}_{p}\right)}
f
p
{\displaystyle \ {\textbf {f}}_{p}}
c
=
f
p
⋅
b
=
f
p
⋅
f
⋅
m
(
mod
p
)
{\displaystyle {\textbf {c}}={\textbf {f}}_{p}\cdot {\textbf {b}}={\textbf {f}}_{p}\cdot {\textbf {f}}\cdot {\textbf {m}}{\pmod {p}}}
c
=
m
(
mod
p
)
{\displaystyle {\textbf {c}}={\textbf {m}}{\pmod {p}}}
なぜなら、そのプロパティは に必要だったからです 。
f
⋅
f
p
=
1
(
mod
p
)
{\displaystyle \ {\textbf {f}}\cdot {\textbf {f}}_{p}=1{\pmod {p}}}
f
p
{\displaystyle \ {\textbf {f}}_{p}}
例 : アリスからボブへの暗号化されたメッセージ eは 多項式 fで乗算されます。
a
=
f
⋅
e
(
mod
32
)
=
3
−
7
X
−
10
X
2
−
11
X
3
+
10
X
4
+
7
X
5
+
6
X
6
+
7
X
7
+
5
X
8
−
3
X
9
−
7
X
10
(
mod
32
)
,
{\displaystyle {\textbf {a}}={\textbf {f}}\cdot {\textbf {e}}{\pmod {32}}=3-7X-10X^{2}-11X^{3}+10X^{4}+7X^{5}+6X^{6}+7X^{7}+5X^{8}-3X^{9}-7X^{10}{\pmod {32}},}
ここでボブは、元のメッセージが正しく復元されないのを防ぐために、多項式a の係数として区間[0, q – 1]ではなく 区間[- q /2, q /2]を使用します。
pを 法とする a の係数を小さくすると 、
b
=
a
(
mod
3
)
=
−
X
−
X
2
+
X
3
+
X
4
+
X
5
+
X
7
−
X
8
−
X
10
(
mod
3
)
{\displaystyle {\textbf {b}}={\textbf {a}}{\pmod {3}}=-X-X^{2}+X^{3}+X^{4}+X^{5}+X^{7}-X^{8}-X^{10}{\pmod {3}}}
これは に等しい 。
b
=
f
⋅
m
(
mod
3
)
{\displaystyle \ {\textbf {b}}={\textbf {f}}\cdot {\textbf {m}}{\pmod {3}}}
最後のステップでは、その結果を ボブの秘密鍵から乗算して、元のメッセージ mを生成します。
f
p
{\displaystyle \ {\textbf {f}}_{p}}
c
=
f
p
⋅
b
=
f
p
⋅
f
⋅
m
(
mod
3
)
=
m
(
mod
3
)
{\displaystyle {\textbf {c}}={\textbf {f}}_{p}\cdot {\textbf {b}}={\textbf {f}}_{p}\cdot {\textbf {f}}\cdot {\textbf {m}}{\pmod {3}}={\textbf {m}}{\pmod {3}}}
c
=
−
1
+
X
3
−
X
4
−
X
8
+
X
9
+
X
10
{\displaystyle {\textbf {c}}=-1+X^{3}-X^{4}-X^{8}+X^{9}+X^{10}}
それはまさにアリスがボブに送った元のメッセージです。
攻撃
NTRU の提案以来、NTRUEncrypt 公開鍵暗号システムに対する攻撃がいくつか導入されています。ほとんどの攻撃は、メッセージ m を 復元するだけでなく、秘密鍵 f を 見つけて完全に解読することに重点が置かれています。 f に 非ゼロの係数がほとんどないことがわかっている場合、Eve は f のすべての値を試すことで ブルート フォース攻撃を成功させることができます。Eve が f´ が秘密鍵で あるかどうかを知りたい場合は、 を計算するだけです。係数が小さければ秘密鍵 f である可能性があり 、Eve は自分で暗号化したメッセージを復号化することで、 f´が秘密鍵かどうかをテストできます。Eve は g の値を試して、 に小さな値があるかどうかをテストすること もできます 。
f
′
⋅
h
(
mod
q
)
{\displaystyle \ {\textbf {f}}'\cdot {\textbf {h}}{\pmod {q}}}
g
′
⋅
h
−
1
(
mod
q
)
{\displaystyle \ {\textbf {g}}'\cdot {\textbf {h}}^{-1}{\pmod {q}}}
より強力なmeet-in-the-middle 攻撃 を仕掛けることが可能です 。この攻撃では、検索時間を平方根分短縮できます。この攻撃は、 という特性に基づいています 。
f
⋅
h
=
p
g
(
mod
q
)
{\displaystyle \ {\textbf {f}}\cdot {\textbf {h}}=p{\textbf {g}}{\pmod {q}}}
イブは、および が成り立つような性質を持つもの
を 見つけたい
。
f
1
{\displaystyle \ {\textbf {f}}_{1}}
f
2
{\displaystyle \ {\textbf {f}}_{2}}
f
=
f
1
+
f
2
{\displaystyle \ {\textbf {f}}={\textbf {f}}_{1}+{\textbf {f}}_{2}}
(
f
1
+
f
2
)
⋅
h
=
g
(
mod
q
)
{\displaystyle \left({\textbf {f}}_{1}+{\textbf {f}}_{2}\right)\cdot {\textbf {h}}={\textbf {g}}{\pmod {q}}}
f
1
⋅
h
=
g
−
f
2
⋅
h
(
mod
q
)
{\displaystyle {\textbf {f}}_{1}\cdot {\textbf {h}}={\textbf {g}}-{\textbf {f}}_{2}\cdot {\textbf {h}}{\pmod {q}}}
f に d 個の 1 と N - d 個の 0 がある 場合 、Eve は、両方とも長さ (つまり、 f の最小の係数と最大の係数をカバー) があり、1 が d /2 個ある可能 性 の ある と を すべて 作成 し ます。次に、すべてについて を計算し 、 最初 の k 個の座標に基づいてそれらをビンに並べます。その後、すべてについて を計算し、最初の k 個の座標だけでなく、最初の k 個の座標に 1 を加えた場合に何が起こるかに基づいてビンに並べます。次に、 と の 両方を含むビンをチェックして 、プロパティが 保持されるかどうかを確認します。
f
1
{\displaystyle \ {\textbf {f}}_{1}}
f
2
{\displaystyle \ {\textbf {f}}_{2}}
1
2
N
{\displaystyle \ {\frac {1}{2}}N}
f
1
{\displaystyle \ {\textbf {f}}_{1}}
1
2
N
{\displaystyle \ {\frac {1}{2}}N}
f
2
{\displaystyle \ {\textbf {f}}_{2}}
f
1
⋅
h
(
mod
q
)
{\displaystyle {\textbf {f}}_{1}\cdot {\textbf {h}}{\pmod {q}}}
f
1
{\displaystyle \ {\textbf {f}}_{1}}
−
f
2
⋅
h
(
mod
q
)
{\displaystyle \ -{\textbf {f}}_{2}\cdot {\textbf {h}}{\pmod {q}}}
f
1
{\displaystyle \ {\textbf {f}}_{1}}
f
2
{\displaystyle \ {\textbf {f}}_{2}}
f
1
⋅
h
=
g
−
f
2
⋅
h
(
mod
q
)
{\displaystyle \ {\textbf {f}}_{1}\cdot {\textbf {h}}={\textbf {g}}-{\textbf {f}}_{2}\cdot {\textbf {h}}{\pmod {q}}}
格子縮小攻撃は、NTRUEncrypt を破るための最もよく知られた、最も実用的な方法の 1 つです。ある意味では、RSA の係数の因数分解に似ています。格子縮小攻撃に最もよく使用されるアルゴリズムは、 Lenstra-Lenstra-Lovász アルゴリズム です。公開鍵 hには f と g の 両方が含まれているため、 h からこれらを取得できます 。ただし、NTRUEncrypt パラメータが十分に安全に選択されている場合、秘密鍵を見つけるのは非常に困難です。格子縮小攻撃は、格子の次元が大きくなり、最短ベクトルが長くなると難しくなります。
選択 暗号文攻撃も、秘密鍵 f を復元し、完全な破綻をもたらす方法です 。この攻撃では、イブは暗号文から自分のメッセージを取得し、秘密鍵を取得しようとします。この攻撃では、イブはボブと一切やり取りしません。
仕組み :
まず、イブは次のような 暗号文を作成します 。
イブが e を解読する手順を書き留めると (f がわからないため、実際に値を計算せずに)、次のようになります 。
e
=
c
h
+
c
{\displaystyle \ {\textbf {e}}=c{\textbf {h}}+c}
c
=
0
(
mod
p
)
,
c
<
q
2
{\displaystyle \ c=0{\pmod {p}},c<{\frac {q}{2}}}
2
c
>
q
2
{\displaystyle \ 2c>{\frac {q}{2}}}
a
=
f
⋅
e
(
mod
q
)
{\displaystyle \ {\textbf {a}}={\textbf {f}}\cdot {\textbf {e}}{\pmod {q}}}
a
=
f
(
c
h
+
c
)
(
mod
q
)
{\displaystyle {\textbf {a}}={\textbf {f}}\left(c{\textbf {h}}+c\right){\pmod {q}}}
a
=
c
g
+
c
f
(
mod
q
)
{\displaystyle {\textbf {a}}=c{\textbf {g}}+c{\textbf {f}}{\pmod {q}}}
a
=
c
g
+
c
f
−
q
K
{\displaystyle {\textbf {a}}=c{\textbf {g}}+c{\textbf {f}}-qK}
その ような
K
=
∑
k
i
x
i
{\displaystyle \ K=\sum k_{i}x^{i}}
k
i
=
{
1
if the
i
t
h
coefficient of
f
and
g
is
1
−
1
if the
i
t
h
coefficient of
f
and
g
is
−
1
0
Otherwise
{\displaystyle k_{i}={\begin{cases}1\ \ \qquad {\text{if the}}\ i^{th}\ {\text{coefficient of}}\ {\textbf {f}}\ {\text{and}}\ {\textbf {g}}\ {\text{is}}\ 1\\-1\qquad {\text{if the}}\ i^{th}\ {\text{coefficient of}}\ {\textbf {f}}\ {\text{and}}\ {\textbf {g}}\ {\text{is}}\ -1\\0\ \ \qquad {\text{Otherwise}}\end{cases}}}
例 :
f
=
−
1
+
X
+
X
2
−
X
4
+
X
6
+
X
9
−
X
10
{\displaystyle {\textbf {f}}=-1+X+X^{2}-X^{4}+X^{6}+X^{9}-X^{10}}
g
=
−
1
+
X
2
+
X
3
+
X
5
−
X
8
−
X
10
{\displaystyle {\textbf {g}}=-1+X^{2}+X^{3}+X^{5}-X^{8}-X^{10}}
すると Kは になります 。
K
=
−
1
+
X
2
−
X
10
{\displaystyle \ K=-1+X^{2}-X^{10}}
p を 法として a の係数を減らすと 、実際には の係数が減ります 。 を乗算すると 、Eve は次の式を得ます。
c
g
+
c
f
−
q
K
(
mod
p
)
{\displaystyle \ c{\textbf {g}}+c{\textbf {f}}-qK{\pmod {p}}}
f
p
{\displaystyle \ {\textbf {f}}_{p}}
m
=
c
f
p
⋅
g
+
c
f
p
⋅
f
−
q
f
p
⋅
K
(
mod
p
)
{\displaystyle {\textbf {m}}=c{\textbf {f}}_{p}\cdot {\textbf {g}}+c{\textbf {f}}_{p}\cdot {\textbf {f}}-q{\textbf {f}}_{p}\cdot K{\pmod {p}}}
m
=
c
h
+
c
−
q
f
p
⋅
K
(
mod
p
)
{\displaystyle {\textbf {m}}=c{\textbf {h}}+c-q{\textbf {f}}_{p}\cdot K{\pmod {p}}}
cはp の倍数として選択されたため 、 mは 次のように表される。
m
=
−
q
f
p
⋅
K
(
mod
p
)
{\displaystyle {\textbf {m}}=-q{\textbf {f}}_{p}\cdot K{\pmod {p}}}
つまり、 .
f
=
−
q
K
⋅
m
−
1
(
mod
p
)
{\displaystyle \ {\textbf {f}}=-qK\cdot {\textbf {m}}^{-1}{\pmod {p}}}
ここで、 f と g が同じ因数で同じ係数をほとんど持たない 場合、 K にはゼロ以外の係数がほとんどなく、したがって小さくなります。 K の異なる値を試すことで、攻撃者は f を 復元できます。
NTRUEncrypt に従ってメッセージを暗号化および復号化することにより、攻撃者は関数 f が正しい秘密鍵であるかどうかを確認できます。
最新の推奨パラメータ (下記参照) を使用すると、NTRUEncrypt 公開鍵暗号システムはほとんどの攻撃に対して安全です。ただし、パフォーマンスとセキュリティの間では依然として葛藤が続いています。速度を落とさずにセキュリティを向上させることは困難であり、その逆も同様です。
アルゴリズムの有効性を損なうことなくプロセスを高速化する 1 つの方法は、秘密鍵 f にいくつか変更を加えることです。まず、 となるように f を 構築します。ここで、 F は 小さな多項式 (つまり、係数 {-1,0, 1}) です。 このように f を構築することにより、 f は p を 法として可逆に なります 。実際 、 となるため、ボブは実際に逆を計算する必要がなく、復号化の 2 番目の手順を実行する必要もありません。したがって、このように f を 構築すると多くの時間が節約されますが、NTRUEncrypt のセキュリティには影響しません。なぜなら、 f は 見つけやすくなるだけで、 復元するのは依然として困難だからです。この場合、 pによる乗算のため、 f の係数は -1、0、または 1 以外になります 。しかし、ボブは p を乗じて公開鍵 h を 生成し、後で暗号文を p を 法として減算するため、暗号化方法には影響しません。
f
=
1
+
p
F
{\displaystyle \ {\textbf {f}}=1+p{\textbf {F}}}
f
−
1
=
1
(
mod
p
)
{\displaystyle \ {\textbf {f}}^{-1}=1{\pmod {p}}}
f
p
{\displaystyle \ {\textbf {f}}_{p}}
2 番目に、 f は 複数の多項式の積として表すことができ、多項式には多くのゼロ係数があります。この方法により、実行する必要がある計算が少なくなります。
2020年のNTRU NIST提出 [3] によれば、以下のパラメータは安全であると考えられています。
表1: パラメータ
参考文献
^ 「米国特許 6081597 – 公開鍵暗号システムの方法および装置」 – Google Patents 経由。
^ 「Security Innovation の NTRUEncrypt がデータ保護の X9 標準として採用」(プレスリリース)。2011 年 4 月 11 日。
^ "NIST-PQ-Submission-NTRU-20201016.tar.gz".
Jaulmes, E. および Joux, A. NTRU に対する選択暗号文攻撃。コンピュータ サイエンスの講義ノート、第 1880 巻。暗号の進歩に関する第 20 回国際暗号学会議の議事録。pp. 20–35、2000 年。
Jeffrey Hoffstein、Jill Pipher、Joseph H. Silverman。NTRU: リングベースの公開鍵暗号システム。Algorithmic Number Theory (ANTS III)、オレゴン州ポートランド、1998 年 6 月、JP Buhler (編)、Lecture Notes in Computer Science 1423、Springer-Verlag、ベルリン、1998 年、267 ~ 288 ページ。
Howgrave-Graham, N.、Silverman, JH、および Whyte, W.、「NTRU 秘密鍵に対する Meet-In-The-Middle 攻撃」
J. Hoffstein、J. Silverman。NTRU の最適化。公開鍵暗号と計算数論 (ワルシャワ、2000 年 9 月 11 ~ 15 日)、DeGruyter、近日公開予定。
AC Atici、L. Batina、J. Fan、I. Verbauwhede。広範囲にわたるセキュリティのための NTRU の低コスト実装。
外部リンク
NTRU 技術ウェブサイト
IEEE P1363 ホームページ
セキュリティイノベーション(NTRU Cryptosystems, Inc. を買収)
NTRUEncrypt のオープンソース BSD ライセンス実装
NTRUEncrypt のオープンソース GPL v2 ライセンス
NTRUEncrypt ベースの鍵交換を使用した strongSwan オープンソース IPsec ソリューション
- NTRU を利用した暗号スイートを提供する組み込み SSL/TLS ライブラリ (wolfSSL)