Block Cipher Mode (블럭 암호화 모드) - ECB, CBC, CFB, OFB, CTR, GCM

kafkaaaa·2023년 9월 7일
2

Cryptography

목록 보기
1/1

🔑 대칭키 암호 (Symmetric key cryptography)

  • 대칭키 암호 방식은 암호화와 복호화에 동일한 KEY를 사용한다.
  • 따라서 공개키 암호화 방식에 비해 키의 길이가 짧고 성능이 빠르다.
  • 대칭키 암호기술의 안전성은 암호 키의 비밀성에 기반하기 때문에
    키 분배(Key Distribution) 문제와 암호 키의 길이 및 난수성, 관리 등이 중요하다.

🔑 블럭 암호

블럭 암호화 개념도

평문을 일정한 크기의 블럭 단위로 나누어 각 블럭마다 암호화 과정을 수행하고 고정된 크기의 암호문을 생성하는 양방향 대칭키 기반 암호화 방식.

<원리>

  • 혼돈 (Confusion) : 암호문과 평문의 상관관계를 숨기는 성질
  • 확산 (Diffusion) : 평문의 통계적 성질을 암호문 전반에 퍼뜨려 숨기는 것

<구조>

  • Feistel :

    • 암호화 방식이 특정 계산 함수의 반복으로 이루어짐
    • 라운드(Round) 함수 = 각 암호화 과정에 사용되는 함수
    • 이전 암호문과 평문을 XOR 형태의 Round 함수에 반복해서 적용
    • 암호화와 복호화 과정이 동일함
    • 암호 강도를 결정짓는 요소 = 평문블록 길이, 키 길이, 라운드 수
    • e.g. DES, 3-DES, SEED

  • SPN (Substitution - Permutation Network) :

    📌
    Substition과 Permutation

    Substitution은 '어떤 문자를 다른 문자로 바꾸는' 것 (혼돈)
    e.g. '가나다라마' -> 'a나c라e'

    Permutation은 '문장 안에서 문자들의 순서를 바꾸는' 것 (확산)
    e.g. '가나다라마' -> '마나가라다'

    Substitution을 대입, Permutation을 치환이라고 번역하기 보다는 위와 같이 해석하는 게 더 좋을 것 같다.


  • S-Box표를 이용하여 대체하고, P-Box를 이용하여 치환하며 Round Key를 통해 반복적인 연산 수행

  • Feistel 구조에 비해 속도가 빠르지만 복호화 시 별도 루틴을 구현해야 함

  • e.g. AES, ARIA


    💡 SPN구조를 사용하는 AES 알고리즘






🔑 블럭 암호화 운영 모드 종류

1. ECB

Electronic Codebook (전자 코드북)

  • 가장 간단하고 그만큼 기밀성도 낮은 모드
  • 각 평문 블럭을 독립적으로 암호화 하는 방식
  • 📌치명적 약점 = 모든 블럭이 동일한 암호화 키 사용
    -> Brute-Force 공격, 사전 공격에 취약함
    -> 평문 속에 패턴의 반복이 있다는 것을 쉽게 알 수 있음

2. CBC

Cipher Block Chaining (암호 블록 체인)

  • 현재 널리 사용되는 방식 (IPSec, 3DES-CBC, AES-CBC 등)
  • 각 Block은 암호화되기 전에 이전 블록의 암호화 결과와 XOR 됨
  • 처음 Block은 IV(Initialization Vector; 초기 벡터)를 사용
  • IV가 같은 경우 결과가 항상 같기 때문에 매 암호화마다 다른 IV를 사용해야 함
  • 암호화 입력 값이 이전 결과에 의존하기 때문에 병렬화 불가능
  • 복호화의 경우 각 블록을 복호화한 다음 이전 암호화 블록과 XOR하여 복구할 수 있기 때문에 병렬화 가능
  • 마지막 블록이 블록의 길이와 항상 맞아 떨어지는 것을 보장할 수 없으므로 패딩 기법을 사용해야 함
  • (참고) PKCS5 와 PKCS7의 차이점 ->
    https://www.lesstif.com/security/pkcs-5-pkcs-7-padding-106857556.html

💡 ECB와 CBC의 차이점

  • CBC 방식에서 평문 블록은 반드시 한 단계 이전의 암호문 블록과 XOR 연산 후 암호화 되기 때문에 평문 블록1과 블록2의 값이 같다고 하더라도 암호문은 달라짐.
    (ECB 모드에서는 암호문이 같음)

  • 위와 같이 비트맵 이미지 파일을 ECB 방식으로 암호화한 경우 동일한 곳에 동일하게 암호화 되므로 원본의 윤곽이 그대로 드러난다.
    그러나 CBC 방식은 한 블록의 암호화된 결과가 계속 연관되어 있어서 알아볼 수 없다.

3. CFB

Cipher Feedback (암호 피드백) 모드

  • CBC의 변형
  • 피드백 = "다음 블록의 암호화 과정에 관여한다"는 의미
  • 이전 블록의 암호문을 암호 알고리즘의 입력으로 사용한다.
    (이전 블록의 암호문이 암호 알고리즘을 거친 후에 다음 블록의 원문과 XOR연산을 수행하여 암호문을 만든다)
  • CBC와 마찬가지로 처음 블록을 암호화하기 위해서는 IV가 필요하다.
  • 평문과 암호문의 길이가 같다 (패딩 X)
  • ⭐ 주의: CFB 모드에서 복호화 수행 시 블록 암호 알고리즘 자체는 복호화가 아닌 암호화를 수행함.
  • 📌 재전송 공격


💡 CBC 모드와 CFB 모드 비교


4. OFB

Output Feedback (출력 피드백) 모드

  • '처음에 넣은 IV값이 암호 알고리즘을 반복해서 거치는 값''각 블록의 원문'을 XOR하여 암호문을 만듦.
  • (평문 블록이 암호 알고리즘에 의해 직접 암호화 되는 것이 아니라,
    평문 블록과 암호 알고리즘의 출력을 XOR해서 암호문 블럭을 만들어냄)
  • 따라서 IV만 정하면 원문과 XOR연산 할 값을 미리 알 수 있음.
  • 따라서 블록 단위로 순차적으로 암호화를 수행할 필요 없이 XOR하기 직전 값들을 미리 계산해뒀다가 한번에 암호화 가능 -> 한꺼번에 많은 양을 암호화할 수 있다는 장점이 있음.
  • 📌단점: IV가 암호 알고리즘을 반복해서 거치는 과정에서 주기성이 발견되면 안전성에 문제가 생길 수 있음.
  • 따라서 OFB 모드를 사용할 때는 초기화 벡터를 매번 다르게 설정하는 것이 좋음.

💡 CFB 모드와 OFB 모드 비교

  • 암호 알고리즘으로의 입력이 다름.
  • CFB 모드에서는 1단계 이전의 암호문 블록이,
  • OFB 모드에서는 1단계 이전의 암호화 출력이 암호 알고리즘의 입력으로 사용된다.

5. CTR

Counter (카운터) 모드

  • OFB 모드와 비슷하지만 확산(Diffusion)을 강화한 운영 모드.
  • OFB 모드와 달리 각 블록의 결과물을 연결하는 과정이 없음.
  • 대신 초기화 벡터로 넌스(Nonce; 암호화 통신에서 한 번만 사용할 수 있는 임의의 숫자)를 넣고 그 다음 블록부터는 첫 번째 넌스 값에 1씩 더해 난수를 생성함.
  • 블록마다 다른 난수 값을 생성하고, 이 난수 값으로 원문과 XOR연산을 수행.
  • 즉, 카운터를 암호화한 비트열과 평문 블록과의 XOR 결과값이 암호문 블럭이 됨.
  • 단순히 넌스에 1씩 더해 사용해도 블록마다 완전히 다른 값을 얻을 수 있는 이유 ->
    - '쇄도 효과'(Avalanche Effect; 산사태 효과; 어떤 암호 알고리즘이 입력값에 미세한 변화를 줄 경우 출력값에 상당한 변화가 일어나는 성질)

💡 OFB 모드와 CTR 모드 비교

  • OFB 모드에서는 1단계 이전의 암호화 출력값을 입력으로 피드백하고 있지만,
  • CTR 모드에서는 카운터 값이 암호화의 입력이 된다.

6. GCM

Galois/Counter (갈루와/카운터) 모드

  • 성능을 위해 널리 채택된 대칭 키 블록 암호 운영 방식이다.
  • 데이터의 무결성과 신뢰성을 제공하는 것이 특징.
  • GCM 모드는 암호화 과정에서 Hash 값을 추가하여 암호문의 무결성 검사가 가능하다.
    (암호문이 중간에 변경되었는지 확인 가능)
  • AES-GCM 모드에서는 CTR 방식으로 암호화를 하면서 동시에 암호문의 MAC을 추가한다.
  • IV 필요. 길이에 제한은 없지만 NIST 권고사항은 96bit.
  • IV값 + 카운터값을 평문 블록과 XOR 연산하는 과정을 거침.
  • 암호화 할 때마다 다른 IV값을 사용해야 함.
  • AAD = Additional Authentication Data (추가 인증 데이터). AAD는 암호화되지 않으며 Auth Tag를 생성하는데 사용됨.
  • Auth Tag = Authentication Tag = AAD와 Cipher Text를 대상으로 하는 일종의 MAC 값으로 대상의 위/변조를 확인하는데 사용.


7. 블록 암호화 모드 간 비교


Reference

profile
일모도원

1개의 댓글

comment-user-thumbnail
2024년 7월 1일

좋은 글 감사합니디

답글 달기