사용자 인증은 “당신이 정말 그 사람인가”를 확인하는 일이고, 대부분의 접근 제어와 책임 추적의 바탕이다. 확인하는 근거는 아는 것(비밀번호), 가진 것(카드), 몸 자체(지문)다. 운영체제는 비밀번호를 그대로 저장하지 않고 소금(솔트)을 친 해시로 저장해서, 파일을 도둑맞아도 비밀번호가 바로 드러나지 않게 한다. 하지만 사람이 고른 비밀번호는 짐작하기 쉽고, 카드는 잃어버리고, 생체 인증은 비싸고 오차가 있다.
예시로 보기
UNIX 로그인에서 비밀번호를 확인하는 과정이다.
- 사용자가 ID와 비밀번호를 입력한다.
- 운영체제가 ID로 비밀번호 파일에서 그 사용자의 줄을 찾아, 평문 솔트와 저장된 해시 값을 꺼낸다.
- 꺼낸 솔트와 입력한 비밀번호를 느린 해시 함수에 넣는다.
- 결과가 저장된 해시 값과 같으면 비밀번호를 받아들인다.
비밀번호 파일: hong | 솔트 7f3a… | 해시 c91e…
입력 "hunter2" → 해시(7f3a… + "hunter2") → c91e…? 같으면 통과
같은 비밀번호 “hunter2”라도 사용자마다 솔트가 다르므로 저장되는 해시 값이 다르다.
정확히 말하면
인증은 대부분의 보안 상황에서 기본 구성 요소이자 첫 방어선이다. 두 단계다.
| 단계 | 내용 |
|---|---|
| 식별 | 보안 시스템에 식별자(사용자 ID)를 내놓는다 |
| 확인 | 식별자와 실체를 묶어 주는 인증 정보(비밀번호 등)를 내놓거나 만들어 낸다 |
인증 요소. 전통적으로 세 가지다.
| 요소 | 예 |
|---|---|
| 아는 것 | 비밀번호, PIN |
| 가진 것 | 카드, RFID 배지 |
| 그 사람 자체 | 생체 정보 |
생체 정보는 다시 둘로 나뉜다. 정적 생체(그 사람의 몸: 지문, 얼굴)와 동적 생체(그 사람의 행동: 필체, 목소리, 타자 리듬)다. (Nick Mathewson은 이 셋을 “가졌던 것, 잊어버린 것, 예전의 자신”으로 비꼬았다.)
비밀번호
비밀번호로 사용자가 시스템에 접근할 수 있는지와 어떤 권한을 갖는지를 정한다. 임의적 접근 제어를 적용할 수 있다.
해시된 비밀번호. 비밀번호를 저장하는 널리 쓰이는 방법이며 여러 암호 해독 공격에 안전하다. 새 비밀번호를 정할 때 솔트를 고르고, 솔트와 비밀번호를 느린 해시 함수에 넣어 나온 값과 솔트를 함께 저장한다1.
솔트가 하는 일
- 같은 비밀번호가 비밀번호 파일에서 같은 값으로 보이지 않게 한다.
- 오프라인 사전 공격을 크게 어렵게 한다. 솔트가 \(b\)비트면, 공격자는 단어마다 해시 값을 \(2^b\)개씩 미리 계산해야 한다. 단어 100만 개, 솔트 12비트면 약 41억 개다1.
- 한 사람이 여러 시스템에 같은 비밀번호를 썼는지 알아내기 거의 불가능하게 한다.
토큰
사용자 인증을 위해 사용자가 가진 물건을 토큰이라고 한다. 토큰은 메모리 카드와 스마트 카드로 나뉜다.
| 토큰 | 내용 | 단점 |
|---|---|---|
| 메모리 카드 | 데이터를 저장만 하고 처리는 못 한다. 흔히 비밀번호·PIN과 함께 쓴다 | 전용 판독기가 필요하다. 잃어버릴 수 있다. 사용자가 불편해한다 |
| 스마트 카드 | 마이크로프로세서, 메모리, 입출력 포트를 가진다. 물리적 특성, 인터페이스, 인증 프로토콜(정적, 동적 비밀번호 생성, 도전-응답)로 종류가 나뉜다 |
생체 인증
얼굴, 지문, 손 모양, 망막 무늬 같은 고유한 신체 특징으로 사람을 인증한다. 패턴 인식에 바탕을 두며, 비밀번호나 토큰보다 기술적으로 복잡하고 비싸다. 홍채, 서명, 목소리, 타자 리듬은 패턴이 바뀔 수 있다. 생체 인증 방식마다 비용과 정확도가 다르다2.
활용
- 현대 리눅스는 비밀번호 해시를 아무나 읽을 수 없는
/etc/shadow에 따로 두고, 느린 해시(sha512crypt, yescrypt 등)를 쓴다1. - 여러 요소를 함께 쓰는 다중 요소 인증(비밀번호 + 휴대폰 인증 앱)은 한 요소가 털려도 막아 준다1.
- 인증한 뒤에 무엇을 할 수 있는지는 접근 제어가 정한다.
연결
- 선수: 보안의 목표와 위협 (진정성)
확인 문제
C1 솔트 없이 비밀번호를 해시만 해서 저장하면 어떤 문제가 생기는가? 두 가지를 쓰라.
답: ① 같은 비밀번호를 쓴 사용자들의 해시 값이 같아, 파일을 보면 누가 같은 비밀번호를 쓰는지 드러난다. ② 공격자가 흔한 단어의 해시 값을 한 번만 미리 계산해 두면 모든 사용자, 모든 시스템에 그대로 쓸 수 있다(사전 공격이 쉬움).
C2 UNIX 로그인에서 사용자가 ID와 비밀번호를 입력한 뒤 운영체제가 하는 일을 순서대로 쓰라.
답: ① ID로 비밀번호 파일에서 줄을 찾음 ② 저장된 솔트와 해시 값을 꺼냄 ③ 솔트 + 입력 비밀번호를 해시 ④ 저장된 해시 값과 비교해 같으면 통과.
C3 다음은 아는 것, 가진 것, 그 사람 자체(정적·동적) 중 무엇인가? ① 은행 OTP 기기 ② 서명할 때의 필압과 속도 ③ 휴대폰 잠금 PIN ④ 얼굴 인식
답: ① 가진 것 ② 그 사람 자체, 동적 생체 ③ 아는 것 ④ 그 사람 자체, 정적 생체.