web-dev-qa-db-ja.com

KDFへのパスフレーズが「予測可能」であるかどうかは問題ありませんか

少量のテキスト(暗号化されるアイテムごとに8〜100文字)のファイル暗号化を実行しようとしています。これが私が持っているものです:

  • 秘密のパスフレーズと塩。
  • Rijndaelを使用してキーを生成し、テキストを暗号化するときにivを使用します。
  • Key + ivを使用してテキストを暗号化します。
  • Iv +暗号化されたテキストを暗号として保存します。
  • 結果をHMACします。

今私の質問はパスフレーズに関するものです。 PCI DSSは、パスフレーズを少なくとも年に1回ローテーションする必要があります。パスフレーズの年の部分を含めるのは安全ではないかと思っていました。したがって、私の「コア」パスフレーズが「 「OrangeBallons」、私が使用するパスフレーズは、「Orange Balloons2013」、「Orange Balloons2015」など、そのデータ項目のビジネスに関連する年に基づいています。

これは潜在的なセキュリティホールですか、それともこれを行っても大丈夫ですか?私の傾向はそれをしないことですが、それは私の特定のユースケースでキー管理をはるかに簡単にします。

2
ashic

はい、これは安全ではありません。誰もチェックしなければ監査に合格するかもしれませんが、非常に安全ではありません。

いずれにせよ、どのエントリにどの年を使用するかを決定するという重要な管理上の悪夢がまだあるため、この方法ではそれほど節約できません(変更された日付に基づいていない限り、これは悪い考えです)。

どのキーがどのエントリに使用されているかを追跡する、より本格的なシステムが必要になります。その時点で、追加費用なしでより複雑なキーを使用できます。

また、古いエントリは古いキーを使用しますが、定期的に新しいキーに更新する必要があるという点で、対処すべきキーローテーションの問題があります。

データベースが暗号化されている共有データベースにすべてのエントリを保存する方が簡単な場合がありますが、個々のエントリは暗号化されていません。その場合、追跡するキーは1つだけです。その欠点は、どのユーザーがどのデータにアクセスできるかをセグメント化する必要がある場合です。

2
Jason Coyne

最初に頭に浮かぶのは、誰かが1つのパスワードを知ったら、過去と未来のすべてのパスワードも知っているということです。

毎年変更することの背後にある考え方は、誰かがパスフレーズを解読してしまった場合にその問題に対処することですが、それらのパスフレーズにアクセスした可能性のある過去の従業員に対しても少なくとも少しの保護を提供します。

5
schroeder