🟧 안전한 통신 - 기밀성편
안전한 통신을 하기위해서는 다음과 같은 사항을 고려해야 한다.
기밀성
- 송신자와 지정된 수신자만이 전송되는 메시지 내용을 이해할 수 있어야 한다.
- 즉, 도청자가 메시지를 가로채도 해석할 수 없도록 암호화해야 한다.
🟧 침입자 시나리오
송신자와 수신자는 제어 메시지(제어 세그먼트)
와 데이터 메시지(데이터 세그먼트)
를 교환한다.
이때 침입자는 다음과 같은 일을 할 수 있다.
- 채널상의 제어 메시지 및 데이터 메시지를 기록
- 메시지, 메시지 내용을 조작, 삽입, 삭제
침입자의 일을 좀 더 쉽게 풀어 얘기해보면 다음과 같다.
- 패스워드와 데이터를 훔친다.
- 다른 사람인 것처럼 위장하여 통신 연결을 가로챈다.
- 시스템 자원에 부하를 일으켜서 사용자의 서비스를 거부하게 만든다.
이러한 문제를 해결하기 위해서는 침입자가 메시지를 가로채도 해석하지 못하게 암호화
하면 된다.
🟧 암호화
원래 형태의 메시지를 평문(plaintext)
또는 원문(cleartext)
라고 한다.
암호화 알고리즘
을 사용해서 암호화된 메시지인 암호문(ciphertext)
을 만들자.
- 암호문(ciphertext)
- 암호화된 메시지는 다른 침입자가 해석할 수 없다.
KEY_A🔑와 평문(plaintext)를 암호화 알고리즘에 넣어 암호문(ciphertext)을 만든다.
키A와 평문
을암호화 알고리즘
의 입력값으로 사용한다.
KEY_B🔑와 암호문(ciphertext)를 복호 알고리즘에 넣어 평문(plaintext)으로 만든다.
키B와 암호문
을복호화 알고리즘
의 입력값으로 사용한다.
🟧 대칭키 암호화
- 송신자와 수신자가 같은 키(🔑)를 가지고 암호화, 복호화한다.
블록 암호화 (block ciphers)
- 블록 암호화에서는 메시지가 k비트의 블록 단위로 암호화 된다.
- 3비트 블록 암호화
40320(2^3!)
가지의 테이블이 나올 수 있다.- 40320번의 시도는 컴퓨터는 금방할 수 있다.
- 만약 3비트가 아닌 64비트일 경우
(2^64)!
로 천문학적인 규모가 된다. - 이러한 규모 때문에 64비트의 경우 완전 테이블 기반 블록 암호화가 힘들다.
- 이런 경우를 위해 입출력 블록의 순열 테이블을 임의로 모방 생성하는 함수를 이용한다.
- 블록 암호화 방법
- DES (Data Encryption Standard)
- 3DES
- AES (Advanced Encryption Standard)
암호 블록 체이닝 (CBC, Cipher Block Chaining)
- 두 개 이상의 평문 블록이 동일할 경우 복호화할 가능성이 있다.
- 동일한 평문 블록에 대해서 블록 암호화 기법은 같은 암호문을 생성해 낸다.
침입자가 동일한 암호문 블록을 발견했을 때 원문을 추측 해낼 수 있는 가능성이 존재
한다.- 동일 암호문 블록의 발견에다 하위 프로토콜 구조에 대한 지식까지 활용하면 전체 메시지를 복호해낼 수 있다.
문제 해결
- 평문 블록이 동일하더라도 다른 암호문 블록이 생성될 수 있도록 한다.
- 기존 암호화 기술에
임의성(randomness)
을 추가한다.
데이터 전송량 문제 발생
- 랜덤비트로 논리합(exclusive-or)을 수행하지 않았을 때와 비교해서 데이터 전송량이 2배로 증가했다
데이터 전송량 문제 해결
- 암호 블록 체이닝
- 첫 평문만 랜덤비트를 사용한다.
- 첫 번째 평문만 랜덤비트로 논리합을 수행하여 암호화한다.
- 두 번째 평문은 랜덤비트 대신 첫 번째 암호문으로 논리합을 수행하여 암호화한다.
- 첫 평문만 랜덤비트를 사용한다.
암호 블록 체이닝
- 이제 데이터 전송량은 2배가 아니라 거의 동일하다고 할 수 있다.
🟧 공개키 암호화
- 암호화와 복호화를 위한
공통의 비밀 대칭키
를 공유한다.
공개키 암호화 시스템 (public key cryptography system)
- Diffie-Hellman Key Exchange을 발전시킨게
공개키 암호화 시스템
이다.
- 공개키 (public key)
- 모든 사람에게 알려진 키
- 개인키 (private key)
- 한 사람만 아는 키
송신자가 공개키로 평문을 암호화하여 송신한다.
수신자는 암호문을 수신받아 공개키와 개인키로 복호화하여 평문을 읽을 수 있다.
공개키 문제점
- 침입자가 개인 복호키를 알게 되면 문제가 된다.
공개키🔑(public key)
만으로암호문(ciphertext)
을평문(plaintext)
으로 복호화할 수 없다.- 하지만 침입자가
개인키🔑(private key)
를 알고 있다면 당연히평문
으로 복호화할 수 있다.
- 침입자는
공개키🔑
를 이용해서 사용자를 사칭하여 송신할 수 있다.- 송신자의 신분을 정확하게 하기 위해
전자 서명
이 필요하다.
- 송신자의 신분을 정확하게 하기 위해
- 대칭키보다 속도가 느리고 비효율적이다.
RSA 알고리즘
RSA 알고리즘은 공개키 암호화와 거의 동의어처럼 취급
된다.- 대칭키 + 공개키
modulo-n 연산
x mod n
19 mod 5 = 4예시)
[(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 = a^d mod n
RSA의 관련된 두 가지 요소
- 공개키와 개인키
- 암호화/복호화 알고리즘
🟧 세션키
RSA 암호화
- RSA에 필요한 지수 연산은 시간이 많이 필요한 작업이다.
- RSA로 암호화되어 생성되는 숫자는 너무 길다. (데이터 비용 증가)
블록 암호화
- DES, AES (대칭키 암호화)
- DES는 소프트웨어로 구현되었을 때 RSA보다 최소한 100배 빠르다.
- DES는 하드웨어로 구현되었을 때 RSA보다 1000 ~ 10000배 빠르다.
따라서 RSA는 종종 대칭키 암호화와 함께 사용된다.
시나리오 :
1. 송신자는 수신자에게 안전하게 세션키🔑
를 송신한다.
수신자는 RSA
를 이용해서 공개키🔑
, 개인키🔑
를 생성한다.
송신자는 대칭키 암호화AES
를 이용해서 세션키🔑
를 생성한다.
송신자는 세션키🔑
를 수신자의 공개키🔑
로 암호화하여 송신한다.
수신자는 암호화된 세션키🔑
를 받아서 개인키🔑
로 복호화한다.
수신자는 이제 세션키🔑
를 알고있다.
2. 송신자는 세션키🔑
로 평문(plaintext)
을 암호화해서 송신한다.
송신자는 평문
을 세션키🔑
로 암호화한다.
수신자는 암호화된 평문
을 가지고 있는 세션키🔑
로 복호화한다.
수신자는 정상적으로 평문
을 읽을 수 있다!
'🌐 네트워크' 카테고리의 다른 글
[네트워크] 애플리케이션 계층 - DNS 서버의 동작 원리 (0) | 2023.06.16 |
---|---|
[네트워크] 애플리케이션 계층 - HTTP, Cookie, Web Cache (0) | 2023.06.14 |
[네트워크] 애플리케이션 계층 - 네트워크 애플리케이션의 원리 (0) | 2023.06.13 |
[네트워크] 메시지 무결성과 전자서명 (0) | 2023.05.28 |
[네트워크 - HTTP] PUT과 PATCH의 차이는 뭘까 (2) | 2023.04.27 |