公開鍵暗号3: ナップザック暗号
TRANSCRIPT
実験数学 3(大阪大学理学部数学科 3年・4年)
第 3回: ナップザック暗号
鈴木 譲
大阪大学
2013年 4月 25日
ナップザック問題 KNAPSACK
事例: (a0, a1 · · · , ar ) ∈ Nr+1, r ≥ 1質問: a0 = a1z1 + · · ·+ arzr となる (z1, · · · , zr ) ∈ {0, 1}r が存在するか。
KNAPSACKはNP完全である
3SAT ∝ KNAPSACK
証明: 3SATが真であれば、
ui + ui = 1 , i = 1, · · · , n
cj ,1 + cj ,2 + cj ,3 + vj ,1 + vj ,2 = 3 , j = 1, · · · ,m
(cj = (cj ,1, cj ,2, cj ,3)は、u1, · · · , un, u1, · · · , unからの 3個)
ナップザック問題 KNAPSACK
変数 (ui , ui )ni=1, (vj ,1, vj ,2)
mj=1を (zj)
2m+2nj=1 、
係数 (左辺は 0,1、右辺は 1,3)を (bi ,j)1≤i≤m+n,0≤j≤2m+2nとし、
2m+2n∑j=1
bi ,jzj = bi ,0 , i = 1, · · · ,m + n (1)
の各行を 10i−1倍して加えると、
m+n∑i=1
2m+2n∑j=1
10i−1bi ,jzj =m+n∑i=1
10i−1bi ,0 (2)
逆に、(2)が解 (zj)2m+2nj=1 をもてば、(1)のm + n個の方程式を満
足し、3SATで充足する (ui , ui )ni=1, (vj ,1, vj ,2)
mj=1を与える
超増加列とナップザック問題
a1, · · · , an ∈ Nが超増加列ai >
∑i−1j=1 aj
超増加列を仮定すると、ナップザック問題
n∑i=1
aimi = c
は、c ′ := c として、i = n, n − 1, · · · , 1について、{c ′ > ai =⇒ mi = 0c ′ ≥ ai =⇒ mi = 1, c ′ := c ′ − ai
を繰り返して、多項式時間で解ける
ナップザック暗号 (Merkle-Hellman, 1978)
a1, · · · , an ∈ N: 超増加列q ≥
∑ni=1 ai
r ∈ N, (r , q) = 1bi = rai mod q, i = 1, · · · , n
秘密鍵 a = (a1, · · · , an), q, r公開鍵 b = (b1, · · · , bn)
平文m = (m1, · · · ,mn) ∈ {0, 1}nの暗号化暗号化 c :=
∑ni=1mibi (暗号文)
復号化 cr−1 ≡∑n
i=1miai mod q(超増加列のナップザック問題)
ナップザック暗号の解読 (Shamir, 1982)
b = (b1, · · · , bn)が超増加列でなくても、a′i = r ′bi mod q′が超増加列となる q′, r ′を見出す方法に成功した (詳細略)
cr ′ =n∑
i=1
mia′i
より、m = (m1, · · · ,mn)が計算できる。
KNAPSACKがNP困難問題でも、暗号が解読された
b = (b1, · · · , bn)は超増加列でないが、特種な条件を仮定している
NP困難でも条件を加えれば問題が簡単になるので、多項式時間で解ける場合がある