웹 인증: 웹 API 기본 인증 사용 방법
웹 인증(일명 WebAuthn 또는 FIDO2.0)은 비밀번호가 필요 없는 인증 표준입니다. 사용자가 문자와 숫자를 사용해 아이덴티티를 입증하지 않고 생체인식 키(지문 등)나 하드웨어(Yubikey 키 등)를 제시합니다.
비밀번호는 오랜 기간 웹사이트와 서버에 액세스하기 위한 용도로 사용되어 왔습니다. 로그인할 때 신원을 입증할 목적으로 사용자 이름을 입력하고 문자와 숫자로 구성된 문자열을 추가로 입력합니다.
하지만 사무직원들이 기억해야 하는 고유 사용자 이름과 비밀번호의 조합은 평균 최대 40개에 이릅니다. 비밀번호가 이렇게 많아지다 보면 같은 번호를 중복해서 사용하는 등 좋지 못한 습관으로 이어져 보안 활동에 지장을 줄 수 있습니다.
웹 인증(WebAuthn)의 짧은 역사
해커들에게 있어 비밀번호는 좋은 먹이감입니다. 약간의 코딩 실력과 운만 있다면 해커는 비밀번호 조합을 추측할 수 있고 교묘하게 비밀번호를 탈취할 수 있습니다. 버라이존에서 밝히길, 해킹 관련 침해의 80% 이상이 탈취된 자격 증명에서 비롯됩니다. 이제는 변해야 합니다.
웹마스터들은 이중 요소 인증 방법을 사용했습니다. 이 방법은 다음과 같이 구성되었습니다.
- 등록 휴대전화와 같은 디바이스가 사용자의 프로필에 연결됩니다.
- 로그인 사용자가 이름과 비밀번호를 입력합니다.
- 요청 서버가 권한 인증을 받은 디바이스에게 로그인 요청을 전송합니다.
- 완료 사용자가 디바이스로 수신된 지침에 따라 사이트에 로그인합니다.
이전에 로그인을 시도하면서 휴대전화로 수신되는 코드를 기다려본 경험이 있다면 이중 요소 인증을 사용한 셈입니다. 이는 효율적으로 보이지만 구현하는 곳은 많지 않았습니다. 일부 웹사이트는 자체적인 방법으로 로그인 프로세스를 해결하려고 했지만 오히려 사용자에게 불편만 초래했습니다. 그 밖에 도저히 이해하지 못할 정도로 미흡한 사용자 경험을 제공한 곳도 있었습니다.
W3C(World Wide Web Consortium)는 사용자 경험을 개선하는 동시에 보안까지 강화할 수 있는, 새롭고 효율적인 방법이 필요했습니다. 이에, 2019년에 웹 인증 API를 출시했습니다.
출시 이후 웹 인증은 널리 도입되었습니다. FIDO(Fast Identity Online)와 같은 그룹이 여기에 합류하면서 Amazon, Facebook, Microsoft 등 유명 기업들도 웹 인증 기술을 실험하기 시작했습니다.
웹 인증의 원리
웹 인증은 애플리케이션 프로그래밍 인터페이스, 즉 API입니다. 서버가 비밀번호 없이 사용자를 등록하고 인식할 수 있는 이유도 바로 이 API가 있기 때문입니다. 대부분의 웹사이트는 사용자가 고유한 사용자 이름과 비밀번호로 가입하여 회원이 될 수 있는 양식이 있습니다. 웹 인증은 이 모든 것을 대신합니다.
여기에는 다음과 같이 2가지 주요 과정이 있습니다.
- 등록. 사용자 이름과 일종의 자격 증명을 입력해야 합니다. 또한 얼굴 사진이나 지문과 같은 생체 인식 데이터를 제시하거나, 혹은 항상 가지고 다니는 타사 하드웨어를 1개 등록합니다.
- 권한 인증. 자격 증명이 생성 및 확인되면 일반적으로 사용자 운영 체제에서 인증자라는 것에 저장됩니다.
사용자가 웹 인증이 활성화되어 있는 웹사이트에 로그인하려면 다음과 같은 과정을 거쳐야 합니다.
- 등록. 익숙한 프로세스에 따라 고유한 사용자 이름을 선택합니다. 다만 여기서는 비밀번호를 선택하지 않고 생체인식 데이터를 제시하거나 물리적인 보안 키를 등록합니다.
- 반복. 사이트에 로그인할 때마다 비밀번호와 입증할 수 있는 등록 세부정보를 입력해야 합니다.
위의 프로세스를 마치면 자격 증명이라고 하는 정보를 얻게 됩니다.자격 증명은 웹사이트에서 사용되는 키 페어(공개 키 1개와 비공개 키 1개)입니다. 비공개 키는 개인 디바이스에만 저장되며, 어디에도 전송되지 않습니다. 공개 키는 보관 용도로 서버에 저장됩니다.
이러한 키가 어떠한 모습인지, 혹은 어떻게 실행되는지 알 수는 없습니다. 하지만 로그인 시도가 있을 때마다 중요한 역할을 합니다.
이후 사이트에 다시 로그인할 준비가 되면 디바이스와 서버가 다음과 같은 단계를 거치게 됩니다.
- 시도: 사용자 이름을 입력하거나, 그 밖에 다른 방법으로 서버에 대한 액세스 권한을 요청합니다. 시스템이 사용자의 키 저장 위치에 대한 지침과 함께 자격 증명을 전송합니다.
- 접속: 브라우저가 인증자와 연결하여 사용자에게 모든 권한 비트가 있는지 확인한 후 액세스 허용 여부를 결정합니다.
- 승인: 사용자에게 모든 권한 비트가 있으면 인증자가 로그인 승인에 서명하여 전송합니다.
- 서버 접속: 서버가 전송된 정보를 모두 검토하여 확인한 후 액세스를 허용합니다.
웹 인증은 공개/비공개 키를 사용하기 때문에 매우 안전합니다. 아무것도 기억할 필요가 없지만 이 사이트에서 사용할 고유 사용자 이름과 비밀번호를 만들었습니다. 따라서 아무것도 하지 않더라도 본질적으로 비밀번호 모범 사례를 따르고 있는 셈입니다.
웹 인증 구현 방법
W3C 팀의 목표는 도입 확산이었습니다. 최대한 많은 웹사이트들이 이 웹 인증 기술을 사용해 웹을 보호하기를 바랐습니다. 따라서 간편성과 용이성을 염두에 두고 코드를 작성한 것입니다.
웹 인증은 자격 증명 관리 API가 확장된 버전입니다. 여기에서 처리하는 함수는 크게 두 가지입니다.
- Navigator.credentials.create는 새로운 계정을 등록하거나, 혹은 새로운 키를 기존 계정과 페어링하는 데 사용됩니다.
- Navigator.credentials.get은 사용자가 기존 자격 증명으로 로그인할 때 사용됩니다.
Google은 웹사이트마다 통합 기법이 각양각색이라고 지적합니다. 예를 들어 페이지가 하나인 앱을 운영하는 사람과 팝업 창이 뜨는 복잡한 사이트를 운영하는 사람은 수행하는 작업이 다를 수밖에 없습니다. 하지만 Google은 코드를 이해하여 알맞게 적용하고 싶은 개발자들에게 다양한 지원과 유용한 정보를 제공합니다.
이 외에 변경 사항에 대한 사용자 교육도 필요합니다. 예를 들어 웹 인증을 생체인식이 아닌 하드웨어 키로만 사용하고 싶다면 사용자에게도 미리 알려야 합니다. 변경 사항이 적용되기 전에 먼저 필요한 하드웨어를 구매해야 하기 때문입니다.
웹사이트 인증이 필요하신가요?
기존 로그인 시스템을 변경하면 웹사이트 운영자와 사용자 모두에게 골칫거리가 될 수 있습니다. 하지만 새로운 기술에서 얻을 수 있는 다양한 이점들을 무시할 수 없는 것도 사실입니다.
웹 인증을 웹사이트에 도입했을 때 얻을 수 있는 이점은 다음과 같습니다.
- 보호. 인증 방식이 사이트마다 다르기 때문에 탈취한 비밀번호를 가지고 있더라도 액세스할 수 없습니다.
- 컴플라이언스. 웹 관리자도 비밀번호 재사용이 심각하다는 사실을 알고 있지만 45%는 여기에 동의하지 않습니다. 새로운 웹 인증 기술로 변경하세요. 그러면 사용자들에게 웹사이트 규칙을 따르라고 설득할 필요가 없습니다. 액세스 권한을 얻으려면 규칙을 따를 수밖에 없기 때문입니다.
- 위험 완화. 해커들은 비밀번호와 사용자 이름을 탈취하기 위해 데이터베이스에 깊숙히 침투하는 경향이 있습니다. 하지만 이렇게 탈취한 데이터는 재사용할 수 없기 때문에 결국 새로운 표적을 찾아 떠나게 됩니다.
- 고객 경험 개선. 사용자 이름/비밀번호를 기억하지 못해서 상품을 담아놓고도 장바구니를 두고 떠나는 고객이 약 1/3에 이른다고 합니다. 수많은 앱 사용자들도 마찬가지입니다. 웹 인증 환경에서는 원하는 사이트로 이동할 때 뛰어난 기억력이 필요하지 않습니다.
이 새로운 웹 인증 기술은 보기에는 번거로울 수 있지만 명확한 이점이 있습니다. Okta가 도와드리겠습니다.
Otka의 아이덴티티 관리 서비스를 통해 웹 인증을 얼마나 쉽고 안전하게 구현할 수 있는지 알아보세요. 지금 연락 주시면 바로 시작할 수 있습니다.
참고 자료
Here's Why Google, Apple, and Microsoft Think It's Time to Kill the Password. (2020년 1월). CNBC.
Enabling Strong Authentication with WebAuthn. (2018년 5월). Google.
Verizon DBIR 2020: Credential Theft, Phishing, Cloud Attacks (2020년 6월). Security Boulevard.
A Look at Password Security, Part IV: WebAuthn. (2020년 8월). Mozilla.
W3C Finalizes Web Authentication Standard. (2019년 3월). ZDNet.
Apple Joins Industry Effort to Eliminate Passwords. (2020년 2월). Computerworld.
Web Authentication: An API for Accessing Public Key Credentials. (2019년 3월). W3C.
Streamlining the Sign-In Flow Using Credential Management API. (2016년 4월). Google.
WebAuthn: What You Need to Know About the Future of the Passwordless Web. (2019년 3월). PCWorld.
Your Employees Are Reusing Passwords. Find Out How Many. (2020년 6월). Info Security.
When Customers Forget Their Passwords, Business Suffers. (2017년 6월). Phys.org.