🟧 안전한 통신 - 기밀성편
안전한 통신을 하기위해서는 다음과 같은 사항을 고려해야 한다.
기밀성
- 송신자와 지정된 수신자만이 전송되는 메시지 내용을 이해할 수 있어야 한다.
- 즉, 도청자가 메시지를 가로채도 해석할 수 없도록 암호화해야 한다.
🟧 침입자 시나리오
송신자와 수신자는 제어 메시지(제어 세그먼트)와 데이터 메시지(데이터 세그먼트)를 교환한다.
이때 침입자는 다음과 같은 일을 할 수 있다.
- 채널상의 제어 메시지 및 데이터 메시지를 기록
- 메시지, 메시지 내용을 조작, 삽입, 삭제
침입자의 일을 좀 더 쉽게 풀어 얘기해보면 다음과 같다.
- 패스워드와 데이터를 훔친다.
- 다른 사람인 것처럼 위장하여 통신 연결을 가로챈다.
- 시스템 자원에 부하를 일으켜서 사용자의 서비스를 거부하게 만든다.
이러한 문제를 해결하기 위해서는 침입자가 메시지를 가로채도 해석하지 못하게 암호화하면 된다.

🟧 암호화
원래 형태의 메시지를 평문(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 |