ユーリー・アッカーマン・シニア FIDOアライアンス認定エンジニア

FIDOアライアンスは、FIDO U2Fバージョン1.2仕様のリリースを発表します。

過去 2 つのバージョン以降、構造の変更、改善、更新、および新しいセキュリティ機能が行われました。 以下では、これらの変更点について詳しく説明します。 変更の概要については、「FIDO U2F v1.2: 変更の概要」を参照してください。

JSのAPI

インターフェイス u2f {

ボイドレジスタ(

DOMString
appId

順序<RegisterRequest>
registerRequests

順序<RegisteredKey>
registeredKeys

function(RegisterResponseまたはError)
コールバック

オプションのunsigned long? opt_timeoutSeconds

);

ボイド記号 (

DOMString
appId

DOMストリング
チャレンジ

順序<RegisteredKey>
registeredKeys

function(SignResponseまたはError)
コールバック

オプションのunsigned long? opt_timeoutSeconds

);

};

高レベルの JS API が更新されました。 以前は、個別に設定する必要がありました。RegisterRequestと「SignRequest” appId と challenge. JS API v1.2 では、appld が u2f.registerです。

/* U2Fv1.0 ———- */

let appId = “
https://example.com
“;

let registerRequests = […];

let signRequests = […];

for(registerRequestsのregReqをしましょう){

regReq.appId = appId;

}

for(signRequestsのsignReqをlet signRequests){

signReq.appId = appId;

}

u2f.register(registerRequests, signRequests, () => {

})

/* U2Fv1.2—– —– */

let appId = “
https://example.com
“;

let registerRequests = […];

let signRequests = […];

u2f.register(appId, registerRequests, signRequests, () => {

})

v1.2 が再定義されたもう 1 つの方法は、認証要求辞書です。 タイプ ” の以前の辞書SignRequestは「RegisteredKey」辞書に置き換えられました。

/* U2Fv1.0 ———- */

dictionary SignRequest { // 古い

DOMString バージョン。

DOMString チャレンジ;

DOMString keyHandleです。

DOMString appIdです。

};

/* U2Fv1.2 ———- */

dictionary RegisteredKey { // 新規

DOMString バージョン。

DOMString keyHandleです。

トランスポート。 トランスポート;

DOMString? appIdです。

};

この変更により、チャレンジは辞書から削除され、u2f.sign コマンドの 2 番目の引数になりました 1 つ目は appId で、u2f.register コマンドと同じです。

/* U2Fv1.0 ———- */

let appId = “
https://example.com
“;

let signRequests = […];

for(registerRequestsのregReqをしましょう){

regReq.appId = appId;

}

u2f.sign(signRequests、() => {

})

/* U2Fv1.2 ———- */

let appId = “
https://example.com
“;

チャレンジ=”YJjw3jBh6RiMPKY0lMWq8GXm0Qap”;しましょう

let registeredKeys = […];

u2f.sign(appId、チャレンジ、registeredKeys、() => {

})

下位互換性のために、クライアントは引き続き SignRequest を処理できます同じことが RP にも当てはまり、RP は SignResponse の処理を続行できます

もう一つの追加機能は「トランスポート” 配列です。 RP は、特定のキー ハンドルを使用するトランスポートをクライアントに示すことができます。 これは、 トランスポート 列挙:

列挙型トランスポート{

“bt”, // Bluetooth クラシック (Bluetooth BR/EDR)

“ble”, // Bluetooth Low Energy (Bluetooth スマート)

“nfc”, // 近距離無線通信

“usb”, // USB HID

“usb-internal” // 取り外し不可能な USB HID (内蔵)

};

これは、指定されたトランスポートによって指定されたプロンプトをクライアントが参照できる UI/UX に特に役立ちます。

トランスポート検出については、「Authenticator Transport Extension」セクションで説明します。

MessagePort API は、独自の要求定義ディクショナリ IDL を取得しました。

辞書 U2fRequest {

DOMString 型。

DOMString? appIdです。

符号なし長い? timeoutSecondsです。

符号なし長い? requestIdです。

};

これは “U2fRegisterRequestと “U2fSignRequest に拡張されます

辞書 U2fRegisterRequest :
U2fRequest
{

DOMString 型 = ‘u2f_register_request’;

順序<RegisterRequest> registerRequestsです。

順序<RegisteredKey> registeredKeysです。

};

辞書U2fSignRequest:U2fRequest

{

DOMString


= ‘u2f_sign_request’;

DOMString

チャレンジ
;

順序<
RegisteredKey (登録キー)

>


registeredKeys
です。

};

ご覧のとおり、U2F JS API に発生する変更は、MessagePort API にも対応して行われます。

/* U2Fv1.0 ———- */

var port = <ブラウザ固有の方法で> U2F MessagePort を取得します。

port.addEventListener(‘message’, responseHandler);

port.postMessage({

‘タイプ’: ‘u2f_register_request’、

‘registerRequests’: [<RegisterRequest インスタンス>, …],

‘signRequests’: [<既知のトークン 1> の SignRequest …],

‘timeoutSeconds’:30、

‘requestId’: <unique integer> // オプション

});

/* U2Fv1.2 ———- */

var port = <ブラウザ固有の方法で> U2F MessagePort を取得します。

port.addEventListener(‘message’, responseHandler);

port.postMessage({

‘タイプ’: ‘u2f_register_request’、

‘appId’: <アプリケーションID>、

‘registerRequests’: [<RegisterRequest インスタンス>, …],

‘registeredKeys’: [<既知のトークン 1> の RegisteredKey, …],

‘timeoutSeconds’:30、

‘requestId’: <unique integer> // オプション

});]

オーセンティケーター トランスポート拡張機能

登録時に、オーセンティケータはバッチキーを使用してチャレンジに署名し、X.509証明書を使用して公開キーを提供します。 ベンダーは X.509 を追加できるようになりました これがU2Fオーセンティケーター証明書であることを識別するFIDO OIDとU2F証明書の拡張:

— FIDOアライアンスのOID

id-fido オブジェクト識別子 :: = 1.3.6.1.4.1.45724

— FIDO U2FプロトコルOID

id-fido-u2f オブジェクト識別子 ::= { id-fido 2 }

— FIDO U2F証明書拡張アーク

id-fido-u2f-ce オブジェクト識別子 ::= { id-fido-u2f 1 }

オーセンティケーターのタイプを識別するために、仕様ではU2F Transport Extensionが定義されています

— FIDO U2F証明書の拡張

id-fido-u2f-ce-transports オブジェクト識別子 :: = { id-fido-u2f-ce 1 }

fidoU2FTransports拡張機能:: = {

構文付き FIDOU2FTransports ID id-fido-u2f-ce-transports

}

FIDOU2FTransports :: = ビット文字列 {

ブルートゥースラジオ(0),– Bluetoothクラシック

bluetoothLowEnergyRadio(1)、

uSB(2)、

nFC(3)、

uSBインターナショナル(4)

}

未加工のメッセージ形式

このアップデートの最も重要な機能の1つは、サイレント・オーセンティケーターのサポートが追加されていることです。 この機能により、 アプリケーション プロトコル データ ユニット (APDU) が新しい署名パラメータを受け取りました dont-enforce-user-presence-and-sign(0x08) . これで、クライアントはユーザー プレゼンスを強制せずに署名を要求できます。 これは、認証モードのような「ベアラートークン」にサイレントモードを使用するFIDOベースのフェデレーションソリューションに特に役立ちます。 FIDOベースのソリューションの主な利点は、漏れに対する耐性です。 FIDOプロトコルはデジタル署名に基づいており、秘密鍵は通常、安全なエンクレーブに格納されるため、フェデレーションIDは認証器を回復不能なベアラートークンとして使用できるため、クライアント側でXSSやマルウェアについて心配する必要はありません。

U2FHIDの

U2FHID が U2FHID_LOCK で更新されました 命令。 これで、クライアントは、最大 10 秒間、1 つのチャネルのみに通信をロックするようにオーセンティケータに要求できます。 クライアントは、LOCKコマンドを継続的に送信して、オーセンティケータのロック時間を延長できます。

メタデータ ステートメント

U2F はメタデータステートメントのサポートを受けました。

{

“description”: “FIDOアライアンスサンプルU2F認証器”,

“attestationCertificateKeyIdentifiers”: [“7c0903708b87115b0b422def3138c3c864e44573”],

“プロトコルファミリー”: “u2f”、

“authenticatorVersion”:2、

“upv”:[

{ “メジャー”: 1, “マイナー”: 2 }

],

“assertionScheme”: “U2FV1BIN”、

“authenticationAlgorithm”:1、

“publicKeyAlgAndEncoding”:256、

“attestationTypes”: [15879],

“userVerificationDetails”: [

[{ “ユーザー検証”:1 }]

],

“キープロテクション”:10、

“matcherProtection”:4、

“attachmentHint”:2、

“isSecondFactorOnly”: “true”、

“tcDisplay”:0、

“attestationRootCertificates”: [

“MIICPTCCAeOgAwIBAgIJAOuexvU3Oy2wMAoGCCqGS

VdLIgtfsbDSu7ErJfzr4AiBqoYCZf0+zI55aQeAHjI…

lQ==”

],

“アイコン”: “BM10”

}

これらの変更に対応するために、次のような新しいフィールドが追加されました

  • attestationCertificateKeyIdentifiers — RFC5280 からの SHA-1 証明書 SKID
  • assertionScheme – 新しいU2FV1BINスキーム定義

これらの変更により、メタデータ サービスでサポートされているプロトコルの一覧に U2F を追加できるようになりました。

— — — — — — — — — — — — — — — — — — — — — — — — — — — — —

U2Fv1.2の詳細については、FIDOアライアンスの仕様リポジトリ

をご覧ください

 

参照

 


Subscribe to the FIDO newsletter

Stay Connected, Stay Engaged

Receive the latest news, events, research and implementation guidance from the FIDO Alliance. Learn about digital identity and fast, phishing-resistant authentication with passkeys.