※ Typo、記号や添字の誤り、そもそも証明の誤りがありましたら、Twitter (@Xornet_)へリプライかDM(誰でも送れます)を飛ばすか、このブログのリポジトリでIssueを立てたりプルリクを送ったりしてください。
読者が格子についての知識をある程度有している前提で書いてます。下記のサイトや書籍を読んでいると読みやすいと思います。
格子に関する記法 §
次のように記号を定義する
- L: n次元格子
- vol(L): 格子Lの体積
- {b1,…,bn}: Lの基底
- この記事では行ベクトルで表し、それを縦に並べた行列BをLの基底行列と呼ぶ
- bi∗ (1≤i≤n): biのGSOベクトル (グラムシュミットの直交化を行ったベクトル)
- 任意の1≤i≤nに対して⟨b1,…,bi⟩=⟨b1∗,…,bi∗⟩が成り立つ
- ここで⟨b1,…,bi⟩:={∑j=1irjbj∣rj∈R}とする
- μi,j (1≤j≤i≤n): GSO係数 (便宜上、μi,i=1とする)
- bi=∑j=1iμi,jbj∗が成り立つ
- πi (1≤i≤n): ⟨b1,…,bi−1⟩の直交補空間に対する直交射影 (i=1の時は便宜上恒等写像とする)
- つまりπi(∑j=1najbj∗)=∑j=inajbj∗が成り立ち、特にπi(bi)=πi(∑j=1iμi,jbj∗)=bj∗が成り立つ
- λi(L) (1≤i≤n): i次逐次最小
- 本記事ではi=1の時のみ登場し、λ1(L)はLの非零な最短ベクトルの長さとなる
- なお1≤i≤nに対して、ノルムがi次逐次最小となる格子ベクトルが存在することは知られており、したがって格子における非零な最短ベクトルは存在する(参考文献1: 1.4節)
定義: HKZ簡約基底 §
次を満たす格子Lの基底{b1,…,bn}を「HKZ簡約基底」と呼ぶ
- サイズ簡約されている
- 任意の1≤i≤nに対して∥bi∗∥=λ1(πi(L))を満たす
2の条件に登場するπi(L)は{πi(x)∣x∈L}を表す。実はこれは射影格子と呼ばれるn−i+1次元格子になり、{πi(bi),…,πi(bn)}を基底として持つ。
したがって、2の条件は各基底biのGSOベクトルbi∗のノルムが、射影格子πi(L)の第1次逐次最小である、言い換えればbi∗がπi(L)の非零な最短ベクトルであるということを要請している。
特にi=1に関して、b1∗=b1であり、更にπ1は恒等写像であるから、∥b1∥=λ1(L)となって、b1がLの非零な最短ベクトルであることがわかる。
構成1: HKZ簡約基底の構成 §
次のようにしてn本のLの格子ベクトルの組{b1,…,bn}を構成する。
- ∥b1∥=λ1(L)となる格子ベクトルb1を用意する
- 射影格子π2(L)の非零な最短ベクトルをb2′とするとb2′=π2(b2)となるb2∈Lが存在するはずのでこれをb2とする
- 以下同様にして、iが小さい方から順にπi(L)の非零な最短ベクトルbi′に対してbi′=πi(bi)となるbi∈Lを選んで基底とする
この手順の3より、bi∗=πi(bi)=bi′となるので、bi′がπi(L)の非零な最短ベクトルであることから、このようにして得られた基底は明らかにHKZ簡約基底の2番目の条件を満たす。
一方で、1番目の条件であるサイズ簡約されている事を満たすとは限らない。しかし、条件2が基底の「GSOベクトル」に依存することからGSOベクトルを変更しない簡約方法であるサイズ簡約(参考文献1: 2.2節, 参考文献2: 6節を参照)を実行しても条件2は崩れない。よって、このようにして得られた基底に対してサイズ簡約を実行すればHKZ簡約基底の2条件は満たされる。
このような構成はどのような格子に対しても行うことが出来るためHKZ簡約基底の2条件を満たす「n本の格子ベクトルの組」は任意の格子に対して存在する。問題は、これが本当にLの基底であるかということである。
このように構成したベクトルの集合はLのベクトルからなるためLの部分格子を生成するが、L自体を生成することは自明ではない。よって以下の補題1, 補題2を用いてLを生成する事を示す。
補題1 §
任意のn次元格子Lの任意の非零な最短ベクトルvに対して、Lの基底の中でvを含むものが存在する。
∵)
格子の次元に関する数学的帰納法で証明する。証明の方針としては、k次元格子の基底から1つベクトルを取り除いた基底によって張られるk−1次元格子は元の格子の部分格子であり、元の格子の非零な最短ベクトルが含まれているなら、その部分格子でもまた非零な最短ベクトルとなる事を利用する。
n=1の場合においては、明らかに補題が成り立つ。なぜなら、xだけによって張られる1次元格子の非零な最短ベクトルは±xの2つであり、{x}も{−x}もこの1次元格子の基底になるからである。
n=k−1 (k≥2)において補題が成り立つと仮定してn=kの場合を考える。つまり、任意のk−1次元格子とその非零な最短ベクトルvに対して、vを基底ベクトルとして含む基底が存在する。
k次元格子Lの非零な最短ベクトルをvとおく。また、Lの基底として{b1,…,bk}を用意し、基底行列をBとおいてv=(v1,…,vk)Bと係数を定義する。
もしvi=0となるような係数が存在する場合、biをBから取り除いた基底Cを考える。元の基底が格子Lを張っていたことから、CはLの部分格子を張る基底となる。このk−1次元部分格子をMとおく。v∈Mであり、更にMがLの部分格子でvがLの非零な最短ベクトルであったことから、vはMの非零な最短ベクトルでもある。
帰納法の仮定から任意のk−1次元格子には任意の非零な最短ベクトルを基底ベクトルとして含むような基底が存在する。よって、Mの基底の中にはそのようなもの、つまりvを含むものが存在することから、これをC′とおくと、C′とCは当然同じ格子を張る。
したがって、C′に上記で除去したbiを加えた基底をCとおけば、CはBと同じ格子を生成する。Cの構成方法から、Cは明らかにv、つまりLの非零な最短ベクトルを基底に含むことから、この場合は補題が成り立ち、数学的帰納法を用いて任意の次元において補題が成り立つ。
v(の係数)がこれを満たさない場合を考える。
g:=gcd(v1,v2),w1=v1/g,w2=v2/gと定義すると、aw1+bw2=1となるような整数a,bが存在する。これを用いると次の行列Uはユニモジュラ行列になる。
U=⎝⎛w1−bw2a11⋱1⎠⎞
よって、BとUBは共に格子Lを生成し、UBは次のような基底行列となる。
UB=⎝⎛w1b1+w2b2b2′b3⋮bk⎠⎞
ここで、b2′:=−bb1+ab2とおいた。
このLの基底UBに対するvの係数は、w1,w2の定義から(g,0,v3,…,vk)となる(つまりv=(g,0,v3,…,vk)UBが成り立つ)。よって、係数に0が含まれるようなLの基底を用意出来たことから、この場合もまた、最初の場合と同様にして補題が成り立つ事を示す事が出来る。 □
補題2の提示と証明の前に、次のように射影格子に関する記号を定義する。
1≤k≤nに対して、射影格子L(k):=πk(L)を考えると、この格子はn−k+1次元格子であり、基底として{πk(bk),…,πk(bn)}が存在する。以後、わかりやすさのためにこの基底を{b1(k),…,bn−k+1(k)}とおく。つまり次が成り立つ。
bi(k):=πk(bk+i−1)
これに限らず、(k)を上付き添字で用いる時はL(k)に関する数学的対象を表す。
特に、1≤i≤n−k+1に対して、⟨b1(k),…,bi−1(k)⟩の直交補空間への直交射影をπi(k)で表す。通常の場合と同様に、i=1の時は恒等写像とする。
また、以降のために必要な命題として参考文献1の1.2節より定理1.2.5を引用する。
(定理1.2.5) n次元格子Lの基底{b1,…,bn}と整数2≤l≤nに対して次が成り立つ。
vol(πl(L))=vol(L(b1,…,bl−1))vol(L)
特にl=2の場合を系として以後用いる
系1 §
n次元格子Lの基底{b1,…,bn}に対して次が成り立つ。
vol(π2(L))=vol(L(b1))vol(L)=∥b1∥vol(L)
補題2 §
構成1によって作られた格子ベクトルの組{b1,…,bn}が生成する格子をMとする。この時、vol(M)=vol(L)が成り立つ。
∵)
(※ nに関する数学的帰納法で多分示すことが出来ますが、面倒なのでやってないです)
補題1より、Lの基底C:={c1,…,cn}の中で、c1=b1となるものが存在する。系1をLの基底をCとして、l=2で適用すると次が成り立つ。なお、当然のことだが直交射影π2は基底Cに依存している。
vol(π2(L))=vol(L(c1))vol(L)=∥c1∥vol(L)=∥b1∥vol(L)=∥b1∗∥vol(L)
射影格子L(2)についても同様の事を考える。この格子は先程定義したc1に依存するが、c1=b1であるから、b2∗はL(2)の非零な最短ベクトルとなり、更にこれを基底ベクトルとして含むものが存在することが補題1から言える。つまりこの基底をC(2):={c1(2),…,cn−1(2)}とおくと、c1(2)=b2∗が成り立つ。よって系1をL(2)の基底をC(2)として適用すると次が成り立つ。
vol(π2(2)(L(2)))=vol(L(c1(2)))vol(L(2))=∥c1(2)∥vol(L(2))=∥b2∗∥vol(L(2))
また、L(2)が{c1(2),…,cn−1(2)}={b2∗,…,cn−1(2)}で生成されることから、π2(2)(L(2))は⟨b1⟩の直交補空間への直交射影のLの像を⟨b2∗⟩の直交補空間への直交射影に入れた像になる。したがって、結局⟨b1,b2∗⟩=⟨b1,b2⟩の直交補空間への直交射影をとっているため、これに対する格子Lの像がL(3)になり前述の式は次のように書き直すことが出来る。
vol(L(3))=∥b2∗∥vol(L(2))
これと同様の事を添え字を増やしながら行っていくと、L(k)は⟨b1∗,…,bk−1∗⟩の直交補空間への直交射影のLの像となり、更に構成1と補題1、系1から、任意の2≤k≤nに対して次が成り立つ。
vol(L(k))=∥bk−1∗∥vol(L(k−1))
よって、k=nに対して次が成り立つ。
vol(L(n))=∥bn−1∗∥vol(L(n−1))=∥bn−1∗∥∥bn−2∗∥vol(L(n−2))=⋯=∏i=1n−1∥bi∗∥vol(L(1))
ここで、vol(L(n))は⟨b1∗,…,bn−1∗⟩の直交補空間への直交射影のLの像となることから、構成1よりvol(L(n))=vol(⟨bn∗⟩)=∥bn∗∥が成り立つ。また、L(1)=Lであるから上式に代入、移項して次が成り立つ。
i=1∏n∥bi∗∥=vol(L)
左辺はvol(M)に等しいことから、vol(M)=vol(L)が成り立つ。 □
定理: HKZ簡約基底の存在 §
任意の格子Lに対して構成1で構成した基底はLのHKZ簡約基底である。
∵)
構成1で述べたように、HKZ簡約基底の2条件は満たしているので後は「Lの基底」、つまりLを生成する事を言えば良い。
Lの任意の部分格子Mに対して、ρ:=vol(L)vol(M)とおくと、次が成り立つことが知られている(参考文献1: 1.1節)。
ρL⊂M⊂L
よってρ=1であれば、L=Mとなる。
構成1によって作られた基底{b1,…,bn}によって生成される格子MはLの部分格子である。また、補題2よりvol(M)=vol(L)が成り立つ。
以上より、ρ=vol(L)vol(M)=1であることからL=Mが成り立つため、この基底はLを生成する。 □
参考文献 §
- 格子暗号解読のための数学的基礎 | 近代科学社
- LLLを理解するぞ - みつみつみつですか?