ユーリー・アッカーマン・シニア 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アライアンスの仕様リポジトリ
をご覧ください。
参照
- https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html
https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-authenticator-transports-extension-v1.2-ps-20170411.h
TML
https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.h
TML- https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-hid-protocol-v1.2-ps-20170411.pdf
- https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-metadata-statement-v1.2-ps-20170411.html
- https://www.ietf.org/rfc/rfc5280.txt
- https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/