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