FIDO2 / WebAuthn 알아보기

HYEONG HWAN, MUN/ 10월 26, 2020/ 미분류/ 0 comments

최근 라엘이는 개인정보 보호와 익명화암호화보안 통신의 방법에 대해서 관심을 가지고 있으며, 이와 관련된 새로운 기술들에 대해 알아보고 있다.
이 글에서는 작년 2019년 3월 4일W3C 웹 표준으로 지정된 FIDO2 (WebAuthn)에 대해 알아보도록 하겠다.

* 먼저 읽어보기

암호를 없애려는 Microsoft의 노력 빅뉴스: FIDO2/ WebAuthn이 후보 제안 상태에 도달! - https://www.microsoft.com/ko-kr/microsoft-365/blog/2018/04/12/big-news-in-our-drive-to-eliminate-passwords-fido2-webauthn-reaches-candidate-recommendation-status/

Microsoft Identity Division 프로그램 관리 부문 이사 Alex Simons 에 따르면, Microsoft는 Windows 10의 아주 초기 단계부터 암호를 없애기 위해 노력해 왔다고 한다.
또한, 암호 없는 미래는 빠르게 다가오고 있으며, Microsoft는 이러한 시대가 도래하기를 기대하고 있다고 한다.


 

용어의 뜻을 알아보도록 하자.
FIDO 는 Fast IDentity Online 의 약자이며, 온라인 상의 빠르고 안전한 인증을 의미한다. (F + 아이도 = 파이도)
읽을 때는 페스트-아이덴티티-온라인 또는 파이도라고 부른다.

 

기존의 ID, Password 방식의 가입과 인증은 사용자에게 반복적인 ID, Password 입력을 강요했고, 이로 인해서 많은 보안 문제 (Phishing, Brutu forcing, 약한 비밀번호, 반복적인 비밀번호)가 발생했다.

온라인 사용자에게 스트레스를 주지 않으면서 빠르게 인증하는 방법에 대해 논의가 시작되었고, 그것이 FIDO Alliance (파이도 연합회) 의 시초가 된다.

 

< FIDO ALLIANCE 로고 >

FIDO Alliance 공식 사이트 : https://fidoalliance.org/specifications/?lang=ko

WebAuthn 은 Web Authentication 의 약어이며, Public Key 기반의 웹인증을 의미한다. 2019년 3월 4일에 웹표준 기술이 되었기 때문에, 현재의 이 기술은 Modern Browser에서 기본 기능으로 포함되어 있다. (MS Edge, Safari, Chrome, Firefox, IOS Browser, Android Browser)

* FIDO 기술은 크게 내장인증(지문인식, 얼굴인식, 모바일 핀번호), 외부인증(USB/NFC/BLE 방식의 하드웨어 보안키, 전용인증어플) 로 나뉜다.

지문인식, 얼굴인식, 모바일 핀번호는 OS 레벨에서 구현이 되어 있어야 하는 것이므로(보안된 영역에, 데이터를 저장하고, 비교 알고리즘을 구현해야 함), 스마트폰 단말기에서 주로 사용한다.

이 글에서는 다루기 쉽고, USB / NFC / BLUETOOTH 방식으로 동작하는 외부인증 에 대해서 알아볼 것이다.

< FIDO2 Auth >

 

라엘이는 이 기술에 대해 실습하기 위해서 올해 초에 Google Titan Security Key 라는 것을 구매하였다.
제품 소개 : https://cloud.google.com/titan-security-key?hl=ko

< 사진 : Google Titan Security Key Bundle >

 

이유는 모르겠는데, 이 제품은 현재 국내에서 판매를 하지 않아서 미국 구매대행을 통해 구입하였다.

왼쪽은 BLE/NFC/USB-A 키 이고, 오른쪽은 NFC/USB-A 키이다. (즉, 1개의 번들에 2개의 보안키가 들어있음)

왼쪽의 동그란 부분과, 오른쪽의 금색 부분은 인증시 터치하는 부분이다. FIDO 인증은 User Presence(사용자의 존재) 를 필요로 한다.
BLE 및 USB-A 의 경우에는 버튼의 터치가 User Presence 를 의미하며, NFC 의 경우 근접 인식 자체가 User Presence를 의미하므로 버튼 터치를 하지 않아도 된다.

 

사용 예제

이론에 대해 알아보기에 앞서, WEB에서의 사용 예제를 살펴 보도록 하자.
인증의 보조수단(MFA)로 사용하는 방법, 비밀번호 대신(Passwordless) 사용하는 방법, 아이디 대신(Usernameless) 사용하는 방법등으로 구현 할 수 있다.

FIDO 2 Example : https://blog.lael.be/demo-generator/fido2/1.basic.html

< Google Chrome 에서의 사용 >

 

< 제가 사용하는 iPhone 에서의 사용 >

 

< iPhone 의 경우 NFC 인식범위기기 상단(사각형부분)이므로 빨간색 동그란 곳에 인식 시키는 것을 추천한다 >

 

< 지정된 Security Key 로만 인증할 수 있다 >

사례 1) 일반적으로(대부분의 회사에서) ADMIN ID/ ADMIN PW 를 팀원끼리 공유하는 경우가 많다(매우 많다).
사례 2) 요즘은 비밀번호 복잡도를 강제하는 곳이 많아서, 계정 비밀번호를 모니터 옆에 포스트잇으로 써서 붙여두는 경우가 많다.
사례 3) 전화 통화나 일상 대화 중, 의도치 않게 제 3자에게 계정 정보가 유출되는 경우가 있다.

위의 3가지의 흔한 사례가 있다. 물론 담당자들(및 관련자들)에게 보안교육을 시켜서 문제를 막는 방법도 있지만, 그냥 이렇게 하드웨어 보안키를 도입한다면 문제가 확실히 해결된다.
권한이 있는 사람이 Security Key 를 쥐고 있으면 되는 것이다.

해킹으로부터도 안전하게 된다. 해킹툴이 로그인을 통과할 방법이 없기 때문이다.

이 정도면 이러한 FIDO 2 을 도입할 필요성이 충분히 전달되었다고 생각한다.

이제 관련 이론에 대해 알아보도록 하자.

 

FIDO 의 역사

때는 2009년, 전세계에서 가장 유명한 전자결제 업체 Paypal 에서, 비밀번호 없이 사용자를 인증하는 방법에 대해서 논의를 합니다. 그리고 비밀번호 입력없이 인증이 가능하도록 어떤 방식을 구현했습니다.

2012년 7월, PayPal, Lenovo, Nok Nok Labs, Validity Sensors, Infineon 및 Agnitio 업체가 비밀번호 없는 인증 구현에 대해 논의합니다. (소모임)
2013년 2월, 공식적으로 Fido 얼라이언스가 출범합니다.

2014년 12월, 비밀번호 없는 인증(FIDO UAF 1.0), 두번째 요소 인증(FIDO U2F 1.0)이 발표됩니다.

2019년 3월, 웹 에서의 비밀번호 없는 인증 (FIDO 2 - Web Authentication JavaScript API)가 W3C에 의해 웹표준화 되고 공개됩니다.

FIDO 2 는 FIDO 1.0 보다 뛰어난 향상된 버전이 아니라, 별개의 종류입니다.

 

FIDO 프로토콜의 종류

FIDO는 구현 방식에 따라 아래 3가지 제안이 나와 있습니다.
https://fidoalliance.org/specifications/download/?lang=ko

1) Universal Authentication Framework (UAF) : ID 와 Password 인증 방식 대신, 개인의 고유한 생체정보를 인증 과정에 사용합니다.
스마트폰은 생체정보 스캔 기능을 지원하고 있으며, 따라서 모바일 환경에 적합합니다.

사용 예 : 얼굴인식, 지문인식

< 가장 널리 쓰이고 체감되는 Fast Identity 예시 : 지문 인식. 지문이 일치하면 인증 권한을 부여한다. >

 

2) Universal 2nd Factor (U2F) : 기존의 ID, Password 인증 방식과 함께 “생체정보나 별도의 2차 인증 장치“를 사용하는 방식입니다.
FIDO U2F 기술이 적용된 장치가 필요합니다.

Google 은 FIDO2 표준이 생기기 전부터 웹에서 U2F 장치를 시험적으로 먼저 도입하고 사용했습니다.
모든 운영체제의 크롬브라우저에서 chrome-extension://kmendfapggjehodndflmmgagdbamhnfd/  위치로 이동하면 CryptoTokenExtension 이 실행됩니다.

현재는 W3C에서 권장하는 FIDO2 가 출시되었으므로, 웹에서는 FIDO2 방식을 사용하는 것이 좋습니다.

 

3) FIDO 2 : Web Browser를 사용하는 Web 환경에서 사용할 수 있도록, UAF와 U2F를 통합한 것입니다.
이를 지원하기 위해 WebAuthn 표준이 제안되었으며, 2019년 3월 4일에 W3C 의 Recommendation 이 되었습니다. 따라서 현재의 모든 Modern Browser 는 FIDO2(WebAuthn)를 지원합니다.

 

 

Registration(등록) 과 Attestation(증명)

FIDO 를 사용하기 위해서는 등록과 인증의 단계가 있습니다.

FIDO Device 는 “App ID” 별로 Public Key - Private Key 를 생성합니다.

 

 

사용자 등록을 할 때, FIDO authenticator는 해당 서비스를 위해 새로운 Key Pair(Private-key - Public-key)를 생성하고, Public-key는 FIDO 지원 Device에 의해 FIDO Server에 보내어지게 됩니다. Private-key는 Authenticator 내부의 secure key store 영역에 안전하게 보관되어지며, 외부로 유출되어서도 안됩니다. 반드시 Private-key 는 그 기기를 벗어나서는 안됩니다.

서비스마다 새로운 Key Pair를 생성하기 때문에, 하나의 Key Pair는 하나의 서비스에만 사용됩니다.

 

(출처 : FIDO Alliance)

Public Key는 서비스업체의 FIDO Server에 전달되어야 하며, 이 FIDO Server는 Public-key를 저장하고, 이후 사용자 인증에 사용해야 합니다.

등록 프로세스의 초기에, FIDO Server가 등록 요청 Device에게 challenge를 보내는 데, 이것은 replay attack(MITM)을 방지하기 위한 기능입니다.

“FIDO 지원 Device”에서는 새로운 Key Pair 를 생성하기 전에, 사용자 정보를 받아서 Device 내부에 저장하는 작업을 먼저 수행합니다.
사용자 정보는 사용자 본인을 확인하는 용도로 사용됩니다. 생체정보를 사용자 본인임을 확인하기 위한 용도로 사용한다면, 사용자의 생체정보는 Device의 Capture 기능으로 capture되어, Device 내부에만 보관되어지고, 이 생체정보는 FIDO Server로 보내지지 않습니다.

 

attestation은 FIDO Server에 등록 하는 과정에서 사용되는 프로세스로, 특정 attestation certificate를 가진 즉 인증된  FIDO Authenticator(인증장치)에서 사용자가 “인증 정보(credential key pair)”를 생성 하였다는 것을 증명하기 위한 용도로 사용되는 프로세스 입니다.

attestation(증명)를 위하여, “attestation key pair”가 사용되는 데, “attestation key pair”는 제조사에서 “Authenticator가 내장된 Device”를 생산할 때, Authenticator 안에 심어놓은 Key Pair 입니다. 정확히 말하면 Private-key 와 Certificate(Certificate안에 Public-key가 들어있음) 입니다. Device 제조사는 생산하는 model 별로 동일한 “Private-key 와 Certificate(인증서)”를 심어 놓습니다. 제조사가 동일하더라도 model이 다르면 “Private-key 와 Certificate”는 다릅니다.

“attestation key pair” 는 앞에서 언급한 “credential key pair” 와 다릅니다. “attestation key pair”는 한 쌍만 존재하며, “credential key pair”는 서비스 마다 생성됩니다.

attestation(증명)은 사용자가 등록을 할 때, 사용자가 특정한 Device Model을 가지고 인증 정보를 생성하였다는 것을 암호기법으로 증명하는 것입니다. 생성된 key pair 중 Public-key를 서비스회사의 서버로 보낼 때, attestation private-key로 sign(전자서명)한 signature 와 attestation certificate 를 함께 보내는 것입니다. 즉 서버는 받은 Public-key가 특정 Device로 부터 보내졌다는 것을, 함께 받은 attestation signature를 검증(attestation certificate 안에 들어 있는 attestation public-key로 검증)함으로 확인합니다. 이를 위해 서버는 attestation certificate 가 신뢰할 만 한 것인지를 먼저 검증해야 합니다. 따라서 Device 제조사는 공인된 CA 기관으로부터 device certificate를 받아야 합니다. 즉 attestation 프로세스는 기존 PKI 방식을 활용합니다.

attestation(증명) 은 Public-Key가 서비스 회사로 전달되는 도중에 변조되는 것을 방지하는 기능을 수행합니다. 하지만 이미 Device 와 서비스회사 사이의 통신은 TLS 프로토콜을 사용하여 암호통신으로 수행되므로, 전달되는 도중에 Public-Key가 외부 공격자에 의해 변조되는 가능성은 없기 때문에, CA 기관에서 발행한 Certificate 대신 스스로 발행한 Self-Certificate를 사용해도, 서비스 회사에서 받아 들일 수 있습니다 이러한 기능을 Self Attestation 이라고 부릅니다.

UAF 와 U2F 는 attestation 관련 정보를 내부에 저장하거나 서비스회사로 보내기 위한 각각 고유한 attestation format을 가지고 있습니다.

참고로, attestation key 및 certificate는 model 별로 생성되기 때문에, attestation key 또는 attestation certificate로 사용자를 tracking을 할 수 없습니다. attestation certificate를 FIDO의 규정에 어긋나게 device별로 발행하면 사용자의 Privacy가 보호되지 않는다고 합니다.

 

Authentication(인증) 과 Assertion(승인)

인증(authentication)에는 로그인을 위한 인증거래 확인을 위한 인증, 2가지 경우가 있습니다.

FIDO Device는, 등록 하였을 때와 동일한 사용자 확인 방식(생체정보, PIN, 외부인증장치 등)을 사용하여(예를 들면, 지문 인식기에 손가락을 대던가 USB token의 버튼을 누름), 사용자 본인임을 확인합니다. Device에 저장된 사용자 정보와 일치하지 않으면 더 이상 진행하지 않습니다. 먼저 사용자 확인을 하는 목적은, Device의 Authenticator 내부에 저장된 Private-key를 사용하기 위해서 입니다.

위의 단계를 통과하면, FIDO Device는 FIDO Server에 자신의 account 사용을 위한 인증(authentication)을 요청하며, FIDO Server는 Device에게 challenge(random Number)를 보냅니다(실제 구현 시에는, challenge를 받은 다음에, 사용자 본인 확인 프로세스를 수행하는 순서로 되어 있습니다)..

Device는 자신의 Private-key로 challenge를 sign(전자서명)해서 FIDO Server로 보냅니다. Device에서 Private-key로 sign하는 기능을 assertion(승인) 이라고 하며, assertion 하는 데 사용되는 Private-key는 앞에서 언급한 “credential key pair” 에 속한 Key 입니다. 즉 Device는 FIDO Server에게 assertion(승인) 요청을 보냅니다.

FIDO Server는 내부에 보유한, 사용자 account에 해당되는 Public-key로 sign된 challenge를 검증하여, 검증되면 인증(authentication)이 완료 되었다는 것을 Device에게 알려 줍니다.

즉 assertion(승인)은 인증(authentication) 할 때 수행되는 프로세스 중 하나에 속합니다.

인증하는 과정이 Server에서 challenge(random number)를 Client에게 보내고, Client는 자신만이 보유하고 있는 Private-key로 challenge를 sign(전자서명)해서 Server로 돌려 보내면, Server는 Private-key에 대응되는 Public-key로 검증하는 것으로 되어 있습니다. 이러한 방식을 “Public-Key Cryptography 기반 challenge-response protocol” 이라고 부릅니다. UAF는 “Public-Key Cryptography 기반 challenge-response protocol”에다가 스마트폰이 가진 생체정보 인식 기능을 융합한 것입니다.

FIDO 인증 방식을 간단히 기술할 때, “사용자 단말기에서 인증을 한 후, 전자서명 값을 FIDO인증 서버로 보내어 서버에서 최종 인증하는 방식입니다” 라고 합니다. 첫 번째 “인증” 은 “Local 인증”을 의미하며, 두 번째 “인증”은 “서버에서 하는 원격 인증”을 의미 하지만, “인증”이란 용어가 두 군데 나오기 때문에 혼동을 줄 수 있으므로, 좀 더 명확히 기술하여, “사용자 단말기에서 먼저 사용자 확인을 한 후, 전자서명 값을 FIDO인증 서버로 보내어 서버에서 최종 인증하는 방식입니다” 라고 해야 합니다.

아래 그림은 인증 프로세스 개념을 보여 주는 그림입니다.

(출처 : FIDO Alliance )

FIDO 의 단점

사용하기 위해서 먼저 APP 마다 등록을 해야 합니다. 처음 1회 사용시 불편할 수 있습니다.
인증 기기의 분실시, 기존 인증을 제거하고 재등록을 해야하는 번거로움이 있을 수 있습니다.
인증 장치가 어떤 이유로 사용할 수 없을 때, 로그인을 하지 못하는 상황이 발생 할 수 있습니다.

물리적으로 도난 당할 수도 있습니다. 물론 다중인증(아이디/비밀번호, 핀번호등)과 함께 사용하는 경우가 많으므로 큰 문제가 없을 수도 있습니다.

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*