Tech-Trends

블록암호화 - OCB (Offset Codebook Mode) - 블록 암호 운용 모드

IT오이시이 2024. 2. 16. 01:00
728x90

 

 

오프셋 코드북( OCB, Offset Codebook Mode)는 블록 암호 운용 모드 중 하나로, 블록 암호를 사용하여 데이터를 효과적으로 암호화하고 인증하는 방법입니다. OCB의 주요 특징과 예시에 대해 아래에 설명하겠습니다:



1. 오프셋 코드북  특징:



(1) 효율적인 병렬 처리:

OCB(오프셋 코드북)는 블록 암호를 효과적으로 사용하여 데이터를 암호화하므로 병렬 처리가 가능합니다. 이는 빠른 암호화 및 복호화를 가능하게 합니다.

(2) 오프셋 코드북 사용:

OCB는 오프셋 코드북을 사용하여 암호화와 복호화를 수행합니다. 이 코드북은 독립적인 블록 단위로 오프셋 값을 조정하여 보안성을 확보합니다.

(3) 인증 및 암호화 동시 수행:

OCB는 데이터의 무결성을 보장하면서 동시에 암호화를 수행하는 특징을 가지고 있습니다. 이로써 데이터의 기밀성과 무결성을 동시에 보호할 수 있습니다.

(4) 메시지 인증 부분:

OCB에서는 메시지 인증 부분을 사용하여 블록 단위의 무결성을 검증합니다. 이는 데이터가 변경되거나 손상되었는지 검증할 수 있도록 해줍니다.

 

2. OCB (Offset Codebook Mode)  예시:

 

다음은 Python에서 PyCryptodome 라이브러리를 사용하여 AES 알고리즘과 OCB 모드를 활용하는 간단한 예시

 코드입니다. 

 - pip install pycryptodome 명령을 사용하여 PyCryptodome 라이브러리를 설치하여 실행 합니다.

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
from Crypto.Protocol.KDF import scrypt

def encrypt(message, key):
    cipher = AES.new(key, AES.MODE_OCB)
    ciphertext, tag = cipher.encrypt_and_digest(pad(message.encode('utf-8'), AES.block_size))
    return (ciphertext, tag)

def decrypt(ciphertext, tag, key):
    cipher = AES.new(key, AES.MODE_OCB)
    plaintext = unpad(cipher.decrypt_and_verify(ciphertext, tag), AES.block_size)
    return plaintext.decode('utf-8')

# 키 생성 (16, 24, 또는 32 바이트) : 6 바이트의 키를 scrypt를 사용하여 생성
key = scrypt("your_password", "your_salt", 16, N=2**14, r=8, p=1)

# 평문
message = "OCB 암호화 예제입니다."

# 암호화
ciphertext, tag = encrypt(message, key)
print("암호문:", ciphertext)
print("인증 태그:", tag)

# 복호화
decrypted_message = decrypt(ciphertext, tag, key)
print("복호화된 평문:", decrypted_message)
728x90
반응형