680 likes | 1.22k Views
Chapter 8 네트워크 보안. Computer Networking: A Top Down Approach , 5 th edition. Jim Kurose, Keith Ross Addison-Wesley, April 2009. Chapter 8 목차. 8.1 네트워크 보안이란 무엇인가 ? 8.2 암호학의 원리 8.3 메시지 무결성 8.4 종단점 인증 8.5 전자 메일의 보안 8.6 TCP 연결의 보안 : SSL 8.7 네트워크 계층의 보안 : IPsec 8.8 무선 랜의 보안
E N D
Chapter 8네트워크 보안 Computer Networking: A Top Down Approach ,5th edition. Jim Kurose, Keith RossAddison-Wesley, April 2009.
Chapter 8 목차 8.1 네트워크 보안이란 무엇인가? 8.2암호학의 원리 8.3메시지 무결성 8.4종단점 인증 8.5전자 메일의 보안 8.6 TCP 연결의 보안: SSL 8.7네트워크 계층의 보안: IPsec 8.8무선 랜의 보안 8.9운영상 보안: 방화벽과 침입 방지 시스템
네트워크 보안의 목표 기밀성(confidentiality):오직 송신자와 정해진 수신자만이 메시지 내용을 “이해”할 수 있다. • 암호화의 과제 인증(authentication):송신자와 수신자는 상호 존재를 확인할 수 있어야 한다. 무결성(integrity):메시지가 전송 중(혹은 후에) 변경되지 않은 것을 보장할 수 있도록 한다. 접근 제어(access control)와 가용성(availability) :사용자는 서비스를 원할 때는 언제든지받을 수 있어야 한다.
친구와 적들: Alice, Bob, Trudy • Bob과 Alice는 안전하게 통신을 하고 싶다. • Trudy (공격자)는 둘 사이의 메시지를 엿보거나 제거하거나 삭제하려고 한다. Alice Bob data, control messages channel secure sender secure receiver data data Trudy
누가 Bob, Alice가 될 수 있는가? • 실제 통신하는 사람들 • 전자 상거래를 하는 웹 브라우저와 서버 • 온라인 뱅킹을 하는 client/server • DNS 서버 • 라우팅 정보를 교환하는 라우터들 • 등등
공격자가 하려는 것은? • 엿듣기:메시지 가로채기 • 적극적으로 거짓 메시지를 추가한다. • 메시지 내용 변경 • 이전 메시지를 새로운 메시지로 다시 전송(replay) • 위장:패킷의 소스 주소를 가짜 주소로 한다.(spoof) • 하이재킹:자신이 송신자 혹은 수신자가 되어 통신을 한다. • 서비스 거부(denial of service): 다른 사람의 서비스를 받지 못하도록 한다. • 서버의 자원이 고갈되도록 한다. • 소프트웨어의 약점을 이용한 웜, 바이러스 공격
Chapter 8 목차 8.1네트워크 보안이란 무엇인가? 8.2암호학의 원리 8.3메시지 무결성 8.4전자 메일의 보안 8.5 TCP 연결의 보안: SSL 8.6네트워크 계층의 보안: IPsec 8.7무선 랜의 보안 8.8운영상 보안: 방화벽과 침입 방지 시스템
Bob의 복호화 키 (decryption key) Alice의암호화 키 (encryption Key) encryption algorithm decryption algorithm 평문 (plaintext) 평문(plaintext) 암호문(ciphertext) K K A B 암호학 관련 용어 m : 평문 메시지 KA(m) : 키KA 로 암호화된 암호문 m = KB(KA(m))
간단한 암호화 방법 대치 암호(substitution cipher): • 단일 문자 대치 암호 평문: abcdefghijklmnopqrstuvwxyz 암호문: mnbvcxzasdfghjklpoiuytrewq 예: 평문: bob. i love you. alice 암호문: nkn. s gktc wky. mgsbc Key: the mapping from the set of 26 letters to the set of 26 letters
암호화 키(crypto key) • 암호화할 때 보통 암호화 키(key)를 사용한다: • 암호화 알고리즘은 모든 사람에게 알려져 있다. • 오직키(key)만 비밀로 유지된다. • 왜 암호화 알고리즘을 비밀로 하지 않고 키(key)만 비밀로 할까?
암호문 만으로 해독 두 가지 접근 방법: 모든 키에 대해 다 시도해 본다. 통계 분석 알려진 평문 공격:공격자는 어떤 암호문에 대한 평문의 쌍을 알고 있다. 선택 평문 공격:침입자는 평문 메시지를 선택할 수 있고 이에 대응하는 암호문 형태를 얻을 수 있다. 암호 해독 공격 방법
암호화 방법 • 대칭키(Symmetric key) 암호화 • 공개키(Public key) 암호화
K K S S 대칭키 암호화 대칭키: Bob과 Alice는 공유키를 사용한다 : K Q: Bob과 Alice는 어떻게 이 키를 서로 약속해서 사용할 수 있을까? - 키 배분의 문제 encryption algorithm 평문 메시지 m decryption algorithm 암호문 평문 m = KS(KS(m)) K (m) S S
대칭키 암호화의 두 유형 • 스트림 암호화(stream cipher) • 한 번에 한 비트씩 암호화 • 블록 암호화(block cipher) • 평문 메시지를 동일한 크기의 블록으로 구분하여 블록 단위로 암호화한다.
스트림 암호화 pseudo random • 키 스트림(key stream)의 각 비트를 평문의 각 비트와 결합하여 암호문의 비트를 생성한다. • m(i) = 평문 메시지의 i번째 비트 • ks(i) = 키 스트림의 i번째 비트 • c(i) = 암호문의 i번째 비트 • c(i) = ks(i) m(i) ( = exclusive or) • m(i) = ks(i) c(i) keystream generator key keystream
RC4 스트림 암호화 • RC4는 널리 알려진 스트림 암호화 방법이다. • 키는 1바이트부터 256바이트까지 사용 • 802.11의 WEP에서 사용 • SSL에서도 사용할 수 있다.
블록 암호화 • 메시지는 k 비트의 블록으로 나누어서 암호화한다. (예, 64-bit 블록). • K 비트 길이의 평문 메시지 블록과 k 비트 길이의 암호문 블록과 1대1로 매핑된다. 예(k=3): inputoutput 000 110 001 111 010 101 011 100 inputoutput 100 011 101 010 110 000 111 001 평문 010110001111의 암호문은?
블록 암호화 • 블록 크기가 작을 경우: 예를 들면 k=3? • How many 3-bit inputs? • 3-bit 입력값에 대한 순열(permutation)의 수는? • 2k! mappings • 답: 40,320 ; 너무 적다! • 블록 크기가 너무 클 경우, 예를 들면 k=64: • 입력값에 대한 순열의 수는 264! • 하지만, 64비트의 각 스트링에 대해서 264개의 값이 테이블에 존재해야 한다. • 테이블이 너무 커진다.
From Kaufman et al 64-bit input 8bits 8bits 8bits 8bits 8bits 8bits 8bits 8bits S1 S2 S4 S3 S6 S5 S8 S7 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 64-bit 뒤섞음 n번 순환 64-bit output 블록 암호화의 예 S-box 8-bit to 8-bit mapping
앞의 예에서 왜 n번 반복하는가? • 한번만한다면입력된 1 비트는 출력문의 최대 8비트에 영향을 준다. • 두번째 반복하면 이 8비트는 다시 흩어져서 여러 개의 S-box의 입력으로 들어가게 된다. • 얼마나 반복해야 하나? • 카드를 반복해서 섞는 것과 유사한다. • n이 증가하면 섞는 효과는 감소된다.
One Round of DES L R key 28 28 32 32 L R expand 28 28 48 48 Compress 48 S-boxes(8) 28 32 28 P Box 32 32 32 key R L
큰 메시지를 암호화할 때 • 각 블록 마다 독립해서 암호화를 한다면, • 만약 모든 블록에 동일한 키를 사용하면 문제: 왜냐하면 같은 내용의 블록이 다시 나온다면 암호문도 같아진다. 그렇다면 공격자가 예측할 수 있는 정보를 제공해 준다. • 만약 각 블록마다 다른 키를 사용한다면: • 매 블록 m(i) 마다 64-bit의 r(i)를 랜덤하게 발생 • c(i) = KS( m(i) r(i) )를 계산 • 전송: c(i), r(i), i=1,2,… • 수신자는 해독: m(i) = KS(c(i)) r(i) • 문제는 매번 암호문(블록)을 보낼 때 마다 다른 키를 같이 보내야 한다: c(i)와 r(i)
만약 모든 블록을 동일한 키를 사용하면 • Alice의 압축된 파일을 암호화하여 표시할 때 • 어떻게 이렇게 되었는가? • 동일한 평문의 블록 동일한 암호문!
암호 블록 연결(CBC) • 현재의 블록을 암호화할 때 이전 블록의 결과를 사용한다. • c(i) = KS( m(i) c(i-1) ) • m(i) = KS( c(i)) c(i-1) • 그러면 첫번째 블록을 어떻게 암호화할 것인가? • 초기 벡터(IV): 랜덤하게 생성된 블록 = c(0) • IV는 비밀값일 필요는 없다. • 각 메시지 마다(혹은 세션마다) IV값을 변경한다. • 동일한 메시지를 반복해서 전송하더라도 암호문은 매번 변경되도록 한다.
+ Cipher Block Chaining(CBC) m(1) = “HTTP/1.1” c(1) = “k329aM02” block cipher t=1 • 만약 입력 블록이 동일하다면 동일한 암호문이 만들어 진다. … m(17) = “HTTP/1.1” c(17) = “k329aM02” block cipher t=17 • cipher block chaining: i번째 입력 블록과 이전 암호문의 블록을 XOR m(i) c(i-1) block cipher c(i)
CBC 모드로 암호화 • Alice’의 압축되지 않은 이미지를 CBC (TEA)를 사용하여 암호화하였다. • 왜 이렇게 되었는가? • 동일한 평문일지라도 다른 암호문을 만들어낸다!
대표적 대칭키 암호화 방법: DES DES: Data Encryption Standard • US 암호 알고리즘 표준[NIST 1993] • 56-bit 대칭키 사용, 64-bit 크기의블록 • 암호문 블록 연결 (cipher block chaining) • DES는 얼마나 안전한가? • 무차별 공격(brute force)으로 하루 안에 암호를 풀 수 있다. • 안전의 문제는 키의 길이와 메시지의 암호를 푸는 컴퓨터의 계산 능력에 달려 있다. • 3DES • 키의 길이를 DES의 3배로 하여 암호화한다.
AES: Advanced Encryption Standard • 미국의 새로운 암호 알고리즘 표준 [2001]: DES를 대체 • 블록 크기: 128 bit • 키의 길이: 128, 192, or 256 bits • 무차별 공격(brute force)으로 동일한 암호문을 풀 경우, DES의 경우 1초가 걸린다면 AES는 149 trillion years가 걸린다.
공개키 암호화 • 대칭키 암호화는 송수신자 만이 공유하는 비밀키를 가져야 한다. • Q: 어떻게 둘 만의 비밀키를 가질 수 있는가(특히 둘이 서로 직접 만날 수 없다면)? 공개키 암호화 • 완전히 다른 접근 방법[Diffie-Hellman76, RSA78] • 송신자와 수신자는 비밀키를 공유하지 않는다. • 공개키는 모두에게 공개된다. • 개인키는 오직 각 개인들만 갖고 있다.
+ K (m) B - + m = K (K (m)) B B 공개키 암호화 + Bob의 공개키 K B - Bob의 개인키 K B encryption algorithm decryption algorithm plaintext message plaintext message, m ciphertext
K (K (m)) = m B B - + 2 1 공개키 암호화 알고리즘 요구사항: K 와 K 필요 - + B B - + 공개키 K 에서 개인키 K 를 찾아낼 수 없다. B B RSA: Rivest, Shamir, Adelson algorithm
간단한 modular arithmetic • x mod n = x를 n으로 나누었을 때 나머지(remainder) • 법칙: [(a mod n) + (b mod n)] mod n = (a+b) mod n [(a mod n) - (b mod n)] mod n = (a-b) mod n [(a mod n) * (b mod n)] mod n = (a*b) mod n • 따라서 (a mod n)d mod n = ad mod n • 예: x=14, n=10, d=2:(x mod n)d mod n = 42 mod 10 = 6xd = 142 = 196 xd mod 10 = 6
+ - K K B B RSA: 공개키와 개인키 생성 1.두 개의 큰 소수p, q를 선택한다. 2. n과 z를 계산: n = pq, z = (p-1)(q-1) 3.e (with e<n)를 선택한다. e와 z는 “서로 소”(공약수가 없다). 4.d를 선택한다. ed-1는 z로나누어진다. (ed mod z = 1 ). 5.공개키:(n,e).개인키:(n,d).
1.m(<n)을 다음과 같이 암호화 d e c = m mod n m = c mod n d e m = (m mod n) mod n RSA: 암호화와 복호화 0. (n,e)과 (n,d)를 앞에서와 같이 계산 2.c를 복호화 Magic happens! c
c = me mod n, cd mod n = m • for any x and y: xy mod n = x(y mod z) mod n • where n= pq and z = (p-1)(q-1) • 따라서, cd mod n = (me mod n)d mod n = med mod n = m(ed mod z) mod n = m1 mod n = m
d e c = m mod n m = c mod n d c RSA 예: p=5, q=7. Then n=35, z=24. e=5 (따라서e와 z는 서로 소). d=29 (따라서ed-1는 z로 나누어진다). e m m bit pattern encrypt: 0000l000 17 24832 12 c decrypt: 17 12 481968572106750915091411825223071697
K (K (m)) = m - B B + K (K (m)) - + = B B RSA: 또 다른 중요한 성질 개인키를 먼저 적용, 다음에 공개키를 적용 먼저 공개키를 적용, 다음에 개인키를 적용 결과는 동일하다!
K (K (m)) = m - B B + K (K (m)) - + = B B 왜 ? 다음과 같은 modular 연산에 의해서 성립: (me mod n)d mod n = med mod n = mde mod n = (md mod n)e mod n
왜 RSA는 안전한가? • Bob (n,e)의 공개키를 알고 있을 때, d를 찾는 것이 얼마나 어려운가? • 이것은 n을 인수분해하여 두 개의 소수 p와 q를 얼마나 빨리 찾을 수 있느냐에 달려있다. • 커다란 수의 두 소수 p,q를 찾는 것은 어렵다. RSA 키 생성 • 두 개의 커다란 소수 p와 q를 찾아야 한다.
공개키의 응용 • 공개키 사용의 문제점 • 지수 연산은 계산 시간이 많이 요구된다. • DES는 적어도 RSA 보다 100배 빠르다. • 따라서 공개키를 긴 메시지 전체를 암호화하는데는 사용하지 않는다. • 공개키의 응용 • 공개키를 사용하여 대칭키를 암호화하여 전송하고 메시지의 암호화는 대칭키를 사용한다. • 디지털 서명 • 인증
Chapter 8 목차 8.1네트워크 보안이란 무엇인가? 8.2암호학의 원리 8.3메시지 무결성 8.4전자 메일의 보안 8.5 TCP 연결의 보안: SSL 8.6네트워크 계층의 보안: IPsec 8.7무선 랜의 보안 8.8운영상 보안: 방화벽과 침입 방지 시스템
메시지 무결성(integrity) • 통신 개체들이 수신한 메시지가 진짜인 것을 증명 • 메지지의 내용이 변경되지 않았다. • 메시지의 생성자가 내가 그런 것으로 알고 있는 개체이다. • 이전 메시지가 다시 전송되지 않았다. • 전송되는 메시지의 순서가 유지되었다. • 접근 방법 • 메시지 다이제스트(message digest)
함수 H( )는 임의의 길이의 메시지를 입력으로 받아서 고정된 길이의 메시지 스트링을 만들어낸다. H( ) : many-to-1 함수 H( )는 “해쉬함수(hash function)”라고 불리운다. 요구되는 특성: 계산이 용이 단방향: H(m)에서 m을 찾을 수 없다. 충돌 방지: H(m) = H(m’)인 m과 m’을 계산하는 것은 어려워야 한다. 출력값은 랜덤해야 한다. large message m H: Hash Function H(m) 해쉬 함수와 메시지 다이제스트
checksum: 불완전한 해쉬 함수 에러 코드로 사용하는 checksum은 해쉬 함수의 특성을 갖고 있다: • 고정된 길이의 메시지 다이제스트(16-bit sum)를 생성한다. • many-to-one • 하지만 어떤 해쉬값을 갖는메시지가 있을 때동일한 해쉬값을 갖는 또 다른 메시지를 쉽게 찾을 수 있다. • 예: 단순한 체크섬: ASCII format message ASCII format message I O U 9 0 0 . 1 9 B O B 49 4F 55 39 30 30 2E 31 39 42 D2 42 I O U 1 0 0 . 9 9 B O B 49 4F 55 31 30 30 2E 39 39 42 D2 42 B2 C1 D2 AC B2 C1 D2 AC 다른 메시지 하지만 동일한 checksum!
MD5 (RFC 1321) 널리 사용되고 있다. 4단계의 계산으로 128-bit 메시지 다이제스트를 생성한다. SHA-1 US 표준 [NIST, FIPS PUB 180-1] 160-bit 메시지 다이제스트 해쉬 함수(hash function) 알고리즘
s = shared secret s s message message message H( ) H( ) compare 메시지 인증 코드(MAC) • 송신자를 인증한다(authenticate) • 메시지 무결성을 증명 • 암호화는 없음 ! • “keyed hash”라고도 불리움 • MDm = H(s||m) ; 전송 m||MDm
HMAC (RFC 2104) • 널리 사용되고 있는 MAC 표준 • MD5나 SHA-1 해쉬 함수와 함께 사용될 수 있다. • 응용 예: OSPF • 공걱 • 메시지 삽입 • 메시지 제거 • 메시지 수정 • 어떻게 라우터는 전송받은 메시지가 진짜인지 알 수 있는가?
종단 개체 인증(End-point authentication) • Bob이 Alice로부터 메시지(m)와 함께 MAC을 받았다. • Bob은 이 메시지가 중간에 변경되지 않았다는 것을 확신할 수 있는가? • Bob은 이 메시지를 Alice가 만들었다는 것을 확신할 수 있는가? • Bob은 이 메시지를 Alice가 보냈다는 것을 확신할 수 있는가?
Transfer $1M from Bill to Trudy Transfer $1M from Bill to Trudy MAC MAC 메시지 재사용(playback) 공격 MAC =f(msg,s)
Transfer $1M from Bill to Susan MAC 메시지 재사용 공격에 대한 방어: nonce “I am Alice” R MAC =f(msg,s,R)