web-dev-qa-db-ja.com

そのような暗号アルゴリズムはありますか?

パスワードでファイルを暗号化するような暗号アルゴリズムはありますか?ただし、復号化するときにパスワードが正しくない場合、ファイルは復号化されますが、関連データの代わりに「ゴミ」が存在します。パスワードが正しくない場合にガベージ付きのファイルを生成する機能について話しているのではないことに注意してください。つまり、アルゴリズム自体に組み込まれているようなものです。私が説明したのと同じようなものはありますか?そうでない場合、どの方法で掘ることができますか?

2
optic1

標準の暗号化アルゴリズムがこれを行います。標準の対称暗号(AESなど)で間違ったキーを使用すると、データがランダムな一連のバイトに復号化され、圧倒的な確率で無意味なゴミのように見えます。

対称暗号化/復号化関数は 疑似ランダム順列 と考えるのが最適です。特定のキーKと固定ブロックサイズの入力(通常は128ビットまたは256ビットのようなブロックサイズ)の場合、Encrypt関数は各nビットブロックを別のnビットブロックにマップし、Decrypt関数は逆マッピングを行います。少し異なるキーの場合、完全に異なるマッピングを取得します。

そうは言っても、この固有の特性は通常望ましくありません。

そのため、多くの場合、キーが正しいことを確認するために追加のチェックが行われます(復号化が失敗したことを示していない場合)-つまり、パディングが有効であることを確認します(これは、誤ったキーではめったに発生しないはずです-これは時折発生します)または、キーが有効であることを確認する メッセージ認証コード に対してチェックします。

8
dr jimbob

パスワードでファイルを暗号化するような暗号化アルゴリズムはありますか?.

暗号化アルゴリズムはパスワードではなくキーを使用し、パスワードを直接使用することは安全ではありません。暗号化キーは覚えにくいため、PBKDF2、Scrypt、Argon2などのパスワードベースのキー導出関数を使用します。最後の2つを使用することをお勧めします。

鍵サイズは、AESが128、192、および256ビットの128ビットブロック暗号であるように、アルゴリズムによって決定されます。鍵導出アルゴリズムは、鍵サイズに従って生成されます。量子攻撃の可能性を恐れている場合は、256ビットの鍵を選択して、Groverのアルゴリズムから保護してください。

パスワードを使用するときは、 diceware のようにエントロピーの高いパスワードを使用してください。これにより、ブルートフォース攻撃からも保護されます。

暗号化アルゴリズムとモードについては、以下を参照してください。

ただし、復号化するときにパスワードが正しくない場合、ファイルは復号化されますが、関連データの代わりに「ゴミ」が存在します。パスワードが正しくない場合、ガベージ付きのファイルを生成する機能について話しているのではないことに注意してください。つまり、アルゴリズム自体に組み込まれているようなものです。私が説明したのと同じようなものはありますか?そうでない場合、どの方法で掘ることができますか?

AESは疑似ランダム順列(PRP)であると予想されます。不正なキーは、正しいメッセージ以外のすべてを生成します。これは、誤ったキーの一部に意味のあるメッセージが含まれることを意味します。暗号文が、あらゆる言語で意味のあるすべてのテキストを含む可能性のあるすべてのプレーンテキストにマッピングされると考える場合。メッセージ(つまり)が複数のブロックであるほど、間違ったキーが意味のある結果を生成しにくくなります。

鍵のわずかな変更が、Cryptographicallの安全な暗号について同様のメッセージをもたらすとは考えていません。

AESで暗号化するさまざまなオプションがあります。

  • [〜#〜] ecb [〜#〜]:ECBモードの使用についてはまったく言及しないでください。パターンをリークするため安全ではありません。確率的暗号化。 操作モード と呼ばない人もいます

  • [〜#〜] cbc [〜#〜]確率的暗号化 であるモードです セマンティックセキュリティ 予測できないナンスが必要です。また、CBCモードでは、メッセージがブロック暗号のブロックサイズの倍数になるように、PKCS#7などのパディングメカニズムを使用する必要があります。これにより、ファイルの暗号化とはまったく関係のないOracle攻撃が埋め込まれる可能性があります。しかし、CBCを使用している場合、攻撃者がパスワードをブルートフォースで攻撃しようとすると、パディングをチェックして、メッセージが正しいものであるかどうかを判断できます。 RSA DES challenge で使用されているものと同じです。

  • [〜#〜] ctr [〜#〜]は確率的暗号化モードでもあり、CTRはブロック暗号をストリーム暗号に変換します。 CTRモードでは、パディングはまったく必要ありません。 CTRモードのセキュリティのため、IVを同じキーで再利用しないでください。

上記のモードは古風なものであり、Authenticated Encryption(AE)モードのようなより優れたモードが他の暗号と一緒に用意されています。 これらを使用する必要があります;

  • [〜#〜] gcm [〜#〜]モードは、AESのような128ビットブロックサイズの暗号に対して定義されます。これはAES-GCMと呼ばれ、CTRモードでAESを使用して機密性を確保します。 GCMモードは、整合性と認証も提供します。 GCMモードでは、同じキーの下で同じIVを使用しないでください。結果は壊滅的なものになる可能性があります。 1)攻撃者はベビーベッドのドラッグを使用して機密性を破ります2)これは偽造を引き起こす可能性があります。

  • Poly1305は、ChaCha20ストリーム暗号で使用される別のAEモードで、ChaCha20-Poly1305と呼ばれます。

最後の2つのモードは、TLS 1.3の5つの使用可能なモードに存在します。

- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256
- TLS_AES_128_CCM_8_SHA256
- TLS_AES_128_CCM_SHA256

整合性と認証により、ファイルの改ざんを検出できます。


ワンタイムパッド(OTP):ワンタイムパッドは実用的ではなく、ファイルを暗号化している場合は役に立ちません。 情報理論的セキュリティ を提供するため、通信している場合に役立ちます。 OTPでは、メッセージサイズとOPTキーストリームの事前共有を必要とする限り、キーサイズが必要です。

2
kelalaka