web-dev-qa-db-ja.com

AESキーの保存方法は?初期化ベクトル(IV)?

現在、当社の認証サービスを開発中です。パスワードのハッシュに使用されるソルトを、ハッシュされたパスワードと一緒に格納する必要があるという点で、どうにかして格納する方法を理解しています。つまり、すべてのアカウントについて、一意のソルトも作成されます。

AESキーとIVをどのように保存するのですか?すべてのアカウントにも固有のAESキーとIVが必要ですか?または、1つのアプリ全体のAESキーともう1つのアプリ全体のIVが必要ですか?

私はこれを読んだ post だが、それは私がそれらを保存すべき場所にのみ答える。

1
Yongga

なぜについてほとんど説明していませんが、対称暗号化を使用していますが、暗号化と復号化が同じデバイスで行われるという条件で、暗号化操作ごとに同じキーを使用しますが、IVは異なります。

IVは秘密の値ではありませんが、CSPRNGを使用してランダムに生成する必要があります。これは非常に重要です。

解読中に簡単に取得できるように、結果の暗号文にIVを付加するのが一般的な方法です。

2
Luke Park

IVは暗号文と一緒に保存します。これは秘密ではありません。ただし、AES(またはその他のブロック暗号)にはさまざまなモードがあることに注意してください。 GCMについては this 質問および also thisを参照してください。

この背後にある主要な点は、同じキーを使用するたびにIVは一意でなければならないということです。通常はランダムである必要があります(強力なCPRNGを使用)。ただし、一部のモードはノンスを許容します。

質問に直接回答するには:はい、1つのアプリ全体のキーを使用できますが、1つのアプリ全体のIVは使用できません。

派生 ユーザーパスワードのキーを使用して、ユーザーデータの暗号化に使用することもできます。ただし、これは「パスワードを忘れた」機能を複雑にします。

0
Marko Vodopija