Merkle-Hellmanナップサック暗号

Merkle-Hellmanナップサック暗号とは、1978年にラルフ・マークルとマーティン・ヘルマンが発表したナップサック問題（正確には部分和問題）を利用した公開鍵暗号の一つである。
この暗号方式は、秘匿用途の方式であり、認証（デジタル署名など）を目的としたものではない。
公開鍵暗号の提案は1976年であり、比較的初期に提案された方式である。
1982年に解読方法が発見されたため、現在は使用されていない。
近年になり、鍵の生成に量子コンピュータを用いることにより、量子コンピュータでも解けない暗号として機能することが示され、ふたたび注目を浴びている。
概要.
Merkle-Hellmanナップサック暗号は部分和問題（ナップサック問題の特別なインスタンス）に基づいている。
部分和問題は、整数の列（"a"1...,"a"n）と目標となる整数（"t"）を入力とし、formula_1となる部分集合formula_2を求める問題（"a""i" で"t" を合成する問題）である。
一般の部分和問題は、NP完全であることが知られている。しかし、超増加列と呼ばれる数列を用いた場合には、簡単に解けることが分かっている。Merkle-Hellmanナップサック暗号は、合成が簡単にできる超増加列を、見かけ上は合成がむずかしい整数列に変換し、また逆に戻せることに基づいている。超増加列とは、各項がそれまでの全ての項の和よりも大きい数列のことである。
この暗号方式は発表時から安全性に疑問をもたれていたが、1982年にアディ・シャミア (Adi Shamir) によって一般的解読方法が発見された。これは部分和問題自体を解いたのではなく、超増加列を変換した数列を用いた場合には、どのように変換しても元の超増加という性質が残り、容易に解けることを示したものである。
シャミアの解読以降、多くのナップサック暗号の変形版が提案されているが、そのほとんどが解読可能であることが判明している。
用語については、暗号の用語および暗号理論の用語を参照のこと。
暗号方式.
鍵生成.
"n" ビットの平文を暗号化するために、まず"n" 個の数からなる超増加列
を生成する（"n" はセキュリティパラメータであり、100ビット以上の数にすることが推奨されている）。
次に、整数"q" を "q"  > formula_3
を満たすようにランダムに選ぶ。
更に、整数 "r" を gcd("r","q") = 1 となるようにランダムに選ぶ。
整数"q" は、"q" の剰余を取ったときに暗号文が一意に定まるように選ばなければならない。そうしないと二つの平文から同じ暗号文が生成されることになり、復号できなくなる。また"r" は"q" と互いに素な整数でなければならない。これは復号時に"r" の逆元を使うためである。
とし、数列
を得る。
公開鍵はβ、秘密鍵は("w", "q", "r" )である。
暗号化.
"n" ビットの平文
を暗号化する。ここで、各 α"i" は第"i" ビットを表す (α"i" ∈{0,1})。
を計算し、"c" を暗号文とする。
復号.
暗号文"c" を受け取った後、
"c' " = "c" "r" -1 mod "q" を計算する。ここで、"r" -1 は、(mod "q") の整数の合同における "r" の逆元である。
すると、"c' " は"w" の部分和になっている。"w" は超増加列なので、{1,2...,n} の部分集合"S" を次のようにして簡単に求めることができる。
具体的なアルゴリズムは、次のとおりになる。
安全性.
Merkle-Hellmanナップサック暗号は、シャミアにより多項式時間で解読できることが示されている。
シャミアの攻撃法.
シャミアの攻撃法では、公開鍵β = (β1, β2, ..., β"n")から、超増加列"w' " = ("w' ""1", "w' ""2", ..., "w' ""n") を求める。正しい超増加列"w" とシャミアの攻撃法で求めた"w' " は異なることが多いが、正しく解読できる。詳しくは参考文献のAdi Shamir, "A Polynomial Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem"を参照のこと。
低密度攻撃(LDA).
密度が低い場合、高確率で格子の最短ベクトルを求める問題 (最短ベクトル問題, Shortest Vector Problem, SVP) へ帰着できる。最短ベクトル問題は、ユークリッド距離ではRandomized帰着の元でNP困難な問題であることが知られている。また、格子の次元が低い場合、LLLアルゴリズム(Lenstra, Lenstra, Lovasz, 1982)を用いて解けることが多い。