0x02 인증과 접근 제어 (Authentication and Access Control)
접근 제어의 두 가지 구성 요소
Access Control
↓
┌─────────────┬─────────────┐
│Authentication│Authorization│
│ (인증) │ (인가) │
└─────────────┴─────────────┘
↓ ↓
"당신이 누구인가?" "무엇을 할 수 있는가?"
인증 (Authentication)
- 정의: "당신이 주장하는 그 사람이 맞는가?"를 확인하는 과정
- 목적: 접근 허용 여부 결정
- 범위: 사람-기계 간 또는 기계-기계 간 인증
인가 (Authorization)
- 정의: "당신이 그것을 할 권한이 있는가?"를 확인하는 과정
- 목적: 접근 후 수행 가능한 행동의 범위 제한
- 참고: "접근 제어"는 종종 인가의 동의어로 사용됨
1. 인증 방법의 분류
1.1 인증의 3가지 기본 요소
Something You Know
(지식)
↗
Authentication ← Something You Have
(소유)
↖
Something You Are
(특성)
Something You Know (지식 기반)
- 패스워드: 가장 일반적인 인증 방법
- 기타 예시:
- PIN
- 주민등록번호
- 어머니 성함
- 생년월일
- 반려동물 이름
Something You Have (소유 기반)
- 스마트카드
- 하드웨어 토큰: YubiKey 등
- OTP 생성기
- 모바일 기기
Something You Are (특성 기반)
- 생체 인증:
- 지문
- 홍채
- 얼굴 인식
- 음성 인식
- 보행 패턴
- 정맥 패턴
2. 패스워드 보안
2.1 패스워드의 문제점
인용: "Passwords are one of the biggest practical problems facing security engineers today."
Bruce Schneier: "Humans are incapable of securely storing high-quality cryptographic keys, and they have unacceptable speed and accuracy when performing cryptographic operations..."
2.2 패스워드 vs 암호키 보안 비교
암호키 (RSA-2048) vs 패스워드 (8자리)
───────────────── ─────────────────
• 2^2048 개의 가능한 키 • 94^8 개의 가능한 조합
• 완전 무작위 선택 • 사용자가 기억하기 쉬운 단어 선택
• 컴퓨터가 자동 관리 • 인간이 기억해야 함
일반적인 취약한 패스워드 예시
- password
- password123
- qwerty
- 1234567
- johndoe
- ilovebts
- dropswe3025
강력한 패스워드 예시
- ss9d#k%dkDkS2
- dke1idU3&12(
- %234*3kDl2ldis
💡 추가 정보: 사용자는 완전 무작위 패스워드를 기억하기 어려워하므로, 실제 보안 강도는 이론값보다 훨씬 낮습니다.
2.3 패스워드가 선호되는 이유
- 비용: 무료
- 편의성: 시스템 관리자가 패스워드 재설정하기가 새 하드웨어 발급보다 쉬움
3. 패스워드 저장과 해싱
3.1 패스워드 해싱 시스템
사용자 입력 패스워드
↓
Hash Function
↓
H(password)
↓
서버에 저장
패스워드 검증 과정
입력된 패스워드 → Hash Function → H2
↓
저장된 해시값 H1 ←─────────────── 비교 (H1 == H2?)
↓
Y: 인증 성공
N: 인증 실패
3.2 암호학적 해시 함수의 특성
좋은 해시 함수의 6가지 조건
- 임의 크기 입력 허용
- 고정 길이 출력 생성
- 빠른 계산 속도
- 일방향성: H(x) = h일 때, h에서 x를 찾기 어려움
- 약한 충돌 저항성: 주어진 x에 대해 H(y) = H(x)인 y ≠ x 찾기 어려움
- 강한 충돌 저항성: H(x) = H(y)인 임의의 (x, y) 쌍 찾기 어려움
해시 함수의 구조
M1 → f → H1 → f → H2 → f → ... → Hn (최종 해시값)
↑ ↑ ↑
압축함수 연쇄구조 아발란체 효과
💡 아발란체 효과: 입력의 1비트 변화가 출력의 완전히 다른 해시값을 생성
보안 특성 분류
1. 일방향성 (Onewayness)
2. 약한 충돌 저항성 (Weak Collision Resistance)
3. 강한 충돌 저항성 (Strong Collision Resistance)
3.3 패스워드 공격 방법
3.3.1 무차별 대입 공격 (Brute Force)
이론적 복잡도: 94^8 = 6,095,689,385,410,816
실제 상황: 사람들이 쉬운 패스워드 사용으로 실제 시도 횟수 훨씬 적음
3.3.2 사전 공격 (Dictionary Attack)
- 원리: 일반적으로 사용되는 단어와 패턴 활용
- 예시: apple, car, apple123, Car 등
- 효과: 무차별 대입보다 훨씬 효율적
3.3.3 레인보우 테이블 공격
사전 계산 단계:
일반적인 패스워드들 → Hash Function → 해시값들을 테이블에 저장
공격 단계:
유출된 해시값 → 레인보우 테이블에서 검색 → 원본 패스워드 발견
레인보우 테이블의 위력:
- 전세계 해커들이 사전 계산한 해시값 공유
- 비트코인 채굴에 사용되는 컴퓨팅 파워를 해시 사전 계산에 활용한다면?
3.4 무차별 대입 공격 방어
3.4.1 지연 시간 추가
로그인 실패 → 대기 시간 부과 → "5초 후 다시 시도하세요"
반복 실패 → 계정 잠금 → "관리자에게 문의하세요"
한계: 공격자가 해시값을 직접 가지고 있으면 무효
3.4.2 솔트 (Salt) 사용
기존: H(password) = hash_value
솔트 적용: H(password + salt) = hash_value
저장: (salt, hash_value)
솔트의 특징:
- 비밀이 아님: 해시값과 함께 저장
- 무작위 생성: 각 사용자마다 다른 솔트 사용
솔트의 효과
1. 동일 패스워드 은닉
솔트 없이:
Student1: H("password123") = ABC123...
Student2: H("password123") = ABC123... ← 동일 해시 발견!
솔트 적용:
Student1: H("password123" + "salt1") = XYZ789...
Student2: H("password123" + "salt2") = DEF456... ← 다른 해시값
2. 레인보우 테이블 무효화
기존 레인보우 테이블: H("password123") = ABC123...
솔트 적용 후: H("password123" + "dk3skd@") = 완전히 다른 값
공격자가 솔트를 알아도 기존 레인보우 테이블 사용 불가
3.5 강한 패스워드 생성 팁
- 길이: 길수록 좋음 (기억할 수 있는 범위 내에서)
- 문자 종류 혼합:
- 소문자만: 26^n
- 대소문자: 52^n
- 모든 문자: 93^n
- 패스워드 재사용 금지: 서비스마다 다른 패스워드 사용
4. 암호학적 인증
4.1 공개키 기반 인증
- TLS/HTTPS: 공개키 인프라(PKI) 사용
- 한국의 공인인증서: 개인키와 패스워드를 조합한 인증
💡 추가 정보: 암호학에 대한 자세한 내용은 별도 강의에서 다룰 예정
5. 생체 인증 (Biometric Authentication)
5.1 생체 인증의 개념
"You are your key" - Schneier
Are
↑
Know ← 인증 → Have
5.2 이상적인 생체 인증의 조건
Universal (보편성) ← 거의 모든 사람에게 적용
Distinguishing (구별성) ← 확실한 구별 가능
Permanent (영구성) ← 변하지 않는 특성
Collectable (수집성) ← 쉬운 데이터 수집
Safe & User-friendly ← 안전하고 사용자 친화적
5.3 지문 인식
지문의 특징점
Loop (고리형) | Whorl (소용돌이형) | Arch (아치형)
↓
특징점 추출 (Minutiae)
↓
데이터베이스 저장
지문 인증 과정
-
등록 (Enrollment):
- 지문 이미지 캡처
- 이미지 향상
- 특징점 식별 및 저장
-
인증 (Recognition):
- 새 지문 스캔
- 특징점 추출
- 저장된 데이터와 통계적 비교
💡 궁금증: 일란성 쌍둥이의 지문은 다를까? → 다릅니다!
5.4 정맥 인증
손목 정맥 패턴 스캔 → 빠르고 정확한 인증?
↓
실제로는... FAIL (구현상 문제 많음)
5.5 홍채 인식
홍채의 특징
- 무작위 발달: 유전적 영향 거의 없음
- 개인 고유성: 일란성 쌍둥이도 다른 패턴
- 평생 안정성: 나이에 따른 변화 거의 없음
홍채 스캔 과정
홍채 위치 확인 → 흑백 사진 촬영 → 극좌표 변환 → 2D 웨이블릿 변환 → 256바이트 홍채 코드
홍채 인식 공격
사진 공격: 고해상도 눈 사진으로도 인증 가능
- 실제 사례: 아프가니스탄 여성이 옛 사진으로 홍채 인증 성공
- 대응책: 살아있는 눈 확인 (조명 반응 등)
5.6 생체 인증의 한계
장점
- 위조하기 어려움
- 본인만이 가진 고유 특성
단점과 위험
물리적 위협: 엄지 절단
복사 가능성: 지문, 홍채 사진 복사
시스템 침입: 소프트웨어, 데이터베이스 조작
취소 불가능: 생체 정보 유출 시 "취소" 불가능
💡 핵심 문제: 생체 정보가 유출되면 평생 사용할 수 없게 됩니다!
6. 하드웨어 토큰 인증
6.1 YubiKey
- 물리적 USB 키 형태
- FIDO 표준 지원
- 다양한 프로토콜 지원
6.2 FIDO 인증 과정
1. 사용자 로그인 요청
2. 서버에서 FIDO Challenge 발송
3. 사용자 승인 (Have: 키 + Are: 생체인증)
4. 개인키로 서명된 응답 전송
5. 서버에서 공개키로 서명 검증
6. 로그인 완료
6.3 Password Card와 OTP
- 물리적 카드 형태의 패스워드 생성기
- 시간 기반 OTP (Time-based OTP)
7. 2단계 인증 (Two-Factor Authentication)
7.1 2FA의 구성
3가지 요소 중 2가지 조합:
┌─────────────┬─────────────┬─────────────┐
│Something You│Something You│Something You│
│ Know │ Have │ Are │
└─────────────┴─────────────┴─────────────┘
7.2 2FA 구현 예시
일상 생활의 2FA
ATM: 카드 (Have) + PIN (Know)
신용카드: 카드 (Have) + 서명 (Are)
OTP 토큰: 기기 (Have) + PIN (Know)
스마트카드: 카드 (Have) + 패스워드 (Know)
8. 단일 로그인 (Single Sign-On)
8.1 SSO의 필요성
- 문제: 여러 번 패스워드 입력의 번거로움
- 목표: 한 번 인증으로 모든 서비스 이용
- 대표 기술: Kerberos 프로토콜
8.2 웹 쿠키 (Web Cookies)
쿠키의 역할:
웹사이트 제공 → 사용자 기기에 저장 → 웹사이트 데이터베이스 인덱싱
↓
상태 유지 (HTTP는 무상태 프로토콜)
↓
웹사이트용 약한 형태의 SSO
한계:
- 매우 약한 인증 방식
- 프라이버시 우려 사항
9. 튜링 테스트와 CAPTCHA
9.1 튜링 테스트
- 제안자: Alan Turing (1950년)
- 방법: 인간이 보지 않고 인간과 컴퓨터에게 질문
- 통과 조건: 질문자가 둘을 구별할 수 없으면 통과
- 현재 상황: 아직 완전히 통과한 컴퓨터 없음
9.2 CAPTCHA의 정의
CAPTCHA: Completely Automated Public Turing test to tell Computers and Humans Apart
구성 요소:
• Completely Automated: 컴퓨터가 생성하고 채점
• Public: 프로그램과 데이터 공개
• Turing test: 인간은 통과, 기계는 실패
• HIP (Human Interactive Proof)와 동일 개념
9.3 CAPTCHA의 역설
역설: "CAPTCHA는 자신이 통과할 수 없는 시험을 생성하고 채점하는 프로그램"
비유: "몇몇 교수들과 비슷하게..."
9.4 CAPTCHA의 용도
원래 동기
- 배경: CS 대학원 최고 투표에서 자동화 봇이 투표함 조작
- 대상: MIT vs CMU 경쟁
현재 사용 사례
무료 이메일 서비스 ← 스팸 계정 대량 생성 방지
검색 엔진 색인화 방지 ← 자동 수집 차단
온라인 투표 시스템 ← 봇 투표 방지
9.5 CAPTCHA 설계 원칙
기본 원칙
1. 인간이 쉽게 통과 가능
2. 기계가 통과하기 어려움
3. CAPTCHA 소프트웨어에 접근해도 통과 어려움
4. 다양한 유형 제공 (접근성 고려)
Kerckhoffs의 원칙 적용
- 공격자 관점에서 알 수 없는 것은 무작위 수뿐
9.6 CAPTCHA 유형
시각적 CAPTCHA
왜곡된 텍스트 → OCR 문제 → 컴퓨터에게 어려움
이미지 인식 → "신호등을 모두 선택하세요"
음성 CAPTCHA
왜곡된 음성 → 음성 인식 문제 → 접근성 고려
배경 음악과 함께 → 분리 문제
텍스트 기반 CAPTCHA
- 현재 존재하지 않음: 구현이 불가능할 수 있음
9.7 CAPTCHA와 AI의 관계
CAPTCHA 해결 = 어려운 AI 문제 해결
↓
OCR (Optical Character Recognition) 발전
음성 인식 기술 발전
이미지 분할 (Segmentation) 기술 발전
↓
해커의 노력이 AI 발전에 기여하는 역설
CAPTCHA 우회 방법들
- AI/ML 기술: 고도화된 패턴 인식
- 크라우드소싱: 실제 사람을 고용하여 해결
- 시스템 취약점: CAPTCHA 우회 경로 발견
💡 흥미로운 사실: CAPTCHA를 깨는 해커들은 실제로 어려운 AI 문제를 해결하고 있어서, 그들의 노력이 OCR과 같은 기술 발전에 기여하고 있습니다.
예상 시험문제
1. 인증 방법 분류와 특징
문제: 3가지 인증 요소(Know, Have, Are)의 장단점을 비교하고, 각각의 구체적 예시를 3개씩 제시하시오.
모범답안:
Something You Know (지식)
- 장점: 비용 무료, 관리 편의성, 원격 전송 가능
- 단점: 기억의 한계, 패스워드 재사용, 사회공학 공격 취약
- 예시: 패스워드, PIN, 보안질문
Something You Have (소유)
- 장점: 복제 어려움, 물리적 보안, 2FA 구현 용이
- 단점: 분실 위험, 비용 발생, 추가 기기 필요
- 예시: 스마트카드, YubiKey, OTP 토큰
Something You Are (특성)
- 장점: 위조 극도로 어려움, 편의성, 분실 불가능
- 단점: 취소 불가능, 프라이버시 우려, 정확도 한계
- 예시: 지문, 홍채, 얼굴인식
2. 솔트의 작동 원리와 효과
문제: 패스워드 해싱에서 솔트(Salt)를 사용하는 이유 2가지를 설명하고, 솔트가 비밀이 아님에도 보안 효과가 있는 이유를 서술하시오.
모범답안:
솔트 사용 이유:
- 동일 패스워드 은닉: 같은 패스워드라도 다른 해시값 생성하여 패턴 인식 방지
- 레인보우 테이블 무효화: 사전 계산된 해시 테이블 공격 방어
비밀이 아니어도 효과적인 이유:
- 공격자가 솔트를 알아도 기존 레인보우 테이블 사용 불가
- 각 패스워드마다 개별적인 무차별 대입 공격 필요
- 동일 패스워드 사용자들 간의 패턴 인식 불가
- 솔트 길이만큼 공격 복잡도 기하급수적 증가
3. 생체 인증의 한계점
문제: 생체 인증이 "취소 불가능한 패스워드"라고 불리는 이유를 설명하고, 이로 인한 보안상 문제점을 서술하시오.
모범답안:
"취소 불가능한 패스워드" 이유:
- 생체 정보는 본인 고유의 물리적 특성
- 한 번 유출되면 변경이나 재발급 불가능
- 평생 동일한 생체 정보 사용
보안상 문제점:
- 영구적 손상: 유출 시 해당 생체 인증 영구 사용 불가
- 다중 서비스 위험: 여러 서비스에서 동일 생체 정보 사용 시 연쇄 피해
- 물리적 위협: 극단적 경우 신체 절단 등 물리적 공격 가능
- 복제 가능성: 고해상도 사진이나 모형으로 속일 수 있음
- 프라이버시 침해: 생체 정보는 개인 식별 정보로 악용 가능
4. CAPTCHA의 설계 원칙과 AI와의 관계
문제: CAPTCHA의 "역설"을 설명하고, CAPTCHA 해결이 AI 발전에 어떻게 기여하는지 서술하시오.
모범답안:
CAPTCHA의 역설: "컴퓨터가 자신도 통과할 수 없는 시험을 생성하고 채점하는 프로그램"
- 생성: 컴퓨터가 자동으로 문제 생성
- 채점: 컴퓨터가 자동으로 정답 판별
- 역설: 생성한 컴퓨터 자신은 문제를 풀 수 없음
AI 발전에의 기여:
- OCR 기술 발전: 텍스트 CAPTCHA 해결 과정에서 광학 문자 인식 기술 향상
- 이미지 분할: 복잡한 이미지에서 특정 객체 인식 기술 발전
- 음성 인식: 음성 CAPTCHA 해결로 잡음 환경 음성 인식 기술 진보
- 패턴 인식: 다양한 형태의 패턴 인식 알고리즘 발전
- 기계학습: 대량의 CAPTCHA 데이터가 ML 모델 훈련에 활용
5. 2단계 인증 설계
문제: 온라인 뱅킹 시스템을 위한 2단계 인증을 설계하시오. 사용할 2가지 인증 요소를 선택하고 그 이유를 설명하시오.
모범답안:
선택한 2가지 요소:
- Something You Know: 패스워드
- Something You Have: 모바일 OTP 앱
설계 이유:
패스워드 선택 이유:
- 사용자 친숙도가 높음
- 구현 비용이 낮음
- 기존 시스템과 호환 가능
- 원격 인증 가능
모바일 OTP 선택 이유:
- 대부분 사용자가 모바일 기기 보유
- 실시간 코드 생성으로 재사용 공격 방지
- SMS보다 보안성 높음 (SIM 스와핑 공격 방지)
- 오프라인에서도 동작 가능
인증 흐름:
- 사용자 ID/패스워드 입력
- 서버에서 사용자 확인 후 OTP 요청
- 모바일 앱에서 6자리 OTP 생성
- OTP 입력 및 서버 검증 (시간 윈도우 내)
- 모든 단계 성공 시 로그인 완료
6. 해시 함수의 보안 특성
문제: 암호학적 해시 함수의 3가지 보안 특성(일방향성, 약한 충돌 저항성, 강한 충돌 저항성)을 각각 설명하고, 각 특성이 패스워드 보안에 어떻게 기여하는지 설명하시오.
모범답안:
1. 일방향성 (One-wayness)
- 정의: H(x) = h가 주어졌을 때, h에서 x를 찾기 어려움
- 패스워드 보안 기여: 해시값만으로는 원본 패스워드 복구 불가능
- 공격 방어: 데이터베이스 유출 시에도 직접적인 패스워드 노출 방지
2. 약한 충돌 저항성 (Weak Collision Resistance)
- 정의: 주어진 x에 대해 H(y) = H(x)인 다른 y를 찾기 어려움
- 패스워드 보안 기여: 특정 사용자의 패스워드와 같은 해시값을 가지는 다른 패스워드 찾기 어려움
- 공격 방어: 타겟 공격에서 대체 패스워드로 인증 우회 방지
3. 강한 충돌 저항성 (Strong Collision Resistance)
- 정의: H(x) = H(y)인 임의의 (x, y) 쌍을 찾기 어려움
- 패스워드 보안 기여: 전체 시스템에서 동일한 해시값을 가지는 서로 다른 패스워드 쌍 발견 어려움
- 공격 방어: 생일 공격(Birthday Attack) 등 충돌 기반 공격 방지
핵심 요약
- 인증은 보안의 첫 번째 방어선이며, Know/Have/Are 3요소의 조합이 핵심
- 패스워드는 편리하지만 근본적 한계가 있으며, 솔트와 강력한 해싱으로 보완
- 해시 함수의 3가지 보안 특성이 패스워드 보안의 이론적 기반 제공
- 생체 인증은 편리하지만 취소 불가능하므로 신중한 사용 필요
- 2단계 인증은 현실적인 보안 강화 방법으로 널리 채택
- CAPTCHA는 인간-기계 구별의 창의적 접근법이지만 AI 발전으로 한계 드러남
- 단일 로그인(SSO)는 편의성과 보안의 균형점 추구
- 보안과 사용성의 균형이 실제 시스템 설계의 핵심
💡 중요: 완벽한 인증 방법은 존재하지 않으며, 위협 모델과 사용 환경에 맞는 적절한 조합과 다층 방어가 필요합니다. 특히 패스워드의 한계를 이해하고 이를 보완하는 다양한 기술들의 원리를 숙지하는 것이 중요합니다.