ECDHE 알고리즘 - ECDHE algolijeum

SSL/TLS 에 대해서 연구하시는 분들은 친숙하게 보셨을 부분이 바로 Cipher Suites 입니다. 이 Cipher Suite 는 TLS 핸드쉐이크를 통해서 클라이언트/서버간 최종 협의하게 되는데, 여기에는 어떤프로토콜을 사용할 지, 어떻게 암호화 하여 통신 할 지 에 대한 여러가지 정보가 포함되게 됩니다.

이번 포스팅에서는 Cipher Suites 에 포함되어 있는 이 정보들이 어떤 의미를 나타내는지 확인해 보도록 하겠습니다.

 

암호화 스위트 (Cipher Suite) 의 구조

암호화 스위트 (Cipher Suite) 는 일반적으로 다음과 같은 구조를 가지고 있습니다. 

ECDHE 알고리즘 - ECDHE algolijeum

프로토콜 (Protocol)

SSLv3, TLSv1, TLSv1.1, TLSv1.2 와 같이 암호화 통신에 사용할 프로토콜을 명시하는 부분 입니다. 일반적으로 SSLv3는 취약점으로 인하여 브라우저에서 지원을 중단하고 있는 추세 입니다.

키교환 (Key Exchange)

WITH 앞쪽 부분이 보통 키교환과 인증 (전자서명을 통한 인증서 검증) 을 담당하는 부분입니다. 키 교환 알고리즘은 RSA, DH, DHE, ECDH, ECDHE 을 제공하게 됩니다. 

  • RSA : 비대칭키를 이용한 키교환 방식
  • DH : 디피 헬만 (Diffie Hellman) 방식
  • DHE : Ephermeral 을 지원하는 디피 헬만 (Diffie Hellman) 방식 (PFS, Perfect Foward Secrecy  지원)
  • ECDH : Elliptic Curve Diffie Hellman, Propose Cheme 방식
  • ECDHE : Elliptic Curve 및 Ephermeral 을 지원하는 디피 헬만 (Diffie Hellman) 방식 (PFS, Perfect Foward Secrecy  지원)

 

인증 (Authentication)

키를 교환할 상대방이 교부한 인증서가 정말 내가 접속하고자 하는 상대방이 맞는지 상위 인증기관 (CA)를 통하여 확인하게 되는데, 이 때 사용되는 알고리즘을 의미합니다. 보통 RSA, DSS, ECDSA, ANON 등이 있습니다. 인증서를 만들때 인증서 서명 요청 (CSR)을 작성하여 상위 인증기관 (CA)에 요청하게 되는데, 이 때 선택한 알고리즘이 선택되게 됩니다. 

만약 인증서 생성시 사용한 CSR에 RSA알고리즘을 넣어서 제출했다면 Cipher Suite는 다음과 같이 선택 될 수 있습니다. 

  • RSA : 키교환 및 인증을 모두 RSA 알고리즘을 이용
  • DH-RSA : 키교환은 디피 헬만 (Diffie Hellman), 인증은 RSA
  • ECDHE-RSA : 키교환은 ECDHE, 인증은 RSA

위의 예시와 같이 키교환과 인증을 모두 RSA를 사용하게 될 때는 키교환과 인증을 RSA 하나로 생략하여 표현하게 됩니다.

 

암호화 (Encryption)

실제 데이터를 암호화 하는 부분은 WITH 뒷쪽에 표현된 Cipher Suite 값을 이용하여 처리 합니다. 공개키 알고리즘을 이용하여 대칭키를 만들어 공유한 이후 실데이터 암호화를 진행하게 되는데 이 때 사용되는 알고리즘이 3DES, AES, AES128 같은 것들입니다. 

 

블록 암호 운용 방식 (Block Cipher Operation Mode)

실데이터를 AES128 과 같은 것으로 암호화 할 때 실데이터를 일률적으로 암호화 하는 것이 아니라 블록 단위로 쪼개서 암호화 하게 됩니다. 이 때 암호화 된 암호문을 가지고 실데이터를 추측하는 것을 방지하기 위하여 특정한 블록 암호 운용방식을 선택하게 되는데 이것이 블록 암호 운용 방식 입니다. 

  • CBC : Chipher Block Chaining, 암호 블록 체인 모드, CTR과 CBC-MAC을 조합하여 계산, 느림
  • GCM : Galois/Counter Mode, 갈르와 카운터 모드, CTR과 GHASH를 조합하여 계산, 빠름

 

메시지 인증 (Message Authentication)

블록 단위로 암호화 된 메시지들이 상대방이 암호화 한 것이 맞는지 확인하기 위하여 무결성을 검증하게 되는데, 이 때 사용되는 것이 메시지 인증 (Message Authentication) 부분입니다. 이를 보통 MAC (Message Authentication Code) 라고 하는데, 여기에 해쉬 알고리즘 (SHA, SHA256, SHA384, MD5 등) 을 이용하기 때문에 HMAC이라고 부르게 됩니다. 

  • 송신자/수신자는 HMAC에 사용할 대칭키를 알고 있습니다
  • 송신자는 암호화 메시지와 대칭키를 결합한 후, SHA등의 해쉬 알고리즘을 이용하여 MAC 을 추출하여 이것을 메시지와 함께 보냅니다. 
  • 수신자도 암호화 메시지와 대칭키를 결합한 후, SHA등의 해쉬 알고리즘을 이용하여 MAC을 추출합니다. 그 다음 송신자가 보낸 MAC과 수신자가 스스로 계산한 MAC을 비교하여 동일하면 암호화 메시지의 무결성에 문제가 없다고 판단합니다.

ECDHE 알고리즘 - ECDHE algolijeum

 

이렇게 6가지 항목을 이용하여 SSL/TLS 암호화 통신에 사용할 여러가지 알고리즘을 선택하게 되며, 이러한 협의 및 선택된 알고리즘의 집합을 Cipher Suite 라고 합니다. 이러한 Cipher Suite는 보안이슈나 취약점에 따라 권고되는 값들이 있으며 보안성이 우수한 Cipher Suite 를 이용하여 암호화 통신을 진행하면 되겠습니다 🙂

Elliptic curve Diffie-Hellman (ECDH) is an anonymous key agreement protocol that allows two parties, each having an elliptic curve public-private key pair, to establish a shared secret over an insecure channel. This shared secret may be directly used as a key, or to derive another key which can then be used to encrypt subsequent communications using a symmetric key cipher. It is a variant of the Diffie-Hellman protocol using elliptic curve cryptography.

Alternative protocols include the Fully Hashed MQV (FHMQV), an authenticated protocol for key agreement based on the Diffie-Hellman scheme. SSL supports forward secrecy using two algorithms, the standard Diffie-Hellman (DHE) and the adapted version for use with Elliptic Curve cryptography. ECDHE and DHE are the cornerstones of conventional SSL secure web connection protocols. DHE is significantly slower. ECDHE is supported by all major modern browsers.

ECDHE 알고리즘 - ECDHE algolijeum

ECDHE 알고리즘 - ECDHE algolijeum

ECDHE 알고리즘 - ECDHE algolijeum

ECDHE 알고리즘 - ECDHE algolijeum

This article is licensed under the GNU Free Documentation License. It uses material from the Wikipedia article "Elliptic curve Diffie-Hellman".

암호화 스위트는 공개키 + 대칭키 + 해시 알고리즘의 집합으로써 SSL/TLS 옵션 패키지라고 보시면 됩니다.OpenSSL 문서를 참고하시면 버전별로 지원하는 암호화 스위트 리스트를 알 수 있습니다.

구성은 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 이런식으로 Handshake에 사용하는 WITH 앞부분(공개키)과 세션에 사용되는 WITH 뒷부분(대칭키)으로 구분되어 있습니다.

SSL/TLS 버전(Version)

[TLS]_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

SSLv3 : 최신 브라우저 지원 중단 추세
TLSv1 : TLS Version 1.0
TLSv1.1 : TLS Version 1.1
TLSv1.2 : TLS 최신 버전 (2015.04.19 기준)

공개키 알고리즘

TLS_[ECDHE_ECDSA]_WITH_AES_256_GCM_SHA384

WITH 이전에 오는 부분으로써 키 교환 방식과 인증 방식을 명시합니다.

크게 3가지 방식이 있는데, 소인수 분해 문제에 기반을 둔 RSA 알고리즘, 이산 대수 문제의 어려움을 이용한 DSA, 유한체(Finite field) 상의 타원곡선 점들간의 연산에서 정의되는 이산 대수 문제의 어려움을 이용하는 타원곡선 암호(Elliptic Curve Cryptography, ECC) 방식이 있습니다. ECC 방식은 RSA나 DSA보다 짧은 키를 사용하면서도 그와 비슷한 수준의 안전성을 제공한다는 장점을 가집니다.

* [1.] PFS란 handshake 단계에서 공개키로부터 대칭키를 도출하는 일이 끝나면 공개키를 파기하고, 필요할 때 다시 새로운 공개키를 만듬으로써 비밀키가 노출되더라도 기존의 메세지 내용을 해독할 수 없도록 합니다. Twitter에서도 NSA의 감청에 대응하기 위하여 도입

키 교환

TLS 1.2에서 RSA 키교환 방식은 PFS를 지원하지 않기 때문에 DHE 혹은 ECDHE를 선택하는 것이 좋으며 끝에 E는 Ephemeral(단명하는)의 약자로써, PFS(Perfect forward Secrecy)*[1.]를 제공합니다. 앞에 EC는 Elliptic Curve(타원 곡선)의 약자로써 기존 RSA나 DH에 비해 적은 bit로 비슷한 수준의 보안성을 제공합니다.

자세한 내용은 stackexchange/is-there-any-particular-reason-to-use-diffie-hellman-over-rsa-for-key-exchange 를 참고하시면 됩니다.

  1. RSA
  2. DH (Diffie-Hellman)
  3. DHE (Diffie-Hellman Ephemeral)
  4. ECDH (Elliptic Curve Diffie-Hellman)
  5. ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)

아래 그림에서 Diffie-Hellman은 DH, propose scheme는 ECDH

▲ 출처 : VANET에서 보안성 향상을 위한 키 분배에 관한 연구

▲ 출처 : VANET에서 보안성 향상을 위한 키 분배에 관한 연구

인증
  1. RSA (Ron Adi Adleman)
    • 소인수 분해 문제를 사용한 서명 방식
    • 연구자 3명의 앞글자를 따서 이름 붙여짐
  2. DSS (Digital Signature Standard)
    • 이산 대수 문제를 사용한 인증 방식
    • NSA에서 개발하고 NIST가 발표
  3. ECDSA (Elliptic Curve Digital Signature Standard)
  4. anon (Anonymous Signature)

▲ 출처 : SSL computational DoS mitigation

대칭키 알고리즘

TLS_ECDHE_ECDSA_WITH_[AES_256_GCM_SHA384]

WITH 이후에 오는 부분으로써 대칭키 알고리즘 + 블록 암호 운용 방식 + 해시 알고리즘이 명시됩니다. 대칭키 알고리즘은 실제 전송되는 메세지를 암호화 하는데 사용합니다.

  1. DES (Data Encryption Standard)
  2. 3DES (Triple Data Encryption Standard)
  3. AES (Advanced Encryption Standard)
  4. AES128 (Advanced Encryption Standard-128)
  5. AES256 (Advanced Encryption Standard-256)
블록 암호 운용 방식

블록 암호이란 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호화 시스템입니다. 암호화 하려는 정보가 블록 길이보다 길 경우 특정한 운용 모드를 사용하는데 이를 블록 암호 운용 방식이라고 합니다.

  1. CBC (Chipher Block Chaining)
    • 암호 블록 체인 모드
    • CTR*[2.]과 CBC-MAC을 조합하여 계산
    • 느림
  2. GCM (Galois/Counter Mode)
    • 갈르와/카운터 모드
    • CTR*[2.]과 GHASH를 조합하여 계산
    • 빠름

* [2.] CTR(Counter Mode) : 블록 암호 운영 모드 중의 하나로, 블록 단위로 증가하는 카운터(Counter)를 블록 암호 입력값으로 하여 얻어진 연속된 출력값을 평문과 XOR하여 암호화를 수행
참조 : How to choose an AES encryption mode (CBC ECB CTR OCB CFB)

해시 알고리즘

암호화 메세지의 무결성을 제공하는데 사용되는 알고리즘으로써, 이를 통해 HMAC(keyed-hash message authentication code)이 생성됩니다. 위쪽부터 빠르지만 덜 안전하고 아래쪽으로 갈수록 느리지만 좀 더 안전합니다.