まず、マスターパスワードで Vault を作成するか、ロックを解除します。Settings → Security(設定 → セキュリティ)を開いてプロバイダーの状態を確認し、生体認証によるロック解除を有効にします。登録時には、あらためてシステム認証が求められます。以降のログイン画面では、マスターパスワードの入力欄と並んで、Touch ID、Windows Hello、または指紋によるロック解除が表示されます。Disable and remove enrollment(無効にして登録を削除)で削除されるのは、このアプリケーションがキャッシュした鍵だけで、OS に登録された指紋が削除されることはありません。
マスターパスワードは必ず保管しておいてください。キャンセル、タイムアウト、ハードウェア/キーリングが使えない場合、登録が無効になった場合には、パスワードでのロック解除が必要です。生体認証の登録は、このユーザー、デバイス、Vault に限定されます。復旧の手段でもバックアップでもありません。Vault をリセットすると、既存の SMAZAT による確認を経た後でのみ、登録が取り消され、既存の暗号化されたプロファイルとホストのフィンガープリントが削除されます。
| プラットフォーム | 認証と保管 | 要件と制限 |
|---|---|---|
| macOS Apple Silicon | ネイティブの LocalAuthentication / Touch ID、biometryCurrentSet と WhenUnlockedThisDeviceOnly を指定した Security.framework のキーチェーン (Keychain) 項目 |
登録済みの Touch ID、使用可能なセンサー、使用可能なログインキーチェーンが必要です。指紋を変更すると項目は無効になります。本番のアップデートでは安定した Developer ID 署名を使用してください。アドホックの Alpha 署名では、キーチェーンの信頼やローカルネットワークの許可の追跡が妨げられることがあります。 |
| Windows x64 | メインの HWND に関連付けたネイティブの WinRT Windows Hello デスクトップ相互運用、Windows 資格情報マネージャー内の、現在のユーザーの DPAPI で暗号化された鍵 | 設定済みの Hello の指紋、顔認証、または PIN が必要です。これは利便性のためのロック解除です。Hello による承認はアプリが強制しますが、DPAPI 自体は生体認証で保護されているわけではありません。同じユーザーとして動作するほかのコードが、資格情報を復号できる可能性があります。 |
| Ubuntu x64 | fprintd D-Bus による現在のユーザーの登録済み指紋、明示的な libsecret / Secret Service による資格情報の保管 | 対応する指紋リーダー、登録済みの指紋、実行中のデスクトップの Secret Service、既定のキーリングが必要です。利便性のためのロック解除であり、キーリングの資格情報は指紋の確認と暗号学的に結び付いていません。basic_text やプレーンテキストのファイルへのフォールバックはありません。 |
Ubuntu で任意に使用するランタイムパッケージは、python3-gi、gir1.2-secret-1、gnome-keyring(または互換性のある別の Secret Service)、fprintd です。不足しているパッケージは OS の通常のパッケージマネージャーでインストールし、OS の設定で指紋を登録してください。認証は現在のユーザーで行われ、root 権限は不要で、PAM も変更しません。デスクトップのキーリングがないヘッドレスの SSH セッションでは「利用不可」と報告され、鍵が知らないうちに別の場所に保存されることはありません。
ロックのルール
既存のインストールでは、自動ロックはオフになっています。有効にすると既定で 15 分 が選択されます。設定できる値は Never、1、5、10、15、30、60 分です。アプリケーションのウィンドウでのキーボードとマウスの入力は操作とみなされますが、受信した SSH の出力は操作とみなされません。任意のフォーカス喪失時ロックでは、アプリケーションのプラグインウィンドウをアプリの一部として扱い、進行中のシステム認証のプロンプトが完了するのを待ちます。これらのルールを変更するには、マスターパスワードが必要です。
無操作時やフォーカス喪失時のロックを含め、Vault がロックされるたびに、有効な SSH セッションは切断され、プラグインは閉じられ、診断は停止します。ロックする前に、リモートでの編集内容を保存してください。これは既存の手動ロックの動作を引き継いだもので、ロック後にバックグラウンドのプラグインが SSH の認証情報を使えることはありません。
任意の「機密性の高い操作」ポリシーでは、プロファイルの削除、プラグインのインストール/削除、インストーラーの起動、ロック解除済みの Vault のリセットの際に、あらためてシステム認証を求めます。リモートターミナルのコマンドやプラグインによるファイルの編集は、このポリシーの対象外です。このポリシーが SSH サーバー側の認可に代わることはありません。プロバイダーが機能しなくなった場合は、マスターパスワードでロックを解除し、そのパスワードでポリシーを変更してください。ロックされた状態の復旧画面からは、破壊的な操作の確認を経たうえで、引き続きリセットを行えます。
Vault と IPC の設計
既存の v1 Vault は引き続き scrypt と AES-256-GCM を使用しており、登録によってファイルが書き換えられたり、スキーマが変更されたりすることはありません。OS の資格情報ストアに保存されるのは、派生した 32 バイトの鍵 のコピーだけです。平文のマスターパスワードが保存されることはありません。ローカルの登録メタデータには、ランダムな資格情報 ID、プロバイダー、Vault の変更不可のメタデータに結び付いた SHA-256 が含まれます。取り出した鍵は、セッションを開く前に認証付きの復号に成功する必要があります。メインプロセスのバッファーは使用後にクリアされます。ネイティブのプロトコル文字列はプロセスメモリに一時的に存在するだけですが、マネージドなランタイムでメモリを完全に消去できると主張するものではありません。
ヘルパーは、範囲を限定したプライベートな stdin/stdout のパイプで通信し、シェルコマンドを受け付けず、認証のタイムアウトを持ち、サニタイズしたエラーコードを返します。ヘルパーは ASAR の外にある resources/biometrics にパッケージされています。単体のネイティブ実行ファイルのため、Electron ABI のネイティブモジュールは不要です。Linux 用のヘルパーは、システムの Python と GI を使用します。ネイティブオブジェクトや派生した鍵が、レンダラー/プラグインのブリッジを越えることはありません。生体認証の IPC は、稼働中のメインウィンドウとそのメインフレームを検証するため、プラグインから呼び出すことはできません。明示的にロックすると、保留中の生体認証やパスワードによるロック解除の処理がキャンセルされるため、遅れて届いた承認で Vault が再び開くことはありません。登録を削除すると、OS のストアがオフラインでもローカルの関連付けは取り消されます。アクセスできないストアには、使えなくなった孤立した資格情報が残る場合があります。
ビルドと検証
npm run biometrics:build は、ホストのプラットフォーム用のヘルパーを準備します。開発時の起動やリリースの準備では自動的に実行されます。macOS には Security と LocalAuthentication を含む Swift/Apple SDK、Windows には Visual Studio C++ Build Tools、Windows SDK、C++/WinRT が必要です。Linux では Python のヘルパーをコピーします。新しい npm の依存関係は追加しません。各対象 OS 上でネイティブにビルドしてください。macOS のヘルパーは、バンドルの再帰的な署名に含まれます。このデスクトップアプリはサンドボックス化されていないため、App Sandbox のエンタイトルメントは不要です。本番の macOS 配布には、OpenPGP によるリリース署名とは別に、引き続き Developer ID 署名と公証が必要です。
npm test、npm run test:biometrics:ui、npm run test:diagnostics:ui を実行してください。生体認証の Node テストと分離した UI のスモークテストでは、モックの OS アダプター を使用して、成功、拒否/キャンセル、誤った鍵、ハードウェア/登録の欠如、リセット、タイムアウトと遅延した結果、Linux のキーリングが使えない場合、OS の資格情報の失敗、Windows の PIN で承認された応答、macOS の登録の変更、既存の Vault との互換性、IPC の分離、SSH のクリーンアップを網羅しています。これは、ハードウェアによる認証が成功することを証明するものではありません。
ネイティブのコンパイルは、macOS arm64 と Windows x64 で確認済みです。macOS では Touch ID が利用可能と報告され、Windows の VM では Hello が利用不可と報告されました。指紋/顔/PIN の登録、保護された鍵の実際の取り出し、OS のダイアログのキャンセル、登録の変更による無効化については、対応する各システムでのハードウェアによる対話的なテストが引き続き必要です。Linux のヘルパーは、さらに対応する fprintd リーダーを備えたデスクトップでテストする必要があります。ヘッドレスの VM では、その確認はできません。
プラットフォームの参考資料:Apple の生体認証によるアクセス制御、Windows デスクトップの Hello 相互運用、fprintd のデバイスのライフサイクル、Secret Service の仕様。
macOS における SSH のローカルネットワークアクセス
すべてのローカルの SSH プロファイルが connect EHOSTUNREACH で失敗するのに、同じ接続が「ターミナル」では機能する場合は、System Settings → Privacy & Security → Local Network → CH-J Server Manager(システム設定 → プライバシーとセキュリティ → ローカルネットワーク → CH-J Server Manager)を確認してアクセスを許可し、アプリを完全に終了してから開き直してください。すでに有効になっている場合は、許可をいったん切り替えてから再起動してください。ルーティング、Wi-Fi/Ethernet、VPN も確認してください。このエラーだけでは、プライバシー設定による拒否であるとは言えません。このエラーのために Vault をリセットしたり、信頼済みの SSH フィンガープリントを破棄したりしないでください。
アプリは NSLocalNetworkUsageDescription を宣言しており、macOS のネットワークの許可/経路のエラーについてローカライズされた案内を表示します。アプリが自分自身に許可を与えることはできません。Apple は、macOS がビルドをまたいでネットワークのプライバシー設定を確実に追跡できるよう、Apple が発行した署名用 ID を使うことを推奨しています。現在のアドホックの Alpha ビルドには、この制限が残っています。Apple のローカルネットワークのプライバシーに関するガイダンス をご覧ください。
Ubuntu のアプリケーションアイコン
Debian パッケージは、既存の CH-J アイコンを標準の hicolor サイズ(16–512 px)でインストールし、対応するデスクトップエントリーと Electron のウィンドウクラスを設定します。メインウィンドウは、作り直されたときにもアイコンを受け取ります。すでにピン留めしてある古いランチャーを更新した後は、ピン留めを外し、新しくインストールしたアプリケーションをピン留めしてください。デスクトップからいったんログアウトして再ログインすると、古くなった GNOME ランチャーのキャッシュが更新されることがあります。