導入
バーナム暗号とも呼ばれる使い捨てマスクは、1917 年にギルバート バーナムによって発明され、ランダム キーの概念を追加したジョセフ O. モーボルニュによって完成された循環シフト暗号アルゴリズムです。この暗号化は、コーディングとデコーディングの両方においてシンプル、簡単、高速ですが、たとえ実際の実装に大きな困難があったとしても、理論的には解読が不可能な唯一の暗号です。



原理
使い捨てマスク方式を使用した暗号化は、平文メッセージと、次の非常に特殊な特性を持つキーを組み合わせることで構成されます。
- キーは、少なくとも暗号化するメッセージと同じ長さの文字シーケンスである必要があります。
- キーを構成する文字は完全にランダムに選択する必要があります。
- 各キー、つまり「マスク」は 1 回のみ使用する必要があります (そのため、使い捨てマスクという名前が付けられています)。
クリアとキーを組み合わせる方法は簡単なので、以下に説明します。
この暗号化方式の重要な点は、1949 年にクロード シャノンが証明したように、上記の 3 つのルールが厳密に守られている場合、システムは絶対的な理論的セキュリティを提供することです (下記の外部リンクを参照)。
セマンティック セキュリティと呼ばれるこのタイプの不可能性は、使用されている他の暗号化システムの場合とは異なり、計算の困難さに依存しません。言い換えれば、使い捨てマスクシステムは無条件に安全です。
実際には、ショート メッセージを「手作業で」処理する次の例に示すように、暗号化方法は複雑ではありません。コンピューティングを使用してデータをバイナリ形式で処理すると、非常に簡単になります (次の段落を参照)。
手動による暗号化と復号化
使い捨てマスク方式を使用した手動暗号化は、特にチェ ゲバラがフィデル カストロと通信するために使用しました (以下の外部リンクを参照)。 5文字のメッセージの場合で説明してみましょう。
選択されたランダム キー、つまり「マスク」が次のとおりであると仮定します。
XMCKL
このキーは、通信を希望する 2 人の間で事前に選択されます。それは彼らだけが知っています。
「HELLO」メッセージを暗号化したいと考えています。これを行うには、各文字に番号(アルファベットのランクなど) を 0 から 25 まで割り当てます。次に、各文字の値をマスク内の対応する値と加算します。最後に、結果が 25 より大きい場合は、26 を減算します (「モジュロ26」として知られる計算)。
7(H) 4(E) 11(L) 11(L) 14(O) メッセージ + 23(X) 12(M) 2(C) 10(K) 11(L) マスク = 30 16 13 21 25 マスク+ メッセージ = 4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) マスク + メッセージ モジュロ 26
受信者が受信するテキストは「EQNVZ」です。
復号化は、マスクを暗号文に追加するのではなく、暗号文から減算することを除いて、同様の方法で実行されます。ここでもオプションで結果に 26 を加算して、0 から 25 までの数値を取得します。
4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) 暗号化メッセージ - 23 (X) 12 (M) 2 (C) 10 (K) 11 (L) マスク = -19 4 11 11 14 暗号化メッセージ - マスク = 7 (H) 4 (E) 11 (L) 11 (L) 14 (O) 暗号化メッセージ - マスク モジュロ 26
最初のメッセージ「HELLO」がはっきりと見えます。
実際のケースでは、スペースや句読点などを含めて 26 文字を超える文字があることに注意してください。
コンピュータによる暗号化と復号化の方法
データがコンピュータ化され、バイナリ形式にされると、この方法は特に単純な計算に削減されるため、実際には非常に高速になります。
暗号化されるプレーンメッセージは、一連のビットとして現れます。キーは、同じ長さの別のビット シーケンスです。
クリア ビットを 1 つずつ処理し、それぞれをキー内の同じランクのビットと組み合わせます。
A をクリアのビット、 B をキーの同じランクのビットと呼びます。
暗号化は、 AとBに対して「XOR」と呼ばれる演算を実行してビットC を計算することで構成されます。これは、次の表で定義されています。この表は、 AとBのすべての可能な値に対して結果の値を示しており、 A ⊕ Bとなります。
| XOR演算 | ||
| もっている | B | A ⊕ B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
したがって、暗号化するには、 C = A ⊕ Bを計算します。結果C はAの暗号です。この操作は、キーの対応するビットを使用して、クリアの各ビットに対して実行されます。
復号化は、単純な演算C ⊕ Bで暗号Cと鍵ビットBを組み合わせることで実行されます。これから示すように、クリアなAが回復されることがわかります。
XOR 演算には次の 2 つのプロパティがあることに注意してください。
- A ⊕ A = 0
- A ⊕ 0 = A
これは、 Aの 2 つの可能な値 (0 または 1) を考慮することで、上の表で簡単に検証できます。
したがって、復号化の計算は次のように書くことができます。
C⊕B =( A⊕B ) ⊕B = A⊕ ( B⊕B ) = A⊕0 = A
明確なAビットを見つけることが可能になります。
XOR 演算の適用は計算が簡単であるため、これらの処理を非常に高速に実行できます。
デジタル署名またはパリティ ビットを付加することで、キーとメッセージの適合性を保証するだけです。
傍受と復号化の試み。
敵が鍵なしでコード化されたメッセージを発見すると、各文字がメッセージのランクである未知のランクだけシフトされたランダムなシーケンスが表示されます。ただし、モジュロによってシフトされる確率はランダムのままです。これは、統計分析を行っても理解できないランダムな意味不明な文章しか得られないテキストを読もうとしていることに等しい。
