비밀번호에 얽힌 이야기는 늘 같은 결말로 끝난다. 누군가 당신의 비밀을 어딘가에 보관하고 있었고, 그걸 잃어버렸다.
연도는 상관없다. 처음에는 공용 컴퓨터의 평문 텍스트 파일 안에 들어 있었고, 시스템에 그 파일을 출력해 달라고 부탁하는 것만으로 충분했다. 1979년, 모리스와 톰프슨은 해시에 솔트를 넣고 계산 비용을 비싸게 만들어서 훔친 목록이 곧바로 비밀번호 목록으로 바뀌지 않게 하는 방법을 설명했다. 엄청난 개선이었다. 그리고 그 뒤로는 끝에 특수문자 하나를 붙이게 만든 구성 규칙들이 왔다. 하지만 문제의 모양은 그 긴 세월 동안 1밀리미터도 움직이지 않았다. 비밀이 있고, 당신이 그것을 알고, 서버가 그것을 확인할 수 있고, 따라서 서버에게는 잃어버릴 것이 있다.
그 이후 우리가 한 일이라고는 그 비밀을 더 길게, 더 괴상하게, 더 짜게, 더 깨기 느리게 만든 것뿐이다. 그보다 앞선 질문을 던진 사람은 없었다. 공유된 비밀이 아예 없다면?
1976년 비밀을 두 조각으로 쪼갤 수 있다는 생각
1976년, 휘트필드 디피와 마틴 헬먼이 New Directions in Cryptography를 발표했다. 발상은 너무 단순해서 거의 모욕적으로 느껴질 정도였다. 키는 서로 바꿔 쓸 수 없는 두 조각으로 쪼갤 수 있다. 하나는 사방에 뿌리고, 다른 하나는 집 밖으로 내보내지 않는다. 개인 키로 서명한 것은 공개 키로 검증되지만, 공개 키로는 아무것도 서명할 수 없다.
서버 입장에서 이 문장을 다시 읽어 보라. 사이트는 이제 그것만 있으면 들어올 수 있는 무언가를 보관할 필요가 없다. 아무 문도 열지 못하는 반쪽만 있으면 된다.
이 발상이 당신 은행 화면에 도달하기까지 거의 반세기가 걸렸다는 사실은 우리 업계에 그리 명예로운 이야기가 아니다. 클라이언트 인증서는 존재했고 잘 작동했다. 없었던 것은 석사 학위 없이도 쓸 수 있는 사용 방법이었다. 암호학은 풀려 있었다. 사용성은 아니었다.
2013년 웬일로 누군가 합의를 보다
2013년에 FIDO 얼라이언스가 출범했다. 목표를 대놓고, 그리 겸손하지 않게 내건 산업 컨소시엄이었다. 비밀번호 의존도를 줄이겠다는 것. 중요한 건 기술이 아니었다. 기술은 이미 있었다. 중요한 건 제조사와 브라우저와 서비스가 한자리에 앉아 같은 프로토콜에 합의했다는 사실이다. 관료주의처럼 들리지만, 정확히 그게 빠져 있던 조각이었다. 브라우저 하나와 서비스 하나에서만 작동하는 인증 수단은 수단이 아니라 일화다.
2019년 브라우저가 암호학을 배우다
2019년 3월, WebAuthn이 W3C 권고안이 되었다. 쉬운 말로 옮기면, 이제 어떤 웹페이지든 브라우저에게 — 플러그인도 드라이버도 없이, 표준 API로 — 키 쌍을 만들고 그것으로 서명해 달라고 요청할 수 있게 됐다는 뜻이다.
군더더기 없이 흐름은 이렇다. 가입할 때 당신 기기가 그 사이트 전용으로 새 키 쌍을 만든다. 공개 키는 보낸다. 개인 키는 기기 자신이 간직하고, 당신의 지문이나 얼굴이나 기기 PIN으로 보호한다. 다시 방문하면 사이트가 무작위 챌린지를 보내고, 당신 기기가 그것에 서명하고, 사이트는 이미 갖고 있던 공개 키로 서명을 확인한다.
여기서 일어나지 않는 일을 보라. 비밀이 오가지 않는다. 서버는 당신의 개인 키를 애초에 가진 적이 없으니 잃어버릴 수도 없다. 내일 데이터베이스가 통째로 유출되어도 털리는 것은 공개 키 목록이다. 전화번호부를 훔치는 것과 대충 비슷한 일이다. GPU에 돌릴 해시도, 대입해 볼 사전도 없다. 어려운 게 아니라, 거기엔 값나가는 게 아무것도 없다.
부수 효과가 본체보다 크다
기기가 그 키 쌍을 만들 때, 키를 도메인에 묶는다. mybank.co.kr을 위해 저장한
키는 오직 mybank.co.kr에만 제시된다. 정책도 아니고, 경고도 아니고, 주소창
빨간 표시도 아니다. myb4nk-security.com을 위한 키는 존재하지 않는다.
브라우저가 못 찾는 이유는 애초에 만들어진 적이 없기 때문이다.
이건 피싱을 죽인다. 줄이는 게 아니라 작동 원리 자체를 없앤다. 피싱이라는 사업 전체가 당신이 엉뚱한 사이트에 비밀번호를 타이핑할 수 있다는 사실 위에 서 있고, 우리는 몇 년째 그걸 사용자 교육과 보안 인식 캠페인으로 고치려 했다. 전부 증상만 다룬 것이다. 당신 눈은 비슷하게 생긴 URL에 속는다. 당신 휴대폰은 안 속는다. 읽지 않기 때문이다. 문자열을 비교할 뿐이다.
가는 김에 또 하나의 대죄인 재사용도 함께 쓸어 간다. 사이트마다 키 쌍이 따로 있다. 재사용하고 싶어도 재사용할 것이 없다.
2022년 세 거인이 화해 서명을 하다
2022년 5월, 애플과 구글과 마이크로소프트가 공동으로 자사 플랫폼과 브라우저에서 FIDO 자격증명 — 패스키 — 지원을 확대하겠다고 발표했다.
그게 이것을 기술 노트에서 부모님께 설명할 수 있는 무언가로 바꿔 놓았다. 그 전까지 WebAuthn은 거의 언제나 물리적인 USB 키를 뜻했다. 훌륭하고, 세 사람쯤 쓰는 물건이었다. 패스키는 이미 손에 쥐고 있는 휴대폰 안에 살고, 얼굴로 잠금이 풀린다.
고치지 못하는 것
이제 깨알 같은 글씨 차례다. 업계는 앞으로 몇 년 동안 이 부분이 없는 척할 테니까.
계정 복구는 여전히 무른 지점이다. 구멍은 사라지지 않았다. 옮겨 갔을 뿐이다. 기기를 잃어버리면 누군가는 당신이 당신이라고 판단해야 하고, 그 판단은 거의 항상 이메일로, 문자로, 아니면 콜센터의 사람과 통화하면서 내려진다. 그 사람은 예전과 정확히 똑같은 표적이다. 현관문은 방탄으로 만들었는데 뒷문은 그대로다.
동기화는 당신을 생태계에 묶는다. 패스키가 편한 이유는 플랫폼이 당신 기기들 사이에 그것을 복제해 주기 때문이다. 이건 당신의 열쇠가 특정 회사의 열쇠고리 안에 산다는 말을 다르게 표현한 것이다. 거기서 나오는 게 불가능하지는 않지만 버튼 하나도 아니다. 기억해야 하는 문제를 소속되는 문제로 바꾼 셈이다.
그리고 휴대폰을 잃어버려도 여전히 로그인은 해야 한다. 실질적으로 이 말은 거의 어떤 사이트도 비밀번호를 없애지 않았다는 뜻이다. “로그인에 문제가 있으신가요?” 뒤에 숨겨 놓았을 뿐이다. 그 링크가 존재하는 한 비밀번호도 존재하고, 그것은 늘 그랬듯 형편없다. 사슬은 당신이 내놓는 가장 우아한 방식이 아니라 당신이 받아 주는 가장 약한 방식에서 끊어진다.
그동안 무엇을 할 것인가
패스키를 제공하는 곳에서는 켜라. 그리고 무너졌을 때 가장 아픈 것부터 시작하라. 이메일, 은행, 다른 서비스에 로그인할 때 쓰는 그 계정. 보안 개선이면서 동시에 일거리를 덜어 주는 몇 안 되는 사례다.
착각하지는 말자. 앞으로 몇 년 동안은 비밀번호를 계속 쓰게 된다. 플랜 B로라도. 길게, 사이트마다 다르게, 비밀번호 관리자 안에 넣어 두자. 머리에서 나오지 않는 비밀번호가 필요하면 생성기를 쓰고, 지금 쓰는 게 버틸지 알고 싶으면 검사기에 넣어 보라.
보초의 오래된 질문 — 우리 편인가? — 에 드디어 다른 답이 생겼다. 수십 년 동안 우리는 남이 엿들을 수 있는 말 한마디로 답했다. 이제는 당신 기기만 만들 수 있는 서명으로 답한다. 그 말은 아예 존재하지도 않은 채로. 우리가 암구호를 바꾸는 대신 질문을 바꾼 건 이번이 처음이다.
출처: W. Diffie, M. Hellman, “New Directions in Cryptography”, IEEE Transactions on Information Theory, 1976 · R. Morris, K. Thompson, “Password Security: A Case History”, Communications of the ACM, 1979 · FIDO Alliance, 2013년 설립 · “Web Authentication: An API for accessing Public Key Credentials”, W3C 권고안, 2019년 3월 · 패스키 지원에 관한 애플, 구글, 마이크로소프트의 공동 발표, 2022년 5월.