平文を知って、使用されている暗号化スキームを見つける方法は? [閉まっている]

StackOverflow https://stackoverflow.com/questions/231592

  •  04-07-2019
  •  | 
  •  

質問

DBFテーブルには、プロジェクトの過去の開発者によって暗号化されたままのchar()フィールドがいくつかあります。

しかし、私はいくつかのレコードの解読の平文結果を知っています。元のデータを復号化する関数/アルゴリズム/スキームを決定するにはどうすればよいですか? サンプルフィールドは次のとおりです。

cryptextの場合:

b5 01 02 c1 e3 0d 0a

平文は次のようにする必要があります:

3543921 or 3.543.921

そしてcryptextの場合:

41 c3 c5 07 17 0d 0a

プレーンテキストは

1851154 or 1.851.154

0d 0a は単なるパディングだと思います。 win-1252エンコーディングで収集されたデータからのものでした(問題があればdunno)

編集:好奇心と学習のためです。平文がわからないタプルのフィールドの値を復元するために使用される暗号化(バイナリデータですが、単純なもののようです)を理解できるようにしたいです。

編集2:いくつかのサンプルを追加しました。

役に立ちましたか?

解決

一般的な場合、簡単な方法はありません。この質問は一般的すぎます。これらのプレーン+暗号化された文字列を投稿してください。

編集:

  • 学習のために、この記事を読むことができます:ウィキペディアの暗号
  • 暗号化が単純であると本当に信じる場合-バイト(またはワード)レベルのXORかどうかを確認します-次の擬似コードを参照してください

    for (i in originalString) {
    newString[i] = originalString[i] ^ CRYPT_BYTE;
    }
    

他のヒント

置換暗号(頻度分析を試す)や不適切に適用されたXOR(キーの再利用、既知の平文と2つの暗号文のXORを試して、結果が平文のXORかどうかを確認するなど、単純なものではないと仮定します;または、暗号文自体をいくつかのバイト数だけシフトしたXORを試してみてください)、おそらく未知のキー(ほとんどの場合ASCII文字で構成されている)を持つ既知のストリーム/ブロック暗号であると想定する必要があります。暗号文と平文のペアのサンプルが十分に大きい場合、最初の数文字/バイトが同じ平文に、最初の文字/バイトが同じ暗号文があるかどうかを確認することから始めることができます。また、ブロック暗号かストリーム暗号か、およびフィードバックメカニズムが関与しているかどうかも確認できます。パディングは、存在する場合、ストリーム暗号ではなくブロック暗号であることを示唆する場合もあります。

どれだけの労力を費やしたいかによっては、どこかに到達できるはずです。 cryptanalysis 、特に暗号解析の方法

このタスクの容易さを決定するものは次のとおりです。

  • 使用される暗号化方法の質。 RSAやAESなどの最近のよく知られた方法であれば、おそらく運が悪いでしょう
  • 暗号文と平文はどれだけ持っているか-多いほど良い
  • データの種類-単純なテキストが最も簡単で、ランダムデータが最も難しい
  • データがすべて同じキーで暗号化されているかどうか、または複数のキーが使用されているかどうか

成功への鍵は落胆しないでください。暗号解読の歴史は、解読できないと思われるコードが解読されたという話でいっぱいです。おそらく最も有名なのは、第二次世界大戦のエニグママシンであり、そのクラックは現代のコンピューターの開発に貢献しました。

あなたが提供したものからいくつかのことがわかります:

  • 暗号化テキストの長さはそれぞれ7バイトで、ブロック暗号化されることはほとんどありません(ブロック暗号化は一度にブロックを暗号化するため、その長さはブロックサイズの倍数になり、56ビットのブロックサイズはかなりありそうにない*)。
  • 暗号文の長さと平文の文字数はそれぞれ同じであるため、ストリーム暗号が適用されたasciiとして数字を簡単にエンコードできます。
  • プレーンテキスト(asciiとして)と暗号文を一緒にXORすると、それぞれに対して1つの繰り返されるオクテットも同じ暗号ストリームも与えられないため、簡単な暗号ではありません。また、暗号テキストバイトの一部がIVでない限り、両方に同じキーを使用する単純なストリーム暗号ではありません。
  • 最後の2バイトは暗号文では同一ですが、平文ではありません。これは偶然かもしれませんが、あなたが提案するようにパディングを示すこともできます。パディングの場合、他のエンコードメカニズムを使用する必要があります。

すべての暗号化された値が整数であるか、または他の値も可能かどうかを知っていますか?

対応するキーなしで使用されるアルゴリズムを決定することは、完全に有用ではない場合があります。

テキストが十分に小さく、プレーンテキストがある場合、なぜそれを理解したいのですか?もちろん、好奇心のため以外ですか?

確定的な判断方法はありませんが、暗号文にヒントが含まれていることがよくあります。それは本当に暗号化されていますか?または、単にハッシュ化され、(おそらく)塩漬けされています。

ハッシュ化されている場合は、事前にハッシュ化された辞書がすでにオンラインになっているため、ラッキーになり、一致するペア(辞書にある単語があれば)をグーグルで検索できます。

暗号文の例があれば、それを投稿することができます。誰かが暗号形式を認識するかもしれません...

XORは簡単に解読できるスキームであるという誤解だと思います。暗号化の理論的に最も強力な形式は、1回限りのパッドです。プレーンテキストをxorするか、あらかじめ決められたビットの単純な文字列です...

有限XOR、一方...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top