Tech-Trends

블록암호화-Galois Counter Mode (GCM) - 블록 암호 운용 모드

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

 

Galois Counter Mode (GCM)는 블록 암호 운용 모드 중 하나로, 데이터의 기밀성과 무결성을 동시에 제공하는 고급 암호화 기술 중 하나입니다. GCM은 주로 인터넷에서 데이터를 안전하게 전송하기 위한 통신 보안 프로토콜에서 사용되는데, TLS (Transport Layer Security) 및 IPsec (Internet Protocol Security)에서 적용되는 암호화 모드 중 하나입니다.

 

1. Galois Counter Mode (GCM)는 블록 암호 운용 모드의 특징


아래는 GCM의 주요 특징과 동작 원리에 대한 간략한 설명입니다:

1. 블록 암호 운용 모드:
   - GCM은 블록 암호 운용 모드 중 하나로서, 대표적으로 AES (Advanced Encryption Standard) 알고리즘과 함께 사용됩니다.

2. 암호화와 인증 동시 제공(기밀성과 무결성 동시보장):
   - GCM은 CTR (Counter) 모드를 사용하여 데이터를 암호화하고, Galois 해시 함수를 사용하여 데이터의 무결성을 확인합니다. 이로써 데이터를 안전하게 전송하면서도 기밀성과 무결성을 모두 확보할 수 있습니다.

3. CTR 모드 활용:
   - GCM은 암호화에 CTR 모드를 사용합니다. CTR 모드는 각 블록을 카운터와 XOR하여 암호화하는 방식으로, 각 블록 간의 독립성을 보장하여 병렬 처리가 가능

4. 효율적이고 빠른 암호화:
    - GCM은 병렬 처리가 가능하고 효율적인 암호화 방식으로 알려져 있어, 대규모 데이터의 안전한 전송에 적합

5.  동작 원리:
   - GCM에서는 평문 데이터 블록을 카운터와 함께 XOR하여 암호화하고, Galois 해시 함수를 사용하여 추가된 데이터의 무결성을 확인합니다. 카운터는 각 블록에서 사용되는 독립적인 값으로, 복잡한 패턴을 생성하여 보안성을 높입니다.

6. 용도:
   - 주로 안전한 데이터 전송을 위한 프로토콜에서 사용됩니다. TLS (Transport Layer Security) 및 IPsec (Internet Protocol Security)에서는 GCM이 데이터의 기밀성과 무결성을 동시에 제공하는 효과적인 암호화 모드로 활용됩니다.

GCM은 효율적이고 안전한 암호화 방법으로 널리 사용되며, 안전한 통신을 위한 다양한 보안 프로토콜에서 채택되는 방식입니다.

 

 

 

2.  Galois Counter Mode (GCM)를 활용한 AES 암호화와 복호화의 간단한 예제 코드

다음은 Python에서 PyCryptodome 라이브러리를 사용한 예시입니다.

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

def encrypt(plaintext, key):
    # 16바이트의 랜덤한 IV 생성
    iv = get_random_bytes(16)

    # AES GCM 암호화 객체 생성
    cipher = AES.new(key, AES.MODE_GCM, iv)

    # 평문을 암호화
    ciphertext, tag = cipher.encrypt_and_digest(plaintext.encode('utf-8'))

    # 암호문과 IV를 반환
    return (iv + ciphertext + tag)

def decrypt(ciphertext, key):
    # IV는 첫 16바이트, 암호문은 나머지 부분
    iv = ciphertext[:16]
    ciphertext = ciphertext[16:-16]
    tag = ciphertext[-16:]

    # AES GCM 복호화 객체 생성
    cipher = AES.new(key, AES.MODE_GCM, iv)

    # 암호문을 복호화하고 무결성 검증
    plaintext = cipher.decrypt_and_verify(ciphertext, tag)

    # 복호화된 평문 반환
    return plaintext.decode('utf-8')

# 키 생성 (16, 24, 또는 32 바이트)
key = get_random_bytes(16)

# 평문
message = "안녕하세요, GCM 암호화 예제입니다."

# 암호화
ciphertext = encrypt(message, key)
print("암호문:", ciphertext)

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