暗号化アプリケーションの手順とファイル形式を設計しています。暗号化の方法/ワークフローに関して決定を下す必要があるときが来ました。あるアプローチを別のアプローチよりも使用することの長所と短所について、私は決心できません。
以下は、フォーマット構造の概要です。
---------------------------------------------- | | ファイルの署名 || 固定 | プレーン | |----||----------|-----------| | | || アルゴリズム情報 || 固定 | プレーン | |----||----------|-----------| | | || シード || 固定 | 暗号化された | |----||----------|-----------| | | || データ || 変数 | 暗号化された | |----||----------|-----------| | | || CRC || 固定 | 暗号化された | ----------------------------------------------
最初は、ハッシュ関数にSHA-256を使用し、暗号化アルゴリズムにAES-256を使用しますが、形式が示すように、後で構成可能になります。
暗号化されたコンテナーを作成するための提案された手順:
- ハッシュ(パスワード) => キーパス
- ランダムシードを生成
- キーパス XOR シード => キーシード済み
- Key-Pass でシードを暗号化し、暗号化されたシードを保存する
- キーシードを使用してデータを暗号化し、暗号化されたデータを保存する
- Key-Seeded で CRC を暗号化し、暗号化された CRC を保存する
質問
A.暗号化されたシードと CRC を保存することで何か得られますか? 暗号化せずに保存すると安全性が低下しますか?
B.最終的な鍵に [ Hash(Password) XOR Seed ] を使用するのではなく、鍵の生成に [ Hash(Password + Seed) ] を使用するセキュリティの違いは多かれ少なかれ違いますか?
C.上記の 2 つの質問からの結論の質問。暗号化されたコンテナーを作成するための代替手順を使用するのが良いか悪いか:
- ハッシュ(パスワード + シード) => キー
- 暗号化されていないシードを保存する
- キーでデータを暗号化し、暗号化されたデータを保存する
- 暗号化されていない (または暗号化された) CRC を保存する
暗号化されたコンテンツを読み戻すときにキーを再生成するために、暗号化されていないシードを保存する必要があると思います。CRC は、暗号化または非暗号化のいずれかです。