OFB(출력 피드백) 블록 암호 운용 방식 이해하기

OFB(출력 피드백) 블록 암호

블록 암호 운용 방식이란?

블록 암호(Block Cipher)는 일정한 크기의 블록 단위로 데이터를 암호화하는 방식입니다. 하지만 블록 암호 자체는 단순한 암호화 기능만 제공하기 때문에, 실제 응용에서는 다양한 운용 방식(Mode of Operation)을 사용하여 보안성과 활용성을 높입니다. 대표적인 블록 암호 운용 방식으로 ECB, CBC, CFB, OFB, CTR 등이 있으며, 그중 OFB(Output Feedback) 모드는 스트림 암호처럼 동작하는 방식으로 유명합니다.

OFB(출력 피드백) 모드란?

OFB(Output Feedback) 모드는 블록 암호를 스트림 암호처럼 사용할 수 있도록 설계된 방식입니다. 평문을 직접 암호화하는 대신 암호화 과정에서 생성된 키 스트림(Key Stream)을 평문과 XOR 연산하여 암호문을 생성합니다.

특징

  • 스트림 암호화 방식: 블록 암호를 활용하지만, 내부적으로는 스트림 암호처럼 동작합니다.

  • 오류 전파 없음: 한 블록에서 오류가 발생해도 다음 블록으로 전파되지 않습니다.

  • 병렬 처리 불가능: 암호문을 복호화하려면 이전 단계의 출력을 참조해야 하므로 병렬 처리가 어렵습니다.

OFB 암호화 과정

OFB 모드의 암호화 과정은 다음과 같습니다.

암호화 과정 단계:

  1. 초기 벡터(IV, Initialization Vector) 설정

    • 암호화 과정에서 사용될 초기값(IV)을 설정합니다.

    • IV는 공개되어도 무방하지만, 매번 새로운 IV를 사용해야 보안성을 유지할 수 있습니다.

  2. 암호화 블록 생성

    • IV를 블록 암호의 암호화 함수(Encryption Function, E)를 사용하여 암호화합니다.

    • 이 암호화된 값을 키 스트림으로 사용합니다.

  3. XOR 연산 적용

    • 평문 블록과 키 스트림을 XOR 연산하여 암호문 블록을 생성합니다.

  4. 다음 블록을 위한 입력값 갱신

    • 이전 단계에서 생성된 암호화 출력을 다시 암호화 함수의 입력으로 사용하여 새로운 키 스트림을 생성합니다.

    • 이 과정을 반복하여 전체 평문을 암호화합니다.

공식

O_0 = E(IV)
O_i = E(O_{i-1})
C_i = P_i ⊕ O_i

여기서,

  • O : 암호화 함수의 출력 (키 스트림)

  • IV : 초기 벡터

  • P : 평문 블록

  • C : 암호문 블록

  • E : 블록 암호 암호화 함수

OFB 복호화 과정

복호화 과정은 암호화 과정과 거의 동일합니다. OFB 모드에서는 키 스트림이 암호화와 복호화에서 동일하게 생성되므로, 암호문과 같은 키 스트림을 XOR 연산하면 원래의 평문을 복원할 수 있습니다.

공식

P_i = C_i ⊕ O_i

즉, 같은 키 스트림을 사용하므로 암호화된 값에 다시 XOR 연산을 하면 평문이 복구됩니다.

OFB 모드의 장점과 단점

장점

  • 오류 전파 없음: 하나의 암호문 블록이 손상되어도 이후 블록에 영향을 미치지 않습니다.

  • 재사용 가능 키 스트림: 동일한 IV와 키를 사용하면 동일한 키 스트림을 생성하므로, 파일 암호화 등에 활용할 수 있습니다.

  • 스트림 암호처럼 동작: 블록 크기에 상관없이 바이트 단위로 암호화 가능하여 효율적입니다.

단점

  • IV가 반복되면 보안 취약: 같은 IV와 키를 사용하면 동일한 키 스트림이 생성되므로, 이를 공격자가 악용할 수 있습니다.

  • 병렬 처리 불가능: 키 스트림이 순차적으로 생성되므로 병렬 처리가 어렵습니다.

  • 암호화만 지원: 다른 모드와 달리 블록 단위의 무결성 검증을 수행하기 어렵습니다.

OFB 모드의 활용 사례

OFB 모드는 스트림 암호화 방식이 필요한 다양한 환경에서 사용됩니다.

  • 무선 통신: 패킷 손실이 발생할 수 있는 환경에서 오류 전파를 방지하기 위해 사용

  • 디지털 스트리밍: 음성 및 비디오 스트리밍에서 실시간 암호화에 활용

  • 데이터 암호화: 파일 암호화나 보안 통신에서 활용

OFB 모드의 실제 구현 (Python 예제)

아래는 Python을 이용한 OFB 모드 구현 예제입니다.

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def ofb_encrypt_decrypt(key, iv, data, encrypt=True):
    cipher = AES.new(key, AES.MODE_OFB, iv)
    return cipher.encrypt(data) if encrypt else cipher.decrypt(data)

# 키 및 IV 생성
key = get_random_bytes(16)  # AES-128 사용
iv = get_random_bytes(16)  # IV는 블록 크기와 동일해야 함

data = b"Hello, OFB Mode!"  # 평문

# 패딩 처리 (AES는 블록 크기가 필요함)
data = data.ljust(16, b' ')  # 예제에서는 공백으로 패딩

# 암호화 수행
encrypted_data = ofb_encrypt_decrypt(key, iv, data, encrypt=True)
print("암호문:", encrypted_data)

# 복호화 수행
decrypted_data = ofb_encrypt_decrypt(key, iv, encrypted_data, encrypt=False)
print("복호문:", decrypted_data.strip())

결론

OFB(Output Feedback) 모드는 블록 암호를 스트림 암호처럼 활용할 수 있도록 설계된 운용 방식입니다. 오류 전파를 방지하고 바이트 단위 암호화를 가능하게 하지만, IV 재사용의 위험성과 병렬 처리 불가능 등의 단점이 존재합니다. 적절한 보안 조치를 통해 활용하면 무선 통신, 데이터 암호화 등에서 효율적으로 사용할 수 있는 방식입니다.

ECB(Electronic Codebook) 블록 암호 운용 방식 이해하기

1 thought on “OFB(출력 피드백) 블록 암호 운용 방식 이해하기”

Leave a Comment