본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

Passkey — 비밀번호의 진짜 대체 (대부분)

~15 min · passkeys, webauthn, phishing-resistant

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Passkey (WebAuthn / FIDO2) 는 업계가 "이제 비밀번호는 필요 없다" 에 가장 가까이 간 결과물이야. phishing 에 강하고, 디바이스에 묶이거나 sync 되고, 요즘 OS 와 브라우저에선 다 돌아가.

Passkey 가 실제로 뭔지

디바이스의 secure enclave (TouchID, Windows Hello, Android keystore) 또는 비밀번호 매니저 (1Password, iCloud Keychain, Google) 에 저장된 keypair. 서버는 public key 만 저장. 로그인은 디바이스가 challenge 에 서명해서 private key 를 갖고 있음을 증명하는 거야. phishing 으로 빼낼 공유 시크릿도, 흘릴 비밀번호도 없어.

다중 디바이스, 다중 사용자한테 PIN 을 이기는 이유

속성PIN (Track 5)Passkey
Phishing 가능응 (가짜 페이지에 타이핑)아니 (브라우저가 origin 을 확인함)
Brute-forceable4자리는 1만 조합암호학적 키, 불가능
Per-user identity아니 (PIN 공유 모델)됨 (디바이스마다 자기 credential 을 가짐)
디바이스 간 sync수동. 직접 공유해야 함iCloud / Google / 1Password 통해 native
셋업 복잡도5분20–60분 (서버 사이드 WebAuthn)
복구Track 6 의 복구 토큰계정 복구 flow + backup passkey

정직한 trade-off

  • 복구가 더 어려워. passkey 를 가진 디바이스를 전부 잃으면 다시 들어가기가 훨씬 힘들어. 최소 두 개는 꼭 등록해둬. 노트북과 폰, 아니면 예비용 하드웨어 키.
  • 서버 쪽 복잡도는 진짜야. WebAuthn ceremony 엔 까다로운 구석이 있어 (user verification flag, AAGUID, attestation). 라이브러리를 써. spec 보고 직접 짜지 마.
  • 오래된 브라우저나 회사 정책 제한 은 아직 남아 있어. 당분간은 fallback (PIN, 이메일 magic link) 을 같이 둬.

Code

Passkey 등록 & 인증, 개념적으로·python
# 등록 (디바이스당 한 번)
options = generate_registration_options(
    rp_id="myapp.example.com",
    rp_name="My App",
    user_id=user.id,
    user_name=user.email,
)
# 브라우저로 options 보냄 → navigator.credentials.create(options)
# 브라우저가 credential 반환 → 검증하고 credential.public_key 저장

# 인증
options = generate_authentication_options(rp_id="myapp.example.com")
# 브라우저로 → navigator.credentials.get(options)
# 브라우저가 assertion 반환 → 저장된 public_key 와 검증
# 성공 → session 쿠키 발급 (Track 5 와 같은 모델)

External links

Exercise

안 했으면 github.com 에 passkey 등록 (Settings → Password and authentication → Passkeys). 해보면 알아. TouchID, Windows Hello, 폰에서 그냥 돼. 아무것도 안 쳐도 되고. 이제 그 UX 를 몸으로 느낀 거야. 나중에 다중 사용자를 만들면 사용자들이 기대할 auth 가 이거고.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.