Skip to main content

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 패스워드가 선호되는 이유​

  1. 비용: 무료
  2. 편의성: 시스템 관리자가 패스워드 재설정하기가 새 하드웨어 발급보다 쉬움

3. 패스워드 저장과 해싱​

3.1 패스워드 해싱 시스템​

사용자 입력 패스워드
↓
Hash Function
↓
H(password)
↓
서버에 저장

패스워드 검증 과정​

입력된 패스워드 → Hash Function → H2
↓
저장된 해시값 H1 ←─────────────── 비교 (H1 == H2?)
↓
Y: 인증 성공
N: 인증 실패

3.2 암호학적 해시 함수의 특성​

좋은 해시 함수의 6가지 조건​

  1. 임의 크기 입력 허용
  2. 고정 길이 출력 생성
  3. 빠른 계산 속도
  4. 일방향성: H(x) = h일 때, h에서 x를 찾기 어려움
  5. 약한 충돌 저항성: 주어진 x에 대해 H(y) = H(x)인 y ≠ x 찾기 어려움
  6. 강한 충돌 저항성: 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 강한 패스워드 생성 팁​

  1. 길이: 길수록 좋음 (기억할 수 있는 범위 내에서)
  2. 문자 종류 혼합:
    • 소문자만: 26^n
    • 대소문자: 52^n
    • 모든 문자: 93^n
  3. 패스워드 재사용 금지: 서비스마다 다른 패스워드 사용

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)
↓
데이터베이스 저장

지문 인증 과정​

  1. 등록 (Enrollment):

    • 지문 이미지 캡처
    • 이미지 향상
    • 특징점 식별 및 저장
  2. 인증 (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 우회 방법들​

  1. AI/ML 기술: 고도화된 패턴 인식
  2. 크라우드소싱: 실제 사람을 고용하여 해결
  3. 시스템 취약점: 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가지를 설명하고, 솔트가 비밀이 아님에도 보안 효과가 있는 이유를 서술하시오.

모범답안:

솔트 사용 이유:

  1. 동일 패스워드 은닉: 같은 패스워드라도 다른 해시값 생성하여 패턴 인식 방지
  2. 레인보우 테이블 무효화: 사전 계산된 해시 테이블 공격 방어

비밀이 아니어도 효과적인 이유:

  • 공격자가 솔트를 알아도 기존 레인보우 테이블 사용 불가
  • 각 패스워드마다 개별적인 무차별 대입 공격 필요
  • 동일 패스워드 사용자들 간의 패턴 인식 불가
  • 솔트 길이만큼 공격 복잡도 기하급수적 증가

3. 생체 인증의 한계점​

문제: 생체 인증이 "취소 불가능한 패스워드"라고 불리는 이유를 설명하고, 이로 인한 보안상 문제점을 서술하시오.

모범답안:

"취소 불가능한 패스워드" 이유:

  • 생체 정보는 본인 고유의 물리적 특성
  • 한 번 유출되면 변경이나 재발급 불가능
  • 평생 동일한 생체 정보 사용

보안상 문제점:

  1. 영구적 손상: 유출 시 해당 생체 인증 영구 사용 불가
  2. 다중 서비스 위험: 여러 서비스에서 동일 생체 정보 사용 시 연쇄 피해
  3. 물리적 위협: 극단적 경우 신체 절단 등 물리적 공격 가능
  4. 복제 가능성: 고해상도 사진이나 모형으로 속일 수 있음
  5. 프라이버시 침해: 생체 정보는 개인 식별 정보로 악용 가능

4. CAPTCHA의 설계 원칙과 AI와의 관계​

문제: CAPTCHA의 "역설"을 설명하고, CAPTCHA 해결이 AI 발전에 어떻게 기여하는지 서술하시오.

모범답안:

CAPTCHA의 역설: "컴퓨터가 자신도 통과할 수 없는 시험을 생성하고 채점하는 프로그램"

  • 생성: 컴퓨터가 자동으로 문제 생성
  • 채점: 컴퓨터가 자동으로 정답 판별
  • 역설: 생성한 컴퓨터 자신은 문제를 풀 수 없음

AI 발전에의 기여:

  1. OCR 기술 발전: 텍스트 CAPTCHA 해결 과정에서 광학 문자 인식 기술 향상
  2. 이미지 분할: 복잡한 이미지에서 특정 객체 인식 기술 발전
  3. 음성 인식: 음성 CAPTCHA 해결로 잡음 환경 음성 인식 기술 진보
  4. 패턴 인식: 다양한 형태의 패턴 인식 알고리즘 발전
  5. 기계학습: 대량의 CAPTCHA 데이터가 ML 모델 훈련에 활용

5. 2단계 인증 설계​

문제: 온라인 뱅킹 시스템을 위한 2단계 인증을 설계하시오. 사용할 2가지 인증 요소를 선택하고 그 이유를 설명하시오.

모범답안:

선택한 2가지 요소:

  1. Something You Know: 패스워드
  2. Something You Have: 모바일 OTP 앱

설계 이유:

패스워드 선택 이유:

  • 사용자 친숙도가 높음
  • 구현 비용이 낮음
  • 기존 시스템과 호환 가능
  • 원격 인증 가능

모바일 OTP 선택 이유:

  • 대부분 사용자가 모바일 기기 보유
  • 실시간 코드 생성으로 재사용 공격 방지
  • SMS보다 보안성 높음 (SIM 스와핑 공격 방지)
  • 오프라인에서도 동작 가능

인증 흐름:

  1. 사용자 ID/패스워드 입력
  2. 서버에서 사용자 확인 후 OTP 요청
  3. 모바일 앱에서 6자리 OTP 생성
  4. OTP 입력 및 서버 검증 (시간 윈도우 내)
  5. 모든 단계 성공 시 로그인 완료

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)는 편의성과 보안의 균형점 추구
  • 보안과 사용성의 균형이 실제 시스템 설계의 핵심

💡 중요: 완벽한 인증 방법은 존재하지 않으며, 위협 모델과 사용 환경에 맞는 적절한 조합과 다층 방어가 필요합니다. 특히 패스워드의 한계를 이해하고 이를 보완하는 다양한 기술들의 원리를 숙지하는 것이 중요합니다.