暗号コード「ソリティア」

ストリーム暗号化SOLlTAlRE(PASYANS)のアルゴリズムは、1999年にB. Schneierによって提案されました。暗号は非常に美しく、なぜ誰もそれを照らしていないのかわかりません。 スティーブンソンのクリプトノミコンを読んだ人はいませんか? 実際、本を読んだ後、私はこの奇跡を乗り越えることができません。



理論的には、これは出力フィードバック付きのストリーム暗号です。 スレッド化から、元のシーケンスの各文字は暗号化された文字に対応することになります。 たとえば、ブロック暗号がまだわからない場合は、ブロック暗号化がブロック(数バイトまたは文字)で行われます。 さらに、テキストのブロックといわゆるガンマ(ランダムなシークレットシーケンス)には多くの種類の結合があります。 この場合、出力フィードバックが使用されます。 各ガンマシンボルは、ガンマの状態を変更します。







暗号化



暗号化は非常に簡単です。 2つのシーケンスがあります。

  1. PCを使用しないでください
  2. AD JEN MWD OI


1-暗号化するテキスト。 2-ガンマ(以下の世代について)。 必要なのは、テキストを数字に変換し、テキストを5文字に分割することです(これは暗号エチケットです)。 文字数が少ない場合は、xなどの特定の記号で埋められます。

  1. 4 | 15 | 14 | 15 | 20 21 | 19 | 5 | 16 | 3
  2. 1 | 4 | 10 | 5 | 14 13 | 23 | 4 | 15 | 9


次は追加です。 26より大きい数値を取得する場合、26を減算する必要があります例4 + 1 = 5、20 + 14 = 8。

最終シーケンス:5 | 19 | 24 | 20 | 8 8 | 16 | 9 | 5 | 12。 文字に変換します: ESXTH HPIEL



解読


メッセージの復号化も非常に簡単です。 まったく同じガンマが生成され、暗号文からガンマが差し引かれます。 結果がゼロ未満の数値である場合、26が単純に追加されます(例5-1 = 4、8-14 = 20)。

  1. 5 | 19 | 24 | 20 | 8 8 | 16 | 9 | 5 | 12
  2. 1 | 4 | 10 | 5 | 14 13 | 23 | 4 | 15 | 9


合計4 | 15 | 14 | 15 | 20 21 | 19 | 5 | 16 | 3-> PCを使用しない



ガンマ生成



この暗号を非常に興味深いものにしているのは、アルゴリズムのこの部分です。 カードの完全なデッキには、52枚のカードと2枚のジョーカーが必要です。 カードには番号を付ける必要があります。できれば、念頭に置いてください(NSAに秘密を知らせたくない)。 エースからキングまで1から13まで、スーツでの順序は次のとおりです。クラブ、タンバリン、ワーム、スペード。 最後の2つの数字は、53-A、最年少のジョーカー、54-Bのシニアジョーカーと区別される必要があります。

まったく同じシャッフルされる2つのデッキが必要です。 1つのデッキがあり、友人は別のデッキを持ち、メッセージを解読します。

わかりやすくするために、デッキを28枚に減らします。 最初にこれらがこの順序で配置されたと仮定します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28



1ステップ。 ジュニアジョーカー1カードをデッキに移動します。 最後であることが判明した場合は、1枚のカードの後に​​置きます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 27



2ステップ。 シニアジョーカー2の位置をデッキの下に移動します。 最後の場合は、2枚のカードの後に​​、最後から2枚の場合は、最初のカードの後に​​配置します。

1 28 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27



3ステップ。 2つのジョーカーで区切られた、デッキの2つの極端な部分を交換します。 この場合、番号1はデッキの最後に移動します。

28 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 1



4ステップ。 最後の数字を見てください。 デッキの最初から非常に多くのカードを数えて、最後のカードの前に置きます。 最後のカードは、アルゴリズムの可逆性のために意図的に残されています。

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1



5ステップ。 1つの数字を見てください。 その後、非常に多くのカードを数え、この番号を覚えておいてください。 この場合、4です。これは、キーシーケンスの最初の番号です。 この手順では、デッキは変更されません。 次に、手順1〜5をn回繰り返します。 ここで、nは暗号文の文字数です。



ローカリゼーション



「ソリティア」のキリル文字版についても考えました。 すべてがかなり難しくないことが判明しました。 文字theが除外されると、32文字がロシア語のままになります。 +2ジョーカー、合計34枚のカード。 6アプリのない通常のデッキ。



実装



暗号の本質は、その不可視性です。 さて、自分よりも見た目が悪いものを判断してください:カードのデッキまたはラップトップ上の暗号化プログラム? ただし、大きなテキストを暗号化および復号化するには時間がかかります。 私は実装の全体の束を見つけました。 しかし、その中には私にとって馴染みのあるPHPはありませんでした。 とても退屈な夜で、小さなアプリケーションが誕生しました(下のリンク)。 アプリケーションの基礎は、クラス「ソリティア」です。 いくつかの必要なメソッドを実装します。





格付け



このようなアルゴリズムは、ブルートフォース(ブルートフォース)によってのみ解読できます。 さまざまな分析方法は実際には適用できません。 アルゴリズムの弱点は、キー(デッキ)にあります。 彼らがデッキをキャプチャした場合、彼らはそれを解読できます。

著者自身がいくつかの方法を提供しています。

1.毎回新しいキーを使用します。 特定の配置からキーを取得します(新聞の橋の列、株価の評価の数字など)。 主なものはそれらに同意することです。

2.ガンマを取得するアルゴリズムを少し変更します。 その後、デッキを取り外すと、NSAはまだ何も理解しません。



参照資料



アルゴリズムの著者による公式記事: リンク

暗号化および復号化アプリケーション: リンク

PHPクラスリファレンス: リンク



All Articles