Markle-Hellman Knapsack暗号
一般に部分和問題が難しく、超増加列上では簡単であることを用いた公開鍵暗号
部分和問題: 値の組 と値があって、を満たすを求めよ
超増加列: を満たす数列
Knapsack暗号での暗号化
超増加列を秘密鍵、をnbitの平文とする。適当なを持ってきて
公開鍵:
暗号文:
LLLでKnapsack暗号を解く
次元ベクトルとスカラ値が与えられた時、次を満たし、各要素がまたはであるを考える
このようなが存在した時、次式が成り立つ(に注意)
このとき、行列の各行 はそれぞれ という形をしており、1次独立である。
1次独立な個のベクトルはある格子の基底ベクトルとなる(は基底行列)(このときやが格子を張る/構成すると言ったりしそう)。そして、ベクトルはという、基底の線型結合で表されるので、である。
ここで(なぜならの各要素はまたはだから)であることを思い出すと、はの短いベクトルだということがわかる。の短いベクトルであるなら、の短い基底を求めるアルゴリズムであるLLLで求められるのではないか。
というわけで、をLLLにかけて新しい基底を得る。これもを構成するが、各ベクトルのノルムは小さくなっている。のベクトルのうちのいずれかがとなっていることを、祈る
knapsackへの適用
, で同じ様にやるとが出てくる
補足
の要素が0または1のみからなる、って結構大胆な仮定だと思いませんか? 実はそうでもなくてナップザック暗号の場合は必ず0か1です。それ以外の部分和問題ではそうはなりませんが……