著者:五味秀仁、板倉景子
パスワード課題の解決に注力する業界団体FIDO(ファイド)アライアンスは、
フィッシング攻撃に耐性のある、シンプルで堅牢な認証の展開を推進してい
ます。その新しい仕様「FIDO2」は、標準化団体W3Cで策定されるWeb認証仕
様「WebAuthn」(ウェブオースン)を包含し、さらにAndroidとWindowsに加えて、iOSやmacOSにも対応するなど、プラットフォーム拡大を進めています。本特集では、FIDO2の概要や仕組み、最新動向について解説します。
シェルスクリプトマガジン Vol.70は以下のリンク先でご購入できます。
図8 publicKeyデータの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "publicKey": { "attestation": "direct", "authenticatorSelection": { "authenticatorAttachment": "platform", "requireResidentKey": false, "userVerification": "required" }, "challenge": "bWhMbDgxc1h4Z3B...",, "excludeCredentials": [], "pubKeyCredParams": [ { "alg": -7, "type": "public-key" } ], "rp": { "id": "example.com", "name": "Example corporation" }, "timeout": 60000, "user": { "displayName": "Ichiro Suzuki", "id": [70, 60, ...], "name": "ichiro.suzuki@example.com” } } } |
図9 認証器に登録要求を出すJavaScriptプログラムの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (!window.PublicKeyCredential) { WebAuthn APIが使えない場合の処理 } // プラットフォーム認証器が使える場合 PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() .then(function () { // 以下で設定するのがPublicKeyCredentialCreationOptions var options = { "publicKey": ... }; return navigator.credentials.create(options); }).then(function (newCredentialInfo) { 生成されたクレデンシャルの処理 }).catch( function(err) { エラー処理 }); |
図10 PublicKeyCredentialデータの例
1 2 3 4 5 6 7 8 9 |
{ "id": "sL39APyTmisrjh11vghaqNfuru...", "rawId": "sL39APyTmisrjh11vghaqNf...", "response": { "attestationObject": "eyJjaGFsbGVuZ2...", "clientDataJSON": "o2NmbXRmcGFja2..." }, "type": "public-key" } |
図11 attestationObject項目に設定される情報の例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "fmt": "packed", "attStmt": { "alg": -7, "sig": "MEYCIQDyCG+pKJmcV...", "x5c": [ "MIICQjCCAcmgAwIBA..." ] }, "authData": { "credentialData": { "aaguid": "vfNjNcR0U8...", "credentialId": "Y0GeiMghzi...", (略) }, (略) } } |
図12 clientDataJSON項目に設定される情報の例
1 2 3 4 5 |
{ "challenge": "bWhMbDgxc1h4Z3B...", "origin": "https://example.com", "type": "webauthn.create" } |
図14 publicKeyデータの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "publicKey": { "allowCredentials": [ { "id": "Y0GeiMghzi...", "type": "public-key" } ], "challenge": "lZgXWOY0Go6HxmQP03...", "rpId": "example.com", "timeout": 60000, "userVerification": "required" } } |
図15 認証器に認証要求を出すJavaScriptプログラムの例
1 2 3 4 5 6 7 8 |
// 以下で設定するのがPublicKeyCredentialRequestOptions var options = { "publicKey": ... }; navigator.credentials.get(options) .then(function (assertion) { アサーションをRPサーバーに返す処理 }).catch(function (err) { エラー処理 }); |
図16 PublicKeyCredentialデータの例
1 2 3 4 5 6 7 8 9 |
{ "id": "Y0GeiMghzi...", "rawId":"Y0GeiMghzi...", "response": { "authenticatorData": "yHxbnq0iOEP3QN0K...", "clientDataJSON": "eyJjaGFsbG...", "signature": "NRUVOWSMtH..." }, } |