본문 바로가기
개발하자

암호 - 대칭 암호화에 대해서

by 밈밈무 2022. 6. 5.

대칭 암호화 방식

대칭키(Symmetric Key) 암호화 방식

  • 암호화 키 = 복호화 키 인 암호화 방식

  • 암복호화에 걸리는 시간이 짧고 비교적 간단한 방식으로 구현 가능

    • 비대칭 암호화보다 보안상 안전은 DOWN
    • 하지만 비대칭은 시간, cost, 구현 UP
  • 현대에 가장 많이 사용되는 암호 방식 중 하나

    KEY

    암호화, MAC, 전자서명 등 암호 기술에 반드시 필요한 숫자

  • 키의 bit길이가 길수록 brute force 공격에 강함

    • brute force 공격 : 전수조사 공격 -> 다 해 보는 거
  • 키는 평문(암호화 되지 않은 데이터)과 같은 가치를 지닌다고 할 수 있음

    • 그만큼 키가 중요하다!
    • key가 오픈되면 평문을 그냥 보내는 것과 다르지 않음

      종류

      재사용 여부

  • 세션키 : 통신 때마다 한 번만 사용되는 키 (SSL/TLS 암호화 통신)

  • 마스터키 : 반복적으로 사용되는 키

    암호화 대상

  • CEK Contents Encrypting Key

    • TEK와 같음(Traffic Encrypting Key)
    • 암호화 대상 : data
  • KEK Key Encrytping Key

    • 암호화 대상 : key
    • 키 쉐어 시 key를 암호화할 때 쓰여, 비대칭키를 많이 사용한다.

의사난수생성기(PRNG)

pseudo random number generator

  • 키 생성에 필요한 난수 값을 만들어 낸다.
  • pseudo : 진짜 random 값은 아니지만(컴퓨터는 규칙이 있어야 작동하므로) random에 가까운 수를 생성해준다는 의미

대칭 암호화 알고리즘

DES

Data Encryption Standard

  • 1997년, 미국의 연방정보처리의 표준 암호로 채택

  • permutation 주로 사용

  • 64bit 평문을 64bit 암호문으로 암호화

  • DES는 64bit의 블록 암호화 알고리즘(전형적인 feistel)

  • 키의 크기 : 56bit

    • 이 중 8bit는 오류 검출을 위해 사용 -> 48bit의 길이로 64bit 블록 암호화
  • Brute force 공격으로 DES가 해독이 가능해져 1998년 11월 이후 공식 사용 중단, but 아직도 여러 응용프로그램에서 많이 사용되고 이후에 기본 알고리즘의 토대가 된다.

암호화 과정

  1. ** Pre-Processing**
  • input : 64bit 단위로 나눈 평문의 조각
  • initial-permutation : 각 평문(64bit)의 비트 위치를 규칙에 의해 바꿈
  • 왼쪽 L과 오른쪽 R로 나눔(각 32bit)
  1. 1~16 Round
  • input : 이전 라운드에서 만들어진 L과 R

  • 꼬아가는 것처럼 16번의 중간 라운드를 수행

  • 수학적 식 : 이전 단계 R과 현재 key를 함수 적용 -> 이를 이전 단계 L과 XOR 연산한 것 = 현재 단계 R

  • ⊕ 배타적 논리합, XOR

    • 두 비트가 다른 값이면 1, 같은 값이면 0
    • 비트 패턴 일치 확인 가능 -> 암호화에서 많이 사용
    • 같은 값 두번 XOR 거치면 처음 값으로 회귀
    • bit by bit 연산이라 매우 빠름
  1. Post-processing
  • input : 이전 라운드에서 만들어진 L과 R

  • 최종적으로 계산된 L과 R을 합쳐서 하나의 블록으로 만듦

  • final-permutation : 초기치환의 역치환 $IP^{-1}$적용(최종 치환)

    트리플 DES

  • DES의 대안으로, DES의 암호화 강도를 높인 대칭키 암호 방식

  • DES를 3번 연속 실행 -> 3DES

    • 2번의 DES 암호화 중간에 DES 복호화가 1번 실행(암-복-암)
      • 복호화 시는 복-암-복
    • 2개의 키 or 3개의 키 사용
    • 기존 DES와의 호환성 유지 목적
      • 모든 키를 동일하게 하는 경우 DES와 같아짐
  • DES보다 2배의 암호화 강도를 갖지만 충분하지 않아 AES가 권장됨

    AES

    Advanced Encryption Standard

  • 1997년 미국 NIST의 암호공모에서 새로운 대칭 암호의 표준으로 채택된 대칭키 암호 방식(Rijndael) = AES암호 공모에서 Rijndael 채택

  • 암호 공모 조건

    • 안정성 Security
    • 비용 Cost
    • 구현 효율성 Implementation
  • 특징

    • 128bit 평문을 128bit 암호문으로 암호화
    • 키의 길이 : 128, 192, 256 bit(키 길이 종류 3개)
    • 라운드 횟수 : 10, 12, 14 (라운드 횟수 종류 3개)

각 라운드 구성 연산

  • SubBytes : byte 단위 substitution
  • ShiftRows : row 단위로 cyclic shift 수행
  • MixColumns : 높은 diffusion을 위해 column 단위로 mixing
  • AddRoundkey(마지막 연산) : Round key와 state를 XOR

=> 원본을 막 섞음 -> 되돌아가면 원본 나와야 함

그 밖의 대칭 암호

SEED

  • 국산 128bit 블록 암호 알고리즘

  • 한국인터넷진흥원과 국내 암호 전문가들이 순수 국내 기술로 개발

  • 전자상거래, 금융, 무선통신 등에서 전송되는 중요 정보 보호 목적

  • SEED 128, SEED 256 (숫자는 각각 key의 길이를 의미)

    ARIA

  • 국산 128bit 블록 암호화 알고리즘

  • 경량 환경 및 하드웨어에서의 효율성 향상을 목적

    • cost DOWN
      • 모바일, IoT 등에 적합
  • AES와 마찬가지로 3가지 종류의 길이의 암호화 키 지원(128/192/256bit)

    IDEA

  • 유럽에서 많이 사용

  • 128bit key 사용해서 64bit 평문8라운드를 거쳐 64bit 암호문으로 만듦

  • 모든 연산이 16bit단위로 이루어지도록 하여 16bit 프로세서에서 구현이 용이 & 주로 키 교환에 사용됨

    RC5

  • 미국 RSA 연구소에서 개발

  • RC5(Ron's Code 5) 알고리즘

  • 간단한 연산, 빠른 암복호화 기능, 모든 하드웨어에 적합

  • 입출력, 키, 라운드수가 가변인 블록 알고리즘

  • 키 길이 : 32, 64, 128bit

  • 속도 : DES의 약 10배

    Skipjack

  • 미국 국가안보국(NSA)에서 개발한 클리퍼 칩에 내장된 블록 알고리즘

  • 비밀로 유지되던 알고리즘의 형태와 구조가 1998년에 공개됨

  • 64bit 입출력, 80bit 키, 32라운드의 암호화 과정

    LEA

  • 고속 환경 및 모바일 기기 등의 경량환경에서 confidentiality 제공하기 위한 목적

  • 국내 개발

  • AES 대비 1.5~2배 빠름

  • 128bit 데이터 블록으로 128, 192, 256bit 비밀 키 사용 가능

블록암호 vs 스트림 암호

블록암호(Block Cipher)

  • 특정 비트수의 집합(블록단위로 암호 처리)을 한번에 처리하는 암호 알고리즘
  • 블록의 비트 수 : 블록길이 - 8비트 혹은 16비트에 비례 -> 8 or 16의 배수로 블록 사이즈 지정
  • 라운드를 사용하고 반복적으로 암호화 과정 수행하여 암호화 강도 높임
  • 사용 : 일반 데이터 전송, storage 저장

    스트림암호(Stream Cipher)

  • 한번에 1비트 혹은 1바이트의 데이터 스트림을 순차적으로 처리하는 암호 알고리즘
  • plain text와 key stream을 XOR하는 방식
  • 사용
    • 군사 및 외교용으로 주로 사용
    • 음성, 오디오/비디오 스트리밍, 이동통신 등 무선 데이터 전송

블록 암호 모드

  • 대칭 암호화 방식은 하나의 평문을 블록 단위로 나눠서 암복호화 수행

  • 패딩 : 블록의 남은 부분에 데이터 채워 넣는 것(짜투리가 남으면 패딩으로 블록 사이즈가 되도록 사이즈 채움)

    ECB(Electric CodeBook)모드

  • 블록 단위로 따로따로 암호화

  • 각 평문 블록을 암호화한 것이 그대로 암호문 블록이 되는 방식

  • 장점 : 계산 단순, 블록간 독립적이며 블록의 오류가 다른 블록에 영향 주지 않음, 병렬처리 가능

  • 단점 : 변조가 가능해서 보안적으로 취약

    • 중간 블록을 바꿔치기 하더라도 정상적으로 복호화됨(블록 각각이 온전한 암호문이기 때문)
    • 같은 평문은 같은 암호문으로 암호화되므로 해독의 단서를 제공

CBC(Cipher Block Chaining) 모드

  • 암호문 블록을 마치 체인처럼 연결하는 모드
    • 현재의 평문 블록과 바로 직전에 암호화된 암호 블록을 XOR연산한 후 암호화
  • 초기화벡터(IV, Initial Vector) : 최초 블록을 암호화할 때 XOR 연산에 사용되는 블록, 송수신자가 사전에 알고있어야 하며 예측이 어려워야 한다.
  • 1st block에도 같은 로직을 적용하기 위해 사용

  • 장점 : 변조가 불가능하므로 보안적으로 안전하다
  • 단점 : 계산 다소 복잡

-> 제약사항 : 중간에 있는 블록을 복호화하기 위해선 반드시 첫 블록부터 복호화해야 함(왜냐하면 서로 체인처럼 연결되어 있기 때문)

ECB vs CBC

구분 장점 단점 비고
ECB 간단
병렬처리 가능(암복호화 모두)
평문의 반복이 암호문에 반영
암호문 블록의 삭제 혹은 교체에 의해 평문 변조가 가능
보안상 취약하여 사용을 권장하지 않음
CBC 평문의 반복이 암호문에 반영되지 않음
암호문 블록의 삭제 혹은 교체에 의해 평문 변조가 불가능
암호화에서는 병렬처리를 할 수 없음 권장
# 블록 암호 구조
## 현대 블록 암호
- S-box(Substitution), P-box(Permutation), XOR연산의 조합으로 구성
- 암호화 설계 원칙 : confusion & diffusion
### S-box
- Substitution box
- confusion(혼돈) 제공
- 평문과 암호문의 상관관계를 감추어 평문의 내용을 짐작하기 어렵게 함
### P-box
- Permutation box
- diffusion(확산) 제공
- 평문의 통계적 특성을 암호문 전반에 확산 시켜 알고리즘 패턴을 추론하기 어렵게 함
## Feistel
- 구조
- 암호화 방식이 특정 계산 함수의 반복으로 구성
- 각 과정에 **Round 함수** 적용
- 구성도가 그물을 짜는 것과 같이 교환되는 방식
ex) DES, SEED 등
  • 강도 결정 요소

    • 평문의 블록 길이
    • 키의 길이
    • 라운드의 수
  • 충분한 안정성을 보장받기 위한 조건

    • 평문 블록 길이 64bit 이상
    • 키의 길이 64bit 내외(최근에는 128bit 권장)
    • 라운드 16회 이상
  • 특성

    • 복호화 과정 = 암호화 과정
    • 복호화 과정 Input : Cipher text, Ki(보조키)
    • 복호화 과정의 보조키의 입력 순서는 암호화 과정의 입력순서와 반대

      SPN

      Substitution-Permutation Network

  • 구조

    • substitution cipher와 permutation cipher 중첩
    • Input을 여러 작은 블록으로 나누고 / 각 블록을 S-box로 이력하여 substitution 시키고 / S-box 출력을 P-box로 permutation 하는 과정 반복
      ex) AES(Rijndael), IDEA, ARIA 등
  • 특성

    • 암복호화 함수가 다름
    • 복호화를 위해 라운드 함수가 역변환되어야 함
    • 하드웨어 구현 용이하지만 구현 비용이 높음