Chapter 8 네트워크 보안 Computer Networking: A Top Down Approach , 5th 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 무선 랜의 보안 8.9 운영상 보안: 방화벽과 침입 방지 시스템
네트워크 보안의 목표 기밀성(confidentiality): 오직 송신자와 정해진 수신자만이 메시지 내용을 “이해”할 수 있다. 암호화의 과제 인증(authentication): 송신자와 수신자는 상호 존재를 확인할 수 있어야 한다. 무결성(integrity): 메시지가 전송 중(혹은 후에) 변경되지 않은 것을 보장할 수 있도록 한다. 접근 제어(access control)와 가용성(availability) :사용자는 서비스를 원할 때는 언제든지 받을 수 있어야 한다.
친구와 적들: Alice, Bob, Trudy Bob과 Alice는 안전하게 통신을 하고 싶다. channel data, control messages 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 운영상 보안: 방화벽과 침입 방지 시스템
암호학 관련 용어 K m : 평문 메시지 KA(m) : 키 KA 로 암호화된 암호문 m = KB(KA(m)) 평문 (plaintext) 평문(plaintext) 암호문(ciphertext) K A encryption algorithm decryption Alice의 암호화 키 (encryption Key) Bob의 복호화 키 (decryption key) 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 대칭키: Bob과 Alice는 공유키를 사용한다 : K S K S 평문 메시지 m encryption algorithm 암호문 decryption algorithm 평문 K (m) m = KS(KS(m)) S 대칭키: Bob과 Alice는 공유키를 사용한다 : K Q: Bob과 Alice는 어떻게 이 키를 서로 약속해서 사용할 수 있을까? - 키 배분의 문제 S
대칭키 암호화의 두 유형 스트림 암호화(stream cipher) 한 번에 한 비트씩 암호화 블록 암호화(block cipher) 평문 메시지를 동일한 크기의 블록으로 구분하여 블록 단위로 암호화한다.
스트림 암호화 키 스트림(key stream)의 각 비트를 평문의 각 비트와 결합하여 암호문의 비트를 생성한다. pseudo random keystream generator key keystream 키 스트림(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)
RC4 스트림 암호화 RC4는 널리 알려진 스트림 암호화 방법이다. 키는 1바이트부터 256바이트까지 사용 802.11의 WEP에서 사용 SSL에서도 사용할 수 있다.
블록 암호화 메시지는 k 비트의 블록으로 나누어서 암호화한다. (예, 64-bit 블록). K 비트 길이의 평문 메시지 블록과 k 비트 길이의 암호문 블록과 1대1로 매핑된다. 예(k=3): input output 000 110 001 111 010 101 011 100 input output 100 011 101 010 110 000 111 001 평문 010110001111의 암호문은?
블록 암호화 블록 크기가 작을 경우: 예를 들면 k=3? 블록 크기가 너무 클 경우, 예를 들면 k=64: How many 3-bit inputs? 3-bit 입력값에 대한 순열(permutation)의 수는? 2k! mappings 답: 40,320 ; 너무 적다! 블록 크기가 너무 클 경우, 예를 들면 k=64: 입력값에 대한 순열의 수는 264! 하지만, 64비트의 각 스트링에 대해서 264 개의 값이 테이블에 존재해야 한다. 테이블이 너무 커진다.
블록 암호화의 예 S-box From Kaufman et al 64-bit input S1 8bits 8 bits S2 S3 64-bit output n번 순환 S-box 8-bit to 8-bit mapping
앞의 예에서 왜 n번 반복하는가? 한번만한다면 입력된 1 비트는 출력문의 최대 8비트에 영향을 준다. 두번째 반복하면 이 8비트는 다시 흩어져서 여러 개의 S-box의 입력으로 들어가게 된다. 얼마나 반복해야 하나? 카드를 반복해서 섞는 것과 유사한다. n이 증가하면 섞는 효과는 감소된다.
One Round of DES L expand R S-boxes(8) P Box key Compress 48 32 28
큰 메시지를 암호화할 때 각 블록 마다 독립해서 암호화를 한다면, 만약 각 블록마다 다른 키를 사용한다면: 만약 모든 블록에 동일한 키를 사용하면 문제: 왜냐하면 같은 내용의 블록이 다시 나온다면 암호문도 같아진다. 그렇다면 공격자가 예측할 수 있는 정보를 제공해 준다. 만약 각 블록마다 다른 키를 사용한다면: 매 블록 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” t=1 block cipher … m(17) = “HTTP/1.1” c(17) = “k329aM02” t=17 block cipher 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 K plaintext message, m encryption algorithm ciphertext + Bob의 공개키 K B - Bob의 개인키 K B plaintext message, m encryption algorithm ciphertext decryption algorithm plaintext message K (m) B + m = K (K (m)) B + -
RSA: Rivest, Shamir, Adelson algorithm 공개키 암호화 알고리즘 요구사항: + - 1 K 와 K 필요 B B K (K (m)) = m B - + + - 2 공개키 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 = 6 xd = 142 = 196 xd mod 10 = 6
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). K B - K B +
RSA: 암호화와 복호화 0. (n,e)과 (n,d)를 앞에서와 같이 계산 1. m(<n)을 다음과 같이 암호화 c = m mod n e 2. c를 복호화 m = c mod n d Magic happens! m = (m mod n) e mod n d c
for any x and y: xy mod n = x(y mod z) mod n 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
RSA 예: p=5, q=7. Then n=35, z=24. e=5 (따라서 e와 z는 서로 소). d=29 (따라서 ed-1는 z로 나누어진다). e c = m mod n e bit pattern m m encrypt: 0000l000 12 24832 17 c d m = c mod n d c decrypt: 17 12 481968572106750915091411825223071697
RSA: 또 다른 중요한 성질 K (K (m)) = m K (K (m)) 결과는 동일하다! - + = B 먼저 공개키를 적용, 다음에 개인키를 적용 개인키를 먼저 적용, 다음에 공개키를 적용 결과는 동일하다!
왜 ? K (K (m)) = m K (K (m)) 다음과 같은 modular 연산에 의해서 성립: B - + K (K (m)) = 왜 ? 다음과 같은 modular 연산에 의해서 성립: (me mod n)d mod n = med mod n = mde mod n = (md mod n)e mod n
왜 RSA는 안전한가? 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)
해쉬 함수와 메시지 다이제스트 large message H: Hash m Function H( ) : many-to-1 함수 H( )는 “해쉬 함수(hash function)”라고 불리운다. 요구되는 특성: 계산이 용이 단방향: H(m)에서 m을 찾을 수 없다. 충돌 방지: H(m) = H(m’)인 m과 m’을 계산하는 것은 어려워야 한다. 출력값은 랜덤해야 한다.
checksum: 불완전한 해쉬 함수 에러 코드로 사용하는 checksum은 해쉬 함수의 특성을 갖고 있다: 고정된 길이의 메시지 다이제스트(16-bit sum)를 생성한다. many-to-one 하지만 어떤 해쉬값을 갖는메시지가 있을 때 동일한 해쉬값을 갖는 또 다른 메시지를 쉽게 찾을 수 있다. 예: 단순한 체크섬: message ASCII format message ASCII format I O U 1 0 0 . 9 9 B O B 49 4F 55 31 30 30 2E 39 39 42 D2 42 I O U 9 0 0 . 1 9 B O B 49 4F 55 39 30 30 2E 31 39 42 D2 42 B2 C1 D2 AC B2 C1 D2 AC 다른 메시지 하지만 동일한 checksum!
해쉬 함수(hash function) 알고리즘 MD5 (RFC 1321) 널리 사용되고 있다. 4단계의 계산으로 128-bit 메시지 다이제스트를 생성한다. SHA-1 US 표준 [NIST, FIPS PUB 180-1] 160-bit 메시지 다이제스트
메시지 인증 코드(MAC) s = shared secret s message compare H( ) 송신자를 인증한다(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가 보냈다는 것을 확신할 수 있는가?
메시지 재사용(playback) 공격 MAC = f(msg,s) MAC MAC Transfer $1M from Bill to Trudy MAC Transfer $1M from Bill to Trudy
메시지 재사용 공격에 대한 방어: nonce “I am Alice” R MAC = f(msg,s,R) MAC Transfer $1M from Bill to Susan
디지탈 서명(digital signature) 손으로 하는 서명과 유사한 방법. 송신자 (Bob)는 자신이 무선의 소유자/작성자임을 증명하는 서명을 한다. 목표는 MAC과 유사, 하지만 공개키 암호화를 사용한다. 위조 불가능: 수신자(Alice)는 오직 Bob만이 이 문서에 서명했다는 것을 증명할 수 있다.
Bob’s message, m, signed (encrypted) with his private key 디지털 서명 메시지 m에 대한 간단한 서명: Bob은 자신의 개인키로 암호화된 문서를 생성한다. K B - Bob’s message, m Bob’s private key K B - (m) Dear Alice Oh, how I have missed you. I think of you all the time! …(blah blah blah) Bob Bob’s message, m, signed (encrypted) with his private key Public key encryption algorithm
메시지 다이제스트를 이용한 디지털 서명 + equal ? Alice는 디지털 서명의 진위를 증명한다. Bob은 디지털 서명한 메시지를 전송한다. large message m H: Hash function KB(H(m)) - encrypted msg digest H(m) digital signature (encrypt) Bob’s private key large message m K B - Bob’s public key digital signature (decrypt) K B + KB(H(m)) - encrypted msg digest H: Hash function + H(m) H(m) equal ?
디지탈 서명 Alice는 메시지 m과 디지털 서명 KB(m)을 받았다고 하자. Alice는 Bob의 공개키(KB )로 KB(m)을 복호화한다: KB(KB(m) ) = m. 만약에 KB(KB(m) ) = m이면 Bob이 서명한 것을 증명할 수 있다. - + - + - + - Alice는 다음을 증명: 오직 Bob만이 m을 서명, 따라서 확실히 Bob이 m을 보냈다. 메시지의 무결성은? 부인 봉쇄(Non-repudiation): Alice는 Bob이 m을 사인한 것을 부인한다면 그것이 거짓임을 증명할 수 있다. -
부인 봉쇄(non-repudiation) Alice는 Bob으로부터 주식 100주를 주문했다. Alice는 대칭키로 MAC을 계산했다. 그런데 주식값이 떨어지자, Alice는 자신이 주문한 것을 부인했다. Bob은 Alice가 주문한 것을 증명할 수 있을까? No! Bob역시 대칭키를 알고 있기 때문에 주문을 조작할 수 있다. 문제: Bob은 Alice가 주문한 것을 알고 있다. 하지만 그것을 증명할 수 없다.
부인 봉쇄(Non-repudiation) Alice는 Bob으로부터 주식 100주를 주문했다. Alice는 자신의 개인키로 주문에 서명을 했다. 그런데 주식값이 떨어지자, Alice는 자신이 주문한 것을 부인했다. Bob은 Alice가 주문한 것을 증명할 수 있을까? Yes! Alice의 개인키를 갖고 있는 사람 만이 주문에 서명을 할 수 있다. 물론 Alice의 개인키가 도난당하지 않았다는 가정을 해야 한다.(키 폐기 문제)
공개키 인증 동기: Bob의 공개키라고 하는데 진짜 Bob의 공개키인지 어떻게 믿을 수 있는가? Trudy는 Bob의 이름으로 피자를 주문: Trudy는 자신의 개인키로 주문서를 서명한다. Trudy는 피자 가게에 주문서를 전달한다. Trudy는 피자 가게에 자신의 공개키를 주면서 Bob의 공개키라고 알려준다. 피자 가게는 서명을 증명하고 피자는 Bob이 주문한 것으로 믿는다.
인증 기관(Certification Authoritie) E (person, router)는 CA에 자신의 공개키를 등록한다. E는 CA에 자신을 증명한다. CA는 E와 E의 공개키를 결합하는 인증서를 만든다. 인증서는 CA의 개인키로 암호화한다. 만약 CA를 신뢰할 수 있다면 E의 공개키를 믿을 수 있다. digital signature (encrypt) K B + Bob’s public key K B + CA private key certificate for Bob’s public key, signed by CA - Bob’s identifying information K CA
인증 기관 Alice가 Bob의 공개키를 원하다면: Bob의 인증서를 구한다. Bob의 인증서에 CA의 공개키로 복호화하여 Bob의 공개키를 구한다. K B + digital signature (decrypt) Bob’s public key K B + CA public key + K CA
인증서 표준: X.509 (RFC 2459) 인증서는 다음을 포함한다. 공개키 구조(PKI) 발행자 이름 개체 이름, 주소, 도메인 이름 등. 개체의 공개키 전자 서명 (발행자의 개인키로 서명) 공개키 구조(PKI) 인증서와 인증 기관의 구조를 보여 준다.
X.509 인증서 예(1) 다음 그림은 www.freesoft.org의 공개키를 인증하는 인증서이다. 인증 기관은 Thwate Thwate는 인증서를 인증하기 위해서 인증서의 마지막 부분에 자신의 개인키로 sign을 하였다(signature). 이 인증서를 받는 사람은 Thwate의 공개키로 인증서의 마지막 부분의 signature를 확인할 수 있다.
X.509 인증서 예(2) 그러면, 사용자는 Thwate의 공개키를 어떻게 알 수 있는가?
X.509 인증서 예(3) 그러면 이 인증서를 받은 사용자는 Thwate가 신뢰할 수 있는 인증 기관인지 어떻게 확신할 수 있는가? 신뢰할 수 있는 기관의 Root certificate는 브라우저에 사전에 설치되어 있다. 이러한 인증 기관들은 브라우저에 사전에 설치될 수 있는 특권을 사게 된다.