マークル・ヘルマン・ナップサック暗号システムは、初期の公開鍵暗号システムの1つでした。 1978年にラルフ・マークルとマーティン・ヘルマンによって発表されました。1984年にアディ・シャミアによって多項式時間攻撃が発表されたため、現在ではこの暗号システムは安全ではないと考えられています。[ 1 ] : 465 [ 2 ] : 190
公開鍵暗号の概念は、1976 年にWhitfield Diffieと Martin Hellmanによって導入されました。[ 3 ]当時、彼らは「トラップドア一方向関数」という一般的な概念を提案しました。これは、秘密の「トラップドア情報」がなければ逆関数を計算することが計算上不可能な関数です。しかし、彼らはまだそのような関数の実用的な例を見つけていません。その後数年間で、他の研究者によって、 1977 年のRSAや 1978 年の Merkle-Hellmanなど、いくつかの具体的な公開鍵暗号システムが提案されました。 [ 4 ]
Merkle–Hellmanは公開鍵暗号方式であり、暗号化には公開鍵、復号には秘密鍵の2つの鍵を使用します。これは部分和問題(ナップサック問題の特殊なケース)に基づいています。[ 5 ]問題は次のとおりです。整数の集合が与えられたとき、整数サブセットを見つけるつまり、一般的に、この問題はNP完全であることが知られています。しかし、が超増加集合であるということは、集合の各要素が、それより小さい集合のすべての数の合計よりも大きいことを意味します。この問題は「簡単」で、単純な貪欲アルゴリズムで多項式時間で解決できます。
マークル・ヘルマン暗号では、メッセージの復号には一見「難しい」ナップサック問題を解く必要がある。秘密鍵には、増加し続ける数値のリストが含まれている。公開鍵には、増加しない数値のリストが含まれています。これは実際には「偽装」バージョンです秘密鍵には、難しいナップサック問題を変換するために使用できる「トラップドア」情報も含まれています。簡単なナップサック問題に。
RSAなどの他の公開鍵暗号システムとは異なり、Merkle-Hellmanの2つの鍵は交換できません。秘密鍵は暗号化に使用できません。したがって、Merkle-Hellmanは暗号署名による認証に直接使用することはできませんが、Shamirは署名に使用できる変種を発表しました。[ 6 ]
公開鍵は秘密鍵は。
させてになる-ビットで構成されるビットメッセージ、 と最上位ビットを選択してください。そのためにはゼロ以外であり、それらを足し合わせます。同様に、計算します。
暗号文は。
暗号文を解読する、次の部分集合を見つけなければなりませんつまり、我々は、問題を部分集合を見つける問題に変換することによってこれを行う。その問題は、以下の理由により多項式時間で解決できます。超増加している。
この単純な貪欲アルゴリズムは、超増加数列の部分集合を見つけます。つまり、多項式時間で:
8ビットの数値を暗号化するための鍵を作成するには、8つの値からなるランダムな超増加シーケンスを作成します。
これらの合計は 706 なので、より大きな値を選択してください。:
選ぶ互いに素である:
公開鍵を構築する各要素を乗算することでによるモジュロ:
したがって。
8ビットメッセージを各ビットを対応する数値で乗算します。そして結果を追加する:
0 * 295 + 1 * 592 + 1 * 301 + 0 * 14 + 0 * 28 + 0 * 353 + 0 * 120 + 1 * 236 = 1129
暗号文1129です。
1129 を復号するには、まず拡張ユークリッドアルゴリズムを使用して、次のモジュラー逆数を見つけます。モジュール:
計算する。
貪欲アルゴリズムを使用して、372 を以下の合計に分解します。値:
したがって、インデックスのリストは次のとおりです。メッセージは次のように計算できます。
1984年、アディ・シャミアは、秘密鍵を使用せずに多項式時間で暗号化されたメッセージを復号できる、マークル・ヘルマン暗号システムへの攻撃を発表した。[ 7 ]この攻撃は公開鍵を解析する。そして、2つの数字を検索しますそしてそのためこれは超増加数列です。攻撃によって見つかったペアは等しくない可能性があります秘密鍵では、しかしそのペアと同様に、難しいナップサック問題を変換するために使用できます。超増加数列を用いることで、この問題を簡単なものに変換する。この攻撃は公開鍵のみを利用し、暗号化されたメッセージへのアクセスは不要である。
シャミアによるマークル・ヘルマン暗号システムへの攻撃は、公開鍵の数値をランダムにシャッフルした場合でも多項式時間で実行できる。このランダムシャッフルは通常、暗号システムの説明には含まれていないが、より原始的な攻撃に対して有効な場合がある。
2025年、Biは部分的な超増加数列を同等の秘密鍵として復元する改良アルゴリズムを発表した。特別に構築された小次元格子にLLLアルゴリズムを適用することで、標準的なラップトップ上で1秒未満で平文を復元した。[ 8 ]