私の知る限り、Mozilla Firefoxの現在のバージョンでは、保存されたパスワード(3DESで暗号化)をlogins.json
ファイルは、キーがkey4.db
(またはkey3.db
以前のバージョン)。
パスワードにマスターキーを設定していない場合は、キーデータベースファイルにアクセスできます。データベースで、実際にキーのように見えるエントリに遭遇しました。
------------------------------
| id | item1 | item2 |
------------------------------
| password | ... | ... |
------------------------------
では、なぜデータベースに2つの3DESキーがあるのでしょうか。それらは本当に暗号化キーですか?それらを使用してlogins.json
データ?どのキーイングオプションが使用されていますか?
@ jnylen によるコメントは アルゴリズムのソース を与えました。
データ構造では、item1
はグローバルソルトであり、item2
には、(DERエンコーディングで)エントリソルトと暗号化されたキーが含まれます。このキーは、残りのデータを(ユーザー名とパスワードごとに)暗号化するために使用されます。
マスターキーの暗号化は3DES-CBCで行われ、マスターパスワードから派生したキー(およびIV)、グローバルソルト、および「エントリごと」のソルトが使用されます。デフォルトでは、マスターパスワードは空の文字列です。パスワードのエントロピーはsha1によって160ビットに制限されており、さらに3DESによって112ビットに制限されています。ハッシュの複数の反復を使用してもパスワードは強化されません。
アイテム(ユーザー名とパスワード)の暗号化は、3DES-CBCを使用して行われ、IVは各アイテムのメタデータに含まれています。 IVがどのように生成されるかは、このアルゴリズムのソースから推測することはできません。
IVの生成が不十分でない限り、暗号化された少量のデータは、3DESに対する最善の攻撃がマスターキーまたはユーザーのパスワードを総当たりにすることであることを意味します。 112ビットの上限は、このアルゴリズムが今日の標準では弱いと考えられていることを意味します。巨大なリソースを持つ大規模な組織は、数十年でキーをブルートフォースで攻撃できる可能性があります。量子コンピュータはそれらをより速く壊すかもしれません。
実際には、これは、マスターパスワードとして適切な長いパスフレーズを使用する必要があることを意味します。このアルゴリズムは、現在のベストプラクティスに移行するための優れたリファクタリングを必要としています。少なくとも128MBと3回の反復によるArgon2id、およびAEAD暗号(TLS 1.3で使用されるものなど)。