問題
フィッシングはウェブにおける最大のセキュリティ上の問題: ハッキング関連アカウントの 81% 脆弱なパスワードや盗まれたパスワードが悪用された侵害の割合業界全体の 多要素認証も導入されましたが、 実装が断片化されていて、大部分が依然としてフィッシングに適切に対処できていません。 Google は以前から FIDO Alliance と協力して そして最近では W3C では、標準化された あらゆるウェブ アプリケーションで使用できるフィッシング耐性のあるプロトコル。
WebAuthn とは
Web Authentication API は、Web 認証システムへのユーザー エージェントを介したアクセスです。 USB/BLE/NFC 経由でアクセスされるハードウェア トークン、または アプリケーション スコープの指標を生成し、課題を (eTLD+k)公開鍵認証情報を使用します。これにより、次のようなさまざまなユースケースが可能になります。
- 負担の少ないフィッシング耐性のある 2 要素認証( 設定されます)。
- パスワードレスの生体認証ベースの再認証。
- パスワード不要の低負荷でフィッシング耐性のある 2 要素認証(使用が必要) 。
この API は、ほとんどの主要ブラウザでの導入が予定されており、 オンラインでの本人確認の際に使用する UI を簡素化し、 フィッシングが大幅に減少します
WebAuthn は Credential Management API を拡張し、
PublicKeyCredential
という認証情報タイプを使用します。WebAuthn は
通信が行われ、ユーザーは次のことが可能になります。
- ウェブサイトの公開鍵認証情報を作成して登録します。
- 対応するプライベート ネットワークを所有することを証明して、ウェブサイトの認証を行う ] キーを押します。
認証システムは、秘密鍵と公開鍵のペアを生成して、 できます。タップするだけで署名の同意が得られ、 指紋認証、またはその他の方法(FIDO2 に準拠) の認定資格プログラムや 認証を取得しています。認証システムは Google Cloud の プラットフォーム(スマートフォンの指紋認証スキャナなど)を使用するか、 USB、Bluetooth Low Energy(BLE)、近距離無線通信(NFC)。
仕組み
鍵ペアの作成とユーザーの登録
ユーザーがウェブサイト(WebAuthn (「証明書利用者」):
- リライング パーティがチャレンジを生成します。
- 証明書利用者は、Credential Manager API を介してブラウザに、 デバイスを指定してリライング パーティ用の新しい認証情報を生成します。 機能(デバイスが独自のユーザー認証を提供するかどうかなど) (生体認証などを使用)。
- 認証システムがユーザーの同意を取得すると、 公開鍵とオプションの署名付き構成証明をクライアントに返します。 確認できます
- ウェブアプリが公開鍵をサーバーに転送します。
- サーバーは公開鍵とユーザー ID を保存して、 使用します。
let credential = await navigator.credentials.create({ publicKey: {
challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
rp: { id: "acme.com", name: "ACME Corporation" },
user: {
id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
name: "jamiedoe",
displayName: "Jamie Doe"
},
pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});
ユーザーの認証
ウェブサイトが適切なものとやり取りしている証拠を取得する必要がある場合 user:
- リライング パーティがチャレンジを生成し、ブラウザにリストを提供する ユーザーに登録されている認証情報の数。また、アクセスすべき場所を ローカルの組み込み認証システム、または OAuth 2.0 などの USB、BLE などで外付けします。
- ブラウザが認証システムにチャレンジに署名するよう求めます。
- 指定された認証情報のいずれかが認証システムに含まれている場合、その認証システムは ユーザーの同意を取得した後に、署名付きアサーションをウェブアプリに返します。
- ウェブアプリが署名付きアサーションをリライング パーティのサーバーに転送する 確認してください。
- サーバーで検証されると、認証フローが考慮される 成功です。
let credential = await navigator.credentials.get({ publicKey: {
challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
rpId: "acme.com",
allowCredentials: [{
type: "public-key",
id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
}],
userVerification: "required",
}});
WebAuthn を使ってみる https://webauthndemo.appspot.com/.
次のステップ
Chrome 67 ベータ版では navigator.credentials.get({publicKey: ...})
と navigator.credentials.create({publicKey:... })
がサポートされており、
デスクトップでの USB トランスポート経由の U2F/CTAP 1 認証システム。
今後のリリースでは、BLE や NFC などのトランスポートのサポートが追加され、 2 ワイヤー プロトコルを使用します。より高度なフローの開発も進めています CTAP 2 と WebAuthn によって有効化されています。たとえば、PIN で保護された認証システム、 (ユーザー名やパスワードを入力する代わりに)アカウントを選択できます。 指紋の登録
なお、Microsoft Edge は API もサポートしています。 Firefox は Firefox 60 の時点で WebAuthn をサポートしています。
リソース
現在、以下のより詳細なドキュメントの作成に取り組んでいます。
- WebAuthnDemo リライング パーティの例 実装
- WebAuthn の分析 執筆者: Adam Langley
セッション「ウェブ上の登録とログインの新機能」 Google I/O 2018 で、WebAuthn について説明しました。