認証
Anon はパスキー(推奨)とパスワードに対応しています。どちらもウォレットの鍵階層を支え、ルートシークレットの導出と保護方法が異なります。
パスキー(WebAuthn PRF)
パスキーは WebAuthn 標準の PRF 拡張(疑似ランダム関数)を使います。認証時は次の手順になります。
- ブラウザーが Touch ID、Face ID、Windows Hello、FIDO2 ハードウェアキーなどの認証器を呼び出します
- 認証器が Anon の認証情報を鍵として HMAC-PRF を実行します
- 決定的な 32 バイトのシークレットである PRF 出力からウォレットの鍵を導出します
パスキーの利点
- 認証器による保護: 保存、端末への紐付け、同期は認証器次第です。PRF 対応が必要で、侵害された端末に対する保証ではありません。
- フィッシング耐性: WebAuthn 認証情報はオリジン(
chrome-extension://...)に紐付き、偽サイトから要求できません。 - パスワード入力が不要: キーロガーへのパスワード露出を避けられますが、セッションの秘密情報は引き続き保護が必要です。
- 生体認証の利便性: タッチや視線で認証できます。
対応する認証器
利用可否はブラウザー、OS、認証器、PRF 対応状況によって異なります。設定時に互換性を確認してください。以下の例はすべてのバージョンの動作を保証しません。
- Touch ID(Mac)
- Face ID(Bluetooth 経由の外部認証器としての iPhone/iPad)
- Windows Hello
- YubiKey などの FIDO2 ハードウェアセキュリティキー
パスワード認証
パスワードを選ぶと Argon2id でルート鍵を導出します。
- Argon2id はオフライン推測のコストを高めるメモリ集約型のパスワードハッシュです
- Anon は高いメモリコスト(64 MB)で総当たり攻撃を難しくします
- ランダムソルトは
chrome.storage.localに保存され、導出鍵はサーバーに送られません
便利ですが、パスキーに比べると次の弱点があります。
- 導出中は短時間パスワードがメモリに存在します
- 保存データを盗まれると、弱いパスワードはオフライン攻撃に脆弱です
長く、使い回さないパスフレーズを使ってください。
セッション管理
認証後に Anon がセッションを作成します。
- バックグラウンド同期用の閲覧専用鍵をメモリに読み込みます
- 支出鍵はトランザクション開始時に必要に応じて読み込みます
- 設定したタイムアウトでセッションが終了します
終了すると Anon はロックし、すべてのセッション鍵をメモリから消去します。
自動ロック
システムイベントで自動ロックできます。
- 無操作タイムアウト: N 分間操作がない場合
- OS ロック: 画面ロックやスリープ時。対応する拡張機能 API が必要で、既定で有効です
- ブラウザー終了: 常にロックします
Settings → Security で設定できます。