유리 아커만(Yuriy Ackermann) 시니어 FIDO Alliance 인증 엔지니어
FIDO Alliance는 FIDO U2F 버전 1.2 사양의 출시를 발표하게 된 것을 기쁘게 생각합니다.
마지막 두 버전 이후 구조적 변경, 개선, 업데이트 및 새로운 보안 기능이 있었습니다. 아래에서는 이러한 변경 사항에 대해 자세히 살펴보겠습니다. 변경 사항의 요약 버전을 보려면 “FIDO U2F v1.2: 변경 사항 개요“로 이동하세요.
JS API
인터페이스 u2f {
무효 레지스터(
DOMString
appId
,
순서<RegisterRequest>
registerRequests
,
순서<RegisteredKey>
registeredKeys
,
function(RegisterResponse 또는 Error)
콜백
,
선택적 unsigned long? opt_timeoutSeconds
);
무효 기호(
DOMString
appId
,
DOMString
챌린지
,
순서<RegisteredKey>
registeredKeys
,
function(SignResponse 또는 Error)
콜백
,
선택적 unsigned long? opt_timeoutSeconds
);
};
고급 JS API가 업데이트되었습니다. 이전에는 모든 “RegisterRequest” 및 “SignRequest” appId 및 챌린지. JS API v1.2에서 appld는 첫 번째 인수로 전달됩니다. u2f.register입니다.
/* —– U2Fv1.0 —– */
appId = “https://example.com
“;
registerRequests = […];
하자 signRequests = […];
for (registerRequests의 regReq 허용) {
regReq.appId = appId;
}
for (signRequests의 signReq 허용) {
signReq.appId = appId;
}
u2f.register(registerRequests, signRequests, () => {
…
})
/* —– U2Fv1.2—– */
appId = “https://example.com
“;
registerRequests = […];
하자 signRequests = […];
u2f.register(appId, registerRequests, signRequests, () => {
…
})
v1.2가 재정의된 또 다른 방법은 인증 요청 사전입니다. ” 유형의 이전 사전SignRequest“가 “RegisteredKey” 사전으로 대체되었습니다.
/* —– U2Fv1.0 —– */
dictionary SignRequest { // 이전
DOMString 버전;
DOMString 챌린지;
DOMString 키 핸들;
DOMString appId;
};
/* —– U2Fv1.2 —– */
dictionary RegisteredKey { // 새로 만들기
DOMString 버전;
DOMString 키 핸들;
전송? 전송;
돔스트링? 앱ID;
};
이 변경으로 챌린지가 사전에서 제거되었으며 이제 u2f.sign 명령의 두 번째 인수입니다 첫 번째 인수는 u2f.register 명령과 동일한 appId입니다.
/* —– U2Fv1.0 —– */
appId = “https://example.com
“;
하자 signRequests = […];
for (registerRequests의 regReq 허용) {
regReq.appId = appId;
}
u2f.sign(사인 요청, () => {
…
})
/* —– U2Fv1.2 —– */
appId = “https://example.com
“;
let 챌린지 = “YJjw3jBh6RiMPKY0lMWq8GXm0Qap”;
registeredKeys = […];
u2f.sign(appId, 챌린지, registeredKeys, () => {
…
})
이전 버전과의 호환성을 위해 클라이언트는 SignRequest를 계속 처리할 수 있습니다. SignResponse 처리를 계속할 수 있는 RP에도 동일하게 적용됩니다.
또 다른 추가 기능은 “전송” 배열. RP는 특정 키 핸들이 사용하는 것을 전송하는 클라이언트에게 지시할 수 있습니다. 그것은 사용을 통해 그렇게합니다 전송 열거형:
열거형 전송 {
“bt”, // 블루투스 클래식(블루투스 BR/EDR)
“ble”, // Bluetooth Low Energy (Bluetooth Smart)
“nfc”, // 근거리 무선 통신
“usb”, // USB HID
“usb-internal”// 탈착식 USB HID (내장)
};
이는 클라이언트가 표시된 전송에 의해 지정된 프롬프트를 참조할 수 있는 UI/UX에 특히 유용합니다.
“Authenticator Transport Extension” 섹션에서 전송 검색에 대해 설명합니다.
MessagePort API는 자체 요청 정의 사전 IDL을 얻었습니다.
사전 U2fRequest {
DOMString 유형;
돔스트링? 앱ID;
부호 없는 길다고요? 타임아웃초;
부호 없는 길다고요? 요청 ID;
};
이는 “U2fRegisterRequest” 및 “U2fSignRequest“로 확장됩니다.
사전 U2fRegisterRequest :
U2fRequest
{
DOMString 유형 = ‘u2f_register_request’;
순서<RegisterRequest> registerRequests;
순서<RegisteredKey> registeredKeys입니다.
};
사전 U2fSignRequest : U2fRequest
{
DOMString
유형
= ‘u2f_sign_request’;
DOMString
챌린지
;
순서<
등록키
>
registeredKeys
입니다.
};
보시다시피 U2F JS API에 발생하는 변경 사항은 MessagePort API에도 동일하게 발생합니다.
/* —– U2Fv1.0 —– */
var port = <브라우저별 방식으로> U2F MessagePort를 얻습니다.
port.addEventListener ( ‘메시지’, 응답 핸들러);
port.postMessage({
‘유형’: ‘u2f_register_request’,
‘registerRequests’: [<RegisterRequest 인스턴스>, …],
‘signRequests’: [<알려진 토큰 1>에 대한 SignRequest, …],
‘시간 초과 초’: 30,
‘requestId’: <고유 정수> // 선택 사항
});
/* —– U2Fv1.2 —– */
var port = <브라우저별 방식으로> U2F MessagePort를 얻습니다.
port.addEventListener ( ‘메시지’, 응답 핸들러);
port.postMessage({
‘유형’: ‘u2f_register_request’,
‘appId’: <애플리케이션 ID>,
‘registerRequests’: [<RegisterRequest 인스턴스>, …],
‘registeredKeys’: [<알려진 토큰 1>의 RegisteredKey, …],
‘시간 초과 초’: 30,
‘requestId’: <고유 정수> // 선택 사항
});]
인증자 전송 확장
등록하는 동안 인증자는 배치 키를 사용하여 챌린지에 서명하고 공개 키에 X.509 인증서를 제공합니다. 이제 공급업체에서 X.509를 추가할 수 있습니다. FIDO OID 및 U2F 인증서 확장은 U2F 인증자 인증서임을 식별합니다.
— FIDO 얼라이언스의 OID
id-fido 개체 식별자 ::= 1.3.6.1.4.1.45724
— FIDO U2F 프로토콜 OID
id-fido-u2f 개체 식별자 ::= { id-fido 2 }
— FIDO U2F 인증서 확장 arc
id-fido-u2f-ce 객체 식별자 ::= { id-fido-u2f 1 }
인증자의 유형을 식별하기 위해 사양은 U2F 전송 확장을 정의합니다
— FIDO U2F 인증서 확장
id-fido-u2f-ce-transports 객체 식별자 ::= { id-fido-u2f-ce 1 }
fidoU2FTransports 확장 ::= {
구문 FIDOU2FTransports ID id-fido-u2f-ce-transports
}
FIDOU2FTransports ::= 비트 문자열 {
bluetoothRadio(0),– 블루투스 클래식
블루투스LowEnergy라디오(1),
uSB(2),
nFC(3)를 사용합니다.
uSBInternal(4)
}
원시 메시지 형식
이 업데이트의 가장 중요한 기능 중 하나는 자동 인증자 지원이 추가된 것입니다. 이 기능을 사용하면 APDU(Application Protocol Data Units)가 새 서명 매개 변수를 수신했습니다. 사용자 존재 및 서명(0x08)을 적용하지 않음 . 이제 클라이언트는 사용자 프레즌스를 적용하지 않고도 서명을 요청할 수 있습니다. 이는 인증 모드와 같은 “전달자 토큰”에 자동 모드를 사용하는 FIDO 기반 페더레이션 솔루션에 특히 유용합니다. FIDO 기반 솔루션의 가장 큰 장점은 누출 복원력입니다. FIDO 프로토콜은 디지털 서명을 기반으로 하고 프라이빗 키는 일반적으로 보안 enclave에 저장되므로 페더레이션 ID는 인증자를 복구할 수 없는 전달자 토큰으로 사용할 수 있으므로 클라이언트 쪽의 XSS 및 맬웨어에 대해 걱정할 필요가 없습니다.
U2FHID (유투피드)
U2FHID가 U2FHID_LOCK로 업데이트되었습니다. 명령. 이제 클라이언트는 최대 10초 동안 한 채널에만 통신을 잠그도록 인증자에게 요청할 수 있습니다. 클라이언트는 인증자 잠금 시간을 연장하기 위해 LOCK 명령을 지속적으로 보낼 수 있습니다.
메타데이터 문
U2F는 메타데이터 문에 대한 지원을 받았습니다.
{
“description”: “FIDO Alliance U2F 인증자 샘플”,
“attestationCertificateKeyIdentifiers”: [“7c0903708b87115b0b422def3138c3c864e44573”],
“프로토콜패밀리”: “u2f”,
“인증자 버전”: 2,
“upv”: [
{ “주”: 1, “부”: 2 }
],
“assertionScheme”: “U2FV1BIN”,
“인증 알고리즘”: 1,
“publicKeyAlgAndEncoding”: 256,
“attestationTypes”: [15879],
“userVerificationDetails”: [
[{ “사용자 확인”: 1 }]
],
“키 보호”: 10,
“matcherProtection”: 4,
“첨부 힌트”: 2,
“isSecondFactorOnly”: “참”,
“tcDisplay”: 0,
“attestationRootCertificates”: [
“MIICPTCCAeOgAwIBAgIJAOuexvU3Oy2wMAoGCCqGS
VdLIgtfsbDSu7ErJfzr4AiBqoYCZf0+zI55aQeAHjI…
lQ==”
],
“아이콘”: “BM10”
}
이러한 변경 사항을 수용하기 위해 다음과 같은 새 필드가 추가되었습니다.
- attestationCertificateKeyIdentifiers – RFC5280의 SHA-1 인증서 SKID
- assertionScheme – 새로운 U2FV1BIN 체계 정의
이러한 변경으로 이제 U2F를 메타데이터 서비스 프로토콜에서 지원하는 목록에 추가할 수 있습니다.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — —
U2Fv1.2에 대한 자세한 내용은 FIDO Alliance 사양 리포지토리를
참조하십시오.
참조
- 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/