SP 800-63
고친 사람 github-actions[bot]
SP 800-63 은 온라인 서비스가 사용자를 얼마나 꼼꼼히 확인해야 하는지 정하는 미국 정부의 지침입니다. 가입할 때와 로그인할 때 무엇을 확인하고 무엇을 하지 말아야 하는지 적어 둡니다. 원래는 미국 연방 기관이 따르는 문서입니다. 민간 서비스도 비밀번호 규칙을 정할 때 이 문서를 자주 들여다봅니다.
쉽고 빠른 이해
SP 800-63 은 로그인 보안을 얼마나 세게 할지 정한 공통 기준표입니다. 「비밀번호 하나로만 로그인시키려면 15자 이상을 받아라」 같은 규칙이 이 문서에 들어 있습니다.
이 기준이 없으면 서비스마다 감으로 규칙을 정합니다. 어떤 곳은 특수문자를 꼭 넣게 합니다. 다른 곳은 석 달마다 비밀번호를 바꾸게 합니다. 그 규칙이 계정을 정말 지키는지 따질 잣대도 없습니다.
이렇게 씁니다.
- 엉뚱한 사람이 로그인했을 때 피해가 얼마나 클지 먼저 가늠합니다
- 피해 크기에 맞춰 가입 확인 · 로그인 확인 · 넘겨받은 로그인 확인의 등급을 각각 1~3 가운데서 고릅니다
- 고른 등급들이 요구하는 로그인 방식과 규칙을 갖춥니다
대가는 등급이 높을수록 사용자가 번거로워진다는 것입니다. 높은 등급에서는 휴대폰 문자 대신 보안 키 같은 장비를 따로 마련하게 해야 할 수도 있습니다.
상세
이 절은 SP 800-63 이 어떤 문서이고 무엇을 등급으로 매기는지 본 뒤, 비밀번호 · SMS 규칙과 판 변경, 이 지침을 만나는 곳을 차례로 봅니다.
SP 800-63 은 NIST(National Institute of Standards and Technology, 미국 국립표준기술연구소)가 펴내는 문서입니다. NIST 는 미국 상무부 아래에서 측정과 기술 표준을 맡는 기관입니다. SP 는 Special Publication 을 줄인 말입니다. 우리말로는 특별 간행물입니다.
문서 제목은 Digital Identity Guidelines 입니다. 우리말로 옮기면 디지털 신원 지침입니다. 디지털 신원은 온라인에서 한 사람을 가리키는 계정과 그 계정에 묶인 정보입니다. 이 지침은 그 계정을 만들 때 · 쓸 때 · 다른 서비스에 넘길 때 무엇을 확인할지 정합니다.
다루는 것은 인증과 인가 가운데 「이 사람이 누구인가」를 가리는 쪽입니다. 확인된 사람이 무엇을 해도 되는지 정하는 인가는 이 지침의 범위 밖입니다.
지금 판은 개정 4판입니다. 번호 끝에 판 번호를 붙여 SP 800-63-4 라고 씁니다. 2025년 7월에 최종판이 나왔습니다. 그해 8월 1일부터 개정 3판(SP 800-63-3)을 대체합니다. 이 편은 개정 4판을 기준으로 씁니다.
이 지침이 필요한 까닭
로그인을 얼마나 세게 받을지 기관마다 따로 정하면 「안전하다」의 뜻이 기관마다 달라집니다. 한 기관이 확인을 마친 사람을 다른 기관이 받아들여도 되는지 가를 방법도 없습니다.
SP 800-63 은 확인 절차를 가입 · 로그인 · 다른 서비스로 넘김, 셋으로 나눕니다. 그리고 각 절차의 세기를 1부터 3까지의 등급으로 매깁니다. 그러면 「이 기능에는 2등급 이상」처럼 한마디로 요구를 주고받을 수 있습니다.
등급마다 무엇을 갖춰야 하는지도 문서에 적혀 있습니다. 그 목록에 견주면 서비스가 그 등급을 지켰는지 가릴 수 있습니다.
네 권으로 나뉜 묶음
SP 800-63 은 한 권이 아니라 네 권짜리 묶음입니다. 사용자가 서비스를 만나는 세 순간에 한 권씩 붙습니다. 그 셋을 묶는 기본 권이 하나 더 있습니다.
첫 순간은 가입입니다. 가입할 때 그 사람이 정말 자기가 말한 사람인지 확인하는 일이 신원 증명입니다. 신분증 사진과 얼굴을 대조하는 것이 흔한 예입니다. SP 800-63A 가 이것을 맡습니다.
둘째 순간은 로그인입니다. 로그인하는 사람이 전에 가입한 바로 그 계정 주인인지 확인하는 일이 인증입니다. 비밀번호를 넣거나 휴대폰에 온 번호를 넣는 것이 이 단계입니다. SP 800-63B 가 이것을 맡습니다.
셋째 순간은 로그인 결과를 다른 서비스에 넘길 때입니다. 「구글 계정으로 로그인」처럼 한 곳에서 확인한 결과를 다른 곳이 받아 쓰는 방식을 연합이라고 부릅니다. SP 800-63C 가 이것을 맡습니다.
연합에서 넘기는 결과물이 단언입니다. 「이 사람은 방금 이렇게 확인됐다」를 담아 서명한 메시지입니다. 받는 쪽은 먼저 서명을 확인합니다. 서명이 맞으면 그 사람을 로그인된 것으로 받아들입니다.
기본 권인 SP 800-63 은 세 권이 함께 쓰는 용어와 모델을 정합니다. 서비스가 자기 위험을 가늠해 세 권에서 각각 몇 등급을 고를지 정하는 절차도 기본 권에 있습니다. 흔히 「SP 800-63」이라고 하면 이 네 권 묶음 전체를 가리킵니다.
flowchart TD
subgraph BASE["SP 800-63 기본 권 · 공통 용어 · 등급을 고르는 절차"]
A["가입 · 신원 증명 · SP 800-63A"] --> B["로그인 · 인증 · SP 800-63B"]
B --> C["다른 서비스에 넘김 · 연합 · SP 800-63C"]
end
그림처럼 기본 권은 세 권을 감쌉니다. 세 권은 사용자가 서비스를 만나는 순서대로 이어집니다.
지침에 나오는 역할
지침은 확인에 관여하는 쪽마다 이름을 붙여 둡니다. 이름이 낯설어도 백엔드 개발자가 매일 만지는 부분에 하나씩 대응합니다.
| 역할 | 하는 일 | 백엔드에서 흔히 대응하는 것 |
|---|---|---|
| 가입자(subscriber) | 등록을 마친 사용자 | 우리 서비스의 회원 |
| 자격증명 서비스 제공자(CSP, Credential Service Provider) | 신원 확인 · 로그인 수단을 계정에 등록 | 회원 가입과 계정 관리 기능 |
| 검증자(verifier) | 로그인 때 내민 수단이 맞는지 확인한다 | 로그인 처리 코드 |
| 신뢰 당사자(RP, Relying Party) | 확인 결과를 믿고 서비스를 내준다 | 로그인 뒤 요청을 받는 서비스 · 「구글로 로그인」을 받아 쓰는 서비스 |
작은 서비스라면 한 회사가 네 역할을 다 맡습니다. 그래도 역할마다 이름을 붙여 두면 연합처럼 확인하는 쪽과 믿는 쪽이 다른 회사일 때도 같은 용어로 말할 수 있습니다.
로그인 때 가입자가 내미는 것을 인증수단(authenticator)이라고 합니다. 가입자가 가지고 통제하는 것이어야 합니다. 비밀번호, 일회용 번호를 띄우는 앱, 컴퓨터에 꽂는 보안 키가 모두 인증수단입니다.
이 지침에서 자격증명은 인증수단과 다른 것을 가리킵니다. 인증수단을 특정 계정에 묶어 둔 기록이 자격증명입니다. 회원 테이블에서 회원 ID 와 그 사람의 비밀번호를 대조할 값을 함께 담은 행 하나를 떠올리면 됩니다. 사용자가 외워 둔 비밀번호는 인증수단입니다. 서버가 그 비밀번호를 그 계정과 이어 둔 기록이 자격증명입니다.
세 가지 보증 수준
세 권은 각자 맡은 확인이 얼마나 믿을 만한지를 매깁니다. 그 척도를 보증 수준이라고 합니다. 권마다 하나씩이라 보증 수준은 모두 세 종류입니다.
| 보증 수준 | 무엇이 얼마나 믿을 만한지 | 맡는 권 |
|---|---|---|
| IAL(Identity Assurance Level, 신원 보증 수준) | 가입한 사람이 정말 그 사람인가 | SP 800-63A |
| AAL(Authentication Assurance Level, 인증 보증 수준) | 로그인한 사람이 그 계정 주인인가 | SP 800-63B |
| FAL(Federation Assurance Level, 연합 보증 수준) | 넘겨받은 로그인 결과를 믿어도 되나 | SP 800-63C |
보증 수준마다 등급이 1부터 3까지 있습니다. 숫자가 클수록 확인이 단단합니다. 서비스는 세 보증 수준의 등급을 따로 고릅니다. 숫자가 같을 필요도 없습니다.
고르는 기준은 위험입니다. 엉뚱한 사람이 그 계정으로 들어왔을 때 피해가 클수록 높은 등급을 고릅니다. 가입 때 신분 확인이 필요 없는 서비스라면 IAL 은 아예 고르지 않을 수도 있습니다.
AAL 을 예로 들면 등급 사이의 차이가 잘 보입니다. 등급은 AAL(Authentication Assurance Level) 뒤에 숫자를 붙여 AAL1, AAL2, AAL3 이라고 씁니다.
등급을 가르려면 요소라는 말이 먼저 필요합니다. 요소는 인증수단의 종류입니다. 아는 것(비밀번호), 가진 것(휴대폰·보안 키), 자기 몸(지문) 셋이 있습니다.
피싱은 가짜 로그인 화면을 띄워 비밀번호나 일회용 번호를 받아 가는 공격입니다. 진짜 사이트와 주소가 한 글자 다른 곳에 똑같이 생긴 화면을 띄우는 식입니다.
피싱에 버티는 인증수단은 사용자가 가짜 화면에 속아도 로그인 정보를 공격자에게 넘기지 않습니다. 컴퓨터에 꽂는 보안 키가 대표적입니다. 보안 키는 자기를 등록한 사이트 주소에만 응답하므로 가짜 사이트에는 쓸 만한 값을 내주지 않습니다.
| AAL | 요구 |
|---|---|
| AAL1 | 인증수단 하나로도 된다. 비밀번호 하나로 들어가는 로그인이 여기 든다 |
| AAL2 | 서로 다른 요소 둘을 받는다. 이것이 다중 인증이다 |
| AAL3 | 요소 둘에 더해 피싱에 버티는 인증수단을 요구한다 |
아래 줄로 갈수록 공격자가 로그인을 뚫는 데 드는 품이 커집니다. 등급별 세부 요구는 인증 보증 수준 편이 다룹니다.
요구 강도를 가르는 낱말
지침의 문장마다 얼마나 꼭 지켜야 하는지가 대문자 낱말로 붙어 있습니다. 이 낱말을 읽을 줄 알아야 무엇이 의무이고 무엇이 권고인지 가를 수 있습니다.
| 낱말 | 뜻 |
|---|---|
| SHALL · SHALL NOT | 반드시 지킨다 · 반드시 하지 않는다. 어기면 그 등급을 못 맞춘 것이다 |
| SHOULD · SHOULD NOT | 하기를 권한다 · 하지 않기를 권한다. 이유가 있으면 달리 해도 된다 |
| MAY | 해도 된다 |
인터넷 표준 문서는 의무를 대개 MUST 로 적습니다. 이 지침은 같은 강도를 SHALL 로 적습니다. 아래 비밀번호 규칙에는 SHALL NOT 이 많습니다. 흔히 하던 관행 몇 가지를 의무로 금지했기 때문입니다.
비밀번호 규칙
백엔드 개발자가 이 지침을 가장 자주 펴는 것은 비밀번호 규칙을 찾을 때입니다. 회원 가입 화면이 비밀번호를 받을 때 무엇을 검사하고 무엇을 검사하지 말지가 SP 800-63B 에 있습니다.
| 규칙 | 강도 |
|---|---|
| 비밀번호 하나로만 로그인시키면 15자 이상을 받는다 | SHALL |
| 다중 인증의 한 요소로만 쓰면 8자 이상을 받는다 | SHALL |
| 최대 길이는 64자 이상까지 허용한다 | SHOULD |
| 대문자·숫자·특수문자를 섞으라는 조합 규칙을 두지 않는다 | SHALL NOT |
| 정해진 주기마다 바꾸게 하지 않는다. 유출 증거가 있을 때만 바꾸게 한다 | SHALL NOT |
| 새 비밀번호를 차단 목록(유출됐거나 흔한 비밀번호 모음)과 대조한다 | SHALL |
| 비밀번호 관리자와 자동 채우기를 허용한다 | SHALL |
| 붙여넣기를 허용한다 | SHOULD |
| 로그인하지 않은 사람이 볼 수 있는 힌트를 저장하지 않는다 | SHALL NOT |
| 「어머니의 고향은?」 같은 보안 질문을 받지 않는다 | SHALL NOT |
조합 규칙이 금지된 것은 사람이 규칙을 예측할 수 있는 꼴로 맞추기 때문입니다.
「대문자, 숫자, 특수문자를 하나씩」을 요구하면 Password1! 처럼 첫 글자만 대문자로 바꾸고 끝에 숫자와 느낌표를 붙이는 사람이 많습니다.
공격자도 그 습관을 알고 그런 꼴부터 넣어 봅니다. 규칙은 사용자를 번거롭게 합니다. 그런데도 추측은 별로 어렵게 만들지 못합니다.
주기적 변경도 같은 문제를 낳습니다.
석 달마다 바꾸라고 하면 Spring2025! 다음에 Summer2025! 를 고르는 식으로 조금씩만 바꿉니다. 옛 비밀번호를 아는 공격자는 새 것도 쉽게 짐작합니다.
차단 목록은 조합 규칙 대신 들어온 검사입니다. 예전에 유출된 비밀번호, 사전에 있는 낱말, 서비스 이름처럼 공격자가 먼저 넣어 볼 값을 모은 목록입니다. 대조는 비밀번호 전체로 합니다. 비밀번호 안에 든 낱말이나 일부 글자를 떼어 대조하지 않습니다.
길이 하한이 둘로 갈리는 것은 비밀번호 혼자 계정을 지키느냐에 따라 위험이 다르기 때문입니다. 비밀번호 하나로만 로그인시키면 비밀번호가 뚫리는 순간 계정이 넘어갑니다. 그래서 더 긴 비밀번호를 받습니다. 다른 요소가 뒤를 받치면 비밀번호가 뚫려도 한 번 더 막힙니다. 그만큼 하한을 낮게 둡니다.
SMS 인증에 붙은 제한
휴대폰 문자로 일회용 번호를 보내는 로그인은 이 지침에서 제한된 인증수단으로 분류됩니다. 문자 메시지(SMS, Short Message Service)와 음성 전화는 둘 다 공중 전화망을 거칩니다.
제한이 붙은 것은 일회용 번호가 엉뚱한 사람에게 가기 쉬워서입니다. 유심은 휴대폰에 꽂아 가입자를 가리키는 작은 카드입니다. 영어로는 SIM(Subscriber Identity Module, 가입자 식별 모듈) 카드라고 합니다.
공격자가 통신사를 속여 피해자의 전화번호를 자기 유심으로 옮기면 일회용 번호가 공격자에게 갑니다. 이 공격이 SIM 스와핑입니다.
제한은 금지가 아닙니다. 쓸 수는 있지만 지킬 것이 붙습니다. 모든 가입자에게 전화망을 쓰지 않는 다른 인증수단도 마련해야 합니다(SHALL).
일회용 번호를 보내기 전에는 위험 신호를 살피기를 권합니다(SHOULD). 휴대폰 기기가 바뀌었거나 전화번호가 다른 통신사로 옮겨 간 것이 그런 신호입니다. 문자로 받은 일회용 번호는 가짜 화면에 그대로 옮겨 적힐 수 있어서 피싱에도 버티지 못합니다.
판이 바뀌며 달라진 것
예전 판은 신원 확인의 세기를 숫자 하나로 매겼습니다. LOA(Level of Assurance, 보증 수준)라는 네 단계 등급입니다. 2017년에 나온 개정 3판이 이 숫자 하나를 IAL · AAL · FAL 세 보증 수준으로 갈랐습니다. 가입 때 확인과 로그인 때 확인을 따로 고를 수 있게 한 것입니다.
개정 4판은 그 뼈대를 유지했습니다. 바뀐 것은 세부입니다. 비밀번호 하나로만 로그인시킬 때의 길이 하한이 8자에서 15자로 올랐습니다. 비밀번호 관리자를 허용하는 것도 의무가 됐습니다. 여러 기기 사이에 동기화되는 인증수단을 어떻게 다룰지도 부록으로 들어 있습니다. 흔히 쓰는 패스키가 대개 이런 인증수단입니다.
백엔드 개발자가 이 지침을 만나는 곳
가장 흔한 것은 회원 가입과 비밀번호 변경 기능을 짤 때입니다. 길이 하한, 차단 목록 대조, 붙여넣기 허용이 모두 이 기능의 검사 규칙으로 들어갑니다.
로그인 처리 쪽에도 지침이 닿습니다. 로그인 실패가 이어지면 시도 횟수를 막는 속도 제한을 두어야 합니다(SHALL).
비밀번호는 받은 글자 그대로 저장하지 않습니다. 솔트라는 무작위 값을 사용자마다 붙인 뒤 되돌릴 수 없는 함수로 바꿔 저장해야 합니다(SHALL). 솔트를 붙이면 같은 비밀번호라도 저장된 값이 사람마다 달라집니다. 자세한 저장 방식은 비밀번호 해싱 편이 다룹니다.
보안 점검과 고객사의 보안 질문지에서도 이 이름을 만납니다. 「비밀번호 정책이 NIST 지침을 따르나」 같은 질문이 오면 대개 SP 800-63B 의 비밀번호 규칙을 묻는 것입니다. 미국 연방 기관에 서비스를 내는 경우라면 계약이 요구하는 IAL · AAL · FAL 등급을 맞춰야 합니다.
관련 항목
SP 800-63 묶음을 이루는 권과 앞선 개정본
NIST SP 800-63A · NIST SP 800-63B · NIST SP 800-63C · NIST SP 800-63-3
SP 800-63 이 매기는 보증 등급
신원 보증 수준 · 인증 보증 수준 · 연합 보증 수준 · 보증 수준
SP 800-63 이 다루는 확인 단계
신원 증명 · 인증 · 페더레이션 · 단언 · 재인증 · 세션 · 계정 복구
SP 800-63 에 나오는 역할
자격증명 서비스 제공자 · 검증자 · 신뢰 당사자 · 가입자 · 청구자 · 신청자
SP 800-63 이 등급을 매기는 인증수단
인증수단 · 자격증명 · 비밀번호 · 일회용 비밀번호 · TOTP · 보안 키 · 패스키 · WebAuthn · FIDO2 · 생체 인증 · 디지털 인증서
SP 800-63 이 막으려는 공격
피싱 · SIM 스와핑 · 자격증명 스터핑 · 무차별 대입 공격 · 비밀번호 스프레이 · 중간자 공격
SP 800-63 의 비밀번호 규칙을 구현하는 기법
비밀번호 해싱 · 솔트 · 키 유도 함수 · 속도 제한 · 비밀번호 차단 목록 · 비밀번호 관리자 · 다중 인증
SP 800-63 과 나란히 쓰이는 표준과 규정
NIST · FIPS 140 · NIST SP 800-53 · OMB M-04-04 · eIDAS · RFC 2119
SP 800-63 의 단언을 실어 나르는 규격
SAML · OpenID Connect · OAuth 2.0 · 싱글 사인온
SP 800-63 이 속하는 상위 분류
인증과 인가 · 디지털 신원 · 신원 및 접근 관리 · 정보 보안
다른 이름: NIST SP 800-63 · SP 800-63-4 · NIST SP 800-63-4 · Digital Identity Guidelines · 디지털 신원 지침