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

公開鍵暗号3: ナップザック暗号

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