Edge 브라우저에서 Windows Hello 로그인
Edge 브라우저에서 얼굴 인식으로 특정 사이트의 로그인하는 시연을 Build 2016 키노트에서 봤습니다. 짧게 지나가서 '그런 것도 가능하네’라고 스치듯 지나갔지만 다시 곰곰히 생각해보면 지금 우리가 겪고 있는 불편함을 해소해 줄 수 있는 좋은 기술이라는 생각이 듭니다.
우리는 모두 패스워드를 기억하는 것에 힘들어 하고 있습니다. 우리가 쓰는 여러 웹 서비스들은 가입을 해야하고 강력한 보안이라는 중요한 이슈로 인해 어려운 패스워드를 만들어야 합니다. 이게 결국 하나의 패스워드를 돌려쓰는 결과로 이어지고 특정 사이트 하나가 해킹당해서 내 비밀번호가 노출이 된다면 여기저기 다 로그인이 될 가능성이 높습니다.
그런데 만약에 지문인식이나 얼굴인식으로 모든 웹 서비스에 로그인 할 수 있다면 어떨까요? 그러면서도 강력한 보안을 제공한다면 어떨까요? 이미 많은 사람들과 기업들이 이런 생각을 했고 설립한 단체가 FIDO Aliance (파이도라고 읽고 약자는 Fast IDentity Online 입니다.)라고 있습니다. FIDO에서 Web Authetication(FIDO 2.0 Web API) 스펙을 만들어서 W3C(World Wide Web Consortium)에 제출해서 워킹그룹이 만들어지고 표준화 절차가 진행중이라고 합니다.
Edge 브라우저 얼굴인식으로 웹 사이트에 로그인을 할 수 있는 것은 Edge 브라우저가 처음으로 Web Authentication 스펙을 일부 구현을 했기 때문입니다. 여기서 '일부 구현했다’라는 표현 스펙 전체를 구현하지는 않았다는 얘기입니다. 전체 구현하기에는 스펙이나 표준화 과정이 아직 좀 이른 단계라서 그렇습니다.
데모 사이트
여러분이 Windows 10 Anniversary Update 버전이라면 혹은 지금 현재 (2016-04-20) Windows Insider 프로그램으로 최신 윈도우 10이라면 https://testdrive-fido.azurewebsites.net/ 에 접속해서 테스트 해볼 수 있습니다. 얼굴인식 아니더라도 지문인식, PIN 번호로도 가능합니다.
데모는 등록과 로그인 두 단계로 진행됩니다. 첫번째 등록 단계에서는 아래와 같은 화면이 떠서 제 지문을 입력해서 등록합니다. 다음번 로그인 할 때는 아이디를 입력하고 바로 지문으로 로그인 가능합니다. 제 PC에서는 지문 인식만 지원을 하기 때문에 이런 화면이 뜨고 서피스 같이 얼굴인식을 지원하는 디바이스는 얼굴인식으로 가능합니다.
이런 시나리오 외에도 패스워드로 한번 인증하고 얼굴인식이나 지문으로 한번더 인증하는 방식도 가능하겠죠. FIDO에서 얘기하는 또 하나의 시나리오는 USB나 블루투스 장치를 통한 인증이나 스마트폰을 이용하는 등 외부 장치를 통한 인증입니다. 웹 사이트 로그인에 내 스마트폰의 지문 인식을 이용하는 식이겠죠. 이런 시나리오 좋네요.
등록 과정 상세
사용자들이 Windows Hello 를 통해 사이트에 로그인을 하려면 먼저 등록을 하게 되는데 서버와 클라이언트(여기서는 Edge 브라우저)는 아래와 같은 과정을 통해서 등록을 하게 됩니다.
- 아이디를 서버에 전달
- 서버에서 내려준 Javascript 가 돌면서 makeCredential 호출하면 Windows Hello 인증창 띄움
- 사용자가 지문, 얼굴인식 등을 이용하여 인증 성공
- Edge 브라우저에서 Private Key + Public Key 쌍을 만듬
- Private Key를 TPM에 저장 TPM이 없으면 소프트웨어 적으로 안전하게 저장
- Public Key는 서버로 전송
인증 과정 상세
등록 과정이 끝나면 다음번 접속할때는 Windows Hello로 인증이 가능한데 서버와 Edge 브라우저는 아래와 같은 절차를 따르게 됩니다.
- 서버에서 내려준 Javascript 가 돌면서 getAssertion 실행
- 서버에서 Challenge 값을 전송받음. Challenge 값은 랜덤넘버로 인증마다 다른 번호를 가지게 됨.
- Windows Hello 인증창이 뜨고 사용자가 인증 성공
- Edge 브라우저가 TPM에서 Private Key를 꺼내서 Private Key + Challenge 를 서명하면 Assertion 생성됨.
- Assertion (Auth Token)을 서버로 전송
- 서버에서 Assertion + Public Key = Challenge 가 나오는데 이걸 확인해서 인증 완료
이 과정이 안전한 이유 4가지
애초에 패스워드를 쓰지 않기 때문에 안전한 것입니다.
- 키로깅(Key Logging) 즉, 키보드입력을 캡쳐할 수 없다. 키보드를 쓰지 않으니까 …
- 네트워크 중간에 가로채기 (Phishing)를 해도 암호화 되어 있어서 의미 없다.
- 패스워드를 쓰지 않으니 패스워드 추측(Password Guessing)을 할 수 없다.
- 서버의 데이터베이스에 저장하는 것이 없기 때문에 데이터 베이스를 털어가도 거기에 뭐가 없다.
이제 이걸 어떻게 코딩하는가에 대해서 얘기해야 하지만 이번 포스팅에서는 여기까지만 하겠습니다. 지금 구체적인 구현이 궁금하신 분은 A world without passwords: Windows Hello in Microsoft Edge 를 확인해주세요. 물론 생각해봐야할 다른 이슈들이 있겠지만 패스워드를 사용하지 않는 세상은 편리하기는 할 것 같습니다.
관련 자료
A world without passwords: Windows Hello in Microsoft Edge Strong Authentication and the road to FIDO Windows Hello in Microsoft Edge