인증 보증 수준
고친 사람 github-actions[bot]
인증 보증 수준은 한 번의 로그인을 얼마나 믿어도 되는지 세 등급으로 매깁니다. 비밀번호만 받는 로그인은 가장 낮은 등급입니다. 기기 밖으로 못 나가는 키로 서명까지 받는 로그인은 가장 높은 등급입니다. 서비스는 엉뚱한 사람이 들어왔을 때 피해가 클수록 높은 등급을 요구합니다.
쉽고 빠른 이해
로그인이 얼마나 튼튼한지 1·2·3등급으로 매기는 잣대입니다. 비밀번호만 치면 1등급입니다. 휴대폰 인증 앱의 번호까지 넣으면 2등급입니다.
등급이 있으면 「송금 화면은 2등급 이상」처럼 요구를 한 낱말로 적을 수 있습니다. 로그인을 다른 회사에 맡길 때도 몇 등급으로 확인해 달라고 부탁합니다. 그 회사는 몇 등급으로 확인했는지 결과를 돌려줍니다.
어떻게 도나:
- 엉뚱한 사람이 들어왔을 때의 피해를 낮음·중간·높음으로 따져 등급을 고릅니다
- 그 등급이 받아 주는 확인 수단으로 로그인을 꾸립니다
- 등급이 높을수록 로그인을 더 자주 다시 받습니다
대가도 있습니다. 등급이 높을수록 쓸 수 있는 확인 수단이 줄어듭니다. 다시 로그인하는 간격도 짧아집니다. 가장 높은 등급은 키를 밖으로 못 꺼내는 장치가 있어야 합니다. 여러 기기에 복사해 쓰는 키는 이 등급에 못 씁니다.
상세
인증 보증 수준(AAL, Authentication Assurance Level)은 한 번의 인증이 「전에 가입한 바로 그 사람」임을 얼마나 믿을 만하게 확인시키는지 나눈 등급입니다. 등급은 AAL1, AAL2, AAL3 셋입니다. 등급이 높을수록 공격자가 인증을 뚫는 데 더 큰 능력과 더 많은 자원이 듭니다.
비밀번호 하나로 들어가는 로그인은 AAL1 입니다. 비밀번호에 인증 앱의 일회용 번호를 더하면 AAL2 가 됩니다. 지문을 대야 풀리는 보안 키로 들어가면 AAL3 에 닿습니다. 보안 키는 암호 키를 품은 작은 전용 기기입니다.
이 등급은 미국 NIST(National Institute of Standards and Technology, 국립표준기술연구소)의 디지털 신원 지침에 들어 있습니다. 문서 번호와 판은 「출처 문서」 절에 모았습니다.
등급이 있으면 「이 기능에는 AAL2 이상」처럼 요구를 한 낱말로 적을 수 있습니다. 로그인을 다른 서비스에 맡길 때도 이 낱말로 몇 등급을 원하는지 요청합니다. 맡은 쪽은 실제로 몇 등급으로 확인했는지 같은 낱말로 돌려줍니다.
인증 요소
인증 요소는 「내가 나다」를 증명하는 증거의 종류입니다. 종류는 셋입니다.
| 요소 | 예 |
|---|---|
| 아는 것 | 비밀번호 |
| 가진 것 | 암호 키가 든 기기 |
| 자기 자신 | 지문 · 얼굴 · 홍채 같은 생체 특징 |
요소 하나만 확인하는 인증을 단일 요소 인증이라고 합니다. 대개 아는 것 하나입니다. 서로 다른 요소를 둘 이상 확인하는 인증은 다중 인증(MFA, Multi-Factor Authentication)입니다.
같은 종류를 두 번 받는 것은 요소 둘이 아닙니다. 사용자가 정한 PIN(Personal Identification Number, 개인 식별 번호)과 비밀번호는 둘 다 아는 것입니다. 둘을 함께 받아도 단일 요소입니다.
인증수단
인증수단은 로그인할 때 요소를 쥐고 있음을 증명하는 수단입니다. 비밀번호, 보안 키, 인증 앱이 모두 인증수단입니다. 인증수단은 언제나 비밀을 품고 있습니다.
비밀은 두 갈래입니다. 하나는 양쪽이 같은 값을 나눠 가진 공유 비밀입니다. 비밀번호, 일회용 번호를 만드는 씨앗 값, 대칭 키가 여기에 듭니다. 다른 하나는 키 쌍입니다. 키 쌍은 아래 「개인 키로 서명하는 인증수단」에서 풉니다.
비밀이 없는 방법은 인증수단으로 받지 않습니다. 「어머니의 고향은?」 같은 보안 질문이 그렇습니다. 생체 특징도 비밀이 아닙니다. 지문 하나만으로 인증할 수 없는 까닭입니다. 지문은 가진 것과 함께 쓸 때만 요소로 칩니다.
인증수단을 종류로 나누면 아래와 같습니다. 뒤의 「갈래」 절이 등급마다 이 이름으로 무엇을 받는지 적습니다.
| 종류 | 무엇을 쓰나 |
|---|---|
| 비밀번호 | 사용자가 대개 스스로 정해 외우는 비밀 |
| 조회 비밀 | 미리 받아 둔 목록에서 화면이 묻는 값을 찾아 넣는 비밀 |
| 대역 외 장치 | 로그인 화면과 다른 통신 경로로 주고받는 비밀. 전화망으로 받는 문자 메시지도 여기에 듭니다 |
| 일회용 비밀번호 장치 | 기기나 앱이 만들어 주는 한 번 쓰는 번호. OTP(One-Time Password)라고 부릅니다 |
| 암호 인증수단 | 사용자가 쥔 암호 키를 인증 프로토콜로 증명 |
대역 외 장치, 일회용 비밀번호 장치, 암호 인증수단에는 단일 요소판과 다중 요소판이 있습니다. 비밀번호와 조회 비밀에는 다중 요소판이 없습니다. 다중 요소판은 인증수단을 쓰기 전에 두 번째 요소로 켜야 합니다. 지문 센서가 붙어 있어 지문을 대야 켜지는 보안 키가 다중 요소판입니다.
다중 요소판을 켤 때 대는 두 번째 요소를 활성화 요소라고 부릅니다. 활성화 요소는 지문 같은 생체 특징일 수도 있고 비밀번호일 수도 있습니다. 활성화 요소로 쓰는 비밀번호에는 활성화 비밀이라는 이름이 따로 있습니다. 활성화 비밀은 그 인증수단과 그 기기 안에만 머뭅니다. PIV(Personal Identity Verification) 카드를 켤 때 넣는 PIN 이 활성화 비밀입니다.
개인 키로 서명하는 인증수단
키 쌍은 공개 키와 개인 키 둘로 이루어집니다. 개인 키는 인증수단 안에 머무릅니다. 그 인증수단을 쥔 사람만 개인 키를 씁니다. 개인 키로는 서명을 만듭니다.
로그인을 확인하는 쪽을 검증자라고 합니다. 검증자는 공개 키만 갖고 그 서명이 맞는지 확인합니다. 공개 키로는 서명을 확인할 수 있을 뿐 만들 수는 없습니다. 검증자의 저장소가 털려도 공개 키만으로는 로그인하지 못합니다.
피싱 저항
피싱은 가짜 검증자가 사용자를 속여 인증수단을 내밀게 하는 공격입니다. 진짜처럼 꾸민 로그인 화면이 대표입니다. 사용자가 검색 결과를 눌러 왔든 이메일 링크를 눌러 왔든 모두 피싱으로 칩니다.
피싱 저항은 사용자의 주의력에 기대지 않고 가짜 검증자에게 비밀이 새지 않게 막는 성질입니다. 사용자가 속아도 공격자가 쓸 만한 값을 얻지 못해야 합니다.
일회용 번호를 손으로 옮겨 적는 인증수단은 피싱 저항으로 치면 안 됩니다. 옮겨 적은 번호는 지금 이 접속에 묶여 있지 않습니다. 가짜 사이트는 받은 번호를 진짜 사이트에 옮겨 넣어 로그인할 수 있습니다. 대역 외 장치와 일회용 비밀번호 장치가 여기에 듭니다.
sequenceDiagram
participant U as 사용자
participant F as 가짜 사이트
participant R as 진짜 사이트
U->>F: 비밀번호와 일회용 번호를 입력
F->>R: 받은 두 값을 곧바로 옮겨 입력
R-->>F: 로그인 성공
Note over U,F: 사용자는 가짜인 줄 모른다
피싱 저항은 암호 인증수단이라야 얻습니다. 서명을 지금 이 접속이나 이 검증자 이름에 묶어 두면 가짜 사이트가 받은 서명은 진짜 사이트에서 쓸모가 없습니다. 묶는 방식은 둘입니다.
| 방식 | 서명에 무엇을 묶나 | 예 |
|---|---|---|
| 채널 바인딩 | 검증자와 맺은 암호화 연결의 식별자 | 클라이언트 인증 TLS(Transport Layer Security) · 이 방식을 쓰는 PIV 카드 |
| 검증자 이름 바인딩 | 검증자의 도메인 이름 | WebAuthn(Web Authentication) · FIDO2(Fast Identity Online 2) 인증수단 |
아래 그림은 같은 가짜 사이트가 검증자 이름 바인딩을 만났을 때입니다. 인증수단이 내는 서명에는 가짜 사이트의 이름이 묶입니다. 진짜 사이트는 이름이 안 맞는 서명을 받지 않습니다.
sequenceDiagram
participant U as 사용자의 인증수단
participant F as 가짜 사이트
participant R as 진짜 사이트
F->>U: 서명을 요청
U-->>F: 가짜 사이트 이름에 묶인 서명
F->>R: 받은 서명을 옮겨 보냄
Note over R: 묶인 이름이 진짜 사이트와 달라 로그인 실패
두 방식 모두 피싱 저항으로 인정됩니다. 검증자 이름 바인딩은 프로토콜 안에서 인증서로 확인한 검증자 이름에 서명을 묶습니다. 진짜 검증자의 인증서가 잘못 발급되거나 도용되면 이 방식은 뚫릴 수 있습니다.
채널 바인딩은 진짜 검증자의 인증서를 손에 넣은 가짜 검증자라도 다른 연결로 중계하지 못하게 막습니다. 채널 바인딩을 더 안전하다고 보는 까닭입니다.
내보낼 수 없는 키
키를 내보낼 수 있다는 것은 인증 키를 인증수단의 보호 경계 밖으로 복사하거나 저장할 수 있다는 뜻입니다. 다른 인증수단으로 복사하는 것도, 다른 저장소에 백업하는 것도 내보내기입니다.
인증 키는 일반적으로 내보낼 수 있다고 봅니다. 예외는 키를 보호된 하드웨어 안에서 만들고 저장하고 쓰는 경우입니다. 소프트웨어가 그 키에 손대지 못해야 합니다. 노트북의 TPM(Trusted Platform Module) 칩이나 따로 꽂는 보안 키가 그런 하드웨어입니다.
내보낼 수 없는 인증수단은 노트북이나 휴대폰의 CPU(Central Processing Unit, 중앙 처리 장치)와 떨어진 하드웨어여야 합니다. 별도 기기이거나 보안 요소(secure element), TEE(Trusted Execution Environment, 신뢰 실행 환경), TPM 같은 내장 처리기입니다. 이 하드웨어는 키를 CPU 쪽으로 내보내지 못하게 설계돼야 합니다.
어떤 암호 인증수단은 인증 키를 다른 기기로 복사하게 해 줍니다. 이런 인증수단을 동기화 인증수단이라고 합니다. 복사는 대개 동기화 저장소(sync fabric)를 거칩니다. 클라우드 저장소가 그런 저장소입니다.
WebAuthn 인증수단도 동기화될 수 있습니다. 키를 동기화한다는 것은 본래 키를 내보낼 수 있다는 뜻입니다. 동기화 인증수단은 조건을 지키면 AAL2 에 쓸 수 있습니다. AAL3 에는 쓸 수 없습니다.
재전송 저항과 인증 의도
등급을 가르는 보조 성질이 둘 더 있습니다.
재전송 저항은 지난번 인증 메시지를 녹화해 다시 보내서는 로그인할 수 없게 만드는 성질입니다. 검증자가 매번 새 값(nonce)을 내주면 옛 메시지에는 그 값이 없어 바로 들킵니다. 일회용 비밀번호 장치, 암호 인증수단, 조회 비밀이 재전송을 견딥니다. 비밀번호는 매번 같은 값을 보내므로 견디지 못합니다.
재전송은 피싱 중계와 다릅니다. 재전송은 지난 메시지를 나중에 다시 씁니다. 중계는 방금 받은 값을 곧바로 옮깁니다. 일회용 번호가 재전송은 견디면서 앞 절의 중계에는 뚫리는 까닭입니다.
인증 의도는 인증할 때마다 사용자가 직접 응답해야 하는 성질입니다. 목표는 사용자 몰래 인증수단이 쓰이기 더 어렵게 만드는 것입니다. 기기에 든 악성 코드가 몰래 쓰는 경우가 그렇습니다. 버튼을 누르거나 보안 키를 다시 꽂게 하는 인증수단은 이 동작으로 의도를 확인할 수 있습니다.
생체 특징을 내미는 것이 언제나 의도를 확인하지는 않습니다. 휴대폰 앞면 카메라로 얼굴을 읽는 것이 반드시 의도를 뜻하지는 않습니다. 다른 일로 기기를 쓰는 동안에도 얼굴이 찍힐 수 있기 때문입니다. 이럴 때는 버튼처럼 분명한 확인 장치를 반드시 따로 둡니다.
로그인 뒤의 세션
로그인할 때마다 인증수단을 다시 내미는 것은 번거롭습니다. 매번 내밀게 하면 활성화 요소를 저장해 두는 식으로 우회하려는 유인이 자주 생깁니다. 세션은 로그인 한 번으로 연 뒤 요청마다 다시 로그인하지 않게 이어 주는 상태입니다. 인증에 성공하면 세션을 열어도 됩니다.
세션을 열 때 세션을 맡은 쪽은 비밀 값을 하나 만듭니다. 이 값을 세션 비밀이라고 부릅니다. 세션 비밀은 그 인증 직후에 만들어 그 세션에 묶습니다. 요청에 이 값을 실어 보내면 같은 세션으로 받아 줍니다.
세션은 그것을 연 인증의 등급을 물려받기를 권합니다. 세션을 더 낮은 등급으로 볼 수는 있습니다. 더 높은 등급으로 보면 안 됩니다.
세션을 끝없이 믿을 수는 없습니다. 사용자가 로그아웃하지 않고 자리를 떴을 수 있습니다. 세션 도중에 주기적으로 로그인을 다시 받아 사용자가 아직 있는지 확인합니다. 이것을 재인증이라고 합니다.
재인증 시점은 타이머 둘이 정합니다. 전체 시간은 로그인이나 마지막 재인증 뒤로 흐른 시간입니다. 요청 없는 시간은 사용자 요청이 없던 시간입니다. 요청이 오면 요청 없는 시간을 처음부터 다시 셉니다. 재인증에 성공하면 두 타이머가 모두 처음부터 셉니다.
둘 중 하나라도 다 차면 세션을 반드시 끝냅니다. 서비스는 끝나기 전에 곧 끝난다고 알려도 됩니다. 그때 사용자가 요청을 보내거나 재인증하면 세션이 이어집니다. 등급마다 타이머 상한이 다릅니다. 값은 「갈래」 절에 있습니다.
한 세션 안에서 등급을 올릴 수도 있습니다. 낮은 등급으로 둘러보다가 높은 등급이 필요한 기능에 들어갈 때 그 등급의 인증을 다시 받습니다. 이것을 스텝업 인증이라고 합니다.
AAL2 에는 지름길이 하나 있습니다. 요청 없는 시간 상한이 차서 세션이 끝났지만 전체 시간은 남은 경우입니다. 이때는 세션 비밀과 함께 비밀번호나 생체 대조 하나만 다시 받아도 됩니다. 전체 시간까지 다 차면 처음부터 다시 로그인합니다.
아래 그림은 AAL1 로 열린 세션이 송금 화면에서 AAL2 로 올라간 뒤의 흐름입니다. AAL2 의 권장 상한인 요청 없는 1시간, 전체 24시간을 썼습니다.
stateDiagram-v2
state "로그인 전" as S0
state "AAL1 세션" as S1
state "AAL2 세션" as S2
state "요청 없는 시간 상한이 차서 끝난 세션" as S3
[*] --> S0
S0 --> S1: 비밀번호 확인
S1 --> S2: 송금 화면에서 일회용 번호 확인
S2 --> S3: 1시간 동안 요청 없음
S3 --> S2: 세션 비밀과 비밀번호 확인
S2 --> S0: 전체 24시간이 다 참
S3 --> S0: 전체 24시간이 다 참
등급을 고르는 법
등급은 서비스를 운영하는 조직이 디지털 신원 위험 관리(DIRM, Digital Identity Risk Management)라는 절차로 고릅니다. 이 절차는 디지털 신원 시스템이 실패했을 때의 영향을 따져 등급을 정합니다. 조직은 등급을 고르는 절차와 그 운영 방식을 반드시 문서로 정해 둡니다.
먼저 서비스에 인증이 필요한지 따져 반드시 문서로 남깁니다. 개인정보나 보호해야 할 정보, 가입자 계정에 접근하게 하는 온라인 서비스에는 인증이 필요합니다. 인증이 필요하면 사용자 무리마다 첫 등급을 반드시 고릅니다. 영향 수준을 첫 등급에 그대로 맞춥니다.
| 영향 | 첫 등급 |
|---|---|
| 낮음 | AAL1 |
| 중간 | AAL2 |
| 높음 | AAL3 |
영향이 낮아도 개인정보를 볼 수 있으면 AAL2 를 요구할 수 있습니다. 미국 연방 기관은 개인정보를 온라인에 내놓을 때 반드시 AAL2 이상을 고릅니다. 시민에게 개인정보를 보여 주는 디지털 앱에 다중 인증을 요구한 행정명령 13681호를 따르는 것입니다.
첫 등급은 출발점입니다. 위험 관리의 다음 단계가 첫 등급을 다시 평가해 서비스에 맞게 조정(tailoring)할 수 있습니다. 아래 그림이 이 순서입니다.
flowchart TD
A["사용자 무리마다 영향을 따짐"] --> B{"인증이 필요한가"}
B -->|아니다| E["필요 없다고 문서에 남김"]
B -->|그렇다| C["영향 수준에 맞춰 첫 등급을 고름"]
C --> D{"개인정보를 온라인에 내놓나"}
D -->|그렇다| F["AAL2 이상으로"]
D -->|아니다| G["다음 단계에서 다시 평가해 조정"]
F --> G
등급마다 무엇을 막으려는지도 정해져 있습니다.
| 등급 | 막으려는 것 | 다루는 정보 |
|---|---|---|
| AAL1 | 최소한의 보호. 비밀번호를 노리는 공격을 억제한다 | 개인정보가 없다. 프로필·설정 정도 |
| AAL2 | 다중 인증을 요구. 피싱 저항 수단을 내놓는다 | 자기 개인정보를 보거나 고친다 |
| AAL3 | 피싱 저항과 검증자가 털려도 버티는 보호를 요구 | 아주 민감한 정보를 보거나 고친다 |
한 서비스 안에서도 기능마다 등급을 달리 둘 수 있습니다. 댐 관리 시스템이라면 상태 보기는 AAL2 로 받고 방류량 바꾸기는 AAL3 를 요구하는 식입니다.
로그인을 맡길 때
한 곳의 로그인 결과를 다른 서비스가 받아 쓰는 방식을 연합이라고 합니다. 로그인을 맡아 주는 쪽은 신원 제공자(IdP, Identity Provider)입니다. 결과를 받아 쓰는 서비스는 신뢰 당사자(RP, Relying Party)입니다. 신원 제공자는 로그인 결과를 단언이라는 메시지에 담아 보냅니다.
신원 제공자는 단언에 실제로 확인한 AAL 을 반드시 적습니다. 요청한 등급을 못 채웠어도 적습니다. 서비스는 기능마다 받아 줄 최소 등급을 정합니다. 그리고 단언의 값이 그 이상인지 반드시 확인합니다.
sequenceDiagram
participant RP as 서비스
participant IdP as 신원 제공자
participant U as 사용자
RP->>IdP: AAL2 로 확인해 달라고 요청
Note over IdP: 사용자 세션은 AAL1 이다
IdP->>U: 두 번째 요소를 요구
U->>IdP: 두 번째 요소 제출
IdP-->>RP: 단언에 AAL2 를 적어 보냄
Note over IdP,RP: 못 올렸으면 AAL1 이라고 적어 보낸다
단언에는 어떤 인증 방법을 썼는지도 함께 싣기를 권합니다. 피싱 저항 수단이었는지 같은 정보입니다. 이런 정보를 실어 나를 수 있는 수단에는 OIDC(OpenID Connect)와 SAML(Security Assertion Markup Language)의 인증 맥락 등급 참조(ACR, Authentication Context Class Reference) 값이 있습니다.
재인증은 따로 봐야 합니다. 신원 제공자와 서비스는 세션을 따로 관리합니다. 서비스 세션이 끝나도 신원 제공자 세션은 살아 있을 수 있습니다. 그러면 사용자가 다시 로그인하지 않아도 신원 제공자가 새 단언을 만들어 줄 수 있습니다.
신원 제공자는 인증한 시각과 내용을 서비스에 전할 수 있습니다. 재인증 요구를 채웠는지는 서비스가 최종으로 판단합니다.
나란히 매기는 세 등급
인증 보증 수준은 로그인만 봅니다. 가입할 때의 확인과 로그인 결과를 전하는 과정은 다른 두 등급이 따로 매깁니다.
| 등급 | 무엇의 튼튼함인가 |
|---|---|
| 신원 보증 수준(IAL, Identity Assurance Level) | 신원 증명. 가입할 때 그 사람이 현실의 누구인지 확인하는 과정 |
| 인증 보증 수준(AAL) | 로그인 과정과 인증수단을 그 사람에게 묶은 연결 |
| 연합 보증 수준(FAL, Federation Assurance Level) | 신원 제공자가 로그인 결과를 서비스에 전하는 과정 |
신원 증명은 가입하려는 사람에게서 증거를 받아 그 사람이 현실의 누구인지 확인하는 절차입니다. IAL 도 세 단계입니다.
| 등급 | 무엇을 확인하나 |
|---|---|
| IAL1(Identity Assurance Level 1) | 주장한 신원이 현실에 있고 신청자가 그 신원과 이어져 있다는 어느 정도의 확신 |
| IAL2(Identity Assurance Level 2) | 증거를 더 받고 더 엄격하게 확인 |
| IAL3(Identity Assurance Level 3) | 훈련받은 담당자가 현장에서 대면으로 확인. 생체 특징을 하나 이상 모음 |
세 등급은 따로 고릅니다. 숫자가 같을 필요도 없습니다. 영향 평가가 IAL1 과 FAL1(Federation Assurance Level 1)을 가리키면서도 개인정보를 볼 수 있어 AAL2 를 요구할 수 있습니다. 신원 증명이 아예 필요 없다고 나오면 IAL 은 없습니다. 이때도 인증과 연합의 등급은 따로 정합니다.
계정 복구
인증수단을 잃은 사용자가 계정을 되찾는 방법에도 등급별 요구가 있습니다. 기준은 그 계정의 IAL 과, 그 계정이 닿을 수 있는 가장 높은 AAL 입니다.
| 계정 | 복구에 필요한 것 |
|---|---|
| 신원 증명을 안 받은 계정. AAL1 까지인 계정은 모두 여기에 듭니다 | 저장해 둔 복구 코드 · 발급받은 복구 코드 · 복구 연락처 가운데 하나 |
| AAL2 까지 | 서로 다른 방법으로 받은 복구 코드 둘 · 복구 코드 하나와 계정에 묶인 단일 요소 인증수단 · 신원 증명을 다시 받기(신원 증명을 받은 계정만) 가운데 하나 |
| AAL3 · IAL1 이나 IAL2 로 증명한 계정 | AAL2 까지인 계정과 같다 |
| AAL3 · IAL3 으로 증명한 계정 | 처음 대면 신원 증명 때 모은 생체 특징과 대조 |
어떤 경우든 복구가 일어나면 사용자나 사용자가 지정한 사람에게 반드시 알림을 보냅니다.
출처 문서
정본은 NIST SP(Special Publication, 특별 간행물) 800-63B-4 「Digital Identity Guidelines: Authentication and Authenticator Management」입니다. 최종판은 2025년 7월 31일에 나왔습니다. 그 앞에 2022년 12월 16일, 2024년 8월 21일 두 번의 초안이 있었습니다.
이 문서는 2020년 3월 2일 자 SP 800-63B 를 대체합니다. 「This publication supersedes NIST Special Publication (SP) 800-63B」라고 첫머리에 적습니다. 3판 묶음의 기본 권 SP 800-63-3 은 2025년 8월 1일부로 4판에 대체됐습니다. 3판 문서의 절 번호는 이미 대체된 판의 번호입니다.
네 권 묶음
디지털 신원 지침은 네 권이 한 묶음입니다. 인증 보증 수준은 그중 B 권이 정합니다.
| 문서 | 다루는 것 |
|---|---|
| SP 800-63-4 | 기본 권. 디지털 신원 모델 · 위험 평가 · 세 등급 고르는 절차 |
| SP 800-63A-4 | 신원 증명과 등록. IAL |
| SP 800-63B-4 | 인증과 인증수단 관리. AAL |
| SP 800-63C-4 | 연합과 단언. FAL |
정부 정보 시스템에 네트워크로 접속하는 사람의 인증을 다룹니다. 문서 스스로 이 목적 밖의 표준을 묶으려는 뜻은 없다고 적습니다.
요구 강도를 가르는 낱말
대문자로 쓴 낱말만 요구입니다. 같은 낱말을 소문자로 쓰면 요구가 아닙니다. 「1.1 Notations」가 넷을 정의합니다.
| 낱말 | 뜻 |
|---|---|
SHALL · SHALL NOT |
반드시 지킵니다. 벗어나면 이 지침을 따른 것이 아닙니다 |
SHOULD · SHOULD NOT |
특히 알맞아 권하지만 꼭 그래야 하는 것은 아닙니다. 부정형은 말리지만 금지하지는 않습니다 |
MAY · NEED NOT |
지침이 허용하는 범위 안의 선택입니다 |
CAN · CANNOT |
요구가 아니라 할 수 있는지를 말합니다 |
절마다 요구를 거는지도 표시돼 있습니다. 2장(등급별 요구), 3장(인증수단과 검증자), 4장(인증수단 사건 관리), 5장(세션 관리), 부록 B(동기화 인증수단)가 normative 입니다. 지켜야 이 지침을 따랐다고 인정되는 절이라는 뜻입니다. 1장과 6~8장, 부록 A·C·D·E 는 informative 로 참고용입니다.
SHALL 과 SHOULD 가 갈리는 대목
2.5 절의 등급별 요약표는 스스로 non-normative 라고 밝힙니다. 재인증 줄의 머리도 「Reauthentication (recommended)」입니다. 실제 강도는 2.1.3 · 2.2.3 · 2.3.3 절 본문을 봐야 합니다.
| 등급 | 전체 시간 상한 | 요청 없는 시간 상한 |
|---|---|---|
| AAL1 | 상한을 두는 것은 SHALL. 30일 이하는 SHOULD | 두어도 되고(MAY) 안 둬도 된다 |
| AAL2 | 24시간 이하 SHOULD | 1시간 이하 SHOULD |
| AAL3 | 12시간 이하 SHALL | 15분 이하 SHOULD |
같은 갈림이 다른 요구에도 있습니다. AAL2 에서 검증자가 피싱 저항 수단을 적어도 하나 내놓는 것은 SHALL 입니다. 사용자에게 그 수단을 쓰라고 권하는 것은 SHOULD 입니다. 인증 의도는 AAL2 에서 SHOULD, AAL3 에서 SHALL 입니다.
구현에 맡긴 것
타이머 값은 상한 안에서 기관이 정합니다. 기관은 실제로 쓰는 값을 시스템 보안 계획에 반드시 적어 둡니다(5.2 절). 기기에 묶인 세션 유지 기술처럼 더 강한 수단을 쓰면 상한을 늘려도 됩니다(MAY). 연합에서 재인증을 채웠는지는 서비스가 판단합니다.
절 찾아보기
| 절 | 내용 |
|---|---|
| SP 800-63B-4 2.1 · 2.2 · 2.3 | AAL1 · AAL2 · AAL3 의 인증수단 · 요구 · 재인증 |
| SP 800-63B-4 2.5 | 등급별 요약표(non-normative) |
| SP 800-63B-4 3.1.3.3 · 3.2.9 | 전화망을 쓰는 대역 외 인증 · 제한 인증수단 |
| SP 800-63B-4 3.2.5 · 3.2.7 · 3.2.8 · 3.2.13 | 피싱 저항 · 재전송 저항 · 인증 의도 · 내보내기 |
| SP 800-63B-4 4.2.2 | 등급별 계정 복구 |
| SP 800-63B-4 5.1 · 5.2 | 세션 · 재인증 |
| SP 800-63B-4 부록 B · 부록 E | 동기화 인증수단 · 변경 기록 |
| SP 800-63-4 3.3.2 · 3.3.3.2 | IAL · AAL · FAL 의 뜻 · 영향 수준에서 첫 AAL 고르기 |
| SP 800-63C-4 2.5 · 4.9 | 연합에서 등급을 요청하고 단언에 싣기 |
이름이 갈리는 곳
3판은 AAL 을 「Authenticator Assurance Level」(인증수단 보증 수준)로 풀었습니다. 4판 본문은 「Authentication Assurance Level」로 씁니다. 같은 등급입니다. NIST CSRC(Computer Security Resource Center) 발행 페이지의 초록에는 지금도 「authenticator assurance levels」가 남아 있습니다.
예시
Login.gov 의 등급 값
Login.gov 는 다른 서비스가 로그인을 맡기는 신원 제공자입니다. 서비스는 앞에서 본 인증 맥락 등급 참조(ACR) 값으로 원하는 등급을 요청합니다. OIDC 로 붙을 때는 acr_values 에, SAML 로 붙을 때는 AuthnContextClassRef 에 넣습니다. 두 방식이 같은 값을 씁니다.
| 값 | 뜻 |
|---|---|
urn:gov:gsa:ac:classes:sp:PasswordProtectedTransport:duo |
기본값. 두 번째 요소로 인증했다. 기억해 둔 기기가 아닌 별도의 두 번째 요소로 적어도 30일에 한 번은 다시 인증한다 |
http://idmanagement.gov/ns/assurance/aal/2 |
기본값과 같되 매번 기억해 둔 기기가 아닌 별도의 두 번째 요소를 받는다 |
http://idmanagement.gov/ns/assurance/aal/2?phishing_resistant=true |
암호 방식으로 인증했다. 지금 받는 수단은 보안 키 · 얼굴이나 터치로 여는 잠금 · PIV 카드 · CAC(Common Access Card) |
http://idmanagement.gov/ns/assurance/aal/2?hspd12=true |
HSPD-12(Homeland Security Presidential Directive 12) 자격증명으로 인증했다. PIV 카드나 CAC 가 있어야 한다 |
첫 두 줄을 가르는 것은 기억해 둔 기기(remembered device)입니다. Login.gov 문서는 「별도의 두 번째 요소」를 기억해 둔 기기가 아닌 것으로 풉니다. 기본값은 적어도 30일에 한 번 별도의 두 번째 요소를 받습니다. …aal/2 는 매번 받습니다.
이 표에 AAL1 과 AAL3 값은 없습니다. Login.gov 는 두 번째 요소 없는 AAL1 을 받지 않습니다. 신원 증명 서비스를 쓰는 설정에서는 …aal/2 의 동작을 최소로 강제합니다.
SAML 요청에 실으면 아래와 같습니다. 신원 증명을 거친 계정을, 피싱 저항 다중 인증의 AAL2 로, 이메일·전화번호·이름·사회보장번호와 함께 요청합니다.
<samlp:AuthnRequest ...>
<!-- ... -->
<samlp:RequestedAuthnContext Comparison='exact'>
<saml:AuthnContextClassRef>urn:acr.login.gov:verified</saml:AuthnContextClassRef>
<saml:AuthnContextClassRef>http://idmanagement.gov/ns/assurance/aal/2?phishing_resistant=true</saml:AuthnContextClassRef>
<saml:AuthnContextClassRef>http://idmanagement.gov/ns/requested_attributes?ReqAttr=email,phone,first_name,last_name,ssn</saml:AuthnContextClassRef>
</samlp:RequestedAuthnContext>
</samlp:AuthnRequest>
둘째 줄이 등급입니다. 첫째 줄은 신원 증명 여부를, 셋째 줄은 받을 속성을 정합니다. OIDC 의 acr_values 에 여러 값을 넣을 때는 공백으로 이은 뒤 주소에 넣을 수 있게 이스케이프합니다.
등급별 요약표의 실제 값
등급별 요구를 한 표에 모은 요약표입니다. 참고용 표라서 반드시와 권장의 갈림은 「출처 문서」 절의 표를 따릅니다. FIPS(Federal Information Processing Standards, 연방 정보 처리 표준) 140 은 암호 모듈을 검증하는 미국 정부 기준입니다.
| 요구 | AAL1 | AAL2 | AAL3 |
|---|---|---|---|
| 쓸 수 있는 인증수단 | AAL2·AAL3 의 모든 것 · 비밀번호 · 조회 비밀 · 대역 외 · 단일 요소 OTP · 단일 요소 암호 | 다중 요소 암호 · 다중 요소 대역 외 · 다중 요소 OTP · 비밀번호나 생체 대조에 단일 요소 암호·조회 비밀·대역 외·단일 요소 OTP 가운데 하나를 더한 것 | 다중 요소 암호 · 단일 요소 암호에 비밀번호나 생체 대조를 더한 것 |
| FIPS 140 검증(정부 검증자·인증수단) | 검증자 레벨 1 | 검증자 레벨 1 · 인증수단 전체 레벨 1 | 검증자 레벨 1 · 인증수단 전체 레벨 1 |
| 재인증(권장) | 전체 30일 | 전체 24시간 · 요청 없음 1시간 · 단일 요소로 다시 | 전체 12시간 · 요청 없음 15분 |
| 피싱 저항 | 요구 안 함 | 권장 · 반드시 내놓기 | 필수 |
| 재전송 저항 | 요구 안 함 | 필수 | 필수 |
| 인증 의도 | 요구 안 함 | 권장 | 필수 |
| 키 내보내기 | 허용 | 허용 | 금지 |
둘째 줄은 정부가 쓰는 검증자와 인증수단이 FIPS 140 검증을 어느 수준까지 받아야 하는지입니다. 「전체」(overall)는 물리 보안 같은 항목별 레벨이 아니라 모듈 전체에 매긴 레벨입니다.
배경
예전에는 한 숫자로 보증을 매겼습니다. LOA(Level of Assurance, 보증 수준)라는 네 단계 등급입니다. 이 네 단계는 2003년 12월 16일 자 미국 관리예산처(OMB, Office of Management and Budget) 각서 M-04-04 에 적혀 있습니다. 2판(SP 800-63-2)까지 신원 증명과 인증의 세기가 이 한 숫자에 묶였습니다.
신원 증명, 인증수단, 연합의 요구를 한 꾸러미로 묶으면 때로 뜻하지 않은 결과가 났습니다. 구현하는 기관에 불필요한 부담을 지울 수도 있었습니다. 강한 가명 인증(strong pseudonymous authentication)처럼 인증 세기와 신원 증명을 따로 다룰 필요도 커졌습니다.
3판(SP 800-63-3)은 LOA 를 접었습니다. 대신 IAL · AAL · FAL 셋으로 갈랐습니다. AAL 이라는 이름도 이때 생겼습니다. 기관은 신원 증명, 인증, 연합의 오류 위험을 따로 평가해 등급을 하나씩 골라야 합니다(SHALL).
갈래
세 등급은 막으려는 공격의 범위로 갈립니다. 위로 갈수록 비밀번호를 노리는 공격에서 피싱, 검증자 침해까지 범위가 넓어집니다. 받아 주는 인증수단은 줄어듭니다. 재인증 전체 시간 상한도 30일에서 24시간, 12시간으로 짧아집니다.
AAL1
사용자가 계정에 묶인 인증수단을 쥐고 있다는 기본 확신을 줍니다. 단일 요소든 다중 요소든 받습니다. 비밀번호 · 조회 비밀 · 대역 외 장치 · 일회용 비밀번호 장치 · 암호 인증수단 가운데 하나를 반드시 씁니다(SHALL). 검증자는 다중 인증 방법도 내놓기를 권합니다(SHOULD). 사용자가 그 방법을 쓰도록 장려하기도 권합니다.
통신은 검증자와 맺은 인증된 암호화 연결로만 오갑니다(SHALL). 재인증 전체 시간 상한은 반드시 둡니다(SHALL). 그 상한은 30일 이하를 권합니다(SHOULD). 요청 없는 시간 상한은 두어도 되고 안 둬도 됩니다(MAY).
AAL2
인증수단을 쥐고 있다는 높은 확신을 줍니다. 서로 다른 요소 둘을 반드시 증명합니다(SHALL). 다중 요소 인증수단 하나를 쓰거나, 가진 것 하나에 비밀번호나 생체 대조를 더합니다. 가진 것은 조회 비밀 · 대역 외 장치 · 단일 요소 일회용 비밀번호 장치 · 단일 요소 암호 인증수단 가운데서 고릅니다.
나머지 요구는 아래 표와 같습니다. 동기화 인증수단은 표의 두 조건을 지키면 쓸 수 있습니다.
| 요구 | 강도 |
|---|---|
| 쓰는 인증수단 가운데 적어도 하나가 재전송을 견딘다 | SHALL |
| 적어도 한 인증수단으로 인증 의도를 확인한다 | SHOULD |
| 검증자가 피싱 저항 수단을 적어도 하나 내놓는다 | SHALL |
| 쓸 수 있을 때마다 피싱 저항 수단을 쓰라고 권한다 | SHOULD |
| 연방 기관은 직원·계약자·협력사가 연방 정보 시스템에 들어올 때 피싱 저항 인증을 쓰게 한다 | SHALL |
| 동기화 저장소에 올린 키는 암호화한 꼴로만 둔다 | SHALL |
| 동기화 저장소의 키에 접근할 때 AAL2 수준의 다중 인증을 받는다 | SHALL |
| 재인증 전체 시간 24시간 이하 · 요청 없는 시간 1시간 이하 | SHOULD |
문자 메시지로 일회용 번호를 받는 방식도 AAL2 의 가진 것에 들 수 있습니다. 다만 전화망을 쓰는 대역 외 인증은 제한 인증수단입니다. 제한 인증수단은 다중 인증 가운데 덜 안전한 방식입니다. 일부 대국민 서비스에 아직 필요해서 조건을 붙여 남겨 두었습니다.
이것을 받는 쪽은 제한 없는 다른 인증수단을 함께 내놓아야 합니다. 위험도 사용자에게 알려야 합니다. 나중에 못 쓰게 될 때를 대비한 이전 계획도 세워야 합니다(모두 SHALL). 문자를 보내기 전에는 기기 교체, SIM(Subscriber Identity Module) 변경, 번호 이동 같은 위험 신호를 살피기를 권합니다(SHOULD).
AAL3
아주 높은 확신을 줍니다. 공개 키 암호로 키를 쥐고 있음을 증명합니다. 여기에 활성화 요소나 비밀번호를 더합니다. 다중 요소 암호 인증수단 하나, 또는 단일 요소 암호 인증수단에 비밀번호나 생체 대조를 더한 조합만 받습니다(SHALL).
그 암호 인증수단이 지켜야 할 요구는 아래와 같습니다. AAL2 와 달리 재인증도 처음 인증과 같은 요구를 받습니다.
| 요구 | 강도 |
|---|---|
| 개인 키를 내보낼 수 없다 | SHALL |
| 피싱 저항을 갖춘다 | SHALL |
| 인증 프로토콜이 재전송을 견딘다 | SHALL |
| 모든 인증과 재인증에서 인증 의도를 확인한다 | SHALL |
| 검증자가 털려도 비밀이 새지 않게 공개 키 암호를 쓴다 | SHALL |
| 동기화 인증수단을 쓴다 | SHALL NOT |
| 재인증 전체 시간 12시간 이하 | SHALL |
| 요청 없는 시간 15분 이하 | SHOULD |
4판에서 달라진 요구
4판에서 AAL 에 걸리는 변경입니다.
| 대상 | 바뀐 것 |
|---|---|
| AAL3 인증수단 | 하드웨어 인증수단 대신 내보낼 수 없는 암호 인증수단을 요구. 인증수단의 FIPS 140 검증 수준은 낮춤 |
| 대역 외 인증수단 | 활성화 요소를 요구하는 다중 요소판을 인정 |
| 동기화 인증수단 | 요구를 새로 둠 |
| 피싱 저항 | 정의를 두고 요구를 고침 |
| 키 내보내기 | 금지 요건을 새로 둠 |
| 계정 복구 | 요구와 방법을 고침 |
| 재인증 | 틀은 세션 관리 절에 두고 시간 값은 등급별 요구로 옮김 |
관련 항목
인증 강도를 등급으로 정한 표준·문서
NIST · NIST SP 800-63 · NIST SP 800-63A · NIST SP 800-63B · NIST SP 800-63C · FIPS 140 · OMB M-04-04 · eIDAS
인증 보증 수준과 나란히 매기는 보증 등급
신원 보증 수준 · 연합 보증 수준 · 보증 수준 · LOA
위험을 따져 인증 세기를 정하는 절차
디지털 신원 위험 관리 · 위험 평가 · 위험 기반 인증 · 적응형 인증
인증 보증 수준에 관여하는 역할·참여자
청구자 · 가입자 · 검증자 · 자격증명 서비스 제공자 · 신뢰 당사자 · 신원 제공자
등급을 가르는 인증 요소와 인증수단
인증 요소 · 다중 인증 · 인증수단 · 비밀번호 · 일회용 비밀번호 · 대역 외 인증 · 복구 코드 · 보안 키 · 패스키 · 동기화 패스키 · 생체 인증 · 스마트카드 · PIV
높은 등급을 받쳐 주는 암호 기술
피싱 저항 · 채널 바인딩 · 개인 키 · 공개 키 암호 · WebAuthn · FIDO2 · TPM · 신뢰 실행 환경 · 보안 요소
인증 보증 수준이 막으려는 공격
피싱 · 재전송 공격 · SIM 스와핑 · 크리덴셜 스터핑 · 중간자 공격 · 세션 하이재킹 · 계정 탈취
세션 동안 등급을 지키거나 끌어올리는 절차
인증 보증 수준의 앞뒤에 오는 절차
신원 증명 · 등록 · 인증 · 인가 · 인증과 인가 · 계정 복구
연합 로그인에서 등급을 실어 나르는 수단
연합 · 단언 · OpenID Connect · SAML · ID 토큰
다른 이름: AAL · authentication assurance level · Authentication Assurance Level · Authenticator Assurance Level