사전 인증 보증 수준
표준

인증 보증 수준

gabury1고친 사람 github-actions[bot]

인증 보증 수준은 로그인 확인을 얼마나 믿을 수 있는지 세 등급으로 매깁니다. 비밀번호 하나만 보는 로그인은 낮은 등급을 받습니다. 비밀번호에 보안 키까지 확인하는 로그인은 높은 등급을 받습니다. 서비스는 잃을 것이 클수록 높은 등급을 요구합니다.

쉽고 빠른 이해

로그인이 얼마나 튼튼한지 1·2·3등급으로 매기는 잣대입니다. 비밀번호만 치면 1등급입니다. 휴대폰 인증 앱의 번호까지 넣으면 2등급입니다.

등급이 없으면 「우리 로그인은 안전하다」는 말이 서비스마다 다른 뜻이 됩니다. 송금 같은 기능에 어느 정도의 로그인이 필요한지 한 낱말로 말할 수 없습니다.

어떻게 도나:

  1. 엉뚱한 사람이 로그인했을 때 잃는 것을 따져 필요한 등급을 정합니다
  2. 그 등급이 요구하는 확인 수단을 로그인에 넣습니다
  3. 등급이 높을수록 로그인을 더 자주 다시 받습니다

대가도 있습니다. 등급이 높을수록 로그인이 번거로워집니다. 가장 높은 등급은 보안 키처럼 로그인용 비밀 값을 장치 밖으로 못 꺼내게 막은 장치가 사람마다 있어야 합니다.

상세

인증 보증 수준은 한 번의 로그인이 「그때 가입한 바로 그 사람」임을 얼마나 믿을 만하게 보이는지를 등급으로 나눈 것입니다. 영어 이름은 Authentication Assurance Level 입니다. 줄여서 AAL 이라고 부릅니다. 등급은 AAL1, AAL2, AAL3 셋입니다. 숫자가 클수록 믿을 만합니다.

이 등급은 미국 NIST(National Institute of Standards and Technology, 국립표준기술연구소)의 디지털 신원 지침에서 나왔습니다. 그 지침 가운데 인증을 다루는 문서가 SP 800-63B(Special Publication, 특별 간행물)입니다.

등급이 없으면 「안전한 로그인」이 서비스마다 다른 뜻이 됩니다. 어떤 팀은 긴 비밀번호면 안전하다고 봅니다. 다른 팀은 보안 키가 있어야 안전하다고 봅니다. 등급이 있으면 「송금에는 AAL2 가 필요하다」처럼 요구를 한 낱말로 적고 주고받을 수 있습니다.

이 절은 등급을 가르는 기준 셋을 먼저 풉니다. 요소의 개수, 피싱을 견디는지, 키가 기기 밖으로 나갈 수 있는지입니다. 그다음 등급별 요구, 등급을 고르는 법, 백엔드가 챙길 것을 차례로 봅니다.

인증 요소의 개수

인증 요소는 「내가 나다」를 보이는 증거의 종류입니다. 종류는 셋입니다. 종류마다 공격자가 훔치는 방법이 다르기 때문에 이렇게 나눕니다.

요소 예 공격자가 얻는 방법
아는 것 비밀번호 유출된 목록에서 찾거나 속여서 받아 낸다
가진 것 휴대폰 · 보안 키 물건을 손에 넣거나 가로채야 한다
자기 자신 지문 · 얼굴 몸의 특징을 흉내 내야 한다

서로 다른 두 종류를 요구하면 공격자는 두 가지 방법을 다 써야 합니다. 비밀번호가 새도 휴대폰이 없으면 로그인하지 못합니다. 이렇게 두 종류 이상을 확인하는 로그인을 다중 인증이라고 합니다.

같은 종류를 두 번 받는 것은 요소 둘이 아닙니다. 비밀번호에 보안 질문을 더해도 둘 다 아는 것입니다. 요소는 하나로 칩니다.

로그인할 때 사람이 내미는 비밀번호나 보안 키를 인증수단이라고 합니다. 보안 키는 컴퓨터에 꽂거나 휴대폰에 갖다 대는 작은 인증 장치입니다.

인증수단 하나가 요소 둘을 겸하기도 합니다. 지문을 대야 풀리는 보안 키는 가진 것과 자기 자신을 한 번에 보입니다.

피싱 저항

피싱은 진짜처럼 꾸민 가짜 로그인 화면으로 사용자를 부르는 공격입니다. 사용자는 가짜 화면에 비밀번호를 적습니다. 공격자는 그 값을 받아 진짜 사이트에 곧바로 옮겨 적습니다.

휴대폰 앱이나 문자 메시지로 받는 여섯 자리 번호를 일회용 비밀번호라고 합니다. 한 번 쓰고 버리는 번호라 유출 목록으로는 못 훔칩니다. 비밀번호에 이 번호를 더하면 요소가 둘이 됩니다.

요소를 둘 받아도 피싱은 못 막을 수 있습니다. 사용자가 일회용 비밀번호까지 가짜 화면에 적으면 공격자가 몇십 초 안에 옮겨 적어 로그인합니다.

피싱 저항은 이런 옮겨 적기가 통하지 않는 성질입니다. 가짜 사이트에서 얻은 것은 진짜 사이트에서 쓸모가 없어야 합니다. 사람이 눈으로 읽고 옮겨 적는 값을 쓰는 인증수단은 이 성질을 갖지 못합니다.

피싱을 견디는 대표 수단은 패스키와 보안 키입니다. 둘 다 개인 키라는 비밀 값을 품고 있습니다. 개인 키는 서명을 만드는 값입니다.

서버는 개인 키와 짝이 되는 공개 키만 갖고 그 서명을 확인합니다. 공개 키로는 서명을 확인만 할 수 있습니다. 서명을 만들 수는 없습니다.

패스키는 비밀번호 대신 기기에 든 개인 키로 로그인하는 방식입니다. 그 기기를 지문이나 PIN(Personal Identification Number, 개인 식별 번호)으로 풀어야 키가 쓰입니다. 그래서 패스키 하나로 가진 것과 자기 자신(PIN 이면 아는 것)을 한 번에 확인받습니다.

두 수단은 로그인할 때 비밀 값을 보내지 않습니다. 대신 지금 접속한 사이트의 도메인을 넣어 서명합니다. 가짜 도메인에서 만든 서명은 진짜 사이트가 받아 주지 않습니다.

문자 메시지로 받는 일회용 비밀번호는 인증 앱으로 받는 번호보다 약합니다. 공격자가 통신사를 속여 피해자의 전화번호를 자기 휴대폰으로 옮기면 번호가 공격자에게 갑니다. 이 공격을 SIM 스와핑(Subscriber Identity Module swapping)이라고 합니다.

그래서 문자 일회용 비밀번호는 조건을 붙여서만 쓰는 수단으로 분류됩니다. AAL2 에 쓸 수는 있습니다. 대신 서비스는 문자가 아닌 다른 인증수단도 골라 쓸 수 있게 내놓아야 합니다. 사용자에게는 문자가 더 약하다는 것을 알려야 합니다.

기기 밖으로 못 나가는 키

앞에서 본 개인 키가 어디에 머무르는지가 가장 높은 등급을 가릅니다. 보안 키는 개인 키를 칩 안에서 만들고 밖으로 꺼낼 수 없게 막습니다. 흔히 쓰는 패스키는 사용자의 클라우드 계정을 거쳐 다른 기기로 복사됩니다. 이렇게 복사되는 패스키를 동기화 패스키라고 합니다.

키가 복사된다는 것은 그 클라우드 계정이 털리면 키도 함께 나간다는 뜻입니다. 그래서 AAL3 는 개인 키를 내보낼 수 없는 인증수단만 받습니다. 동기화 패스키는 AAL3 에 쓸 수 없습니다. AAL2 에는 쓸 수 있습니다.

세 등급의 요구

세 기준을 등급마다 어디까지 요구하는지 한 표에 놓습니다. 위에서 푼 요소 · 피싱 저항 · 개인 키가 각각 한 줄입니다.

AAL1 AAL2 AAL3
인증 요소 하나면 된다 서로 다른 둘 서로 다른 둘. 그중 하나는 개인 키를 품은 인증수단
피싱 저항 요구하지 않는다 피싱 저항 수단을 적어도 하나 내놓아야 한다 반드시 피싱 저항
개인 키 따지지 않는다 따지지 않는다 기기 밖으로 못 나가야 한다
흔한 조합 비밀번호 하나 비밀번호 + 일회용 비밀번호 · 패스키 지문으로 푸는 보안 키 · 비밀번호 + 보안 키

AAL1 은 요소 하나로 충분합니다. 비밀번호만 받는 로그인이 여기에 듭니다. 틀린 사람이 들어와도 잃을 것이 적은 서비스가 이 등급을 씁니다.

AAL2 는 서로 다른 요소 둘을 요구합니다. 피싱 저항을 모든 사용자에게 강제하지는 않습니다. 대신 서비스는 피싱을 견디는 수단을 적어도 하나 골라 쓸 수 있게 반드시 내놓아야 합니다. 그래서 비밀번호에 일회용 비밀번호를 더한 로그인도 AAL2 가 됩니다.

AAL3 는 요소 둘에 더해 피싱 저항과 내보낼 수 없는 개인 키를 모두 요구합니다. 사람이 옮겨 적는 값만으로는 이 등급에 닿지 못합니다. 개인 키를 밖으로 못 내보내는 장치가 사람마다 있어야 합니다. 보안 키가 대표입니다.

로그인을 다시 받는 주기

로그인 한 번으로 연 세션을 끝없이 믿을 수는 없습니다. 사용자가 화면을 켜 둔 채 떠나면 다른 사람이 그 세션을 씁니다. 그래서 등급마다 세션을 얼마나 오래 믿을지 상한을 둡니다.

상한은 두 가지로 잽니다. 하나는 로그인한 뒤 전체로 흐른 시간입니다. 다른 하나는 요청이 한 번도 없던 시간입니다.

둘 중 하나라도 넘으면 로그인을 다시 받습니다. 이것을 재인증이라고 합니다.

등급 로그인 뒤 전체 시간 요청이 없던 시간
AAL1 30일 이하 권함 정하지 않는다
AAL2 24시간 이하 권함 1시간 이하 권함
AAL3 12시간 이하 필수 15분 이하 권함

표에서 반드시 지켜야 하는 값(SHALL)은 AAL3 의 12시간 하나입니다. 나머지는 권하는 값(SHOULD)입니다. 권하는 값은 이유가 있으면 달리 정할 수 있습니다.

등급을 고르는 법

등급은 서비스를 운영하는 쪽이 고릅니다. 기준은 엉뚱한 사람이 로그인했을 때 무엇을 잃느냐입니다. 글을 읽기만 하는 서비스와 돈을 보내는 서비스는 잃는 것의 크기가 다릅니다.

잃는 것은 여러 갈래로 따집니다. 돈, 개인정보 유출, 서비스 중단, 법적 책임 같은 것입니다. 이 갈래를 하나씩 따져 등급을 정하는 절차를 디지털 신원 위험 관리라고 부릅니다.

한 서비스 안에서도 기능마다 등급이 다를 수 있습니다. 사용자는 낮은 등급으로 로그인해 둘러봅니다. 높은 등급이 필요한 기능에 들어갈 때 요소를 하나 더 확인받습니다. 이렇게 세션 도중에 등급을 올리는 것을 스텝업 인증이라고 합니다.

아래 그림은 글 읽기에 AAL1, 송금에 AAL2 를 요구하는 서비스입니다. 한 세션이 로그인부터 등급을 잃을 때까지 거치는 상태를 보입니다.

stateDiagram-v2
    state "로그인 전" as S0
    state "AAL1 세션" as S1
    state "AAL2 세션" as S2
    [*] --> S0
    S0 --> S1: 비밀번호 확인
    S1 --> S2: 송금 화면에서 일회용 비밀번호 확인
    S2 --> S1: 1시간 동안 요청 없음
    S1 --> S0: 30일이 지남

AAL2 세션은 한 시간 동안 요청이 없으면 AAL1 세션으로 내려옵니다. 사용자가 다시 송금하려면 일회용 비밀번호를 한 번 더 넣어야 합니다.

나란히 매기는 세 등급

인증 보증 수준은 로그인만 봅니다. 가입할 때 그 사람이 현실의 누구인지 확인한 세기는 따로 매깁니다. 이 등급이 신원 보증 수준(IAL, Identity Assurance Level)입니다.

한 곳의 로그인 결과를 다른 서비스가 받아 쓰는 방식을 연합이라고 합니다. 구글 계정으로 다른 사이트에 로그인하는 것이 그 예입니다.

연합에서는 로그인 결과를 넘기는 과정도 믿을 만해야 합니다. 이 과정이 얼마나 튼튼한지는 연합 보증 수준(FAL, Federation Assurance Level)으로 매깁니다.

세 등급은 따로 고릅니다. 가입 때 신분증을 안 본 서비스도 로그인은 AAL2 로 받을 수 있습니다. 그 계정은 「가입한 그 사람」이라는 것이 튼튼히 확인됩니다. 그 사람이 현실에서 누구인지는 여전히 모릅니다.

백엔드에서 챙길 것

세션에는 그 세션이 어느 등급으로 열렸는지 적어 둡니다. 기능마다 요구하는 등급과 견주려면 이 값이 있어야 합니다. 시각도 함께 남겨야 재인증 상한을 잴 수 있습니다.

세션에 남길 값 쓰는 곳
달성한 등급 기능마다 요구하는 등급과 견준다
로그인한 시각 전체 시간 상한을 잰다
마지막 요청 시각 요청이 없던 시간 상한을 잰다
쓴 인증수단 피싱 저항 수단이었는지 나중에 가린다

앞서 본 연합처럼 로그인을 외부 신원 제공자에 맡기면 등급도 그쪽에서 정해집니다. 신원 제공자는 로그인 결과를 담은 단언에 몇 등급으로 확인했는지 실어 보냅니다. 서비스는 이 값을 읽어 기능마다 요구하는 등급과 견줍니다.

계정 복구도 같은 세기로 맞춥니다. AAL2 로 지킨 계정이 문자 메시지 한 통으로 비밀번호를 바꿔 준다면 공격자는 로그인 대신 복구를 노립니다. 복구가 약하면 계정 전체의 등급이 복구 수준으로 내려갑니다.

관련 항목

인증 강도를 등급으로 정한 표준·문서

NIST · NIST SP 800-63 · NIST SP 800-63B · eIDAS

인증 보증 수준과 나란히 매기는 보증 등급

신원 보증 수준 · 연합 보증 수준 · 보증 수준

위험을 따져 인증 세기를 정하는 절차

디지털 신원 위험 관리 · 위험 평가 · 위험 기반 인증 · 적응형 인증

인증 보증 수준에 관여하는 역할·참여자

청구자 · 가입자 · 검증자 · 자격증명 서비스 제공자 · 신뢰 당사자 · 신원 제공자

등급을 가르는 인증 요소와 인증수단

인증 요소 · 다중 인증 · 인증수단 · 비밀번호 · 일회용 비밀번호 · 보안 키 · 패스키 · 동기화 패스키 · 생체 인증 · 스마트카드

높은 등급을 받쳐 주는 암호 기술

피싱 저항 · 개인 키 · 공개 키 암호 · WebAuthn · FIDO2 · TPM

인증 보증 수준이 막으려는 공격

피싱 · SIM 스와핑 · 크리덴셜 스터핑 · 중간자 공격 · 세션 하이재킹 · 계정 탈취

세션 동안 등급을 지키거나 끌어올리는 절차

세션 · 세션 타임아웃 · 재인증 · 스텝업 인증

인증 보증 수준의 앞뒤에 오는 절차

신원 증명 · 등록 · 인증 · 인가 · 인증과 인가 · 계정 복구

연합 로그인에서 등급을 실어 나르는 수단

연합 · 단언 · OpenID Connect · SAML · ID 토큰

다른 이름: AAL · authentication assurance level · Authentication Assurance Level