web-dev-qa-db-ja.com

単一のペイロードがパスワードに基づいて2つの異なる出力を持つことを可能にする暗号化アルゴリズムはありますか?

暗号化された機密情報があり、そのパスワードを開示するように強制されたとします。

私の目標は、復号化されたペイロードを意味のある/に見せ、パスワードを有効にすることです。

別のパスワードを同じペイロードに適用して、復号化された代替データが開示されるようなアルゴリズムはありますか?

61

多くの一般的なアルゴリズムでは、キーを変更することにより、最初のブロックで任意のデータを取得することが可能です。問題が発生するのは、データがキーブロックサイズよりも長い場合です。安全な連鎖方式を使用していると仮定すると、キーをスワップした後の残りのデータ(最初のブロックを超える)はランダムに見えます。安全でない連鎖方法を使用することもできますが、お勧めしません。

XOR OTP暗号化を使用できます。これは、キーが数学的に再利用されるほとんどの暗号化とは異なります。 OTP(One Time Pad)では、キーはデータと同じ長さです。 XOR(最も一般的なOTPの1つ)を使用すると、目的のメッセージを任意に生成できる柔軟性があります。
(あなたの敵はこの可能性を知っているかもしれませんか?)

まず、同じ長さのファイルを作成します。

  • オリジナルメッセージ
  • ランダムデータ(実際のキー)

XORは一緒に

  • 暗号化されたメッセージ

次に取る

  • 偽のメッセージ
  • 暗号化されたメッセージ

XORは一緒に

  • 偽の鍵

解読するには、

  • 暗号化されたメッセージ
  • リアルキーまたはフェイクキー

XORして取得する

  • リアルまたは偽のメッセージ

@ Alpha3031がコメント のように、1つのメッセージ(たとえば、偽のメッセージ)を従来のAESで暗号化し(より一般的で、必要な鍵ファイルが小さい)、次にXOR(あまり一般的ではありません)他を生成する。 (例:本当のメッセージ?)

XORは、十分に予測できない/ランダムな任意のファイルに適用できます。 (暗号化されたデータなど)

25
Bryan Field

ここでの理論的な質問は、サイズ/エントロピーの質問です。重要なルールは、暗号化されたメッセージのエントロピーが最初のメッセージのエントロピーと同じであることです。アルゴリズムが圧縮を含まない場合、暗号化されたメッセージのサイズは元のメッセージのサイズです。

暗号化されたメッセージを、キーに応じて2つの異なる方法でデコードするには、2つの異なるメッセージが含まれている必要があります。 1つのキーを使用して実際のメッセージを暗号化し、別のキーを使用して偽のメッセージを暗号化し、両方のエンコードされたメッセージを(短い方を埋め込んだ後)たとえばそれぞれから1バイトで結合します。メッセージを暗号化する前にメッセージの最初に既知のIDを追加すると、デコード時に、アルゴリズムは正しい初期IDを持つメッセージのみを返すことができます。

問題は、2つの異なるメッセージといくつかの追加情報があることです。暗号化されたメッセージを最初のメッセージよりも長くすることはそれほど妥当ではありません...

これが、もっともらしい否認可能性を実装するアルゴリズムを知らない理由です。完全な暗号化ファイルシステムであるcontainersだけです。これは、サポートが中止される前に、優れた TrueCrypt に実装されました。幸いなことに、プロジェクトのフォークはそれを提供しています VeraCrypt

VeraCryptは実際には隠しボリュームを提供しています。実際、normalボリュームの空のスペースの一部は、個別のキーを持つ個別のボリュームを格納するために使用されます。キーを提示すると、通常のボリュームを見つけられない場合でも、隠しボリュームを見つけようとします。通常モードで通常のボリュームを開くと、非表示のボリュームも含まれていると推測することはできません。ファイルシステムに不思議ではない、未使用の領域があるだけです。もちろん、そのモードで大量のデータを書き込むと、非表示のボリュームデータが上書きされ、確実に破棄されます。ただし、両方のキーを提供し、内部ボリュームを上書きするリスクなしに外部ボリュームを使用する特別なモードが存在します。


上記は技術的な部分でした。ただし、非表示のコンテナの機能はよく知られている機能であるため、もっともらしい否認可能性には、外部コンテナのコンテンツも価値があることが必要です。私見、許容できる方法は2つあります。

  • 情報をシンプル、機密、シークレットの3つのクラスに分類し、それらを適切に格納します。コンテナの外側でシンプル、外部で機密(のダブルパスワードアクセスを使用)、隠された部分。この方法では、外部コンテナーには無害なファイル以上のものが含まれているため、非表示のコンテナーの存在は明らかではありません。しかし、実際には、少なくとも内部コンテナと同じくらい外部コンテナを使用し、その内容を開示する準備をしておく必要があります。

  • 外部ストレージをメインストレージとして使用します。これは、企業のラップトップで一般的な使用方法です。これは、ラップトップの盗難または紛失の場合に、機密情報にすぐにアクセスできないことを保証するためです(セキュリティの機密性部分に対処します...)。裏側は、起動時にコンテナーを単一のコンテナーとしてマウントする必要があることです。通常の使用法では、すぐにマウントを解除して、dualモードで手動で再マウントします。

そして、敵対者がVeraCryptページであるかどうかに応じて 妥当な否認可能性 および 隠しボリュームのセキュリティ要件 には、読み取り専用CDから起動するときに隠しボリュームのみを使用するなどの追加のアドバイスがあります/ DVD ...

いつものように、技術的セキュリティはグローバルセキュリティの一部にすぎません。情報の機密性が非常に高く、物理的な整合性を脅かす可能性がある場合は、物理的なセキュリティ対策を使用して、もっともらしい否認性だけに頼らないでください。これは、安全な情報を隠すのに役立つ素晴らしいツールですが、魔法のような特効薬ではありません。 Snake Oil Company のみがそれらを提供できます...

35
Serge Ballesta

暗号迷彩

CAテクノロジーは Cryptographic Camouflage として知られるテクノロジーの特許を取得しています。

公開キー暗号化で重要な点は、秘密キーを保護する方法です。暗号迷彩を使用して秘密鍵を保護する方法の概要を説明します。具体的には、完全な攻撃には長すぎるパスワードで秘密鍵を暗号化しません。代わりに、1つのパスワードのみが正しく解読できるように暗号化しますが、多くのパスワードは解読して、攻撃者をだますのに十分有効なキーを生成します。特定のアプリケーションでは、この方法は、スマートカードと同様に、完全にソフトウェアで、辞書攻撃から秘密キーを保護します。

つまり、メッセージ(この場合はキー)を受け取り、1つの正しいキーと偽の平文を生成する多くの "偽の"キーが存在するように暗号化できます。

6
John Wu

求めているのは、シークレットベースの暗号化にもっともらしい否認性を実装する方法です。これを行うための特定のアルゴリズムはありませんが、アプリケーションレベルで簡単に実装できます。2つの対称コンテナーを1つに結合し、各コンテナーで各パスワードを試すだけです。

TrueCryptには過去にそのような機能があったことを覚えていますが、それらの実装が私が提案したようなものだったか、それ以外の方法で実装したかはわかりません。

5
pFarb

はい、注意が必要です。

要件:

1)あなたは暗号化プログラムを提供します、それは注意深い精査に耐えることができなくなります。

2)偽のメッセージはテキストかそれに似たものでなければなりません-低エントロピー。

3)は偽のメッセージのサイズ制限です。実際のものがバイナリである場合、偽のメッセージはかなり大きくなければならないため、少なくとも実際のメッセージのサイズに近い必要があります。サイズが間違っている場合は拒否されますが、偽のメッセージと実際のメッセージの任意のペアを試すことができます。

アルゴリズム:

暗号化された出力ファイルは常に、偽の入力ファイルと正確に同じサイズになります。これは単純に暗号化しているように見えますが、実際には、偽のファイルと実際のファイルの両方が暗号化される前に圧縮され、暗号化されたファイルは、偽のファイルのサイズに意味不明に埋め込まれます。 2つのファイルの合計が圧縮されていない偽のサイズを超える場合、それらは拒否されます。

ファイルを抽出するには、提供されたパスワードを取得し、実際のファイルを復号化して、解凍プログラムで実行します。解凍プログラムに問題がある場合は、偽のファイルで再試行してください。それでもデコンプレッサに問題がある場合は、単純に入力ファイルのサイズが意味不明に出力されます。

2
Loren Pechtel

@Serge Ballestaがすでに述べたように、暗号化されたメッセージの情報コンテンツは、真のメッセージの情報コンテンツに偽のメッセージの情報コンテンツを加えたものより小さくすることはできません。したがって、偽のメッセージよりも大幅に大きい暗号化されたメッセージは、自動的に疑わしくなります。

一方、人間が読み取れるコンテンツには多くの冗長性があることを忘れないでください。これは基本的に「無料の情報保存場所」です。いくつかの例を挙げると、写真や音声でメッセージを非表示にしたり、類義語やフレージングなどを使用してテキストを変更したりします。この観点から、「特別なパスワード」は、通常復号化されたファイルを追加のデコーダーに通すことです(通常は暗号化されるため、ノイズのように見えます)。

簡単な具体例を示す(明確にするため:これは単にアイデアを説明するための例であり、どこにも使用しないでください)、頻度分析を避けるために各文字に複数の表現がある単純な置換暗号を想像してください。ただし、ランダムな置換を選択するのではなく、隠しメッセージの暗号テキストによって指示されたものを選択します(十分にランダムに見えるはずです)。

お役に立てれば ;-)

1
dtldarek

「不正行為」を許可する場合。

暗号化:

  • 2つの異なるペイロードを取る
  • それらを暗号化する
  • バイトをエスケープ形式のテキストとしてエスケープします(0から9およびAからFの文字)
  • 1つのペイロードから1つの文字を受け取り、別のペイロードから1つの文字を受け取ります。 3バイトごとにランダムに出力されます。
  • ペイロードは、esadecimalテキストが終了すると異なる長さになる可能性があるため、文字「G」と、必要な数のランダムな文字が含まれます。

パスワードは次のように構成されます:

  • ストリームを復号化するための127ビット
  • ペイロードを選択するための1ビット
  • ペイロードを復号化する128ビット。

基本的には、3ペイロードのサイズのパケットを1つ取得します。これを破棄する必要があります。次に、バイトのグループを選択して復号化する必要があります。

復号化:

  • パスワードの最初の部分を使用してストリームを暗号化解除します
  • ペイロードを選択します(3文字ごとに最初または2番目の文字ごと)
  • エスケープ解除文字
  • パケットも復号化します。

この形式のファイルには2つのペイロードが含まれていることは明らかですが、ごみを2つではなく1つの実際のペイロードのみに入れることができるのは明らかではありません。

1
CoffeDeveloper