최근 핀테크...핀테크..하면서 정부정책부터 기업에 이르기까지 핀테크로 먹거리를 찾기위해 분주하죠. 우리나라에서는 소위 '천송이코트' 이슈로 인해 불거졌다고 할 수 있는데요. 핀테크분야도 광범위하지만 그 중에서도 우리나라에는 간편결제분야에 많이 집중하고 있죠. 핀테크에 대해서는 나중에 따로 정리한번 하도록 하고 간편결제 또는 간편송금 등에 활용할 간편인증 방식으로 각광받고 있는 FIDO에 대해서 이야기 하고자 합니다.


FIDO 등장배경

FIDO는 Fast IDentity Online의 약자로서, 온라인 환경에서 빠르게 인증을 수행하기 위한 기술표준입니다. 지금도 온라인상에서 많은 사이트에 가입하고 로그인 하면서 쓰고 있는데 왜 굳이 FIDO라고 해서 새롭게 등장하는 것일까요? 우리는 기억도 못할 정도로 다양한 곳에 아이디와 패스워드를 만들고 가입하여 사용하고 있습니다. 항상 패스워드에는 보안을 강화하라고 하고 있지만 너무 많은 곳에 패스워드를 등록하여 사용하는 우리는 그것들을 다 기억하기 어렵죠. 그래서 대부분 동일한 아이디와 패스워드를 사용함에 따라 한 번 패스워드가 유출되면 그 파급 효과는 엄청나겠죠.


이렇듯 패스워드 의존도는 낮추면서 개방성˙확장성˙상호운용성을 제공하는 인증방식 개발을 목표로 2012년 7월 비영리단체인 FIDO Alliance가 설립되었고 2014년 12월 9일 FIDO 1.0을 공개했습니다. 조만간 2.0이 나올 것으로 알고 있구요.



FIDO의 2가지 표준

FIDO Alliance에서는 2가지의 표준을 공개했습니다. 두 표준 모두 공개키방식이며, 둘 중 원하는 것을 선택해서 활용하면 됩니다.


첫 째는 UAF(Universal Authentication Framework)표준으로 비패스워드(Passwordless)방식으로 지문, 음성, 홍체, 얼굴 등 사용자 고유의 생체정보 인증방식입니다. 디바이스에서 생체인증을 성공하면 디바이스에 저장된 개인키에 접근권한이 발생하여 전자서명하는 방식입니다.



둘 째는 U2F(Universal 2nd Factor)표준으로 기존 패스워드방식을 1차 인증요소로 사용하고 보안키를 저장한 동글을 이용하여 2차인증을 추가하는 인증방식입니다. USB로 연결된 동글내 버튼을 누르거나 NFC를 이용하여 탭핑하는 방식 등이 사용 시나리오로 등장합니다.




FIDO 사용 사용시나리오

생체인증을 활용하는 UAF를 예를 들어 FIDO를 어떻게 사용하는지 알아보겠습니다.

크게 ①등록, ②로그인 하는 시나리오에 대해서 설명하겠습니다.


등록



site.com에서 FIDO인증을 사용하기 위해 ①등록버튼을 누르고 ②지문인증을 하면 ③디바이스의 안전한 공간에 개인키/공개키 쌍을 새로 생성하여 ④site.com에 공개키를 전송하여 등록하게 됩니다. 이 때, 새로은 키는 디바이스별/서비스별/사용자계정별로 고유하게 생성됩니다.



로그인



등록된 site.com 사이트에 FIDO를 이용하여 쉽게 로그인하는 과정입니다. ①site.com에 로그인버튼을 누르고 ②지문인증을 하면 ③사이트에 등록된 공개키 쌍에 해당하는 개인키에 접근이 가능하고(실제 첼린지방식의 전자서명 수행) ④서버는 전자서명 확인 후 서비스에 로그인이 됩니다.


중요) FIDO를 생체인증이라고 생각하지만 생체인증은 디바이스 단에 저장된 개인키에 접근하기 위한 편리하고 안전한 인증수단을 제공할 뿐(디바이스 로컬인증) 실제 서버와의 인증 자체는 공개키방식이라고 생각하면 됩니다.




FIDO 주요 구성

UAF에 대한 구성을 살표보겠습니다.




UAF 프로토콜

사용자 단말과 서비스간의 프로토콜로서 앞에서 설명한 등록 및 사용자 인증(로그인)을 위한 프로토콜 외에 등록을 해제하는 등록해제, 그리고 보안 트랜잭션 확인(ex: 거래내용 확인) 프로토콜을 제공한다.


UAF 클라이언트/서버

UAF 프로토콜 통신을 위한 클라이언트 및 서버에 해당합니다. 클라이언트는 디바이스내 위치하고 서버는 서비스에 위치하여 등록된 사용자 계정에 대한 UAF 인증자 관리 등의 역할을 수행합니다.


UAF 인증자(Authenticators)

인증자는 보안 엔티티(Secure Entity)에 인증키를 생성하고 인증을 위한 서명을 수행합니다. 그림에서도 알 수 있듯이 인증자는 하나의 디바이스에 여러개가 존재할 수 있는데 지문, 홍체, 음성 등 생체인증 유형 별 제조사에 따라 존재하게 됩니다. 예를 들어, 삼성갤럭시 휴대폰의 지문인증도 하나의 인증자를 제공하고 임의의 기업이 삼성지문인증을 활용하여 다양한 서비스를 만들기 위해 FIDO 클라이언트를 구현하여 활용할 수 있는 구조입니다.


FIDO 프로토콜 동작 방식

앞에서 등록과 인증시나리오에 대해서 살펴보았으나 이번에는 FIDO에서 제공하는 4가지 프로토콜에 대한 플로우를 간단히 알아보겠습니다.


인증자 등록(Authenticator Registration)




①등록을 시작하면 ②서버에서 인증자에 대한 정책을 보내줍니다.

③사용자는 사용할 인증자를 선택하여 로컬인증을 수행하면 고유한 개인키/공개키 쌍을 생성하여 개인키는 안전한 보안엔티티에 저장하고 ④공개키는 서버로 전송한다. 이 때 Attestation(Authenticator Attestation ID, 인증자의 밴더 및 모델에 따라 제조시 저장한 고유한 키)를 함께 전송하면 ⑤서버에는 응답을 확인하고 Attestation과 공개키를 저장한다.


인증(Authentication)



①인증을 시도하면 ②서버에서 인증자에 대한 정책과 함께 첼린지값을 보내줍니다.

③사용자는 로컬인증을 수행하면 해당 개인키를 사용하여 첼린지 값에 전자서명을 하고 ④서버로 전송합니다. ⑤서버는 서명된 첼리지값을 사용자의 공개키로 검증함으로써 인증을 완료합니다.


트랜잭션 확인(Transaction Confirmation)



트랜잭션 확인의 활용을 예를 들면, 금융거래 후 거래할 내역이 맞는지 확인할 때 사용할 수 있습니다. 거래내용을 클라이언트에 전송하고 거래내용에 개인키로 서명하게 함으로써 중요거래에 대해 사용자에게 확실하게 인증받는 것입니다. 거래내용 무결성에 해당하고, 이를 잘 활용하면 부인방지에도 활용할 수 있겠죠.


①거래확인을 시도하면 ②서버에서는 트랜잭션 텍스트를 보내줍니다. 거래내용 등이 들어갈 수 있겠죠.

③사용자는 수신된 트랜잭션 텍스트를 확인하고 로컬인증을 수행하면 확인한 트랜잭션 텍스트에 대해 해당 개인키를 사용하여 전자서명을 하고(해시를 이용할 수도 있겠죠) ④서버로 전송합니다. ⑤서버는 트랜잭션 텍스트 서명값을 사용자의 공개키로 검증함으로써 트랜젝션 텍스트에 대한 무결성을 보증할 수 있습니디ㅏ.


인증자 해제(Authenticator Deregistration)



서비스를 더 이상 사용하지 않을 경우 해제를 할 수 있습니다.

①서버에 접속 후 해제를 신청하면 ②서버로부터 등록해제메시지를 수신하면 ③인증자에서 관련 정보를 삭제합니다. 물론 서버에서도 삭제를 하겠죠.



금융거래 활용 시 보안 담당자로서의 체크포인트

지금까지 FIDO 개념으로 시작해서 프로토콜까지 살펴보았습니다. 요약하면 FIDO는 온라인 환경에서 편리하고 안전하게 인증을 하기 위한 기술표준이며 주로 생체인증에 많이 사용될 수 있습니다. FIDO는 생체인증을 지원하지만 실질적으로는 공개키방식이라는 점을 인지하셔야 하며, 개인키에 접근하기 위해 다양한 인증을 제공할 수 있고 다양한 인증을 제공하기 위해서는 인증자가 제조사로부터 공급되어야 합니다. 또한 FIDO 생체인증을 활용할 경우 클라이언트 단말에서나 생체정보가 활용되는 것이지 서버에는 절대 사용자 생체정보가 저장되는 것이 아닙니다(공개키가 저장될 뿐). 

다양한 인증방식이 생길 수록 다양한 제조사가 생긴다는 얘기인데요, 결국은 개인키관리가 보안의 핵심인데 이를 관리하는 인증자를 얼마나 안전하게 만들었냐가 중요합니다. 따라서 생체인증을 이용하여 FIDO를 도입할 경우 개인키관리를 얼마나 잘하는지가 중요하겠습니다. 


그리고, FIDO를 이용하여 최근 단순인증기능에 사용하기도 하고 금융거래에서 공인인증서를 대체하여 사용하려고 하기도 합니다. FIDO를 어디에 활용하느냐에 따라 그 중요도가 달라지는데요, 만약 금융거래 중 계좌이체에 활용한다고 가정하면 높은 보안강도를 필요하겠죠. 게다가 우리나라에서는 아직도 부인방지에 대해 많이 고민하는 것 같습니다. 만약 FIDO를 이용하여 거래사실에 대한 부인방지까지 고려하고 싶다면 결국 TTP(Trusted Third Party)에서 공개키를 인증할 수 있는 기반구조를 구축하는 것이 가장 확실하겠죠. 그런데 이런 모양으로 가다보면 결국 공인인증서의 또 다른 형태가 될 것 같습니다.


마지막으로, FIDO 도입 시 FIDO Alliance 에서 인증여부를 확인 할 수 있습니다.

(https://fidoalliance.org/certification/fido-certified)




Client/Server/Authenticator 로 구분하여 각 제조사별로 인증여부에 대한 정보가 공개되어 있으니 도입 시 확인하시면 도움될 것 같습니다.



[참고]

https://fidoalliance.org/specifications/overview

UAF Technical Overview, Davit Baghdasaryan, Nok Nok Labs