9주차_현대암호학 기초 [ 블록 암호 모드(Mode of Operation) ]

2023. 11. 5. 14:08SWU_1학년 2학기/현대 암호학 기초

📌 블록 암호

 

  • 블록 암호 
    • 𝑚 비트 단위로 암호화
  • 평문의 길이가 𝑚 비트 이상인 경우
    • 평문을 블록 단위로 분할
  • Naïve approach
    • 분할 평문 블록 별로 암/복호화 → 안전성에 문제가 있음

 

▶  메시지 패딩 (Padding)

 

  • 마지막 평문 블록이 암호 알고리즘에서 정의한 블록 길이에 미치지 못하는 경우
  • 예를들어 AES는 한 블록 크기가 128 비트 
    • 평문의 길이가 192 비트인 경우 블록 구성 방법이 필요

패딩

  • 블록 길이를 만족하도록 약속한 방식으로 적 당한 길이의 비트열/바이트열 추가
    • 예를 들어 10…0 으로 채움 (비트 패딩)
    • 표준에 따라 다르다.
  • 복호화 했을 때 마지막 평문 블록에서 패딩 파트는 제외하고 평문으로 decode 된다.

 

  블록 암호 모드

 

복수의 평문 블록을 어떤 방식으로 암호화할지를 정의하는 메커니즘이다.

 

5개의 주요 모드가 존재

ECB 모드 Electric Codebook (전자 코드북)
CBC 모드 Cipher Block Chaining (암호 블록 체이닝)
CFB 모드 Cipher Feedback (암호 피드백)
OFB 모드 Output Feedback (출력 피드백)
CTR 모드 Counter (카운터)

 

 

📌 ECB 모드

 

  • Naïve approach 대로 암호화
    • 평문 블록별로 독립적으로 암/복호화 진행한다.
    • 개별 암/복호화에서는 같은 키를 사용한다.

 

형태

 

 

특징

 

  • 가장 간단한 모드이다.
  • 동일한 평문은 동일한 암호문으로 암호화된다.
    • 즉, 평문 블록과 암호문 블록이 일대일 관계를 가진다.
    • 암호문만을 살펴봄으로써 평문의 패턴 분석 가능하다.
      • 예를 들어, 같은 내용이 몇 번 반복되는지 등으로부터 평문의 형태와 내용 파악 
  • Confidentiality 보호에 매우 취약함 → 사용하지 않음
  • 병렬적으로 암/복호화 처리 가능하다.
  • 모든 평문/암호문 블록이 독립적이다.

 

📌 CBC 모드 

 

  • Cipher Block Chaining
    • 암호문 블록을 체인으로 연결시키는 방식
    • SSL/TLS 등 인터넷에서 블록 암호 사용시 사용되는 모드 
  • 초기화 벡터가 필요 (IV, Initialization Vector) 
    • 0번째 암호문 블록을 대신하는 임의의 난수 벡터 
    • 암호화마다 다른 초기화 벡터를 사용한다. 
    • IV 를 포함하여 암호문이 구성된다.
  • 마지막 평문 블록에 대해 패딩 적용이 필요하다.

 

 

형태

 

CBC 모드 암호화 / 복호화

 

특징

 

  • 동일 평문이 같은 암호문으로 암호화되지 않는다.
    • 암호화 단계
      • 이전 암호문 블록과 XOR
      • 위 결과에 대한 암호화중간 평문 블록만 뽑아서 암호화 할 수는 없음
        • 블록𝑖 를 암호화하기 위해서는 앞선 암호문 블록이 필요
        • 즉, 앞선 평문 블록에 대한 암호문 블록이 있어야 현재 평문 블록 암호화 가능 

 

 

  • ECB 모드 경우는 중간 블록을 선택하여 암호화 가능
  • 암호화 과정은 병렬처리 불가능 
  • 복호화 과정은 병렬처리 가능 
    • 현재 암호문 블록 & 직전 암호문 블록이 있으면 복호화 가능
  • 블록의 길이는 유지하면서 암호문 블록 1개가 파손된 경우
    • 즉, 어떤 암호문 블록 내에서 몇 비트에 오류가 발생한 경우 
  • 이 경우 복호화 했을 때 영향을 받는 평문은 아래 2개 평문 블록으로 한정됨 
    • 현재 평문 블록, 다음 평문 블록
  • 중간에 블록 유실이 발생한 경우 
    • 즉, 전달 받은 암호문에 어떤 블록이 통째로 유실된 경우
    • 유실된 블록에 대응하는 평문 블록은 복구가 불가능하고, 그 바로 다음 평문 블록에는 오류가 발생
    • 이후에는 정상적인 복호화 수행 → 자기 동기 기능 제공 IV 내에서 원하는 위치에서 비트 반전을 일으키는 경우 
      • 평문 블록1에서 해당 위치에 비트 반전 발생
      • 즉, IV 조작으로 공격자가 원하는 위치에서 오류를 일으킬 수 있다.

 

 

📌 CFB 모드 

  • Cipher Feedback
    • 일회용 패드와 비슷한 구조 
      • 키스트림을 생성하고 이를 평문과 XOR 
    • 블록 암호를 스트림 암호로 쓸 수 있는 모드 
  • 초기화 벡터가 필요 (IV, Initialization Vector) 
    • 0번째 암호문 블록을 대신하는 임의의 난수 벡터
    • 암호화마다 다른 초기화 벡터를 사용 
    • IV 를 포함하여 암호문이 구성됨

 

형태

 

CFB 모드 암호화 / 복호화

  • 평문 자체에 블록 암호 알고리즘이 적용되는 것이 아니다.
    • 암호화는 평문과 키스트림의 XOR 방식 
    • 평문에 대한 패딩이 필요없다.
  • 블록 암호의 복호화 알고리즘이 사용되지 않는다.
  • 암호화 과정은 병렬처리 불가능
  • 복호화 과정은 병렬처리 가능
    • 현재 암호문 블록, 직전 암호문 블록 입력만 있으면 복호화 가능
  • 재전송 공격이 가능 (Replay attack) 
    • 같은 키를 사용하는 경우 예전의 암호문을 이용한 새로운 의미 있는 암호문 생성 가능

 

  • 블록의 길이는 유지 하면서 암호문 블록 1개가 파손된 경우
    • 즉, 어떤 암호문 블록 내에서 몇 비트에 오류가 발생한 경우
  • 현재 평문 블록의 해당 비트 오류 + 다음 평문 블록 전체에서 오류 발생
  •  
  • 중간에 블록 유실이 발생한 경우
    • 즉, 전달 받은 암호문에 어떤 블록이 통째로 유실된 경우
    • 유실된 블록에 대응하는 평문 블록은 복구가 불가능하고, 그 바로 다음 평문 블록에는 오류가 발생 
    • 이후에는 정상적인 복호화 수행 → 자기 동기 기능 제공

 

 

📌 OFB 모드 

 

 

  • Output Feedback 
    • CFB와 비슷한 구조
      • 키스트림을 생성하고 이를 평문과 XOR 
    • 블록 암호를 스트림 암호로 쓸 수 있는 모드 (평문에 대한 패딩 필요X) 
  • 초기화 벡터가 필요 (IV, Initialization Vector) 
    • 0번째 암호문 블록을 대신하는 임의의 난수 벡터 
    • 암호화마다 다른 초기화 벡터를 사용 
    • IV 를 포함하여 암호문이 구성됨

 

형태

 

(복호화는 암호문블록과 평문 블록 위치만 다름)

 

  • 평문과 상관없이 키스트림을 미리 생성하는 것이 가능하다.
    • CFB 모드의 경우는 키스트림이 이전 평문 블록 정보에 의존 
    • OFB 모드의 경우는 키스트림이 이전 평문 블록 정보에 독립
  • 암호화 구조와 복호화 구조가 같음
  • 블록 암호의 복호화 알고리즘이 사용되지 않음
  • 암/복호화 과정 모두 병렬처리 불가능 
    • 암호화와 복호화를 위해서는 앞선 블록에서의 연산처리 결과로 얻어지는 키스트림이 필요 →순차적으로만 처리 가능
  • 블록의 길이는 유지 하면서 암호문 블록 1개가 파손된 경우 
  • 즉, 어떤 암호문 블록 내에서 몇 비트에 오류가 발생한 경우 
  • 현재 평문 블록의 해당 비트에만 오류 발생

 

 

📌 CTR 모드

 

  • Counter 
    • 키스트림을 생성하고 이를 평문과 XOR하는 구조 
      • 초기화 벡터를 블록마다 1씩 증가시키고 이를 암호화하여 평문과 XOR
    • 블록 암호를 스트림 암호로 쓸 수 있는 모드 (평문에 대한 패딩 필요X)
  • 초기화 벡터가 필요 (IV, Initialization Vector) 
    • 0번째 암호문 블록을 대신하는 임의의 난수 벡터 
    • 암호화마다 다른 초기화 벡터를 사용한다.
    • IV 를 포함하여 암호문이 구성된다.

 

형태

 

  • 암호화 알고리즘과 복호화 알고리즘이 완전히 같은 구조 
  • 블록 암호의 복호화 알고리즘이 사용되지 않음
  • 임의의 블록에 대해 암/복호화 할 수 있음 
    • 키스트림이 CTR 에만 의존 → 해당 CTR 에 따라 암/복호화 가능 
    • 병렬 암/복호화 가능 
  • 상용 암호화 알고리즘에서 많이 쓰임
  • 블록의 길이는 유지 하면서 암호문 블록 1개가 파손된 경우
    • 즉, 어떤 암호문 블록 내에서 몇 비트에 오류가 발생한 경우 
  • 현재 평문 블록의 해당 비트에만 오류 발생

 

📌 요약

 

ECB

 

[ 장점 ]

 

1. 고속

2. 병렬처리 가능 

 

[ 단점 ]

 

1. 패딩 필요

2. 평문 반복 → 암호문 반복

3. 암호문 블록 삭제/교체에 의한 평문 조작 가능

4. 복호화 오류없는 재전송 공격 가능

 

 

CBC

 

[ 장점 ]

 

1. 평문 반복이 암호문에 반영되지 않음

2. 복호화 과정은 병렬처리 가능 

3. 임의의 암호문 블록 복호화 가능

 

[ 단점 ]

 

1. 패딩 필요 

2. 암호화 과정 병렬처리 불가능 

3. 암호문 블록내 비트 단위 에러가 발생하면 현재 평 문 및 다음 평문 블록까지 에러 발생 

4. 약간의 복호화 오류가 있는 재전송 공격 가능

 

 

CFB

 

[ 장점 ]

 

1. 스트림 암호 방식 (패딩 불필요)

2. 복호화 과정은 병렬처리 가능 

3. 임의의 암호문 블록 복호화 가능

 

[ 단점 ]

 

1. 암호화 과정 병렬처리 불가능 

2. 암호문 블록내 비트 단위 에러가 발생하면 현재 평문 및 다음 평문 블록까지 에러 발생 

3. 약간의 복호화 오류가 있는 재전송 공격 가능

 

 

OFB

 

[ 장점 ]

 

1. 스트림 암호 방식 (패딩 불필요)

2. 키스트림을 미리 발생시켜 사전에 암/복호화 준비 가능 

3. 암호화 구조 = 복호화 구조

4. 암호문 블록내 비트 단위 에러가 발생하면 현재 평 문에만 한정됨

 

[ 단점 ]

 

1. 암호화 과정 병렬처리 불가능 

2. 적극적 공격자가 암호문 블록 비트를 반전시키면 대응 평문 블록의 해당 비트가 반전

 

 

CTR

 

[ 장점 ]

 

1. 스트림 암호 방식 (패딩 불필요)

2. 키스트림을 미리 발생시켜 사전에 암/복호화 준비 가능 

3. 암호화 구조 = 복호화 구조

4. 암호문 블록내 비트 단위 에러가 발생하면 현재 평 문에만 한정됨

 

[ 단점 ]

 

1. 적극적 공격자가 암호문 블록 비트를 반전시키면 대응 평문 블록의 해당 비트가 반전