web-dev-qa-db-ja.com

暗号化アルゴリズムをリバースエンジニアリングするにはどうすればよいですか?

私は次のようにテキストを暗号化するアプリケーションを作成しました。

  1. 入力テキストを取得する

  2. テキストを逆にする

  3. 16進数に変換する

  4. キーとのXOR

  5. Base64エンコード

さて、私は自分で暗号化/エンコードをあまりしなかったので、私の質問はばかげているように聞こえるかもしれませんが、上記のアルゴリズムのコンテンツを含むファイルを取得し、このアルゴリズムについて知りませんでした。どのようにしてテキストを「破り」始めるのでしょうか。従うべきガイドライン、原則、規則はありますか?

私の質問はこれらの5つのステップに結び付けられていません、それは純粋な例でした。

別の例として、テキストA751CD9E1F99を取り上げます。これが何を意味するのかをどのように調査し始めますか?

17

暗号解読者は、暗号を解読するために、収集できるすべての情報を使用します。攻撃は、既知のものに応じて、いくつかのカテゴリに分類されます。最も難しいものから最も簡単なものまで、主な攻撃のいくつかは次のとおりです。

  • 暗号文のみ:これは最も難しい攻撃です。アナリストは、できるだけ多くの暗号化されたメッセージを収集しようとし、それらを分析して、シンボルの頻度のパターンまたはバイアスを探します。ただし、優れた最新の暗号では、パターンはありません。これは、適切に使用された適切な暗号では実行不可能です。
  • 既知の平文:ある暗号文に対応する平文を持つことは、新しい暗号文から未知の平文を回復するための大きな一歩です。既知の入力と出力に対してアルゴリズムに関する仮説をテストできるため、ここから「リバースエンジニアリング」が実際に始まります。第二次世界大戦では、暗号解読者は、既知の平文攻撃を悪用するために、「ベビーベッド」(敵のメッセージに表示される可能性が高い単語)の広範なリストを作成するために一生懸命働きました。たとえば、特定の日の気象条件や戦闘の地名などは、暗号化されたメッセージで本部に報告される可能性がありました。
  • 選択平文:さらに良いのは、暗号解読者が敵をだまして暗号解読者が作成したメッセージを暗号化できる場合です。戦時中は、暗号化されて暗号解読者がコードを解読するのに役立つことを期待して、偽の情報が敵に漏洩することがありました。
  • 適応選択平文:これは、既知の平文に対する一種の反復アプローチです。暗号解読者は、選択した平文をシステムによって繰り返し暗号化することができ、結果を見て次の試みを調整します。

今日、コードを解読する可能性のある方法は、システムの欠陥によるものです。たとえば、不十分なキー管理が使用され、キーが盗まれたり推測されたりする可能性があります。その他の場合、「サイドチャネル」攻撃が使用される可能性があります。たとえば、特定の暗号化操作にかかる時間を注意深く測定することにより、攻撃はキーの特定のビットまたはバイトがゼロであると推測できる可能性があり、何らかのアルゴリズムを介した高速パスを引き起こします。

スペクトルの「アルミホイルハット」の端の近くには、コンピューティング機器からの電波放射を 傍受する方法があります。 これにより、リモートエージェントは何であるかを「見る」ことができます。モニターに表示されます。この種の盗聴を阻止するために特別に設計されたフォントもあります。

17
erickson

基本的に、この種の暗号化は解読が容易です。 base64エンコーディングは、認識しやすいものです。 (Base64では一般的な64文字のみを使用します。)次は、元のXORキーを見つける手順です。少し難しいですが、検出できるアルゴリズムがいくつかあります。これらのキーは、暗号化されたデータが十分にある場合に使用できます。単純なテキストでは不十分ですが、16進文字列になる必要があることがわかっている場合は、作業がはるかに簡単になります。その後、他の手順を逆にします。これらもすべて同じです。簡単です。

可能であれば、ハッカーが暗号化の前に元の値を知っていれば、ハッキングできるはずです。このような場合、XOR文字列が完全にわかっていない可能性がありますが、提供された文字列と同じくらい短い文字列で、少なくとも完全な暗号化ルーチンを検出できます。

では、A751CD9E1F99 ... 12文字を復号化してみましょう。数文字しか使用していないように見えるので、16進文字列のように見えます。オリジナルは6文字でなければなりません。値は0x51から0xCDの範囲になり、base64エンコーディングに使用するには大きすぎます。また、ほとんどの値は0x7Fを超えているため、エンコードを行ったことを示しています。辞書攻撃は、使用されているXORキーについて、すでにある程度の洞察を提供している可能性があります。ここで、XOR 6文字の単語がたくさんある6つの16進値は、どちらが辞書内の別の単語を返すかを確認します。有効な単語を返すように見えるのは、元のキーをXOR)使用したキーである可能性があります。再度使用して、可能なキーのセットをさらに小さなセットにフィルタリングします。最近のシステムでは、このような辞書攻撃は1日以内に結果を返す可能性があります。

約50年前、この暗号化スキームは非常に強力でした。今日では、それを解読しようとすることに興味がある人なら誰でも、1日以内にそれが解読されることを期待してください。

私は暗号化の解読の専門家ではありませんが、どの暗号化方法が弱すぎて使用できないかを十分に知っています。約10年前、私はあなたのような複雑なXORメカニズムを使用して、暗号化されたファイルにパスワードを保存するプロジェクトに取り組みました。その後、顧客はセキュリティをチェックすることを決定し、専門家にパスワードだけを調査してもらいました彼は1つのユーザー名とパスワードしか知らず、そのユーザーアカウントには管理者権限がありませんでしたが、1時間以内にそのセキュリティを破り、管理者アカウントに関する情報を読み、その情報を使用して自分が何でもできるようにするのに十分な情報でした。私の会社は彼に1週間無料のビールを与えました... :-)したがって、10年前、専門家はたった1時間しか必要としませんでした。今日では、コンピューターがはるかに強力であるという理由だけで、比較的簡単にさらに複雑なアルゴリズムを解読しています。この種の暗号化を使用する必要がある場合は、暗号化を使用しないこともできます。ハッカーにとってはそれほど重要ではありません。

7
Wim ten Brink

復号化する方法を知っていれば、アルゴリズムを推測してみることができます。一部の入力に対して「A751CD9E1F99」になる多くのアルゴリズムを作成できます。

これで、使用可能な入力/出力が多数ある場合、たとえば、入力を少しだけ変更して、出力がどうなるかを確認できます。優れた暗号化アルゴリズムは通常、小さな入力の変更に対して大きな出力の変更をもたらします。

5
Samuel Carrijo

私はあなたが読むことから始めるべきだと思います コードブック 。あなたが求めているのは、暗号化方式を解読する方法であり、それはあなたにそれらがどのように機能するかについての出発点を与えるでしょう。

5
kemiller2002

ゴムホース暗号解読 非常に効果的です。

4

それよりも大きなテキストベースと、暗号が特定の言語/ドメインからのものであることをある程度理解する必要があります。次に、その言語/ドメイン内の単語の頻度に基づいて、テキストから特定の属性を解読できる可能性があります。

もちろん、優れた暗号はこれを回避します。この方法では、実装が不十分な暗号のみを簡単に解読できます。

3
Ryan Oberoi

暗号文識別不能性 は、どの暗号アルゴリズムが防止/防御するように設計されているかを理解するための最初の良いページです。言及されている攻撃の種類(IND-CPAなど)も、何から始めればよいかについての手がかりを与えることができます。

2
Rohit

攻撃者はおそらく(一般的に)次のことを行います。

テキストの反転、Base64エンコーディング、ROT13など、「目に見えるエンコーディング」または些細な暗号を特定して無効にします。

高いエントロピー状態を見つけた時点で、エンコードされたデータをさらに取得しようとし、それらを一緒にXOR)します。これにより、2つの元のプレーンテキストとエンコーディングが実際にXORベース(RC4など)であり、キーが一定である場合、キーはキャンセルされました。攻撃者がプレーンテキストとエンコードされたデータの組み合わせを取得できる場合、他のすべてのエンコードされたデータデコード可能です。

最終的には、動的キーでRC4やその他の単純なアルゴリズムを使用し、ファイル/データの最後または最初にキーを配置するなど、最も一般的な方法に対してテストを試みる場合があります。

エンコードされたテキストにしかアクセスできない場合、これでほぼ終わりです。提供されたプレーンテキストのエンコードされたバージョンを生成できるAPIのように、アクセスできる場合は、ビットベース(XORなど)か、ブロック暗号か、フィードフォワードブロック暗号かを簡単に識別します。エンコーディングですが、キーと実際のアルゴリズムの取得は依然として問題です。

対称鍵エンコーディングのデコードプログラム(XORなど)または非対称キーエンコーディングのエンコーディングプログラムにアクセスできる場合、エンコーディングを逆にすることで、エンコーディングが即座に無効になる可能性があります。

1
FPGA warrior

暗号化を行うブラックボックスにアクセスできる場合は、特定の入力値を入力することで多くの情報を取得できます。

簡単な例として、ブラックボックスが「ワンタイムパッド」スタイルの暗号化を行う場合、すべてゼロをフィードすると、ワンタイムパッドが得られます。 (実際、それをフィードするとany入力値は、追加のxorを含むワンタイムパッドを取得します。)

優れた暗号システムは、暗号システムがすでにわかっている場合でも、そのような攻撃に耐性があることに注意してください(ただし、キーはわかっていません)。

0