機密データのストレージについて フォローする
BraveブラウザはChromiumプロジェクトをベースに開発されているため、ブラウザとしての様々な機能はChromiumに基づいたものになります。例えばChromiumはパスワードやクッキー/Webセッションなどの機密データを暗号化してローカル(端末上)に格納します。
機密データがどのように扱われるか
コード上、ブラウザはこれらの処理においてOSCryptコンポーネントを使用しており、暗号化プロセスにおいてOSCryptはユーザーのデータをオペレーティングシステムに紐付けてOSパスワードでのみ複合化可能にします。
OSCryptはそれぞれのプラットフォームごとに異なる実装がされています。
-
macOS:
-
Brave Safe Storage
エントリーをキーチェーンに作成し、暗号化キーとして使用されるbase64エンコードのランダム・バイト・シーケンスが付与されます。(詳細はキーチェーンアクセスのlogin
キーチェーンをご覧ください。)
-
-
Windows:
- 同様の暗号化キーが
os_crypt.encrypted_key
(%userprofile%/AppData/Local/BraveSoftware/Brave-Browser/User Data
のLocal State
ファイル内)に保存され、WindowsのData Protection API (DPAPI/CryptProtectData()
)によって暗号化されます。
- 同様の暗号化キーが
-
Linux:
- 暗号化キーがパスワード・ストア・バックエンドに追加されます。デフォルトは使用しているデスクトップ環境により異なる場合があります(例:GNOMEの場合は
GNOME Libsecret
for GNOME, KDE 5の場合はKWallet 5
など)。
- 暗号化キーがパスワード・ストア・バックエンドに追加されます。デフォルトは使用しているデスクトップ環境により異なる場合があります(例:GNOMEの場合は
データが消失する主なケース
-
プラットフォーム共通の事象:
- 端末をまたいだブラウザプロフィールのコピー(例:USBメモリ、Time Machineバックアップ、rsync、など)。端末にブラウザをインストールすると、端末毎に異なる暗号化キーが作成され、その端末上で使用されます。他端末のデータは複合化することはできません。ブラウザデータの移行は同期機能を活用した方が安全です。
-
プラットフォーム固有の事象:
-
macOS:
- 管理者がユーザーのmacOSアカウントで使用するパスワードをリセットすると、それ以前に暗号化されたデータの複合化ができなくなります。
-
Windows:
- 上記に記載したmadOSの例と同様です(例:
net user <username> *
の場合)。しかし、古いパスワードを使用せずにユーザーパスワードを変更した場合にも複合化は失敗します。そのため、例えばMicrosoftマネージメントコンソールのlusrmgr.mscを使用してパスワードを変更した場合、管理者によるリセットと同じ動作となります。これは、DPAPIが 新しいパスワードでMaster Keys
を再度暗号化する前に、複合化のために古いパスワードが必要となるためです。 通常では、パスワードを古いものにもう一度更新したとしても、特に問題は生じません。しかし、もしもChromiumが最初のパスワード変更を早く検知した場合(例:初回時にos_crypt.encrypted_key
でCryptUnprotectData()
が失敗する)直ちに古い暗号化キーを削除し、新たなものが作成されます。このようになると、たとえ以前のWindowsアカウントとパスワードをリストアしたとしても、古い暗号化キーが復旧不可能になってしまいます。
- 上記に記載したmadOSの例と同様です(例:
-
Linux:
- パスワード・ストア・バックエンドのデフォルトが異なるデスクトップ環境間での変更(例:GNOMEからKDEへの変更)において、Chromiumが検知できなかった場合(この例では
--password-store=gnome-libsecret
)。
- パスワード・ストア・バックエンドのデフォルトが異なるデスクトップ環境間での変更(例:GNOMEからKDEへの変更)において、Chromiumが検知できなかった場合(この例では
-
macOS:
データが消失する例外的なケース
-
macOS:
-
Brave Safe Storage
の(ブラウザと同じくらい古い)キーチェーン・エントリーのDate Modified
フィールドが(管理者によりパスワードリセットされずに)変更された場合、以下の可能性があります。- Chromiumが不具合により暗号化キーを上書きしてしまう。
- AppleのキーチェーンAPIが例外的に
Brave Safe Storage
が存在しないと判断してしまう(結果的にChromiumが暗号化キーを上書きしてしまう) - (
Brave Safe Storage
のアクセス・コントロール・リストに存在している)別のアプリがエントリーを変更してしまう。
- 端末のAppleアカウントに不具合が生じる。
-
-
Windows:
-
CryptUnprotectData()
がFALSE
を返し、例外的なGetLastError()
が生じ、Chromiumが別の暗号化キーをLocal State
に保存してしまう。
-
さいごに
上記に記述した内容は全てのケースを網羅していません。BraveとChromeはどちらもChromiumをベースに開発されており、上記のケースはBraveとChromeどちらにも当てはまります。
安全に使用するためのルールを要約すると以下のようになります。
-
Brave Sync(同期) を使用する。同期の暗号化キーが
Sync Code
より提供されるため、OSCryptの暗号化キーが失われたり、上書きされたり、破損したとしても同期には影響しません。そのため、デバイスの変更時は同期を使用してデータコピーをすることをおすすめします。同期対象データはbrave://settings/braveSync/setup
にて設定してください。 - Chromium外で生じた変更が、BraveやChromeに影響してしまうことにご注意ください。間違った操作をすると簡単にソフトウェアが壊れてしまう場合があります。
これらのプラットフォーム毎のOSCryptが関係する様々な事象を踏まえ、私たちはいずれChromiumが暗号化キーのバックアップや復元をする機能を検討することに期待しています。