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 困難でも条件を加えれば問題が簡単になるので、
多項式時間で解ける場合がある