공부하는 스누피

[보안] 대칭키, 비대칭키 암호화 본문

CS/네트워크

[보안] 대칭키, 비대칭키 암호화

커피맛스누피 2020. 11. 5. 11:31

대칭키 암호화 (Symmetric Encryption)

대칭키 암호화에서는 키와 알고리즘을 하나씩만 사용해 암호화, 복호화를 수행한다.

해독이 어려운, 견고한 알고리즘이 필요하고, 누군가가 알고리즘을 알아도 키를 찾을 수 없게 해야 한다.

대칭키를 대상으로 한 공격에는 알고리즘을 파악 후 공격하는 방법이 있고, brute force로 모든 가능한 경우를 시도해보면서 공격하는 방법이 있다. 대표적인 암호로 카이사르 암호(caesar cipher)가 있는데, 평문의 각 철자를 알파벳 순서로 k번째 오는 철자로 대치해 암호화한다. 

블록 암호화 (Block Encryption)

블록 암호화에서는 메시지가 k비트의 블록 단위로 암호화된다. 암호화 키는 재사용되는데, 블록마다 같은 암호화 키를 사용하기 때문이다.

 

DES (Data Encryption Standard)

- 56비트의 키를 64비트 블록과 함께 사용한다.

- 키 사이즈가 작다는 단점이 있다.

 

3DES

- DES에서 키 사이즈를 늘린 버전이다.

- 세 개의 서로 다른 키를 사용한다.

- DES에 비해 암호화에 시간이 오래 걸린다.

- 속도 문제 때문에 구현이 어렵다.

 

AES (Advanced Encryption Standard)

- 128bit 블록을 사용하고, 128/192/256bit 키를 사용한다.

- 블록 사이즈가 커지고, 키 사이즈 역시 커졌다.

 

CBC (Cipher Block Chaining)

- 첫 번째 메시지와 함께 임의의 수를 단 한번만 전송하고 이후의 임의의 수로는 직전에 계산된 암호문 블록을 대신 사용하는 기법이다.

- plain text 블록이 동일하더라도 다른 암호문 블록이 생성될 수 있게 하기 위해서 암호문에 임의의 수를 추가한다.

- CBC는 직전 암호문을 활용하기 때문에 매번 임의의 수를 넣지 않아도 된다.

 

스트림 암호화 (Stream encryption)

스트림 암호화는 바이트를 랜덤으로 생성해서 키를 만든다. 그래서 키에 대한 예측이 불가능하다는 장점이 있다.

 

PGP (Pretty Good Privacy)

- 전자우편 암호화 기법이다.

- 대칭키 암호화(3DES, IDEA...)와 공개키 암호화(RSA)를 사용한다.

 

SSL (Secure Sockets Layer)

- 보안이 향상된 버전의 TCP이다.

- Almost-SSL: SSL의 단순화된 버전

<동작과정>

1) 핸드셰이크 단계에서 TCP 연결 설립 (SYN - SYNACK - ACK)

2) SSL 메시지와 인증서로 상대방이 맞는지 확인

3) SSL 세션에 필요한 모든 대칭키들을 생성하기 위해 master secret key(MS)를 공개키로 암호화하여 전송. 

개인키로 EMS(encrypted master secret key)를 복호화해서 둘다 MS를 갖게 됨.

 

- MS를 사용하여 4개의 키를 생성한다. (세션 암호화 키 2개, 세션 MAC 키 2개) => MAC 키는 메시지 무결성 체크용

- 데이터 스트림을 레코드로 쪼개고 각 레코드에 무결성 검사를 위한 MAC을 덧붙인 후 암호화함.

- 암호화하기 위해 세션 암호화 키를 사용함.

 

<SSL 동작과정>

1) 사용자가 SSL이 가능한 서비스에 연결한다.

2) 사용자 어플리케이션이 서버의 공개키를 요구하고, 사용자측의 공개키와 교환한다. 교환된 공개키는 두 호스트간의 메시지를 암호화하는 것에만 쓰인다.

3) 사용자가 서버로 메시지를 보낼 때, 어플리케이션은 서버의 공개키를 사용해 메시지를 암호화한다. (비대칭키)

4) 서버는 사용자의 메시지를 받고 개인키로 복호화한다. 서버에서 보내는 메시지는 2)에서 교환한 사용자측의 공개키로 암호화된다. (대칭키)

 

- SSL 버전 3의 개선된 버전을 TLS (Transport Layer Security)라고 부른다.

 

IPSec

- IP 보안 프로토콜(IPSec)은 IP 데이터그램을 보호해 네트워크 계층의 보안을 제공한다.

- VPN(virtual private network)을 구축하기 위해 많이 사용한다.

- VPN은 사설망을 직접 설치하는 대신 공공 인터넷 상에 구축하는 사설망이다.

=> 본부 내의 컴퓨터가 통신할 때는 기존 IPv4망을 사용하지만, (IPSec X)

=> 공공 인터넷을 통과하는 경로를 이용해서 통신을 할 때는 IPv4 데이터그램을 IPsec 데이터그램으로 바꾼 후 전송한다.

- IPsec 개체가 보안 데이터그램을 보낼 때 AH 프로토콜이나 ESP 프로토콜을 사용하는데 기밀성을 제공하는 ESP가 더 많이 쓰인다.

- 송신자와 수신자 사이의 네트워크 계층에서 논리적 연결인 SA(security association)을 설립한다.

- SA에는 상태 정보가 있어서 IPsec 데이터그램을 생성할 때마다 인증/암호화 방법을 결정할 수 있게 한다.

- 라우터나 스위치는 모든 IPsec 개체에 대한 정보를 OS 커널에 있는 SAD(Security Association Database)에 저장한다.

- 공격자가 원래의 데이터그램을 볼 수 없고, 무결성 검사로 데이터 조작도 불가능하게 한다.

비대칭키 암호화(Asymmetric Encryption)

공개키 암호화

공개키 암호화에서는 키를 두개 사용하는데, 공개키(public key)개인키(private key)라고 한다. 

공개키는 모든 사람에게 알려져 있는 키이고, 개인키는 수신자만 가지고 있는 키이다.

송신자가 공개키로 메시지를 암호화하고 보내면, 수신자는 암호화된 메시지를 받아 자신의 개인키와 복호 알고리즘으로 메시지를 복호화한다. 개인키는 암호화된 데이터를 복호화할 수 있는 유일한 키이기 때문이다.

 

RSA

다른 공개키 암호화 알고리즘이 있지만, RSA가 가장 널리 쓰여 공개키 암호화와 동의어처럼 쓰이고 있다고 한다.

RSA 알고리즘은 두 가지 요소로 구성된다.

1) 키 생성

공개키는 정수 n과 e로 구성되고, 개인키는 정수 d와 n으로 구성된다. 이때 n은 공개키의 n과 동일하다.

정수 n은 두 소수 p와 q의 곱이다. p와 q의 값이 커질수록 RSA를 깨는 것이 어려워지지만, 암호화와 복호화를 수행하는 데에도 더 많은 시간이 걸린다. 1024비트 수준이 추천된다. 

 

이 단계에서 오일러 피 함수(Euler totient function)을 사용해 z를 계산한다. 

+ 오일러 피 함수(Euler totient function)

z = (p-1)(q-1)

1을 제외하고 z와 서로소인 n보다 작은 수를 e로 정한다. e는 encryption에 이용된다.

 

e*d-1이 z로 정확히 나누어 떨어지는 값을 숫자 d로 한다. d는 decryption에 이용된다.

 

위와 같은 연산으로 공개키 (n, e), 개인키 (n, d)를 만들 수 있다.

 

2) 암호화/복호화

암호화와 복호화는 위 식을 따른다. c를 암호문이라고 하고, m을 평문이라고 하자.

암호화: c = m^e mod n

복호화: m = c^d mod n

 

Diffie-Hellman

- 임의 길이의 메시지를 암호화할 수 없다는 점에서 RSA와 다르다.

- 대칭 세션키를 생성하는 데 사용될 수 있다.

 

 

전자 서명 (Digital signatures)

전자서명은 문서의 소유자/작성자/동의자를 명시하는 데 사용되는 암호화 기법이다.

DSA와 RSA를 사용하는데, 인증기관(CA, Certification Authority)에서 공개키가 실제로 제공자의 것인지 확인시켜준다.

https://www.digitalsignaturemart.com/have-digital-verification-through-digital-signature-certificate/

 

 

(참고) 

James F. Kurose. Computer networking a top-down approach. 7th edition

blog.stackpath.com/ssl/

Comments