Adam Powers, FIDO 얼라이언스 테크니컬 디렉터
FIDO에는 자주 언급되지만 거의 이해되지 않는 용어인 증명이 있습니다. FIDO 제품을 구현하는 엔지니어조차도 증명이 작동하는 방식이나 증명이 필요한 이유에 대해 혼란스러워하는 경우가 많습니다. 이 기술 노트는 FIDO 트랜잭션에서 증명과 그 역할을 명확히 하기 위한 시도입니다. 이 게시물은 주로 기술 커뮤니티를 위한 것이지만 FIDO에 대한 기본적인 이해가 있는 일반인에게도 충분히 명확하기를 바랍니다.
우선 사용자가 새로운 서비스(Google, Facebook, PayPal, GitHub 등)에 등록할 때마다 FIDO 인증자는 해당 서비스에 대한 새 키 쌍을 생성합니다. 키는 반드시 해당 서비스에 고유해야 하며 서비스 간에 공유되지 않습니다. FIDO와 가장 일반적으로 연결된 키 쌍이며 “자격 증명 키 쌍” 또는 “키 쌍”이라고 합니다. 사용자가 서비스에 등록하면 새 키 쌍이 생성되고 공개 키가 서비스로 전송되어 저장되고 나중에 사용자를 인증하는 데 사용됩니다. 해당 키 쌍은 증명 키 쌍이 아니며 더 혼란스럽게도 키 쌍은 “어설션”(인증 중 챌린지 서명)이라는 작업에 사용됩니다. “assertion”과 “attestation”이라는 용어는 자주 혼동됩니다 – assertion은 인증할 때 발생합니다. 증명은 등록하는 동안 발생합니다.
그림 1 : 사용자가 등록하는 각 서비스에 대해 새로운 “자격 증명 키 쌍”이 생성됩니다.
이러한 맥락을 염두에 두고 증명이란 무엇인가요? 장치 모델과 관련된 제조 시간 동안 장치에 구워지는 키 쌍입니다. 예를 들어 모든 YubiKey 4 디바이스에는 동일한 증명 인증서가 있습니다. 또는 모든 Samsung Galaxy S8에는 동일한 증명 인증서가 있습니다. 증명은 장치 모델에 따라 다르며 사용자가 등록할 때 특정 장치 모델이 있음을 암호화 방식으로 증명하는 데 사용할 수 있습니다. 사용자가 위에서 언급한 새 “자격 증명 키 쌍”을 만들면 서비스로 전송되는 공개 키가 증명 프라이빗 키로 서명됩니다. 사용자에 대한 새 계정을 만드는 서비스는 새로 만든 공개 키의 “증명 서명”이 디바이스에서 온 것인지 확인할 수 있습니다.
일반적으로 증명 키에는 연결된 증명 인증서가 있으며, 이러한 인증서는 서비스가 신뢰하는 루트 인증서에 연결됩니다. 이것이 서비스가 인증자의 증명 키에 대한 신뢰를 설정하는 방법입니다.
그림 2 : 등록하는 동안 새 공개 키가 만들어지고 장치가 제조될 때 장치와 함께 만든 증명 개인 키로 서명됩니다.
증명은 다음 두 가지 작업을 수행합니다. 1) 공격자가 자신의 등록 메시지를 가로채는 경우 증명 서명이 일치하지 않으므로 새 공개 키를 자신의 공개 키로 교체할 수 없습니다. 그리고 2) 서비스가 사용 중인 인증자의 출처를 알고 있다고 신뢰할 수 있습니다.
언뜻 보기에는 공격자가 공개 키를 자신의 키로 바꾸지 못하도록 하는 것이 증명의 더 중요한 측면인 것처럼 보일 수 있습니다. 그러나 FIDO를 등록하려면 일반적으로 사용자에게 이미 인증된 세션이 있어야 하고 통신이 TLS로 보호되므로 악의적인 동작이 발생할 가능성이 많지 않습니다. 이러한 이유로 많은 서비스는 “자체 증명”을 사용하는 경우 인증자를 거부하지 않습니다. 자체 증명(서로게이트 증명이라고도 함)은 인증자가 일부 루트 인증서에 다시 연결되는 증명 인증서 대신 자체 서명된 인증서를 사용하는 경우입니다.
그러나 금융 산업이나 공공 부문과 같은 일부 서비스는 서비스에 액세스하는 장치에 대해 더 많이 알아야 할 수 있습니다. 암호화 키가 안전한지, 생체 인식이 일정 수준의 정확도인지 등을 보장해야 합니다. 여기서 증명의 두 번째 측면이 등장하며, 이를 통해 서비스는 등록 요청이 특정 FIDO 인증자 모델에서 온다는 것을 신뢰할 수 있습니다.
등록하는 동안 장치의 고유한 모델 번호가 새로 생성된 공개 키와 함께 서비스로 전송됩니다. 고유 모델 번호는 UAF의 “AAID(Authenticator Attestation ID)”입니다. FIDO2의 “AAGUID(Authenticator Attestation Globally Unique ID)”; 또는 U2F의 “증명 인증서 키 식별자”입니다. 등록하는 동안 사용자로부터 새 공개 키를 받으면 이 고유 식별자를 사용하여 다음과 같은 서비스에서 메타데이터 문을 조회할 수 있습니다. FIDO 메타데이터 서비스(MDS). MDS의 각 레코드에는 디바이스에 해당하는 AAID, AAGUID 또는 증명 인증서 키 식별자가 있습니다.
올바른 레코드가 발견되면 레코드에는 다음과 같은 두 가지 필수 정보가 포함됩니다. 1) “증명 루트 인증서”; 그리고 2) 장치에 대한 메타데이터. 이전에 “자체(또는 서로게이트) 증명”에 대해 언급했지만 디바이스는 증명 인증서가 잘 알려진 증명 루트 인증서에 연결되는 “전체 기본 증명”을 사용할 수도 있습니다. 공개 키에 대한 증명 서명이 올바르고 인증서 체인이 루트 인증서에 대한 유효성이 검사되었다고 가정하면 서비스는 장치의 보안 및 생체 인식 특성과 같은 장치에 대한 다른 메타데이터를 신뢰할 수 있습니다.
(참고: FIDO 인증자 인증 프로그램은 키 및 기타 비밀이 외부 위협으로부터 보호되는지 테스트하고 확인합니다. FIDO는 생체 인식이 사용자를 올바르게 인증하도록 하는 생체 인식 인증 프로그램을 곧 출시할 예정입니다. 두 인증 모두 인증자에 대한 메타데이터로 표시되며, 서비스에서 인증자에 대한 더 강력한 신뢰를 구축할 수 있도록 추가 정보를 제공합니다.
그림 3 : 등록하는 동안 서비스는 장치의 고유 식별자를 사용하여 MDS(메타데이터 서비스)에서 장치에 대한 “루트 증명 인증서” 및 특성을 조회할 수 있습니다.
UAF 및 U2F의 경우 각각 고유한 증명 형식이 있습니다. UAF에는 사용자 지정 “태그 길이 값”(증권 시세 표시기) 구조체를 포함하며, U2F 프로토콜에는 증명 인증서와 증명 서명만 있습니다. FIDO2 및 WebAuthn이 출시됨에 따라 점점 더 많은 플랫폼이 플랫폼에 내장된 서비스로 증명을 포함하고 있습니다. Android에는 SafetyNet 및 Android 키 증명이 모두 있습니다. 대부분의 최신 PC에는 TPM 증명이 있으며 플랫폼이 발전함에 따라 앞으로 더 많은 증명 형식이 예상됩니다. 따라서 WebAuthn은 여러 증명 형식을 정의하고 나중에 새 증명을 추가할 수 있도록 허용합니다.
증명이 무엇이고 어떻게 사용되는지 명확히 하는 데 도움이 되기를 바라지만, 한 가지 더 짚고 넘어가야 할 점이 있는데, 이것이 제가 이 글을 쓰는 진짜 이유입니다. 양해 바랍니다 증명은 개별 장치가 아닌 장치 모델에 고유해야 합니다 .
모든 FIDO 작업과 마찬가지로 증명의 주요 특성 중 하나는 사용자의 개인 정보를 보호해야 한다는 것입니다. 증명 키가 각 개별 장치에 자체 키가 있는 것이 아니라 장치 모델에 공통적인 이유는 증명을 사용자를 식별하고 추적하는 방법으로 사용할 수 없기 때문입니다. 최근 FIDO 상호 운용성에서 저는 FIDO를 훌륭하게 구현한 믿을 수 없을 정도로 똑똑하고 교육을 잘 받은 엔지니어들과 함께 일할 수 있어 기뻤습니다. 그러나 디바이스의 모든 인스턴스에 대해 새 증명 인증서를 만들면 안 된다는 것을 이해하지 못했습니다. 휴대전화 또는 보안 키 모델을 구매하는 모든 사람이 동일한 모델의 기기를 사용하지만 다른 증명 인증서를 사용하는 경우 해당 증명 인증서를 사용하여 서비스 전반에서 개인을 추적하고 식별할 수 있습니다. FIDO는 강력한 개인 정보 보호 원칙을 기반으로 하며 증명을 사용하여 사용자를 추적하는 것은 위반 행위입니다 FIDO의 개인 정보 보호 원칙. 동일한 모델(100,000+)의 대규모 인증자 일괄 처리에서 증명 인증서가 사용되는지 확인하면 증명 인증서를 기반으로 사용자를 추적할 수 없습니다. 이 블로그 게시물이 우리 모두가 증명 인증서를 올바르게 사용하고 사용자의 개인 정보를 보호하는 데 도움이 되기를 바랍니다.