Goomba

[암호 기술] 암호 기술에 대한 이해

  • crypto

암호화 기술에 대해 간략하게 정리합니다.

1. 정보 위협 요소와 보호 서비스

정보를 위협하는 요소는 크게 4 가지로 나눌 수 있습니다.

  1. 도청 : 제 3 자의 도청 위협
  2. 위장 : 제 3 자가 대상으로 위장하여 개입
  3. 변조 : 제 3 자에 의한 데이터 손실 및 변경 위험
  4. 부인 : 데이터 송수신 내역에 대한 부인

이러한 위협 요소에 대응하는 보안 서비스 또한 4가지로 볼 수 있습니다.

  1. 도청 ⇒ 기밀성 (Confidentiality)

    • 정보가 의도하지 않게 노출되지 않도록 보장하는 서비스
  2. 위장 ⇒ 인증 (Authentication)

    • 상대방의 신원을 확인/보증할 수 있도록 하는 서비스 (발신 인증, 개체 인증)
  3. 변조 ⇒ 무결성 (Integrity)

    • 의도적인 공격에 의한 데이터 위조 및 변조를 탐지할 수 있도록 하는 서비스
  4. 부인 ⇒ 부인 방지 (Non-Repudiation)

    • 서명 등을 통해 송수신자가 데이터에 대해 부인할 수 없도록 보장하는 서비스

2. 암호학이란?

간단하게 평문(Plain Text)을 암호 알고리즘을 통해 암호문(Cipher Text)으로 암호화 하고,
다시 암호문을 평문으로 복호화 하는 개념입니다.

이 때 알고리즘을 사용할 때 필요한 비밀 정보를 키(Key)라고 합니다.

이러한 개념을 토대로 암호 기술은 기밀성, 무결성, 인증, 부인 방지 서비스 전체를 설계하는 기술까지 포함합니다.

3. 암호 기술

암호 기술은 크게 5 가지로 나눌 수 있습니다.

  1. 대칭 키 암호화 (기밀성, 무결성 인증)
  2. 공개 키 암호화 (기밀성)
  3. 해시 암호화 (무결성)
  4. 메세지 인증 코드 (무결성, 인증)
  5. 전자 서명 (무결성, 인증, 부인 방지)

3-1. 대칭 키 암호

Symmetric-Key Cipher

암복호화에 동일한 비밀 키를 사용하는 방식입니다.
속도가 빠르고 구현이 간단하여 대량 데이터를 암호화 하는데에 사용된다고 합니다.

  • 암복호화에 사용되는 키가 동일하기 때문에 키의 보안성이 중요한 비중을 차지합니다.

대칭 키 암호화에는 크게 2 가지가 있습니다.

  1. 스트림 암호화

  2. 블록 암호화

3-1-1, 스트림 암호화

Stream Cipher

평문의 크기와 같은 키 스트림을 생성하고
평문의 각 "바이트"마다 XOR 연산으로 암복호화를 수행합니다.

블록 암호화에 비해 속도가 빠르다고 하며 주요 알고리즘은 아래와 같습니다.

  • ChaCha20
  • Salsa20

3-1-2. 블록 암호화

Block Cipher

평문을 일정 비트 단위(블록)으로 나누어 암복호화를 수행합니다.

주요 알고리즘은 아래와 같습니다.

  • AES
  • ARIA
  • SEED
  • LEA

3-2. 블록 암호 운영 모드

블록 암호화는 그대로 사용하는 것이 아닌 특정 "운영 모드"와 함께 사용합니다.

분류모드특징
기밀성 모드ECB, CBC, CFB, OFB, CTR암호화 중심
무결성/인증 모드CMAC(CBC-MAC), GMAC(Galois-MAC)MAC 생성
AEAD(기밀성+무결성+인증)CCM(Counter with CBC-MAC),
GCM(Galois/Counter Mode)
인증 TAG 포함

3-2-1. 기밀성 모드

모드장점단점
ECB구현이 간단하고 빠르다
암복호화 시 병렬 처리가 가능하다
오류 확산이 발생하지 않는다.
동일한 평문은 동일한 암호문을 생성한다
패딩이 필요하다
CBC동일한 평문이 같은 암호문을 생성하지 않는다
복호화 시 병렬 처리가 가능하다
암호화 시 병렬 처리가 불가능하다
비트 단위의 에러 발생 시 현재 블럭과 다음 블럭에서 에러가 발생한다
패딩이 필요하다
CFB동일한 평문이 같은 암호문을 생성하지 않는다
패딩이 불필요 하다
복호화 시 병렬 처리가 가능하다
암호화 시 병렬 처리가 불가능하다
비트 단위의 에러 발생 시 현재 블럭과 다음 블럭에서 에러가 발생한다
OFB동일한 평문이 같은 암호문을 생성하지 않는다
패딩이 불필요 하다
오류가 확산되지 않는다
병렬 처리가 불가능하다
CTR동일한 평문이 같은 암호문이 되지 않는다
패딩이 불필요하다
암복호화 시 병렬 처리가 가능하다
오류가 확산되지 않는다
위의 모드들의 단점을 모두 개선한 형태이다

3-2-2. AEAD 모드

AEAD는 암호문 + 인증Tag로 구성되어 변조 여부까지 검출이 가능하다고 합니다.

모드구성특징
CCMCTR + CBC-MACIoT / 임베디드에서 사용
GCMCTR + GHASH매우 빠른 인증, 병렬성

3-3. 해시

Hash

임의의 데이터를 고정된 길이의 데이터로 출력하는 "단방향" 암호화입니다. (역연산 X)

충돌을 발견하기 어렵도록 암호학적으로 안전하게 설계되었고,
데이터의 무결성을 보장하는 기능을 합니다.

주요 알고리즘

  • MD5, SHA1 - 취약, 사용 금지
  • SHA-2
  • SHA-3

해시는 다양하게 활용할 수 있습니다.

  • 데이터 무결성 검사
  • 난수 생성기 (HASH-DRBG)
  • 키 유도 (KDF)

3-4. 메세지 인증 코드 (MAC)

Message Authentication Code

해시와 동일하게 고정된 길이의 데이터로 출력할 수 있는 "단방향" 암호화입니다.
추가적으로 키(Key)를 필요로 합니다.

데이터의 무결성 및 출처 인증을 보장하며,
복호화가 불가능하므로 평문을 암호화한 암호문과 기존의 암호문을 비교하는 방식으로 검증합니다. (Conpute/Compare)

주요 알고리즘

  • 해시 기반 : HMAC (평문 해시 후 MAC)
  • 블록 암호화 기반 : CMAC, GMAC

3-5. 패스워드 기반 키 유도

대표적으로 PBKDF2(Password-Based Key Derivation Function)이 있습니다.

사용자의 패스워드, 난수, 반복 횟수, 키 길이를 입력으로 비밀 키를 생성합니다.

  • 난수(Salt)는 비밀번호를 암호화 하기 위한 키 값으로, 사전 공격을 막는데에 사용됩니다.
  • 반복 횟수는 내부 의사난수함수(PRF, Pseudo-Random Funtion)의 호출 횟수로, 전수 조사 공격을 막는데에 사용됩니다.
  • PBKDF2는 느리게 동작하도록 설계되어 브루트포스/사전 공격을 어렵게 만든다고 합니다.

3-6. 공개 키 암호화

Public-Key Cipher

암호화 키와 복호화 키가 동일하지 않은 암호화 기술입니다.
수신자의 공개 키를 통해 평문을 암호화 하고, 수신자의 개인 키를 통해 암호문을 복호화 합니다.

공개 키로부터 개인 키의 유도가 어렵도록 키 쌍 생성 시 수학적인 문제를 이용하여 설계되었습니다.
대칭 키 암호화에 비해 연산 속도가 느린 단점이 있지만, 온라인 상에서의 키 분배 문제를 해결합니다.

  • 소인수분해 문제 (FP, Factoring Problem)
  • 이산대수 문제 (DLP, Discreate Logarithm Problem)
  • 타원곡선 이산대수 문제 (ECDLP, Elliptic Curve Discreate Logarithm Problem)

주요 알고리즘

  • RSA (소인수분해)
  • ElGamal (이산대수)
  • EC-ElGamal / ECIES (타원곡선 이산대수)

3-7. 하이브리드 암호화

대칭 키 + 공개 키 암호화를 결합하여 각각의 단점을 보완한 암호화 방식입니다.
의사난수 생성기, 대칭 키, 공개 키로 구성됩니다.

  1. 암호화

    • 의사난수 생성기(PRNG)로 대칭 키(세션 키)를 생성합니다.
    • 평문을 대칭 키로 암호화 합니다.
    • 수신자의 공개 키로 대칭 키를 암호화 합니다.
    • 암호화된 공개 키와 암호문을 결합합니다.
  2. 복호화

    • 암호문과 암호화된 대칭 키를 분할합니다.
    • 암호화된 대칭 키를 수신자의 개인 키로 복호화 합니다.
    • 복호화된 대칭 키로 암호문을 복호화 합니다.

대칭 키 암호화의 속도는 평문의 암호화 속도를 높이고
공개 키 암호화가 가진 키 관리의 편의성은 서로 직접적인 신뢰 관계가 없는 두 주체가 안전하게 통신할 수 있도록 합니다.
(현재 대부분의 인터넷 보안(TLS 등)은 이 방식이라고 합니다.)

3-8. 전자 서명

Digital Signature

공개 키 암호화와 반대로 개인 키를 통해 암호화 하고, 공개 키를 통해 복호화 합니다.
서명 값과 평문을 함께 보내고, 서명 값을 복호화 한 평문과 받은 평문을 비교하여 검증합니다. (Sign/Verify)

이러한 전자 서명은 메세지 크기가 클수록 연산 속도가 느려지고 서명 데이터의 크기가 커진다는 단점이 있습니다.

  • 공개 키는 여러 개가 될 수 있습니다.
  • 복호화를 통해 서명 값을 확인하는 것이 목적이므로 공개 키 암호화와 반대된다.
  • 공개 키는 반대로 암호화가 목적입니다.

3-8-1. 개선된 전자 서명

기존 전자 서명의 방식을 개선하기 위해 메세지에 해시를 적용합니다.
기존 전자 서명은 밀접한 평문 2 개를 서명하면 밀접한 서명 값 2 개가 나오게 되는데,
해시로 평문을 처리하면 밀접하다고 해도 해시 값은 전혀 다른 값이 나오기 때문에 기존 문제를 해결할 수 있습니다.
또한 해시를 적용하면 크기가 고정된 데이터가 출력되기 때문에 속도가 느린 단점을 보완할 수 있습니다.

주요 알고리즘

  • RSA
  • DSA
  • ECDSA

3-9. 디피-헬만 키 교환

Diffie-Hellman Key Exchange

상대의 공개 키와 나의 개인 키를 활용한 비밀 키 생성이 핵심인 기술입니다.
따라서 직접 키를 교환하지 않고도 동일한 비밀 키를 생성할 수 있습니다.

주요 알고리즘

  • DH (정수 기반)
  • ECDH (타원곡선 기반)

타원곡선 기반이 더 효율적이고 짧은 키로 높은 보안성을 제공한다고 합니다.