인증 (Authentication)
인증은 비밀번호, 토큰 또는 생체 인식과 같은 자격 증명을 확인하여 사용자, 장치 또는 시스템의 ID를 확인하는 보안 프로세스입니다.
2단계 인증(2FA)은 사용자의 신원을 확인하기 위해 두 가지 고유한 인증 요소를 요구하여 보안을 강화하는 다단계 인증(MFA) 방법입니다. 이러한 요소는 일반적으로 사용자가 아는 것(예: 비밀번호, PIN), 사용자가 가지고 있는 것(예: 물리적 토큰, 스마트폰, 스마트 카드), 사용자가 누구인지(예: 지문, 얼굴 스캔)의 세 가지 유형으로 분류됩니다. 일반적인 구현에는 비밀번호(지식 요소)와 인증 앱에서 생성하거나 SMS로 전송된 일회용 비밀번호(OTP)(소유 요소)가 결합됩니다. 이 프로세스는 사용자가 일반적으로 비밀번호인 기본 자격 증명을 입력하는 것으로 시작됩니다. 첫 번째 요소가 성공적으로 확인되면 시스템에서 두 번째 요소를 요청합니다. 그런 다음 두 번째 요소의 유효성은 미리 등록된 값 또는 시간 기반 알고리즘과 비교하여 확인됩니다. 두 요소가 모두 성공적으로 인증되면 액세스가 부여됩니다. 2FA의 주요 이점은 피싱, 자격 증명 스터핑 및 무차별 대입 공격과 같은 일반적인 공격 벡터에 대한 복원력입니다. 단일 요소를 손상시키는 것만으로는 무단 액세스를 얻기에 충분하지 않기 때문입니다. 그러나 사용자 마찰 증가, 두 번째 요소 분실 또는 도난 가능성, 두 번째 요소 전달 메커니즘(예: SMS 가로채기)의 보안에 대한 의존성과 같은 절충점이 있습니다. 고급 구현에는 위험 기반 인증이 포함될 수 있습니다. 이 경우 시스템은 위치, 장치 또는 시간과 같은 컨텍스트에 따라 필요한 요소의 수 또는 유형을 동적으로 조정합니다.
graph LR
Center["인증 (Authentication)"]:::main
Rel_authorization["authorization"]:::related -.-> Center
click Rel_authorization "/terms/authorization"
Rel_mfa_multi_factor_authentication["mfa-multi-factor-authentication"]:::related -.-> Center
click Rel_mfa_multi_factor_authentication "/terms/mfa-multi-factor-authentication"
Rel_single_sign_on_sso["single-sign-on-sso"]:::related -.-> Center
click Rel_single_sign_on_sso "/terms/single-sign-on-sso"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 5살도 이해할 수 있게 설명
마치 특별한 보물 상자를 열기 위해 두 개의 열쇠가 필요한 것과 같습니다. 하나는 당신이 아는 열쇠(비밀 코드 같은 것)이고, 다른 하나는 당신이 가지고 있는 열쇠(특별한 장난감 같은 것)입니다.
🤓 Expert Deep Dive
2단계 인증(2FA)은 기본 자격 증명(일반적으로 비밀번호 또는 암호 구문) 위에 추가적인 확인 메커니즘을 계층화하여 근본적으로 보안을 강화합니다. 이 프로세스는 다단계 인증(MFA) 원칙을 따르며, 특히 다음 범주에서 두 가지 고유한 요소를 요구합니다.
- 아는 것: 비밀번호, PIN, 보안 질문에 대한 답변.
- 가지고 있는 것: 물리적 토큰(예: YubiKey, RSA SecurID), 인증 애플리케이션(예: Google Authenticator, Authy)을 실행하는 스마트폰 또는 SMS 기반 OTP용 SIM 카드.
- 자신인 것: 지문, 얼굴 스캔 또는 홍채 패턴과 같은 생체 데이터.
일반적인 구현에는 RFC 6238에 의해 표준화된 시간 기반 일회용 비밀번호(TOTP)가 포함됩니다. TOTP 알고리즘은 공유 비밀 키(초기 설정 중 프로비저닝됨)와 현재 시간(종종 NTP를 통해 동기화됨)을 기반으로 30-60초마다 새 코드를 생성합니다. 서버 측 유효성 검사는 주어진 시간 창에 대한 예상 OTP를 다시 계산하고 사용자가 제공한 코드와 비교하는 것을 포함합니다.
또 다른 널리 사용되는 방법은 RFC 4226에 정의된 HMAC 기반 일회용 비밀번호(HOTP)로, 각 사용 시마다 증가하는 카운터를 기반으로 코드를 생성합니다. 서버와 클라이언트는 동기화된 카운터를 유지해야 합니다.
더 고급 구현은 공개 키 암호화를 활용하는 Universal 2nd Factor(U2F)와 그 후속 제품인 FIDO2를 사용합니다. 등록 중에 보안 키에서 고유한 개인/공개 키 쌍이 생성되고 공개 키가 서비스에 등록됩니다. 인증에는 서버가 FIDO 장치가 개인 키로 서명하는 챌린지를 보내는 것이 포함되며, 서버는 등록된 공개 키를 사용하여 이를 확인하여 키가 장치를 떠나지 않고 웹사이트의 특정 출처(도메인)에 연결되므로 피싱 공격에 대한 강력한 저항력을 제공합니다.