Transcript 메시지인증
제11장 메시지 인증 및 해쉬함수
11.1
11.2
11.3
11.4
11.5
인증에서의 요구조건
인증 함수
메시지 인증 코드
해쉬함수
해쉬함수와 MAC 보안
11.1 인증에서의 요구 조건
• 통신 상에서 발생할 수 있는 공격들
– 노출(disclosure): 암호키 가지고 있지 않은 사람에게 메시지 내용이 노
출, 도청(eavesdropping)
– 트래픽 분석(traffic analysis): 통신 주체 사이의 어떤 트래픽 형태를 발
견 (연결주기, 사용시간, 메시지 개수 및 길이 등)
– 위장(masquerade): 부정한 출처로부터 나온 메시지를 네트워크 상에
삽입
– 내용 수정(content modification): 삽입, 삭제, 전치, 수정을 포함한 메시
지 내용의 변경
– 순서 수정(sequence modification): 통신 상대방간의 메시지들의 순서
변경
– 시간 수정(timing modification): 메시지의 지연과 재전송
– 발신처 부인(source repudiation): 발신자가 메시지의 전송 사실을 부인
– 수신처 부인(destination repudiation): 수신자가 메시지의 수신 사실을
부인
11.1 인증에서의 요구 조건
• 대처방안
–
–
–
–
노출, 트래픽 분석: 기밀성
위장, 내용수정, 순서수정, 시간수정: 메시지 인증
발신처 부인: 전자서명
수신처 부인: 전자서명과 특별히 설계된 프로토콜들의 조합
11.1 인증에서의 요구 조건
• 메시지 인증
– 수신된 메시지가 주장된 출처에서 왔고,
– 변경되지 않았다는 것을 확인하기 위한 절차
– 또한, 메시지의 순서의 일치와 시간의 적합성도 검증 가능
• 디지털 서명
– 발신자가 메시지의 전송 사실을 부인하는 것을 봉쇄하기 위한 방법
11.1 인증에서의 요구 조건 - 인증 종류
•
메시지 내용 인증(message content authentication)
– 메시지를 전송하는 중에 수정된 사항이 없는지를 검증
– MAC (송신자 계산 MAC값과 수신자 계산 MAC값을 비교)
•
메시지 출처 인증(message origin authentication)
– 메시지의 송신자가 메시지 내의 송신자 필드에 기록된 송신자와 일치하는 지를
검증
– 디지털 서명 (송신자 필드 내용 : 실제 송신자)
•
실체 인증(general entity authentication)
– 통신하는 개체들 사이에 상대방이 정당한지를 검증
– 인증 프로토콜 (신청자 주장 : 검증자 확인)
•
단독인증(unilateral or one-way authentication)
– 통신하는 개체들 사이에 실체 인증을 한쪽으로만 검증
•
상호인증(mutual authentication)
– 통신하는 개체들 사이에 실체 인증을 양방향으로 모두 검증
11.2 인증 함수
• 메시지 인증과 디지털 서명에서 인증: 두 단계로 구분
– 하위단계: 인증 함수를 사용하여 인증에 사용할 인증값
(authenticator) 생성
– 상위단계: 상위 프로토콜에서 인증값을 사용하여 인증성 검증
• 인증 함수의 종류:
– 메시지 암호화(message encryption) : 메시지 전체 암호문이 인
증값
– 메시지 인증 코드(MAC) : 메시지와 비밀키를 입력으로 하여 인
증값으로 사용될 고정된 길이의 어떤 값을 생성
– 해쉬함수: 임의의 길이 메시지를 입력으로 고정된 길이의 인증
값 생성
11.2 인증함수 - 메시지 암호화
메시지 암호화의
기본 사용법
11.2 인증함수 – 메시지 암호화
• (a) 대칭키 암호: A → B : EK[M]
– 기밀성 제공
• A와 B만이 K를 공유하고 암.복호화 가능
– 부분적인 인증 제공
• 오직 A로부터 전송 가능함
• 수신자가 메시지 위조 가능
– 서명 제공 불가
• 송신자가 메시지 전송에 대해 부인 가능
11.2 인증함수 – 메시지 암호화
• (b) 공개키 암호: A → B : EKUb[M]
– 기밀성 제공
• 오직 B만이 KRb를 소유하고 있어 복호 가능
– 인증은 제공하지 않음
• 누구나 B의 공개키 Kub를 사용해 메시지를 암호화하고 자신이 A라
고 주장 가능
11.2 인증함수 – 메시지 암호화
• (c) 공개키 암호: A → B : EKRa[M]
– 인증과 전자서명 제공
• 메시지를 암호화 할 수 있는 사용자는 KRa의 소유자 뿐임
• 서명을 확인하기 위하여 KUa를 사용
– 기밀성 제공 불가
• 메시지를 받은 사람이나, 도청한 사람 모두 보내는 사람의 공개키
접근 가능
11.2 인증함수 – 메시지 암호화
• (d) 공개키 암호: A → B : EKUb[EKRa[M]]
– 인증과 서명 제공
• KUa로 복호될 수 있는 암호문은 KRa 소유자만 작성 가능
– 기밀성 제공
• KUb로 암호화된 메시지는 KRb 소유자만 복호 가능
11.2 인증함수 – 메시지 암호화
• 메시지 암호화의 문제점
– 암호할 메시지
• 메시지는 의미있는 문장이 되어야 한다
• 의미있는 문장 → 입력의 제한
→ 메시지의 임의의 형태를 제공할 수 있는 방
법의 필요
예) 암호화 전에 각 메시지에 FCS(Frame Check
Sequence)라는 에러 검출 코드를 추가)
11.2 인증함수 – 메시지 암호화
• 내부 및 외부 에러 제어
11.2 인증함수 – 메시지 암호화
•
FCS(Frame Check Sequence)
– 에러 검출을 위한 점검값 코드
•
내부 에러제어
– FCS를 암호화 보다 먼저 수행
– M과 FCS가 함께 K로 암호화되어 있으므로 유효한 FCS 조작이 어려움(인증 제
공)
•
외부 에러제어
– 암호화를 FCS 보다 먼저 수행
– 암호화된 메시지를 갖고 FCS를 구성하기가 용이
– 공격자가 암호문의 실제 평문은 알 수 없더라도 인증자체의 과정에 혼란야기 가
능
•
TCP 세그먼트
– 내부에러 제어를 하면
– 세그먼트 지연, 메시지 순서변경, 특정 세그먼트 삭제 등 방지 가능
11.2 인증함수 – 메시지 암호화
• TCP 세그먼트
11.2 인증함수 – 메시지 인증 코드
•
메시지 인증 코드
–
–
–
•
Message Athentication Code : MAC
비밀키를 사용하여 생성된 작은 크기의 데이터 블록
메시지와 키의 함수
MAC = CK(M) MAC : 메시지 인증 코드
C : MAC 함수
K : 공유된 비밀키
M : 메시지
사용방법
1.
2.
3.
4.
송신자
송신자
수신자
수신자
A는 메시지를 입력으로 MAC을 계산
A는 메시지와 MAC을 함께 전송
B는 수신된 메시지를 입력으로 MAC를 계산
B는 이 값을 수신된 MAC과 비교
11.2 인증함수 – 메시지 인증 코드
• (a) 메시지 인증 : A → B : M || CK(M)
출처 A
M
목적지 B
M
||
C
K
K
C
ºñ±³
CK(M)
– 인증제공
• 메시지 내용 인증
– K를 모르는 공격자는 메시지와 대응되는 MAC값 계산 불가
• 출처 인증
– K를 아는 A만이 올바른 MAC을 계산하여 전송 가능
• 메시지 순서 인증
– 메시지에 순서번호가 포함되어 있다면 내용 인증에 의해 메시지 순서
보장
– 기밀성 제공 못함
11.2 인증함수 – 메시지 인증 코드
• (b) 메시지 인증과 기밀성 : A → B : EK2[M || CK1(M)]
출처 A
M
목적지 B
||
E
D
K2
K2
M
C
K1
C
EK2[M || C K1(M)]
K1
CK1(M)
– 인증 제공
• A와 B만이 K1을 공유
– 기밀성 제공
• A와 B만이 K2를 공유
– 평문으로 MAC을 계산함
• 보통 인증을 평문에 연결하기 때문에 널리 사용됨
ºñ±³
11.2 인증함수 – 메시지 인증 코드
• (c) 메시지 인증과 기밀성 : A → B : EK2[M] || CK1(EK2[M])
출처 A
M
E
D
||
K1
K2
목적지 B
EK2(M)
C
ºñ±³
C
M
CK1[E K2(M)]
K2
K1
– 인증 제공
• A와 B만이 K1을 공유
– 기밀성 제공
• A와 B만이 K2를 공유
– 암호문으로 MAC을 계산
모든 MAC 기법들은 디지털 서명을 제공하지 않음: 송신자와 수신자
가 같은 키를 공유하기 때문
11.2 인증함수 – 해쉬함수
• 임의의 길이(M)를 입력으로 정해진 크기(h)의 Message
Digest를 만드는 일방향함수(one-way function, H)
• h = H(M)
– H : 해쉬함수
– M : 입력값, 다양한 크기의 메시지 M
– h : 출력값, 고정된 크기의 값 (해쉬코드, 메시지 다이제스트, 해
쉬값이라고 함)
• 특징
MAC과 달리 키를 사용하지 않음
해쉬 함수 자체는 비밀 아님 → 해쉬값을 포함한 암호가 필요
에러 탐색 능력 제공
메시지의 한 비트의 변화가 해쉬코드의 모든 비트들의 변화를
가져옴 (쇄도효과: avalanche effects)
– 해쉬코드의 다양한 사용 방법들이 있음
–
–
–
–
11.2 인증함수 – 해쉬함수
• (a) 해쉬함수 사용 : A → B : EK[M || H(M)]
– 메시지와 해쉬코드를 모두 암호화
– 인증 제공
• A와 B만이 K를 공유하기 때문에 메시지는 A로부터 와야 함
– 기밀성 제공
• A와 B만이 K를 공유
11.2 인증함수 – 해쉬함수
• (b) 해쉬함수 사용 : A → B : M || EK[H(M)]
– 해쉬코드만을 암호화
– 인증제공
• 기밀성을 요구하지 않는 응용에서 처리 부하 경감
• 해쉬함수와 암호화의 조합은 MAC과 동일한 효과
11.2 인증함수 – 해쉬함수
• (c) 해쉬함수 사용 : A → B : M || EKRa[H(M)]
– 공개키 암호 및 송신자의 개인키를 이용해서 해쉬코드만 암호
화
– 인증 및 디지털 서명 제공
• 디지털서명 제공: 송신자만이 암호화된 해쉬코드를 만들 수 있음
기밀성이 요구되지 않을때 (b)와 (c)의 방법은 계산이 덜 요구되
어 장점을 가짐
11.2 인증함수 – 해쉬함수
• (d) 해쉬함수 사용 : A → B : EK[M || EKRa[H(M)]]
– 공유된 비밀키로 (c)의 결과를 암호화
– 인증, 디지털 서명, 기밀성 모두 제공
11.2 인증함수 – 해쉬함수
• (e) 해쉬함수 사용 : A → B : M || H(M || S)
– 비밀키 S공유, 그러나, 암호화 하지 않음
– 메시지와 비밀 값의 해쉬 코드를 계산 => 메시지와 해쉬코드 전송
– 인증제공
– 암호화 회피 이유
•
•
•
•
암호화 소프트웨어는 느리다
암호화 하드웨어 비용 증대(전체 네트워크에 설치 할 때)
아주 작은 데이터 블럭에도 동일한 암호화 절차 필요
암호화 알고리즘의 사용권 획득 불편
11.2 인증함수 – 해쉬함수
• (f) 해쉬함수 사용 : A → B : EK[M || H(M || S)]
– 공유된 비밀키로 (e)의 결과를 암호화
– 인증 제공
– 기밀성 제공
11.3 메시지 인증 코드
• 암호학적 점검값 or 메시지 인증 코드(MAC)
– Message Authentication Codes, Data Authentication Codes
• 메시지 인증코드(MAC)라고 알려진 암호학적 점검값은
다음과 같은 함수 C에 의해 생성됨
MAC = CK(M)
–
–
–
–
MAC : 메시지 인증 코드, CK(M)과 동일, 출력값
M: 가변길이 메시지, 입력값
K :는 송신자와 수신자에 의해 공유되는 비밀키, 입력값
C : 메시지 인증 코드 함수
• MAC자체는 메시지 기밀성이나 서명 기능을 제공하지
않음
11.3 메시지 인증 코드 – MAC의 요구조건
• 공격자가 CK(M’)=CK(M)인 M’을 구성한다는 것이 계산적
으로 어려워야 함
– 즉, 키를 알지 못하면서 MAC과 일치하는 새로운 메시지를 만들
수 없어야 한다.
• CK(M)은 일정하게 분산되어 있어야 함
– 즉, 선택 평문 공격에 기초한 brute-force attack에 안전해야 함
• 메시지의 어떤 부분이나 특정 비트들에 관해서 특별히
취약해서는 안됨
– 그런 경우가 아니라면, M과 CK(M)을 가진 공격자는 기존의 MAC
과 일치하는 새 메시지를 쉽게 발견 가능
– 또한, 공격자가 “취약지점”에서 M의 변형을 시도 가능
11.3 메시지 인증 코드 – DES에 기초한 메시지 인증코
드
• 가장 널리 사용되는 MAC 중의 하나
• FIPS PUB 113과 ANSI 표준(X9.17) 두 종류 존재
• FIPS PUB 113
– O1 = EK(D1), O2 = EK(D2 O1), O3 = EK(D3 O2), ON = EK(DN ON-1)
– MAC으로 ON 또는 ON의 가장 왼쪽 M 비트를 사용(16<=M <=64)
11.4 해쉬함수 (Hash function)
• 임의의 길이(M)를 취해서 정해진 크기(h)의 Message
Digest를 만드는 일방향함수(one-way function, H)
• h = H(M)
– H : 해쉬함수
– M : 입력값, 다양한 크기의 메시지 M
– h : 출력값, 고정된 크기의 값 (해쉬코드, 메시지 다이제스트, 해
쉬값이라고 함)
• 특징
MAC과 달리 키를 사용하지 않음
해쉬 함수 자체는 비밀 아님 => 해쉬값을 포함한 암호가 필요
에러 탐색 능력 제공
메시지의 한 비트의 변화가 해쉬코드의 모든 비트들의 변화를
가져옴 (쇄도효과: avalanche effects)
– 해쉬코드의 다양한 사용 방법들이 있음
–
–
–
–
11.4 해쉬함수 - 해쉬함수의 요구조건
• 어떤 크기의 메시지 M에도 적용 가능
• H는 고정된 크기의 hash code를 만듦
• H(M)은 어떤 주어진 M에 대해서도 계산하는 것이 쉬워
야함
• 일방향(one-way) 성질
– 주어진 해쉬값 h에 대해, H(x) = h인 x을 찾는 것이 계산적으로
어렵다.
• 약한 충돌 회피성(Weak collision resistance)
– 주어진 x에 대해, H(y) = H(x)인 어떤 (y x) 쌍을 찾는 것이 계
산적으로 어렵다.
• 강한 충돌 회피성(Strong collision resistance, collision
free)
– H(x) = H(y)인, 어떤 (x, y) 쌍을 찾는 것이 계산적으로 어렵다.
11.4 해쉬함수 – 단순 해쉬함수
• 단순 해쉬 함수
– 가장 단순한 해쉬 함수들 중의 하나
– 모든 블록들에 대해 비트 단위 XOR
– Ci=bi1 bi2 . . . bim
•
•
•
•
Ci = 해쉬 코드의 i 번째 비트
m = 입력에서 n-비트 블록 수
bij = j 번째 블록의 i 번째 비트
= XOR 동작
블록 1
블록 2
블록 m
해쉬코드
비트 1
b11
b12
.
.
.
b1m
C1
비트 2
b21
b22
.
.
.
b2m
C2
비트 n
bn1
bn2
.
.
.
bnm
Cn
[비트별 XOR 을 이용한 단순 해쉬 함수]
11.4 해쉬함수 – 생일공격(Birthday Attacks)
• 전사적 공격의 일종
• 23명중에 같은 생일을 가진 사람이 두 사람이나 그 이상
있을 확률이 1/2보다 크다는 결과 – Birthday Paradox
• If |h| = m-bit, 임의의 두개의 메시지 충돌쌍을 얻기 위
한 노력은 2m/2
• 주어진 X와 같은 h를 주는 X’를 찾기 위한 노력은 2m
• 동일한 해쉬값을 갖는 올바른 변형 제공
• 128 bit인 MD5의 충돌쌍을 찾기 - 천만$, 24h
• 중요한 서명을 위해서는 160 bit이상을 요구
• 알고리즘을 분석하여 보다 더 효율적인 공격 가능
• 해쉬 함수의 충돌을 발견하는데 종종 사용
11.4 해쉬함수 – 블록 체이닝 기법
•
•
•
비밀키 없는 CBC 기술의 해쉬 함수들이 많이 존재
예) Rabin[RABIN78]
– 메시지 M을 고정된 크기의 블록 M1, M2, … , MN으로 나누고, 해쉬 코드 G를 계
산하기 위해서 DES와 같은 관용 암호 시스템을 이용
H0 = 초기값
Hi = EMi [Hi -1]
G = HN
생일공격에 취약
– 알고리즘이 DES이고, 오직 64-비트 해쉬 코드를 생성
•
블록 체이닝 방법을 강화시킬 의도로 개량형들을 제안[DAVI89]
–
–
–
–
Hi = EMi [Hi -1] Hi -1
[MEYE88]에서 제안된 다른 변형: Hi = EHi -1[Mi ] Mi
이 두 가지 구조 모두 다양한 공격에 취약[MIYA90]
생일 공격의 어떤 형태는 해쉬 코드가 충분히 작거나(예: 64비트 또는 미만), 큰
해쉬 코드가 독립적인 서브 코드들로 분해될 수 있다면 비밀키 없이 암호 블록
체이닝을 사용하는 어떤 해쉬구조에 대해서 성공[JUEN87]
11.5 해쉬 함수와 MAC 보안 - Brute-Force Attack
• 해쉬함수
– brute-force attack에 대한 해쉬 함수의 강도는 오직 알고리즘에
의해 생성되는 해쉬 코드의 길이에 의존
• 일방향성: 어떠한 코드 h에 대해서 H(x) = h 인 x를 찾는 것은 계산
상 어렵다. (2n)
• 완화된 충돌 회피성: 어떠한 x에 대해서도, H(y) = H(x)로부터 y ≠
x를 찾는 것은 계산상 어렵다. (2n)
• 강력한 충돌 회피성: H(x) = H(y)와 같은 (x, y)를 찾는 것은 계산상
어렵다. (2n/2)
– n비트 해쉬 코드 h = H(x)와 고정된 메시지 x가 제공된 상태에
서, 충돌을 찾는 brute-force 방식은 무작위 비트 열 y를 선택해
H(y)=H(x)인지 확인
11.5 해쉬 함수와 MAC 보안 - Brute-Force Attack
• 메시지 인증 코드
– 요구되는 보안특성
• 계산상 강도(Computation resistance) : 하나 또는 그 이상의 문서MAC 쌍들(xi, CK(xi))이 제공된 경우, 새로운 입력값 x ≠ xi가 되는
(x, CK(x))를 계산하는 것은 계산상 어렵다.
– 두 가지 공격 방법
• 키 공간 공격
– 공격자가 문서-MAC 쌍을 알 때, 키 값 K를 알아내려는 공격: 2k (K: k
bit일때)
• MAC 값 공격
– 키를 알 필요 없이 제시된 MAC 값과 일치하는 메시지를 찾아내려는
공격: 2n
11.5 해쉬 함수와 MAC 보안 - 암호학적 분석
• 해쉬함수 및 MAC에 대한 암호학적 안전성 강도는 brute-force 공격
에서 요구되는 노력보다 크거나 같다.
• 해쉬함수들 구조 제안
– Merkle[MERL79, MERK89]에 의해 제안된 구조
– MD5, SHA-1, RIPEMD-160 등 현재 사용 대부분의 해쉬함수 구조
CV0 = IV : 초기 n 비트 값
CVi = f(CVi-1, Yi-1) 1 ≤ i ≤ L
H(M) = CVL
해쉬 함수의 입력값은 Y0, ..., YL-1 블록들로
구성된 메시지 M