ファイルを暗号化する小さなアプリケーションを作成していたところ、提供されたキーが復号化時に正しいものであることを確認する問題に遭遇しました。私の考えは、(埋め込み、暗号化された)キーを暗号化されたファイルと一緒に格納することでした。そのため、復号化する場合、プログラムは最初に最初の数バイト(埋め込みなし)が指定されたキーと等しいかどうかをチェックします。私はセキュリティの専門家ではないので、アプローチに問題はありませんが、それでも、これが悪い習慣になるのではないかと思っています。
このアプローチはセキュリティの観点からは問題ありませんか?最初の問題に対するおそらくもう1つの解決策はありますか?
ここには明らかな脆弱性はありませんが、より適切なオプションは、キー自体ではなく単に静的な文字列を格納することです。攻撃者がプレーンテキストの1ブロックを発見できるサイドチャネル攻撃を見つけた場合、アプローチはパスフレーズを漏らしてシステム全体を破壊しますが、固定テキストオプションはそうしません。
あなたはこれを行うことができます:
暗号で保護されたランダム128バイトキーを生成する
ランダムキーのハッシュを生成する
ランダムに生成されたキーでファイルを暗号化する
ランダムキーをユーザー指定のキーで暗号化する
ファイルに次の値を入力します。
暗号化されたランダムキー:ランダムキーハッシュ:暗号化されたファイルデータ
データを復号化する場合は、ユーザー提供のデータを使用して暗号化されたランダムキーを復号化し、それをハッシュして、格納されているハッシュと比較します。それらが同じである場合は、復号化されたランダムキーを使用してデータを復号化します。
静的文字列を含めると、既知のプレーンテキスト攻撃に対して脆弱であるかのように聞こえます。代わりに私は次のことをしたいと思います(しかし、それが悪い考えであるかどうか聞いて喜んでいます!);
復号化するときは、最初のハッシュが予想したハッシュと一致しているかどうかを確認してください。これにより、正しい復号化キーを取得したかどうかを検出でき、さらに、整合性チェックを無料で利用できます。これを高速化したい場合は、ペイロード全体でハッシュ関数を実行することが現実的ではない大量のデータを暗号化したい場合は、ハッシュされた部分を数メガバイトまたはブロック暗号である場合はブロックに減らします。 。
キー自体の暗号化されていないハッシュをファイルに追加すると、攻撃者はファイル全体を復号化しなくてもキーをテストできます。これにより攻撃が大幅にスピードアップします。