th network security essentialslily.mmu.ac.kr/lecture/16is/ch03.pdf · –관용암호...
TRANSCRIPT
NETWORK SECURITY
네트워크 보안 에센셜
ESSENTIALS
4th EDITION
3.1 메시지 인증 방법
3.2 안전 해시함수
3.3 메시지 인증 코드
3.4 공개키 암호 원리
3.5 공개키 암호 알고리즘
3.6 디지털 서명
제3장 공개키 암호와 메시지 인증
3.1 메시지 인증 방법
• 근원지 인증
• 메시지 인증
3
관용 암호를 이용한 인증
• 송신자와 수신자가 동일한 키를 가지고 있다고 가정
• 오직 진짜 송신자만이 수신자에게 보내는 메시지를 성공적으로 암호화할 수 있다.
4
메시지 암호화 없는 메시지인증
• 인증 꼬리표(authentication tag) 붙여 보내기
• 메시지 자체는 암호화 하지 않고 전송
• 기밀성 보장 없음
5
메시지 암호 없는 메시지인증
• 브로드캐스팅: 네트워크 경고
• 메시지 복호화 시간이 부족할 때
• 컴퓨터 프로그램은 평문인 채로 인증하는 게 더 편리
6
메시지 인증코드
•
7
메시지 인증코드를 이용한 메시지인증
8
일방향 해시함수
• 일방향 해시함수(one-way hash function)
• 해시=H(M)
– H: 해시함수
– M: 메시지
• 키가 필요 없음
9
메시지 인증방법
• 관용암호 사용 방법
• 공개키 암호 사용 방법
• 비밀값 사용 방법
10
관용암호 사용 메시지 인증
11
공개키암호 사용 메시지 인증
12
비밀값 사용 메시지 인증
13
암호화 없는 메시지인증 이유
• 암호 소프트웨어의 느린 속도
• 고가의 암호 장비비용
• 암호 장비는 대용량 데이터처리에 적합
– 작은 데이터처리에 오버헤드 발생
• 암호 알고리즘 수출제약
14
3.2 안전 해시함수
• 해시함수용도
– 메시지 인증
– 디지털 서명
• 안전한 해시함수 필수조건
• SHA(Secure Hash Algorithm)
• 파일, 메시지, 데이터 블록에 대한‘지문(fingerprint)’을 생성
15
해시 함수 요건
1. 임의 크기의 데이터 블록에 적용
2. 일정한 길이의 출력
3. 계산 용이성과 구현 가능성
4. 일방향 성질(one-way property)
5. 약한 충돌 저항성(weak collision resistance)
6. 강한 충돌 저항성(strong collision resistance)
16
일 방향 성질
•
17
약한 충돌 저항성
•
18
약한 충돌성이 없는 해시사용시 위험
• 메시지와 암호화된 해시코드 가로채기
• 메시지로부터 암호화되지 않은 해시코드 생성
• 동일한 해시코드를 갖는 변조된 메시지를 생성
19
강한 충돌 저항성
•
20
메시지 다이제스트 역할
• 인증
• 무결성도 제공
21
해시함수 보안
•
22
단순 해시 함수
23
비트별 XOR 단순 해시 함수
•
24
단순 해시 취약점 해결
•
25
단순 XOR과 CBC 모드 사용의 약점
•
26
•
27
SHA 안전 해시 함수
• 1993년에 FIPS PUB 180
• SHA-1 – 1995년에 FIPS PUB 180-1: MD4 해시 함수에
기초, 설계: MD4를 모델
• SHA-2 – SHA-256, SHA-384, SHA-512
• SHA-3: – 2008년에 수정된 문서가 FIP PUB 180-3
– SHA-224
28
SHA 매개변수 비교
29
SHA-512
• 입력메시지 크기
– 최대 길이가 2128 비트 이하인 메시지
• 출력
– 512비트 해시
• 처리 단위
– 1024비트 블록
30
SHA-512 처리 단계
• 단계 1: 패딩 비트 붙이기(Appending padding bits)
• 단계 2: 길이 붙이기(Append length)
• 단계 3: MD 버퍼 초기화(Initialize MD buffer)
• 단계 4: 1024-비트 블록 메시지 처리(Process message in 1024-bit blocks)
• 단계 5: 출력(Output)
31
패딩 비트 붙이기
• 총 길이를 896 (mod 1024)가 되게 만든다
• 메지시 길이가 1024의 배수이어도 패딩을 추가
• 패딩을 구성하는 비트는 첫 번째 비트가 1 이고 나머지 비트는 모두 0
32
예
• 메시지 길이가 1010일 때 패딩을 구성해보아라
33
길이 붙이기
• 128 비트 블록을 메시지에 추가
34
SHA-512를 사용하는 메시지 다이제스트 생성
35
MD 버퍼 초기화
• 512-비트 버퍼를 해시함수의 중간 값과 최종 값을 저장하기 위해 사용
• 버퍼를 8 개의 64-비트 레지스터(a, b, c, d, e, f, g, h)로 나타낸다
a = 6A09E667F3BCC908 e = 510E527FADE682D1
b = BB67AE8584CAA73B f = 9B05688CEB3E6C1F
c = 3C6EF372FE94F82B g = 1F83D9ABFB41BD6B
d = A54FF53A5F1D36F1 h = 5BE0CDI9137E2179
36
SHA-512를 이용한 메시지
다이제스트 생성
37
1024-비트(128-워드)블록 메시지 처리
• 각 라운드가 80 라운드
– 512-비트 버퍼 값인 abcdefgh를 입력으로 사용하고 이 버퍼의 내용을 갱신
38
출력
• N 개의 1024-비트 블록 모두가 처리된 뒤에 N 번째 단계에서 512-비트 메시지 다이제스트를 출력
39
3.3 메시지 인증 코드
40
HMAC
• 암호적 해시코드를 이용한 MAC 방법
• 키를 사용하는 HASH
• HMAC(hashed MAC)
– IP Security 용 필수 MAC
– TLS 프로토콜에서 사용
– SET(Secure Electronic Transaction) 프로토콜에서도 사용
41
HMAC의 필요성
• 빠른 속도 – 암호적 해시함수는 일반적으로 관용암호 알고리
즘인 DES에 비해 소프트웨어에서 빠르게 실행
• 코드 획득 용이 – 암호적 해시함수에 대한 코드를 쉽게 구할 수 있
다.
• 수출규제 없음 – 관용암호 알고리즘이나 MAC에서 사용하는 관용
암호 알고리즘까지 수출 규제 – 암호적 해시함수에 대해 미국이나 다른 나라가 수
출규제 없음
42
HMAC 설계 목표
• 수정하지 않고 쓸 수 있는 해시함수 – 특히 소프트웨어에서 잘 돌아가고 무료코드 제공
• 모듈형 – 더 빠르고 안전 해시함수로 교환 가능
• 기능저하 없이 해시함수의 원래 성능을 유지 • 용이한 키 처리 • 인증메커니즘의 투명성
– 내장된 해시함수를 통한 인증 메커니즘의 강도를 확실히 파악
– 암호해독을 확실히 파악
43
HMAC 알고리즘
• H =내장된 해시함수(예를 들면 SHA-1) • M =HMAC의 입력 메시지(내장된 해시함수에 필요한 패딩까
지 포함해서) • Yi =M 의 i 번째 블록, 0≤ i ≤(L-1) • L =M 의 블록 수 • b =블록의 비트 수 • n =내장된 해시함수에 의해 생성된 해시코드의 길이 • K =비밀키, 키의 길이가 b 보다 길면 n-비트 키를 생성하는
해시함수에 입력으로 사용된다. • K+ =K 의 왼쪽에 0을 붙여서 길이가 b 비트가 되도록 한 것 • ipad =00110110(16진법수 36)를 b/8 번 반복한 2진 수열 • opad =01011100(16진법수 5C)를 b/8 번 반복한 2진 수열
44
HMAC 알고리즘
HMACK(M) =H[(K+ ⨁ opad)‖H[(K+ ⨁ ipad)‖M]]
45
HMAC 구조
46
블록 암호 기반 MAC
• 암호-기반 메시지 인증 코드코드(Cipher-based Message Authentication Code(CMAC))
• 운용모드: – AES: b=128 – 3DES: b=64
• 메시지: n개 블록: M1,M2,…, Mn • k-비트 암호키 K
– AES: 128, 192, 256비트 – 3DES: 112, 168비트
• n-비트 키 K1
47
CMAC 계산 C1 = E(K, M1)
C2 = E(K, [M2 ⨁ C1])
C3 = E(K, [M3 ⨁ C2])
…
Cn = E(K, [MN ⨁ Cn-1 ⨁ K1])
T = MSBTlen(Cn)
여기서
T = 메시지 인증 코드, 또는‘태그(tag)’라고도 한다.
Tlen = T의 비트 길이
MSBs(X) = 비트열 X의 왼쪽부터 s개 비트
48
암호-기반 메시지 인증 코드(CMAC) (메시지길이가 블록길이의 정수배)
49
암호-기반 메시지 인증 코드(CMAC) (메시지길이가 블록길이의 정수배 아님)
50
암호블록체인카운터-메시지인증코드 (인증)
51
암호블록체인카운터-메시지인증코드 (암호화)
52
3.4 공개키 암호 원리
• 공개키 암호의 기본 개념
• 키 분배(key distribution) 문제
• RSA 알고리즘
• Diffie-Hellman 알고리즘
• 디지털 서명
53
공개키 암호 구조
• 1976년에 Diffie 와 Hellman 에 의해 최초로 제안
• 수학적 함수에 근거
• 서로 다른 두 개의 키를 이용하는 비대칭 방식
• 기밀성, 키 분배, 인증에서 뛰어난 성능
54
공개키 암호에 대한 오해
• 공개키 암호가 관용 암호보다 암호해독에 있어서 더 안전하다(X)
• 공개키 암호 기술이 일반화 되어 관용 암호를 더 이상 사용하지 않게 된다(X)
• 관용 암호의 키 분배보다 공개키를 사용하는 키 분배가 더 쉽다(X)
55
공개키 암호 핵심 요소
• 평문(Plaintext):
• 암호 알고리즘(Encryption algorithm):
• 공개키와 개인키(Public and private key):
• 암호문(Ciphertext):
• 복호 알고리즘(Decryption algorithm):
56
공개키로 암호화하기
57
개인키로 암호화하기
58
공개키 암호의 특성
• 한 쌍의 키 필요
– 하나는 메시지 암호화에 사용하고 다른 하나는 복호화에 사용
• 공개키를 등록
– 공개키와 한 쌍을 이루는 키는 개인키
• 메시지 암호화는 수신자 공개키로 암호화
• 암호문은 수신자의 개인키로 복호화
59
키 명칭
• 대칭암호(관용암호)
– 비밀키(secret key)
• 공개키암호(비대칭 암호)
– 공개키(public key)
– 개인키(private key)
60
공개키 암호시스템 응용
61
공개키 암호의 응용
• 암호화/복호화(Encryption/decryption):
– 수신자의 공개키로 메시지 암호화
• 디지털 서명(Digital signature):
– 송신자 자신의 개인키로 메시지 암호화(서명).
• 키 교환(Key exchange):
– 세션 키를 교환(공유)한다
62
공개키 암호 요건
•
63
공개키 암호 요건
•
64
3.5 공개키 암호 알고리즘
• RSA
• Diffie-Hellman 알고리즘
• 디지털 서명 표준
• 타원곡선암호
65
RSA 공개키 암호 알고리즘
•
66
RSA
• 송신자와 수신자 모두는 𝑛 과 𝑒 를 알고 있어야 하고, 오직 수신자만이 𝑑 값을 알고 있어야 한다.
• 공개키 𝑃𝑈 = {𝑒, 𝑛}
• 개인키 𝑃𝑅 = {𝑑, 𝑛}
67
RSA 공개키 암호 요구 조건
1. 𝑛 보다 작은 모든 정수 𝑀 에 대해서 𝑀 = 𝑀𝑒𝑑 𝑚𝑜𝑑 𝑛 을 만족하는 값 𝑒, 𝑑, 𝑛 을구할 수 있어야 한다.
2. 𝑛 보다 작은 모든 정수 𝑀 에 대해서 𝑀𝑒와 𝐶𝑑를 구하는 것이 비교적 쉬워야 한다.
3. 𝑒 와 𝑛 이 주어졌을 때 𝑑 를 구하는 것이 불가능해야 한다.
68
RSA 알고리즘(키 생성)
𝜙(𝑛): 오일러(Euler) 함수로서 𝑛 보다 작으면서 𝑛 과 서로소인 양의 정수의 개수를 나타낸다.
69
RSA 알고리즘(암호화/복호화)
70
RSA 알고리즘 예
1. 두 소수 𝑝 = 17과 𝑞 = 11을 선택한다. 2. 𝑛 = 𝑝𝑞 = 17 × 11 = 187을 계산한다. 3. 𝜙(𝑛) = (𝑝 − 1)(𝑞 − 1) = 16 × 10 = 160을 계산한다. 4. 𝜙(𝑛) = 160보다 작으면서 𝜙(𝑛) 과 서로소인 수 𝑒 를 선택한
다. 여기서는 𝑒 = 7을 선택한다. 5. 𝑑<160이면서 𝑑𝑒 𝑚𝑜𝑑 160 = 1인 수 𝑑 를 결정한다. 여기에
적합한 수는 𝑑 = 23이다. 왜냐하면 23 × 7 = 161 = 1 ×160 + 1이기 때문이다.
71
RSA 알고리즘 예
• 공개키:𝑃𝑈 = {7,187}
• 개인키:𝑃𝑅 = {23,187}
• 평문 𝑀 = 88을 암호화 해보자
𝐶 = 887 𝑚𝑜𝑑 187을 계산
72
암호화 단계
• 887 𝑚𝑜𝑑 187 = [(884 𝑚𝑜𝑑 187) × (882 𝑚𝑜𝑑 187) ×(881 𝑚𝑜𝑑 187)] 𝑚𝑜𝑑 187
• 881 𝑚𝑜𝑑 187 = 88
• 882 𝑚𝑜𝑑 187 = 7744 𝑚𝑜𝑑 187 = 77
• 884 𝑚𝑜𝑑 187 = 59,969,536 𝑚𝑜𝑑 187 = 132
• 887 𝑚𝑜𝑑 187 = (88 × 77 × 132) 𝑚𝑜𝑑 187 = 894,432 𝑚𝑜𝑑 187 = 11
73
복호화
• 복호화
𝑀 = 1123 𝑚𝑜𝑑 187를 계산
74
복호화 단계
• 1123 𝑚𝑜𝑑 187 = [(111 𝑚𝑜𝑑 187) × (112 𝑚𝑜𝑑 187) ×(114 𝑚𝑜𝑑 187) × (118 𝑚𝑜𝑑 187) ×(118 𝑚𝑜𝑑 187)] 𝑚𝑜𝑑 187
• 111 𝑚𝑜𝑑 187 = 11
• 112 𝑚𝑜𝑑 187 = 121
• 114 𝑚𝑜𝑑 187 = 14,641 𝑚𝑜𝑑 187 = 55
• 118 𝑚𝑜𝑑 187 = 214,358,881 𝑚𝑜𝑑 187 = 33
• 1123 𝑚𝑜𝑑 187 = (11 × 121 × 55 × 33 × 33) 𝑚𝑜𝑑 187 = 79,720,245 𝑚𝑜𝑑 187 = 88
75
RSA 알고리즘을 깨는 방법
• 전수공격
– 가능한 모든 개인키를 시도
– 𝑒와 𝑑의 비트 수가 크면 클수록 알고리즘은 안전
• 𝑛을 두 개의 소인수의 곱으로 인수분해
– 효과적 인수분해 방법 없음
– 대부분의 RSA 응용에 1024-비트 키(대략 300자리 10진수)를 사용하고 있어서 충분히 안전
76
Diffie-Hellman 키교환
• Diffie-Hellman 키교환(key exchange)
• 두 사용자가 비밀키(대칭키)를 안전하게 교환해서 메시지를 암호화하려는 목적
• 이산 대수 문제(discrete logarithms problem)를 푸는 것이 어렵다는 데 근거
77
이산대수문제
• 소수 𝑝의 원시근(primitive root)
– 자신의 거듭제곱을 이용하면 1부터 𝑝 − 1까지의 정수를 모두 생성해 낼 수 있는 수
– 어떤 수 𝑎가 소수 𝑝의 한 원시근 이라면, 다음 수
𝑎 mod 𝑝, 𝑎2 mod 𝑝, … , 𝑎𝑝−1mod 𝑝
은 서로 다르고 정수 1부터 𝑝 − 1까지의 수를 치환해놓은 것과 같다.
78
이산대수문제
• 𝑝보다 작은 임의의 정수 𝑏와 𝑝의 원시근 𝑎에 대해서 다음을 만족하는 유일한 지수 𝑖를 찾을 수 있다.
𝑏 = 𝑎𝑖mod 𝑝, 여기서 0 ≤ 𝑖 ≤ 𝑝 − 1
• 여기에서 지수(exponent) 𝑖를 밑수 𝑎를 갖는 𝑏의 이산대수(discrete logarithm) 혹은 지수(index)라고 한다. 이 수를
𝑖 = dlog𝑎,𝑝(𝑏)
• 라고 쓴다.
79
Diffie Hellman 알고리즘
• 양측 A와 B에게 주어진 정보:
– 하나의 소수 𝑞와 𝑞의 한 원시근 𝛼
• A는 한 랜덤넘버 𝑋𝐴 < 𝑞를 선택하고𝑌𝐴 = 𝛼𝑋𝐴mod 𝑞 를 계산
• B는 한 랜덤넘버 𝑋𝐵 < 𝑞를 선택하고𝑌𝐵 = 𝛼𝑋𝐵mod 𝑞 를 계산
• 양측은 𝑋를 개인값으로 보관하고 𝑌를 상대방이 사용할 수 있도록 공개
80
Diffie Hellman 알고리즘
• A는 𝐾 = (𝑌𝐵)𝑋𝐴mod 𝑞를 이용해서 키 계산 • B는 𝐾 = (𝑌𝐴)𝑋𝐵mod 𝑞를 이용해서 키 계산
𝐾 = (𝑌𝐵)𝑋𝐴mod 𝑞 = (𝛼𝑋𝐵mod 𝑞)𝑋𝐴mod 𝑞
= (𝛼𝑋𝐵)𝑋𝐴 mod 𝑞 = 𝛼𝑋𝐵𝑋𝐴 mod 𝑞 = 𝛼𝑋𝐴𝑋𝐵 mod 𝑞
= (𝛼𝑋𝐴)𝑋𝐵 mod 𝑞 = (𝛼𝑋𝐴mod 𝑞)𝑋𝐵mod 𝑞
= (𝑌𝐴)𝑋𝐵mod 𝑞=K
81
Diffie-Hellman 키
교환 알고리즘
82
공격자가에게 주어지는 정보
• 알 수 없는 정보: 𝑋𝐴, 𝑋𝐵
• 알 수 있는 정보: 𝑞, 𝛼, 𝑌𝐴, 𝑌𝐵
• A, B의 비밀값 𝑋𝐴, 𝑋𝐵 를 알려면 공격자는 반드시 이산대수문제를 풀어야 한다.
𝑋𝐴 = dlog𝛼,𝑞(𝑌𝐴)
𝑋𝐵 = dlog𝛼,𝑞(𝑌𝐵)
아는 값 알고 싶은 값
83
Diffie Hellman 키교환 예
• 하나의 소수 𝑞 = 353, 𝑞의 한 원시근 𝛼 = 3
• A는 한 랜덤넘버 𝑋𝐴 = 97 < 353 선택𝑌𝐴 = 𝛼𝑋𝐴mod 𝑞 = 397mod 353 = 40 계산
• B는 한 랜덤넘버 𝑋𝐵 = 233 < 353 선택𝑌𝐵 = 𝛼𝑋𝐵mod 𝑞 = 3233mod 353 = 248 계산
• A와 B는 𝑌𝐴 와 𝑌𝐵를 교환
84
Diffie Hellman 키교환 예
• A가 하는 계산:
𝐾 = (𝑌𝐵)𝑋𝐴mod 𝑞 = (248)97mod 353 = 160
• B가 하는 계산 :
𝐾 = (𝑌𝐴)𝑋𝐵mod 𝑞 = (40)233mod 353 = 160
85
Diffie Hellman 키교환 예에 대한 공격
• 공격자가 가진 정보: 𝑞 = 353; 𝛼 = 3; 𝑌𝐴 = 40; 𝑌𝐵 = 248
• 공격자가 할 수 있는 계산
• 3𝑎mod 353 = 40
• 3𝑏mod 353 = 248
• 의 해를 구한다. 즉, 다음 이산대수를 구한다 𝑎 = dlog3,353(40)
𝑏 = dlog3,353(243)
86
Diffie-Hellman 키 교환 절차
87
키교환 프로토콜
A: (𝑋𝐴, 𝑌𝐴)
LAN 사용자 그룹
모든 LAN 사용자에게 공개
비밀
공개
Z: (𝑋𝑍, 𝑌𝑍)
B: (𝑋𝐵 , 𝑌𝐵) C: (𝑋𝐶 , 𝑌𝐶)
공개
비밀
소수 𝑞, 𝑞의 한 원시근 𝛼
88
중간자 다츠의 공격
1. 다츠는 공격을 위해 두 개의 랜덤 개인 키 𝑋𝐷1과 𝑋𝐷2 를 생성한 다음 여기에 해당되는 공개키인 𝑌𝐷1 과 𝑌𝐷2 를 구한다.
2. 앨리스는 𝑌𝐴를 밥에게 전송한다. 3. 다츠는 𝑌𝐴 를 가로채고 𝑌𝐷1 을 밥에게 보낸 다음
𝐾2 = (𝑌𝐴)𝑋𝐷2mod 𝑞를 계산한다. 4. 밥은 𝑌𝐷1 을 받고 𝐾1 = (𝑌𝐷1)𝑋𝐵mod 𝑞를 계산한다. 5. 밥은 𝑌𝐵를 앨리스에게 보낸다. 6. 다츠는 𝑌𝐵 를 가로채고 𝑌𝐷2 를 앨리스에게 보낸다. 다츠
는 𝐾1 = (𝑌𝐵)𝑋𝐷1mod 𝑞 를 계산한다. 7. 앨리스는 𝑌𝐷2 를 받고 𝐾2 = (𝑌𝐷2)𝑋𝐴mod 𝑞 를 계산한다.
89
중간자 다츠의 공격
• 밥과 앨리스는 자신이 공통의 비밀키를 공유하고 있다고 생각한다.
• 밥과 다츠가 공유하는 것: 비밀키 K1
• 앨리스와 다츠가 공유하는 것: 비밀키 K2
90
중간자 다츠의 실제 공격
• 앨리스는 암호화된 메시지 𝑀: 𝐸(𝐾2, 𝑀) 을 밥에게 보낸다.
• 다츠는 암호화된 이 메시지를 가로챈 다음 복호화하여 𝑀 을 얻는다.
• 다츠는 밥에게 𝐸(𝐾1, 𝑀) 혹은 𝐸(𝐾1, 𝑀′) 를 보낸다. 여기서 𝑀′는 𝑀과는 다른 메시지
91
기타 공개키 암호 알고리즘
• 디지털 서명 표준
– (DSS: Digital Signature Standard)
– 서명기능만 제공
– 암호나 키 교환에 사용 못함
• 타원곡선 암호
– (ECC: Elliptic-Curve Cryptography)
– 비트 수가 적어서 계산속도가 빠르다
– 신뢰성이 RSA보다 낮다
92
3.6 디지털 서명
• 메시지의 출처와 메시지 내용에 대한 확신을 위해 메시지 전체를 암호화하면 된다
• 이렇게 하면 메모리가 많이 든다
• 문서의 기능을 대신하는 작은 비트블록을 암호화하는 방법이 필요
• 작은 비트블록을 인증자(authenticator)라고 한다
93
인증자
• 인증자는 변경 없이 문서만 변경하는 것이 불가능
• 인증자를 송신자의 개인키로 암호화했다면 출처, 내용, 순서 확인해주는 서명이다
• SHA-1 같은 안전 해시코드가 이런 역할
• 메시지의 무결성은 보장하지만 기밀성은 보장 못한다
94