質問

ユーザーからパスフレーズを取得したプログラムを作成し、暗号化されたデータをファイルして書き込みます。私がこれまでに思いついた方法は次のとおりです。

  • ファイル名とシステム時間をハッシュすることから128ビットIVを生成し、ファイルの先頭にこれを書き込みます。
  • SHA256を使用して、パスフレーズから256ビットキーを生成します。
  • CBCモードでAESを使用してこのキーを使用して、データ(32ビット静的署名で始まる)を暗号化し、ファイルに書き込みます。

復号化すると、IVが読み取られ、次にパスフレーズが同じ方法でキーを生成するために使用され、最初の32ビットは、キーが有効かどうかを判断するために、署名が何であるかと比較されます。

しかし、私は見ていました AESの例 で提供されます polarssl (私がハッシュと暗号化を行うために使用しているライブラリ)、そしてそれらははるかに複雑な方法を使用します。

  • ファイル名とファイルサイズをハッシュすることから128ビットIVを生成し、ファイルの先頭にこれを書き込みます。
  • ハッシュ(SHA256)から256ビットキーをパスフレーズとIVを8192回生成します。
  • このキーでHMACを初期化します。
  • CBCモードでAESを使用してこのキーを使用してデータを暗号化し、それをファイルに書き込み、各暗号化ブロックでHMACを更新します。
  • ファイルの最後にHMACを書き込みます。

2番目の方法はより安全であるという印象を受けますが、それをバックアップするのに十分な知識はありません。

  • より安全な場合、これの理由は何ですか?
  • ファイルの最後にHMACを適切に追加していますか?暗号化されたデータの先頭に署名があるよりも安全ですか?
  • 8192回ハッシュするとセキュリティが増加しますか?

ノート: これはオープンソースプロジェクトであるため、私が使用する方法は何でも、誰でも自由に利用できるようになります。

役に立ちましたか?

解決

2番目のオプションはより安全です。

あなたの方法は、メッセージの完全性を提供しません。これは、攻撃者が暗号文の一部を変更し、プレーンテキストが復号化するものを変更できることを意味します。彼らがあなたの32ビットの静的署名を変更するものを変更しない限り、あなたはそれを信頼するでしょう。 2番目の方法のHMACは、メッセージの整合性を提供します。

キーを8192回ハッシュすることにより、誰かがキーをブルートフォースしようとするための追加の計算手順を追加します。ユーザーが辞書ベースのパスワードを選択すると仮定します。あなたの方法では、攻撃者が実行する必要があります SHA256(someguess) そして、復号化しようとします。ただし、PolarsSLバージョンでは、計算する必要があります SHA256(SHA256(SHA256...(SHA256(someguess))) 8192回。これは攻撃者を遅くするだけですが、それだけで十分かもしれません(今のところ)。

それが価値があることについては、既存のライブラリを使用してください。暗号化は困難であり、微妙な間違いになりやすいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top