‘Authentication’이 정확히 무엇인가: 비밀번호의 한계에서 FIDO2, Passkeys, IdP Architecture까지
Source: Dev.to
번역할 텍스트를 제공해 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)
화면 너머에 있는 사람이 실제로 “그 사람”인지 어떻게 확인할 수 있을까요?
비밀번호 시대
수년간 인터넷 인증은 비밀번호라는 공유 비밀 메커니즘에 의존해 왔습니다.
- 사용자가 비밀번호를 입력합니다.
- 비밀번호(또는 해시)가 네트워크를 통해 서버로 전송됩니다.
- 서버는 이를 서버 측에 저장된 문자열(또는 해시)과 비교합니다.
패러다임 전환: FIDO2 (WebAuthn)
FIDO2 (WebAuthn) 가 도입한 인증 패러다임은 공개키 암호화를 사용함으로써 비밀번호 모델의 문제점을 근본적으로 해결합니다.
패러다임 전환의 핵심 포인트
- 비밀번호는 전송 과정에서 유출됩니다.
- FIDO2에서는 장치 내부에서 생성된 공개키만 서버에 등록됩니다. 개인키는 절대 장치를 떠나지 않습니다.
- 로그인 시 서버는 챌린지를 전송하고, 장치는 개인키로 챌린지를 서명한 뒤 서명을 반환합니다.
- 따라서 서버는 공개키 전화번호부 역할만 수행합니다. 이 전화번호부가 유출되더라도 공개키만으로는 로그인을 할 수 없으므로 무해합니다.
- FIDO2를 사용하면 네트워크를 통해 비밀이 탈취되는 위험이 사라집니다.
만약 개인키가 HDD/SSD에 일반 파일 형태로 저장된다면, 바이러스가 쉽게 복사할 수 있습니다. 여기서 특수 하드웨어 칩—TPM (Trusted Platform Module) 또는 Secure Enclave—이 역할을 합니다.
하드웨어 방어벽
- 개인 키는 마더보드에 용접된 “열 수 없는 금고”(TPM) 내부에서 생성되어 저장됩니다.
- 운영체제나 관리자/루트 권한조차도 내부의 개인 키를 직접 읽을 수 없습니다.
- 외부에서는 칩에 “이 데이터를 서명해 주세요.” 라고 요청할 수 있을 뿐입니다.
- 칩은 생체 인증(지문, 얼굴 등)이 성공한 경우에만 서명을 수행하고 결과를 반환합니다.
이러한 설계 덕분에 얼마나 강력한 악성코드라도 개인 키를 추출할 수 없습니다.
TPM과 FIDO2를 결합하면 **“깨질 수 없는 강력 인증”**을 구현할 수 있습니다. YubiKey와 같은 물리적 보안 키가 대표적인 예시입니다.
보안과 편리함의 융합: 패스키
역사적으로 항상 같은 벽에 부딪힌다: “너무 안전한 것은 인간이 사용하기 어렵다.”
Apple, Google, Microsoft가 패스키를 타협과 혁신으로 고안했다.
- 패스키는 FIDO2‑기반이지만, 개인 키를 안전하게 클라우드에 동기화(백업)할 수 있게 해준다(예: iCloud 키체인).
- 키는 절대로 평문으로 동기화되지 않는다; 종단 간 암호화(E2EE)를 통해 플랫폼 제공자조차 내용물을 볼 수 없게 보장한다.
- 이는 궁극적인 사용성을 제공한다: “새 스마트폰을 구매하더라도 동일한 Apple ID/Google 계정으로 로그인하기만 하면 처음부터 지문 인증으로 사이트에 로그인할 수 있다.”
이러한 접근 방식으로 FIDO 기술이 일반 대중에게 빠르게 퍼졌다.
The Directory Backbone: LDAP & Active Directory
Up to this point we’ve discussed the front‑end and device side: how to verify the identity of the user.
The heart that centrally manages the account information of all employees within a company or organization is LDAP (Lightweight Directory Access Protocol), whose most famous implementation is Microsoft’s Active Directory (AD).
Common Misunderstanding
“LDAP is an old authentication method, so it’s been replaced by SAML and OIDC now, right?”
This is half correct and half wrong.
- LDAP is a protocol, and at the same time it is a high‑speed database that represents the hierarchical structure (tree) of an organization.
LDAP vs. RDBMS
| Aspect | LDAP | Relational DB (e.g., MySQL, PostgreSQL) |
|---|---|---|
| Data model | Directory (tree structure) | Tables |
| Typical entry | uid=bob with attributes like mail, title, userPassword | Row in a table with columns |
| Operations | Optimized for read/search (e.g., Bind to verify DN & password) | Optimized for both read and write |
| Performance | Handles thousands of Bind operations per minute at ultra‑high speed | Depends on indexing, query complexity |
Because LDAP is optimized for reading (searching) rather than writing, it can handle massive authentication loads efficiently.
LDAP as the “Source of Truth”
Although modern front‑end applications rarely speak LDAP directly, LDAP remains the authoritative data store for identity information in countless enterprises worldwide.
디바이스 검증에서 연합으로
디바이스에서 신원 검증이 수행되고 LDAP에 데이터가 존재함이 확인된다고 가정해 보십시오. **애플리케이션이 인증 인프라(디렉터리)와 통신하기 위해 사용하는 언어(프로토콜)**는 시대에 따라 진화해 왔습니다. “구식” LDAP 바인드 대신, 오늘날 우리는 SAML, OAuth 2.0, **OpenID Connect (OIDC)**와 같은 연합 프로토콜을 일반적으로 사용하여 인증 결과를 하위 서비스에 전달합니다.
“…ology being driven out,” 보다 정확하게 말하자면 “대화 상대와 위치가 바뀌었기 때문에 언어도 바뀌어야 했다”는 것입니다.
핵심 질문:
LDAP가 내부 데이터베이스로 계속 사용된다면, 모든 것이 OIDC로 대체된 것은 아니겠죠?
“내부 통신”과 “외부 통신”에 서로 다른 프로토콜 사용
LDAP 프로토콜 시대 (완전한 강결합)
- 과거에는 내부 애플리케이션이 사용자의 ID/비밀번호를 받아 직접 내부 네트워크를 통해 LDAP 서버에 질의했습니다:
“비밀번호가 맞나요?” - 클라우드 시대에는 외부 SaaS가 내부 LDAP 서버에 질의하도록 허용하는 것이 보안적으로 불가능해졌습니다.
SAML 시대 (외부 느슨한 결합의 시작)
- 애플리케이션과 LDAP는 분리되었습니다.
- 인증 인프라(IdP)는 LDAP를 조회하여 사용자의 신원을 백그라운드에서 검증하고, 브라우저를 통해 외부 SaaS에 “이 사람은 확실히 직원 Alice입니다” 라는 SAML 어설션(XML 토큰)을 발행했습니다.
- 이를 통해 비밀번호를 SaaS에 전송하지 않고도 SSO를 구현할 수 있었습니다.
- 하지만 SAML (XML) 은 스마트폰 및 유사 클라이언트에 비해 너무 무거운 것으로 드러났습니다.
OIDC 시대 (현대의 사실상 표준)
- SAML의 개념을 기반으로 하면서 OAuth 2.0을 사용해 확장했으며, 현대 웹 표준인 JSON 및 REST API를 통한 통신을 가능하게 합니다.
- OpenID Connect (OIDC) 는 가볍고, SPA와 모바일 앱에 완벽히 어울리며, 이제 SSO의 프런트‑도어(외부 통신) 를 위한 사실상의 표준이 되었습니다.
하이브리드 아키텍처의 현실적인 진실
“그럼 OIDC 시대에 SAML과 LDAP가 사라진 건가요?” – 아니요. 여전히 활발히 사용되고 있습니다.
- Front‑facing 상호작용(사용자 및 앱)은 최신 OIDC를 사용합니다.
- Back‑end 시스템은 여전히 레거시 LDAP 또는 전용 커넥터 에이전트에 의존합니다.
- 복잡한 하이브리드 패턴이 존재합니다. 예를 들어 OIDC 내부에 SAML Assertion을 삽입하는 경우(RFC 7522: SAML 2.0 Bearer Assertion Profile).
요약하면, 사용자에게 보이는 레이어는 깔끔한 JSON 기반 OIDC로 진화했지만, **‘배경의 혈관’**은 여전히 LDAP와 SAML으로 움직이고 있습니다.
모두 합쳐서
- 프론트엔드 혁신: FIDO2 / Passkeys
- 불변 백엔드 파워: LDAP
- 현대 통신 표준: OIDC
이 모든 것은 Identity Provider (IdP) (예: Okta, Entra ID, Auth0) 로 결합됩니다.
IdP 가치 제안: “인증 책임을 완전 아웃소싱.”
파트 1의 정리
IdP는 브라우저를 통해 사용자의 장치(TPM)에게 FIDO2/Passkeys를 사용한 보안 서명을 요청합니다. 암호화된 통신의 무거운 작업은 전적으로 IdP가 처리합니다.
파트 2의 정리
IdP의 백엔드는 기업의 LDAP/AD와 굵은 파이프 연결을 유지합니다. 퇴직한 직원이 LDAP에서 제거되면 IdP가 즉시 감지하고 접근을 차단합니다.
파트 3의 정리
모든 검사가 완료된 후, IdP는 결과—“이 사용자는 확실히 인증되었으며 유효한 권한을 가지고 있다”—를 OIDC의 아름다운 JSON 토큰(ID Token) 으로 패키징하여 대상 애플리케이션에 전달합니다.
개발자에게 의미하는 바
- 직접 password‑hashing logic, biometric authentication, 혹은 LDAP connectors 를 구현할 필요가 없습니다.
- 단순히 “Leave it entirely to the IdP using OIDC.”
- 다음을 제공하는 애플리케이션을 빠르게 구축할 수 있습니다:
- Highest convenience (Passkeys) → 최고의 편의성 (Passkeys)
- Robust security rooted in corporate policies (AD federation) → 기업 정책(AD federation)에 기반한 강력한 보안
각 구성 요소가 존재하는 이유
| 문제 | 솔루션 |
|---|---|
| 비밀번호 유출 | Public‑Key Cryptography (FIDO2) |
| 키 도난 | Hardware safe (TPM) |
| 편의성 상실 | Cloud Sync (Passkeys) |
| 기업 디렉터리 조회 | LDAP (여전히 백그라운드에서) |
| 가볍고 안전한 외부 통신 | OIDC (현대적인 언어) |
| 오케스트레이션 | IdP (지휘자) |
공통 질문:
- “왜 OAuth나 OIDC 기사에서 FIDO가 언급되지 않을까요?”
- “왜 SAML과 LDAP가 나란히 논의되지 않을까요?”
Answer: 각 기술은 인증 피라미드의 서로 다른 계층에서 완전히 다른 역할을 수행합니다.
요약
전체 맵을 기억하세요:
- FIDO2/Passkeys → 프런트엔드 인증
- LDAP → 백엔드 디렉터리 서비스
- OIDC → 외부 통신 프로토콜
- IdP → 중앙 오케스트레이터
이 계층 구조를 이해하면 RFC와 사양을 읽는 방식이 바뀌며, 복잡해 보이는 인증 환경을 훨씬 명확하게 파악할 수 있습니다.