スマートフォン承認
エージェントが最も役に立つのは動かしたまま席を離れたときですが、それはまさに、ダイアログをクリックする人が誰もいないときでもあります。スマートフォン承認は、そうしたリクエストを受け止めます。
セットアップ
- アカウントに参加しているマシンで、
keygrant devices addを実行します。 - スマートフォンで app.keygrant.app を開き、ペアリングコードとスマートフォンの名前を入力します。
- 両方の画面のフィンガープリントを照合し、マシン側で
yesと入力します。 - 任意:ページをホーム画面に追加すると、アプリのように開けます。
動作の流れ
- いつもどおり、デスクトップにダイアログが表示されます。
- 60 秒以内に誰も応答しなければ、リクエストはスマートフォンに回されます。カードには、シークレット名、リクエスト元のセッション、コマンド全体が表示されます。
- 約 2 分以内に Allow または Deny をタップします。応答はマシンに送り返され、マシンは応答の検証に成功した場合にのみシークレットを渡します。
デスクトップでの明示的な Deny は最終的なもので、スマートフォンに届くことは決してありません。
リクエストが来る可能性がある間は、ページを開いたままにしてください。ページは数秒ごとに新しいリクエストを確認します。プッシュ通知はロードマップに含まれています。
中継サーバーが代わりに承認できない理由
承認者デバイスの実体は、スマートフォンのブラウザ内で WebCrypto によって生成された鍵ペアで、エクスポート不可(non-extractable)として設定されています。ページはこの鍵で署名することはできますが、鍵そのものを読み出すことは決してできません。各判定は、リクエスト全体(シークレット名、コマンド、セッション)のハッシュに対して署名されます。マシンは署名を受け入れる前に、自分が実際に保持しているリクエストからそのハッシュを再計算します。
そのため、リクエストを中継するサーバーは自ら何かを承認することはできず、スマートフォンにはあるコマンドを見せながら、別のコマンドのためにシークレットを渡させることもできません。また、マシンが判定を受け入れるのは、ペアリング時に(または keygrant devices trust で)検証した承認者デバイスからのものだけです。
スマートフォンにできないこと
承認者デバイスが Secret Key やボールト鍵を受け取ることは一切なく、サーバーも、鍵素材を保持するものへの承認者デバイスからのアクセスを拒否します。紛失したスマートフォンでリクエストを拒否することはできても、シークレットを読むことはできません。紛失した場合は keygrant devices remove で削除してください。
コンソールは独自のサブドメイン上で、厳格な Content Security Policy のもとで動作します。そのため、keygrant.app の他の場所にあるスクリプトが承認者デバイスの鍵に到達することはできません。