少子社会日本第1章 日本の少子化は、いま 家族格差と地域格差を伴った少子化 今起こっている少子化状況を個々の地域や家族の視点からみてみると、それが地域格差と家族格差
格子基底縮小とその応用 -...
Transcript of 格子基底縮小とその応用 -...
格子基底縮小とその応用
清水秀夫
(株)東芝 研究開発センター
2002/1/26 JANT
•LLLアルゴリズムの紹介•最新の研究動向/成果 (トピックの紹介)
内容
•1982年 A.K.Lenstra, H.W.Lenstra,Jr., L.Lovasz•格子基底縮小(lattice basis reduce)アルゴリズムの一種•格子に含まれる最短ベクトルを求める問題の近似解を 求めるアルゴリズム(基底変換アルゴリズム)。•近似の精度と実行時間(多項式時間)が証明されている。•現実には理論で示されている結果よりかなりよく動く ことが実験により示されている。•基本的なツールであり、暗号分野における様々な応用が 示されている。•優秀なフリーソフトNTL (http://www.shoup.net/NTL/)
LLLアルゴリズムの概要
“Factoring Polynomials with rational coefficients,” Math.Ann.,261,513-534, 1982
格子(lattice)定義
を基底という。を格子という。
が線形独立のとき
},,,{)(,
,,,
21
2211
21
n
inn
nn
bbbBzbzbzbzL
bbb
K
L
K
=
∈+++=∈
ZR
•同じ格子を張る別の基底が無限に存在する•基本行操作した規定も同じ格子を張る
•同じ格子を張る基底の は同じ値を取る。
)det()( BLd =
nGLUUBLBL ∈= ),()(
)'()()'()( BdBdBLBL =⇒=
性質
=
=
1211
,1001
21 BB
格子の例
−
−=
1211
1211
1001
1)()()()(
21
21
===
BdBdBLBL
)( 2Bd
格子に関する問題
SVP(shortest vector problem)
CVP(closest vector problem)
SBP(smallest basis problem
格子が与えられて(基底ベクトルが与えられて)、格子に含まれる最短ベクトルを求める問題
格子と任意のベクトルxが与えられて格子に含まれるxに最も近いベクトルを求める問題
格子が与えられて最も「小さな」基底ベクトルを求める問題※「小さな」の意味は問題によって変わる
nLdnL /11 )( )( ≤λ
縮小基底
Gram-Schmidtの直交化過程
),(),(
**
*
1
1
**
jj
jiij
i
jjijii
bbbb
bbb
=
−= ∑−
=
µ
µ
は内積),( ⋅⋅
縮小基底(LLL-reduced basis)
nibb
nij
iiii
ij
≤<
−≥
≤<≤≤
−− 1 ,43
1 ,21
2*1
21
2* µ
µ (条件1)
(条件2)
縮小基底の性質
( )
)(2)()4(
)(2)3(
,,, ,1for
,,,max2,,,,)2(
2,)1(
4/)1(
1
/14/)1(1
21
212/)1(
21
2/)1(1
LdbLd
Ldbxxxtj
xxxbLxxx
xbLx
nni
n
i
nnt
tn
jt
n
−
=
−
−
−
≤∏≤
≤
≤≤
≤∈∀
≤∈∀
は線形独立K
KK
縮小基底を見出す多項式時間アルゴリズムが存在する
LLLアルゴリズム(Lenstra, Lenstra, Lovasz, 1982)
LLLアルゴリズムの概要
入力 :出力:縮小された
nbbb ,,, 21 K
nbbb ,,, 21 K
へ行くとしてを入れ替え、と
なら終了する
へ行くとしてを満足するならが条件
正するを、満足するように修を条件
を満足すると条件は条件
)1(1)4()(
)1(1)2()3(1)2(
21,,)1(
1
11
−=≥
+=
−
−
kkbbnk
kkbb
bb
kk
k
k
kK
•停止することは証明されている(LLL 1982)•計算量は ( ) 24 max,log ibBBnO =
L
L
L
L
07.149161.72359.1579
68.977
44173283489350087483181927644667881328404821105
4
3
2
1
====
=
bbbb
B
LLLアルゴリズムの例
L
L
54.862)(287.512)(
6918837099)(
4/14/)14(
4/1
=
=
=
− BdBdBd
L
L
L
L
84.764'09.500'77.473'61.433'
734702995191723173387618614231226931422917188
'
4
3
2
1
====
−−−−−
−−−
=
bbbb
B
NTLを使ったコーディング例
#include <NTL/LLL.h>
main(){
mat_ZZ b;
cin >> b;LLL_FP(b);cout << b << "¥n";
}
[[105 821 404 328][881 667 644 927][181 483 87 500][893 834 732 441]
]
プログラム 入力ファイル
出力ファイル
[[88 -171 -229 -314][269 312 -142 186][76 -338 -317 172][519 -299 470 -73]]※http://www.shoup.net/ntl/
windows/unixのフリーソフト(GPL) C++, GMP対応
整数行列の宣言
浮動小数点LLL入力
出力
格子(LLL)に関係する研究
格子に関する研究
•格子に含まれる最短ベクトルの長さの上界/下界•Geometries of numbersと呼ばれる分野の数学
格子に関する問題(SVP, CVP, SBP)の計算量に関する研究
格子基底縮小アルゴリズムの改良に関する研究
•C.P.Schnorrによる一連の研究(Blockwise Korkine-Zolotarev アルゴリズム, segment LLL)•Kannanのアルゴリズム
格子基底縮小アルゴリズムの応用(→後半の話題)
・暗号の解読等
•lattice暗号(Ajtai-Dwork暗号)
計算量理論の成果
• SVPはNP困難。(Ajtai, STOC 1998)•近似SVP (大きさf(n)λ1以内のベクトルを見つける)について、近似<21/2もNP困難。(Micciancio, FOCS 1998)•近似(n/O(log n))1/2はNP困難ではない。(Goldreich, Goldwasser, STOC 1998)•SVP(CVP)を多項式近似できるアルゴリズムは知られていない。•∞ノルムに関する結果、SVP∞はNP困難(P. van Emde Boas, 1981)
•Ajtaiの成果。Average caseとworst caseが一致する格子に関する問題(nc-SVP)の発見(1996)
※LLLは近似=2(n-1)/2の多項式時間アルゴリズム
長い間の未解決問題
Ajtaiの結果のインパクト
nc-SVPに関してworst caseからaverage caseへのreductionを証明した。
•Pの外のNPでは初めて•たとえworst caseで困難でもaverage caseで困難かどうか分からないという問題を解決した。
•真の証明可能安全性への道を開いた。
Ajtai-Dwork暗号 (STOC 1997)
•理論的な暗号•漸近的な結果なのでパラメータが小さい時は解ける(Nguyen, Stern, C98)n≧32 →公開鍵≧20Mバイト (impractical)
格子基底縮小アルゴリズムの改良
LLL
近似精度の改良
速度の向上
2^O(n(loglog n)2/log n) Schnorr(1987)実行時間O(2^n) Kannan(STOC 1983)
serial BKZ Schnorr(1994, C95) segment LLL Schnorr(2002, Calc01)parallel Wetzel (ANTS III 1998) 他ad hoc 整数版、浮動小数点版、deep insertion(Cohen)
segment LLL
•C.P.Schnorrら(Calc01)•計算量•1000次元以上にも適用可能 (LLLは100次元程度まで?)•1000次元で10時間程度(800MHz PC)
)log( 3 nnO
LLLの応用
•暗号への攻撃 ナップザック暗号への攻撃 lattice暗号への攻撃 他•法多項式の求解 一変数、多変数 応用•素因数分解への応用•代数的整数論•その他
LLLの応用(その1)
•多項式の因数分解 (LLL 82)•ナップザック暗号に対する低密度攻撃 (Brickell C83)•Mental Poker(Shamir他79)への攻撃 (Coppersmith C84)•Low exponent RSAへの攻撃 (Hastad C85, SIAM J.Comp 88)•ナップザック暗号に対する低密度攻撃 (Lagarias他 JACM85)•ESIGNへの攻撃 (Vallee他 E88)•e乗根近似問題への適用 (Vallee他 AAEEC-6 88)•truncated congruence generatorの解読 (Frieze他 SIAM J.Comp88)•有理数暗号(Isselhorst E89)への攻撃 (Stern他 E90)•modular knapsack(Niemi E90)への攻撃 (Chee C91,Joux他 A91)•低密度攻撃の改良 (Coster他 E91)•Diophantine近似を使った素因数分解 (Schnorr E91)•小林-田村-藤波暗号の解読 (清水, 林 93)•knapsack hash(Damgard C89)への攻撃 (Joux E94)•Number Field Sieveへの応用 (Montgomery Math.Comp.94)
•Chor-Rivest暗号(Chor他 IT88)への攻撃 (清水, 林 94)•Chor-Rivest暗号(Chor他 IT88)への攻撃 (Schnorr他 E95)•1変数法多項式の求解 (Coppersmith E96, JC97)•多変数法多項式の求解 (Coppersmith E96, JC97)•Diffie-Hellmanのハードコアビット (Boneh他 C96)•Hastad boundの改良 (清水 96)•一方向性関数の提案 (Buchmann他 C97)•ISO/IEC9796-3署名への攻撃 (Misarsky C97)•Qu-Vanstone暗号への攻撃 (Nguyen他 C97)•NTRU暗号(Hoffstein他C96)への攻撃 (Coppersmith他 E97)•Coppersmithアルゴリズムの改良 (Howgrave-Graham CCS97)•超楕円暗号のJacob和を求める (Buhler他 97)•Number Field Sieveへの応用 (Nguyen, ANTS III 98)•Ajtai-Dwork暗号の解析 (Nguyen他 C98)
LLLの応用(その2)
•多変数多項式の求解 (Julta E98)•伊藤,岡本,満保暗号(SAC97)の解読 (Nguyen他 SAC98)•N=prqの素因数分解 (Boneh他 C99)•GGH暗号(Goldreich他C97)の解読 (Nguyen C99)•Hidden subset sum問題への適用 (Nguyen他 C99)•d<N0.292のRSAの解読 (Boneh他 E99)•笠原-村上暗号への攻撃 (清水 ISEC99)•Noisy Polynomialの補間 (Bleichenbacher他 E00)•素因数分解への応用 (Boneh STOC00)•two-third method (Vallee他Math.Comp.??)
LLLの応用(その3)
LLL線形方程式の求解 ディオファンタス近似
Brickellの低密度攻撃
Lagariasらの低密度攻撃
Coppersmithの法多項式の求解
Howgrave-Grahamの法多項式の求解
DHのハードコアビット
直交格子
Lattice暗号への攻撃
Hastad, Valleeの法多項式の求解
Hastad攻撃d<N0.292のRSAの解読N=prqの素因数分解
ナップザック暗号の解読
LLLの応用とテクニック
Hidden subset sum その他
ナップザック暗号の解読 (1)
ナップザック暗号
ナップザック暗号の解読(公開鍵と暗号文から平文を求める)
整数a1,a2,…,anとCが与えられて a1x1+・・・+ anxn = Cを満足する解x1,x2,…,xn∈{0,1}を見出す。
公開鍵:整数a1,a2,…,an
平文:m1,…,mn∈{0,1}暗号化:a1m1+・・・+ anmn = C
※100~200次元くらいまで解ける
ナップザック暗号の解読 (2)
•a1x1+・・・+ anxn = Cの解を含む格子を考える•LLLアルゴリズムで短いベクトルを求める
b1 = (1, 0,…, 0, a1)b2 = (0, 1,…, 0, a2)・・・
bn = (0, 0,…, 1, an)bn+1= (0, 0,…, 0, C)
x1b1+・・・+xnbn+xn+1bn+1 = (x1,…, xn, a1x1+・・・+anxn+xn+1C)なので最終要素= 0 かつ xn+1 = -1のときx1,…, xnはa1x1+・・・+ anxn = Cを満足する。
問題となるのは(x1,…, xn) ∈{0, 1}nとなるかどうか
ナップザック暗号の解読 (3)
密度ρ= n / (max ai) = 平文空間の広さ/暗号文空間の広さ
ρ< 1
平文空間{0,1}n
暗号文空間
ρ> 1
平文空間{0,1}n
暗号文空間
贋
SVPオラクルを仮定するとρ< 0.6463まで解ける(Lagarias他)。CVPオラクルを仮定するとρ< 0.9408まで解ける(Coster他)。
複数の平文のうちの一つだけが真の平文
NTRUへの攻撃(1)
NTRUの特徴•J.Hoffstein, J.Pipher, J.H.Silverman, 1996•多項式環上の公開鍵暗号•暗号化/復号が比較的高速•現在知られている最も効率的な攻撃は lattice reduction(Coppersmith,Shamir 1997)•http://www.ntru.com/ (http://www.ntru.co.jp/)
NTRUへの攻撃(2)
)1,(mod )3(1,mod1,mod )2(
,1),( )1(
1/][,
1/][,,,
1
11
−=
−−
>=
−∈
−∈∈
−
−−
n
nn
np
nq
xqgpfhxqfxpf
pqqpxxgf
xxhqpn
が存在すると
秘密情報
公開情報
Z
ZZ鍵生成
例
)1,32(mod30182022 1615416695
1/][1
1/][132,3,11
1110987
654321
113
108532
113
109642
−+++
+++++++==
−∈−−+++−=
−∈−++−++−=
===
−
xxxxxxxxxxxgpfh
xxxxxxxgxxxxxxxxf
qpn
ZZ
NTRUへの攻撃(3)
暗号化
)1,(mod
1/][
1/][
1/][
−+=
−∈∈
−∈
−∈
n
nq
nq
np
xqrhme
xxre
xxr
xxm
暗号化
暗号文
乱数
平文
Z
Z
Z
例
)1,32(mod19625730161424261114
11
111098765
432
75432
109843
−+++++
+++++=+=
−−+++−=
++−−+−=
xxxxxxxxxxxrhme
xxxxxrxxxxxm
復号
)1,(mod)(mod
)1,(mod
1 −=
=−=
− n
n
xpbfcpab
xqfea
NTRUへの攻撃(3)
)1,(mod)(mod
)1,(mod)()(
11
1
−===
=+==−+=+=+==
−−
−
n
n
xpmfmfbfcpfmprgfmab
xqprgfmgrpfmfrhmffea
例
109843111
10875432
1098765432
1098765432
1)1,3(mod)3(mod
7357671011107319625730161424261114
xxxxxxbfcxxxxxxxxab
xxxxxxxxxxfeaxxxxxxxxxxe
++−−+−=−=
−−++++−−==
−−+++++−−−==
++++++++++=
−
NTRUへの攻撃(4)•Coppersmith,Shamir(EC97)•公開情報 から等価鍵 を求める
• を満足する格子の短いベクトル をLLLアルゴリズムで求める
)1,(mod(,,, 1 −= − nxqgpfhqpn',' gf
)1,(mod1 −=− nxqyhxp λyx,
=
= −−
−
q
hhh
hhhhhh
qIHI
B nn
n
LL
MOMMMOMM
LL
LL
LL
MOMMMOMM
LL
LL
00000
0000000000
00
0000
0201
021
110
λ
λλ
λ
は定数の係数、は )/()(mod1 gfqhphi =− λ
Howgrave-Grahamアルゴリズム(1997)
•法多項式の小さな解(< N1/d)を求める。•Coppersmithアルゴリズムの改良(より小さな基底行列)•x0を解とする方程式を組み合わせて整数上の多項式を作る。•dual lattice(B-t)をshrinkして基底行列を生成
NN X
Nb NXa NXNXb NX a X
f Xe X d X c XXf X e X d X c X
2
2
2
2 3
2 3 4
2 3 4 5
0 0 0 0 00 0 0 0 0
0 0 00 0 0
00
p x x ax bp x x cx dx ex f
( )( )
= + +
= + + + +
2
2 4 3 2
NNNN
2
2
11
11
2
2
p xxp xp xxp x
( )( )
( )( )
1 X X2 X3 X4 X5
b1を係数とする多項式r(x)を解くことにより解を求める。
Xは定数
Howgrave-Grahamアルゴリズムの例
p x x xp x x x x x
X
( ) (mod )( ( ))
= + + ≡
= + + + +=
2
2 4 3 2
14 19 0 3528 234 532 361
2
を解く。
35 0 0 0 0 00 35 2 0 0 0 0
35 19 35 14 2 35 2 0 0 00 35 19 2 35 14 2 35 2 0 0
361 532 2 234 2 28 2 2 00 361 2 532 2 234 2 28 2 2
2
2
2
2 3
2 3 4
2 3 4 5
×
× × × ×
× × × × ×
× × ×
× × × ×
b1=(3, 8×2, -24×22, -8×23, -1×24, 2×25)
LLL
r(x) = 2x5-x4-8x3-24x2+8x+3=0を解いてx=3を求める。
d < N0.292のRSAの解読
ed ≡1 (mod L)(p-1, q-1) = 2とするとL=(p-1)(q-1)/2=(N-p-q+1)/2なのでed+k{(N+1)/2 - (p+q)/2} = 1
k(A+s) ≡1 (mod e)
A= (N+1)/2s =(p+q)/2d=Nδ
D.Boneh, G. Durfee, Cryptanalysis of RSA with Private Key d Less than N0.292 ,CRYPTO’99
e ≒Nとするとs≒e0.5, k≒eδ
kとsを変数とする不定方程式
Wiener(IT90) 連分数を使ってδ< 0.25まで解けるBonehら(C99) LLL(Howgrave-Graham)を使ってδ< 0.292
N=prqの素因数分解
pに近い値Pを知っていたとする。 t=P-pとすると
(P+t)r≡0 (mod pr)
が成立する。f(x)=(P+x)rとおくとtはf(x)≡0 (mod pr)の解になっている。ただし、prは知らないのでprの倍数Nを使ってf(x)≡0 (mod N)を解くことで代用する(Howgrave-Grahamアルゴリズム)。
実際にはPの値は知らないので、Pに関する探索を行う。
r > (log p)1/2のときに既存の方法より速くなる。
その他
•Hidden subset sum problem (C99) ナップザックでaiが秘密。xiとCのペアを元に解読。•Noisy polynomial reduction (Noisy chinise remainder theorem) (E00) 曲線上に乗らない点(ノイズ)も与えられたときに補間する。•超楕円曲線•NFSへの応用 最終段で代数的数の平方根を求める。
Orthogonal lattice technique与えられた格子と直交する格子をLLLで求め、利用するテクニック
•Qu-Vanstone暗号への攻撃 (Nguyen他 C97)•Ajtai-Dwork暗号の解析 (Nguyen他 C98)•伊藤,岡本,満保暗号(SAC97)の解読 (Nguyen他 SAC98)•Hidden subset sum問題への適用 (Nguyen他 C99)•GGH暗号(Goldreich他C97)の解読 (Nguyen C99)
その他
•超楕円暗号のJacob和を求める (Buhler他 97)•NFSの最終段での代数的整数の平方根を求める•最小多項式を求める
代数的整数論関連の応用
two-third method (Vallee他Math.Comp.??)
素因数分解
計算量のboundが証明されている素因数分解アルゴリズムで最速 : L2/3。
まとめ
•LLLアルゴリズムの概要 近似精度と実行時間が証明されている•最近の研究動向 ユニークな研究が増えている。
フリーのLLL(C++) GMP対応 www.shoup.net/NTL/
研究の分野
格子基底縮小アルゴリズム
解きたい問題
格子上の短いベクトルを見つける問題
格子基底
短いベクトル答え
問題解決の手順
問題のmappingHastadCoppersmith
効率的なアルゴリズムLenstra-Lenstra-LovaszSchnorrKorkine-Zolotarev
格子の構成法←
LLLを使った問題解決のフレームワーク
格子基底の性質
・同じ格子を張る別の格子基底が無限に存在する。・基本行操作した基底も同じ格子を張る →ユニモジュラ変換をしても同じ格子を張る。
L(B) = L(UB), U ∈ GLn
・同じ格子を張る基底のd(・)は同じ値を取る。 L(B) = L(B’) → d(B) = d(B’)
基本行操作・ある行に-1を掛ける・ある行の整数倍を別の行に加える。
・行の交換
B =
−−
1 0 0 119770060 1 0 111400730 0 1 127800490 0 0 1899061
B'=− −
− −− −
7 11 16 030 12 3 28
4 36 20 131 20 3 41
U =− −
− − −− − −
7 11 16 130 12 3 139
4 36 20 37131 20 3 58
B’ = UBL(B) = L(B’)det(B) = 1899061, det(B’) = -1899061, det(U) = -1
例
格子基底縮小問題
たくさんある基底の中から、基底ベクトルのユークリッドノルムが短い基底を見つけ出す。
定義は?
B =
−−
1 0 0 119770060 1 0 111400730 0 1 127800490 0 0 1899061
B'=− −
− −− −
7 11 16 030 12 3 28
4 36 20 131 20 3 41
格子基底縮小
|b1| ≒ 119977006|b2| ≒ 11140073|b3| ≒ 12780049|b4| = 1899061
|b’1| ≒ 20.64|b’2| ≒ 42.86|b’3| ≒ 41.39|b’4| ≒ 55.24
例
実際にLLLアルゴリズムで縮小してみた例 d(B)1/4≒37.12
LLLアルゴリズム格子基底を入力して、基本行操作を繰り返してLLL条件を満足する格子基底を出力する多項式時間アルゴリズム
LLLアルゴリズムの計算量算術演算で数えて O n B( log )4 ( max{ })B Bij=
LLLアルゴリズム
LLL条件を満たす格子基底
格子基底
基本行演算の繰り返し
入力と出力は同じ格子を張る基底
LLL条件条件1 | |µij ≤
12
条件2 | | | |* * *b b bi ii i i+ ≥− − −µ 1 12 3
4 12
1≤ < ≤j i n
1 < ≤i n
| | ( )( ) / /b11 4 12≤ −n nd L
∀ ≠ ∈ ≤ −x b x0 212 1 2L n | | | |
∀ ≤ −x x x b x x x1 22 1
12
22 22, , ... , | | max{| | , | | , ... , | | }t j
nt
・・・
ここではb*とかμの
定義は省略する
LLL条件から色々なことが証明できる
for j=1,...,t
・b1の長さとd(L)の関係
・b1の長さと最短ベクトル∈Lの長さの関係
・bjの長さとt番目に短いベクトル∈Lの長さの関係
LLLアルゴリズムの出力を{b1,b2,...,bn}としている
LLLの応用基本型1 (横型)
B
a a aN
N
N
N
n
=
=
ε
ε
1 2
0 0 00 0 0
0 0 0
0
L
L
L
M M M O M
L
aI
ここのところが横に並んでいるので横型
(n+1)次元格子基底Bの張る格子L(B)を考える(εは小さな定数)
ab a
b
== =
( , , , ),mod ( mod , mod , , mod )
| |
a a a NN a N a N a N
n
n
1 2
1 2
K
K
が与えられて、
とする。 が小さくなるような を求める。
α α α αα
同時ディオフンタス近似
εの大きさには何か理論があったはず(^^;
基本型1 (続き)
( , , , , )αε α α αa k N a k N a k Nn n1 1 2 2+ + +K
( )( )( )
( )
ε αa a aN
N
N
kk
k
n
n
1 2
1
2
0 0 00 0 0
0 0 0
L
L
L
M
L
M
×
×
×
×+
L B a k N a k N a k Na N a N a N
n n
n
( ) ( , , , , )( , mod , mod , , mod )
= + + +=
αε α α ααε α α α
1 1 2 2
1 2
K
K
∀ ∈α , , , ,k k kn1 2 K ZL(B)を書き下してみる
BをLLLに入力し、出力B’に対してα=B’11/εとしてαを求める。
| | ( ) ( )/ /( ) / / ( )b14 1 1 4 1 12 2≤ =+ +n n n n nd B N ε
例 a = (122, 133, 58, 203), N=209について|αa mod N|が小さくなるαを見つける (|a|≒277.8)。
B =
1 122 133 58 2030 259 0 0 00 0 259 0 00 0 0 259 00 0 0 0 259
B'=
− − −− −
− − −
− − − −
4 30 14 27 3523 43 49 39 713 32 84 23 49
45 51 28 20 7070 7 14 84 35
| | . ( . )| | . ( . )| | . ( . )| | . ( . )| | . ( . )
bbbbb
1
2
3
4
5
55 4 55 279 7 76 3105 7 104 91035 932115 9 92 3
≒
≒
≒
≒
≒
LLLα
α=-4のとき、(122αmod N, 133αmod N, 58αmod N, 203αmod N)= (30, -14, 27, -35)で長さは55.2。
実際の長さ
簡単のためにε=1でも求まる例題を選んでいる
基本型2 (縦型)
ここのところが縦に並んでいるので縦型
(n+2)次元格子基底Bの張る格子L(B)を考える
a
x
=
+ + + ≡
=
( , , , ), ,(mod )
( , , , )
a a a C Na x a x a x C n
x x x
n
n n
n
1 2
1 1 2 2
1 2
K
L
K
が与えられて、
を満足する
を求める
B
aa
aCN
CNn
t
=
=
1 0 0 00 1 0 0
0 0 1 00 0 0 10 0 0 0
00 10 0
1
2
L
L
M M O M M M
L
L
L
I a
基本型2 (続き)
( , , , , , )( , , , , , ( ) mod )
x x x t a x a x tC kNx x x t a x a x tC N
n n n
n n n
1 2 1 1
1 2 1 1
K L
K L
+ + + += + + +
+
∀ ∈x x x t kn1 2, , , , ,K ZL(B)を書き下してみる。
BをLLLに入力する。b1=(・・・,-1,0)という形ならb1の最初のn個の要素が解。
| | ( )( ) / / ( ) ( ) / / ( )b11 4 1 2 1 4 1 22 2≤ =+ + + +n n n nd B N
( )( )
( )( )( )
1 0 0 00 1 0 0
0 0 1 00 0 0 10 0 0 0
1
2
L
L
M
L
L
L
aa
aCN
n
×
×
×
×
×
xx
xtk
n
1
2
M
を満足する解が存在するなら
解が求まる。
縦型は直接解が求まる
例 12345x1+13333x2+10058x3≡1033 (mod 15432)の小さな解を求める
B =
1 0 0 0 123450 1 0 0 133330 0 1 0 100580 0 0 1 10330 0 0 0 15432
B'=
− − −−
− − −−
−
2 3 5 1 05 0 0 0 33 3 4 3 10 2 4 5 54 5 1 7 4
LLL
b1=(-2, -3, 5, -1, 0)なのでx1=-2, x2=-3, x3=5。検算:12345*(-2)+13333*(-3)+10058*5≡ 1033 (mod 15432)|b1|≒6.25≦d(B)1/n =15432 1/5≒6.88
b1は(・・・,-1,0)という形になっている
(・・・,t,0)という形ならtの逆元を掛けて解を求める
デコレーション(加速法)解が求まる可能性を高めるための技法・拡大(重み付け) 基底行列の列に重み付けすることで出力を制御する
B
aa
an
=
λλ
λ
1
2
L M L
L B X( ) ( , , )= L Lλ
・平行移動 あるベクトルδに近いベクトルを求める。
B 01δ
右下の1は重み付けする方が性能がよい
あらかじめ解の近似値が分かっている場合や、正の解のみを求めたいときに使う。
現実的にはデコレーションしないと解が求まらないことが多い
例 12345x1+13333x2+10058x3≡14996 (mod 15432)を解く
B =
1 0 0 0 123450 1 0 0 133330 0 1 0 100580 0 0 149960 0 0 0 15432
2
2
2
1 2
2
λλλ
λ λλ
B'=
− −−
− −− − − −
0 5 1 1 15 0 0 0 32 0 5 5 01 1 4 2 6
1 1 7 8 4
B'=
−−− − −
− −−
3 5 17 0 018 14 2 0 06 11 2 0 30
6 16 1 30 017 17 5 30 0
λ1=λ2=1 λ1=λ2=30
(・・・,-λ1 ,0)という形になっている
重み付けをしないと解けない例
失敗 成功
実はこれも解検算:12345*6+13333*16-10058≡14996 (mod 15432)
B
Naac
a N
=
= −
0 0 01 0 00 1 00 0 1
2
3
11
βββ
β mod
縦型の変形
∀ ∈= + +
x x tL B a x a x tc N x x t
2 3
2 2 3 3 2 3
, ,( ) ( ( ) mod , , , )
Zβ
a x a x a x c N x a a x a x c N1 1 2 2 3 3 1 11
2 2 3 3+ + ≡ → ≡ − − +−(mod ) ( ) mod
・別の基底行列でも同じことができる。・次元数が少ないほどよい。
Hastadアルゴリズム(1988)d次のモニックなモジュラ方程式p(x)≡0 (mod N)の解x0<N2/d(d+1)を求めるアルゴリズム(p(x) = pdxd+pd-1xd-1+・・・+p2x2+p1x+p0)
x X
B
X p X p Xp pX N
X N
XNN
dd
dd
d
d
0
11 1 0
1
0 0 0 00 0 0 0
0 0 0 00 0 0 0
<
=
−−
−
ε L
L
L
M M M O M M
L
L
重み付き横型
係数をモジュラ変換して、整数上でも成立する方程式に変換する
p x n p x( ) (mod ) ' ( )0 00 0≡ → =モジュラ変換
Hastadアルゴリズムの例p x x x( ) (mod )= + + ≡2 1233 805 0 1399 を解く
B
X XX N
XNN
=
1 1233 8050 0 00 0 00 0 0
2
2
ε = =1 10, X
LLL
8 8 71 5558 8 71 8449 9 95 250
0 0 0
2
2
2
X XX XX X
N
−
− − −−
α
8x2+71x-555=0を解いてx=5が答え
Coppersmithアルゴリズム(1996)d次のモニックなモジュラ方程式p(x)≡0 (mod N)の解x0<N1/dを
求めるアルゴリズム
x X
B
pX p
X pX p
N
dd
dd
0
01
1
11
1 0 0 00 0 0
0 0 00 0 00 0 0 0
<
=
−
− −−
−
L
L
M M O M M M
L
L
L
( )
スタート:Bからx0が求まるかもしれない
駄目
p(x)以外にx0を解に持つ方程式を連立
させて、解が求まる可能性を高める。
xp(x), x2p(x),...とか、p(x)2,xp(x)2,x2p(x)2,...とか、p(x)3, xp(x)3,...
p z n z Xi ii
d
ii
=∑ ≡ ≈
00(mod ),
ziに関する制約が弱すぎる(重みをつけただけな)ので(1,x0,x0
2,...,x0d-1,x0
d)のような解は求まらない。
Coppersmithアルゴリズム
B
p xp p xpN
NN
N
t t t t
=
X 2 2
2
2
0 0 00 0 00 0 00 0 0
0
=
−
−
−
−
−
1 0 0 0 0 0 0 00 0 0 0 00 0 0 0 0 10 0 0 0 0 0 10 0 0 0 0 0 0 10 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0
1
2
3
4
5
2
2
b fX a b e f
X a d eX c d
X cX
NN
NN
p x x ax bp x x cx dx ex f
( )( )
= + +
= + + + +
2
2 4 3 2
p xp p2 xp2
縦型の応用
(・・・,0,0,0,0)が解候補
(・・・,0,0,0,0)が解候補
LLLのまとめ
・格子と格子基底の紹介・格子基底縮小(LLL)の紹介・応用-基本形(縦型と横型)・モジュラ方程式の解を求める
中身をあまり知らなくてもツールとして使える!!