AESを使用して特定のフォルダーに書き込まれるすべてのファイルを暗号化する必要があるソフトウェアを書いています。どこかに設定されているパスワード/キーが1つあり、それが常に使用されます。
Base64文字列を保存したくないのは、構成を変更しなければならない可能性がある人にとっては複雑すぎるためです。任意の文字を含む文字列を保存したい。このパスワードをAESで使用するキーに変換する最良の方法は何ですか?
私が理解しているように、私はまた塩を提供する必要があります。ただし、私の状況では、キーが1つしかないため、ソルトは不要のようです。
あなたがすることは次のとおりです:
そう:
hash(hash(password)) --> can be stored
hash(password) --> cannot be stored
キーが1つしかない場合でも、常にソルトを提供する必要があります(これにより、Rainbowテーブルの検索が大幅に妨げられます)。幸いにも、ソルトの生成はPBKDF2によって自動的に行われます。
つまり、最終的には次の3つになります。
キーが必要な理由を尋ねるかもしれません。パスワードを変更する場合(およびすべてのファイルをパスワードで暗号化した場合)、最初にすべてのファイルを元のパスワードで復号化し、次に新しいパスワードで再度暗号化する必要があります。パスワード。この実装では、キーを復号化および再暗号化するだけで済みます(このキーがパスワードとして機能するため)。
[〜#〜]編集[〜#〜]
私はあなたの質問を誤解しました、私は鍵導出関数を追加しました。
また 良い読み (IBM提供)
パスワードをAESキーに変換するには、 PBKDF2 が最も簡単な方法です。パスワードに十分な エントロピー があることを確認してください。
あなたはdoレインボーテーブルの攻撃から保護するためにソルトを使用する必要があるため、ソルトを使用する必要があります。
プラットフォームによっては、これを支援するために利用可能なライブラリがすでにある場合があります。そうでない場合は、Lucus Kaufmanのソリューションに近いものをお勧めします。
k2をどこにも保存しないでください。 k1を暗号化せずに保存しないでください。これらのいずれかを行うと、システムのセキュリティが損なわれます。
パスワードを変更できることを気にしない場合(これは非常に重要な機能だと思いますが、そうでない場合もあります)、k1に関する手順をスキップし、k2をAESキーとして使用し、k3を使用して確認してください。
[〜#〜] hmac [〜#〜] の別のキーを生成すると便利です。暗号化されたファイルが改ざんされていないことを確認できます。それを行う場合は、128ビットのHMACキーを生成し、それをメインのAESキーで暗号化して保存できます。
キーを生成する場合は、ハッシュ関数が疑似rngのような「ソート」であることを考慮して、何らかの方法でハッシュする必要があります。したがって、PBKDF2は重要な導出方法であり、この目的のために特別に使用されるため、PBKDF2の使用は常に適切です。パスワードを渡すと、パスワードとソルトに基づいて使用できるキーが生成されます。 Saltに関する限り、それはPBKDF2の一部として自動的に使用されるため、心配する必要はありません。
.NETのようなものを使用し、web.configファイルにキーを保存する場合は、web.configの一部をマシンキーまたはRSAキーのいずれかで暗号化できます http://msdn.Microsoft.com/en -us/library/dtkwfdky%28v = vs.100%29.aspx 、これは、RSAキーやマシンキーの保存をWindowsが処理するという点で優れています。ビルドサーバーを使用して、このプロセスを自動化することもできます。