[Cryptography] 암호학 기초 - 개념과 분류

5 분 소요


서종호(가시다)님의 On-Premise K8s Hands-on Study 자료를 기반으로 합니다. 학습 정리 목적으로 작성된 글로, 계속해서 수정될 수 있습니다.


암호화 기초

  • (1) 암호학 기초 - 개념과 분류
  • (2) 단방향 암호화 - 해시 함수
  • (3) 양방향 암호화 - 대칭키
  • (4) 양방향 암호화 - 비대칭키


개요

암호학(Cryptography)은 정보를 보호하기 위한 기술의 집합이다. 현대 IT 시스템에서 암호화는 데이터 보안의 핵심이며, HTTPS, SSH, 인증서, 블록체인 등 다양한 분야에서 활용된다. 이 글에서는 암호학의 기본 개념과 암호화 알고리즘의 분류 체계를 살펴본다.


정보 보안의 기초

정보 보안 3요소 (CIA Triad)

정보 보안의 목표는 크게 세 가지로 정의된다.

    1. 기밀성(Confidentiality): 인가된 사용자만 정보에 접근할 수 있어야 함
    1. 무결성(Integrity): 정보가 무단으로 변조되지 않아야 함
    1. 가용성(Availability): 필요할 때 정보에 접근할 수 있어야 함


암호화는 주로 기밀성과 무결성을 보장하기 위한 핵심 기술이다.


AAA (인증, 인가, 계정관리)

기밀성을 보장하기 위한 액세스 제어 체계로 AAA가 있다.

  • Authentication (인증): 사용자가 누구인지 확인 → Who are you?
  • Authorization (인가): 사용자가 무엇을 할 수 있는지 결정 → What can you do?
  • Accounting (계정관리): 사용자의 행동을 기록 및 추적


암호화의 기본 개념

암호화와 복호화

암호화(Encryption)와 복호화(Decryption)는 평문(Plaintext)과 암호문(Ciphertext) 사이의 변환 과정이다.

  • 암호화: 평문을 제3자가 해독할 수 없는 암호문으로 변환 → 송신
  • 복호화: 암호문으로부터 평문을 복원 → 수신


암호화/복호화 과정:

  1. 송신자: 평문(M)을 키와 함께 암호 알고리즘에 입력하여 암호문(C)으로 변환
  2. 전송: 암호문(C)을 전송 (전송 중 제3자(해커)가 가로챌 수 있음)
  3. 수신자: 암호문(C)을 키와 함께 복호 알고리즘에 입력하여 원래의 평문(M)으로 복원


암호 알고리즘과 키

암호화 과정은 다음과 같이 표현할 수 있다.

암호문 = 암호_알고리즘(평문, 키)

예시:

encrypted = AES(plaintext, key)
          = RSA(plaintext, publicKey)
  • 암호 알고리즘: 암호화/복호화를 수행하는 수학적 절차 및 방법
    • AES: 특정한 수학적 변환 과정
    • RSA: 큰 소수의 곱셈 기반 알고리즘
    • SHA-256: 해시 함수 알고리즘
  • 키(Key): 암호 알고리즘에 입력되는 비밀 값
    • 같은 알고리즘이라도 키가 다르면 결과가 달라짐
    • AES 알고리즘 + 키1 → 결과1
    • AES 알고리즘 + 키2 → 결과2


암호화의 원칙

암호화/복호화 시 알고리즘은 제3자에게 공개되어도 무방하나, 키 값은 당사자만 알고 있어야 한다.

이를 케르크호프스의 원리(Kerckhoffs’s Principle)라고 하며, 현대 암호학의 기본 원칙이라고 한다.


간단한 예시: 시저 암호

ABC 문장을 암호화하는 예시를 살펴보자.

  • 약속 (알고리즘과 키)
    • 암호 알고리즘: 각 문자의 ASCII 코드 값에 x씩 더하여 전송한다
    • 키: x = 3
  • 암호화 동작
    • ABC: 0x41, 0x42, 0x43
    • 변환 (+3)
    • 0x44, 0x45, 0x46 : DEF 전송
  • 복호화 동작
    • DEF 수신: 0x44, 0x45, 0x46
    • 복원 (-3)
    • 0x41, 0x42, 0x43 : ABC 획득


키의 구분

암호화에 사용되는 키는 크게 대칭키비대칭키로 구분된다.

대칭키 (Symmetric Key)

암호화와 복호화에 같은 키를 사용하는 방식이다. 동일한 비밀키(Secret Key)로 암호화와 복호화를 모두 수행할 수 있는 암호화 기법이다.

암호화 및 복호화 과정은 다음과 같다:

  1. 송신자가 평문을 비밀키와 함께 암호 알고리즘에 입력하여 암호문 생성
  2. 암호문을 전송 (전송 중 제3자가 가로챌 수 있음)
  3. 수신자가 동일한 비밀키와 함께 복호 알고리즘에 입력하여 평문 복원


장점:

  • 성능이 우수함 (일반적으로 수백 MB/s ~ 수 GB/s 수준)
  • 암호화/복호화에 CPU 리소스 소모가 적음


단점:

  • 비밀키 분실 시 복호화가 불가능
  • 비밀키를 상대방에게 안전하게 전달해야 함 (키 분배 문제)


비대칭키 쌍 (Asymmetric Key Pair)

암호화와 복호화에 서로 다른 키를 사용하는 방식이다. 공개키와 개인키 한 쌍으로 구성되며, 공개키 암호화(Public Key Cryptography)라고도 한다.


암호화 및 복호화 과정은 다음과 같다:

  1. 송신자가 평문을 수신자의 공개키로 암호화하여 암호문 생성
    • 공개키는 모든 사람에게 공개되어 있어 누구나 사용 가능
  2. 암호문을 전송
  3. 수신자가 자신의 개인키로 복호화하여 평문 복원
    • 개인키는 수신자만 알고 있어야 하며, 비밀 유지 필수


다음과 같은 특징을 가진다:

  • 공개키와 개인키는 쌍으로 생성되며, 항상 함께 생성되어야 함
  • 공개키는 전송해도 안전하며, 공개되어 있어도 문제없음
  • 개인키로 데이터를 서명하면 공개키로 검증 가능 (디지털 서명에 활용)
  • 개인키로 암호화한 데이터는 대응하는 공개키로만 복호화 가능 (인증에 활용)


장점:

  • 공개키를 전송할 수 있어 키 분배가 용이함
  • 공개키가 노출되어도 안전함


단점:

  • 성능이 상대적으로 낮음 (수백 KB/s ~ 수십 MB/s 수준, 대칭키 대비 100~1000배 느림)
  • 수학적 연산이 복잡하여 CPU 리소스를 많이 소모함


공개키(Public Key)는 공개 가능하며 암호화와 서명 검증에 사용된다. 반면 개인키(Private Key)는 비밀로 유지되어야 하며 복호화와 서명 생성에 사용된다.


특수 목적 키

일반적인 암호화 외에 특수 용도로 사용되는 키도 있다.

  • 키 암호화 키(KEK): 다른 키를 암호화하는 데 사용
  • HMAC 키: 메시지 인증 코드 생성
  • 솔트(Salt): 해시 강화용 (엄밀히는 키가 아닌 랜덤 부가 데이터로, 동일 입력에 대해 서로 다른 해시 값을 생성하여 레인보우 테이블 공격을 방지)


키의 용도별 분류

암호화에 사용되는 키는 용도에 따라 다음과 같이 구분할 수 있다.

  • 마스터 키(Master Key): 장기간 사용되는 최상위 키
  • 세션 키(Session Key): 일회성으로 사용되며, 통신 세션마다 새로 생성되는 키
  • 데이터 암호화키(DEK, Data Encryption Key): 실제 데이터를 암호화하는 데 전용되는 키


암호화 알고리즘 분류

암호화 알고리즘은 복호화 가능 여부에 따라 크게 단방향양방향으로 분류된다.

암호화 알고리즘
├── 단방향 (복호화 불가)
│   ├── 해시 함수 (키 없음): MD5, SHA-256, SHA-512, BLAKE2
│   └── 키 기반 해시 (HMAC): 메시지 인증과 무결성 검증에 사용
└── 양방향 (복호화 가능)
    ├── 대칭키 암호화 (암복호화 키 동일)
    │   ├── 블록 암호: DES, 3DES, AES, BlowFish
    │   └── 스트림 암호: RC4, ChaCha20
    └── 비대칭키 암호화 (암복호화 키 다름)
        ├── 암호화/복호화: RSA, ECC, ElGamal
        └── 디지털 서명: RSA, DSA, ECDSA, Ed25519


단방향 암호화

복호화가 불가능한 암호화 방식이다. 대표적으로 해시 함수가 있다.

  • 해시 함수: 키 없이 동작
  • HMAC: 키와 함께 동작

주로 무결성 검증, 비밀번호 저장 등에 사용된다. 다음 글에서 자세히 다룬다.


양방향 암호화

복호화가 가능한 암호화 방식이다.

대칭키 암호화

암호화와 복호화에 같은 키를 사용한다.

  • 특징: 빠름, 키 관리 어려움
  • 구분
    • 블록 암호화: DES, 3DES, AES, BlowFish
    • 스트림 암호화: RC4, ChaCha20
  • 속도: 수백 MB/s ~ 수 GB/s (매우 빠름)

비대칭키 암호화

암호화와 복호화에 서로 다른 키를 사용한다.

  • 특징: 느림, 키 분배 용이
  • 알고리즘: RSA, ECC, DSA, ECDSA, ElGamal, Ed25519
  • 속도: 수백 KB/s ~ 수십 MB/s (대칭키 대비 100~1000배 느림)


대칭키 vs 비대칭키 비교

대칭키와 비대칭키는 여러 측면에서 차이를 보인다:

  • 키 개수 측면에서 대칭키는 동일한 키 1개만 사용하는 반면, 비대칭키는 공개키와 개인키 2개를 쌍으로 사용함
  • 속도 면에서 대칭키는 빠른 반면, 비대칭키는 상대적으로 느림
  • 키 분배는 대칭키가 어렵고, 비대칭키가 쉬운 편
    • 대칭키의 경우, 노출되면 위험해짐
    • 비대칭키의 경우, 공개키는 노출되어도 상관 없으며, 개인키는 노출되지 않음
  • 주요 용도로 대칭키는 대량 데이터 암호화에, 비대칭키는 키 교환과 디지털 서명에 사용됨
  • 대표적인 알고리즘으로 대칭키는 AES와 DES를, 비대칭키는 RSA와 ECC를 들 수 있음


실무에서의 조합

실무에서는 대칭키와 비대칭키를 조합하여 사용하는 것이 일반적이다.

1. [세션 키 생성] 송신자가 랜덤 대칭키(세션키) 생성

2. [키 교환] 비대칭키 암호화 사용
   - 수신자의 공개키로 세션키를 암호화하여 전송
   - 수신자가 자신의 개인키로 복호화하여 세션키 획득

3. [데이터 전송] 대칭키 암호화 사용
   - 획득한 세션키로 실제 데이터를 암호화하여 전송
   - 수신자가 동일한 세션키로 복호화

이러한 방식을 사용하는 이유:

  • 비대칭키 암호화는 수학적으로 복잡하고 계산량이 많아 데이터 통신에 부적합
  • 대칭키 암호화는 빠르지만 키를 안전하게 전달하기 어려움
  • 두 방식을 조합하면 보안성성능을 모두 확보

HTTPS, TLS 등 대부분의 보안 프로토콜이 이 방식을 채택하고 있다.


정리

암호학의 핵심 개념을 정리하면 다음과 같다:

  1. 암호화는 평문을 암호문으로 변환하는 과정이다
  2. 복호화는 암호문을 평문으로 복원하는 과정이다
  3. 암호 알고리즘은 암호화와 복호화를 수행하는 수학적 절차를 의미한다
  4. 키는 알고리즘에 입력되는 비밀 값이다
  5. 대칭키는 암복호화에 같은 키를 사용하여 빠르지만 키 분배가 어렵다
  6. 비대칭키는 암복호화에 다른 키를 사용하여 느리지만 키 분배가 쉽다
  7. 단방향 암호화는 복호화가 불가능한 해시 함수를 의미한다
  8. 양방향 암호화는 복호화가 가능한 대칭키 및 비대칭키 암호화를 의미한다


hit count

댓글남기기