728x90

GMAC은 Galois Message Authentication Code의 약자로 주로 GCM(Galois/Counter Mode)이라는 블록암호 운영모드에서 사용하는 인증 코드 생성 방식입니다.

GMAC는 데이터의 무결성과 진위확인을 위해 사용됩니다.

GCM에서 암호화는 하지 않고 인증만 수행하는 경우를 GMAC이라고 부릅니다.

 

GMAC 동작과정

GMAC은 기본적으로 블록암호 알고리즘과 Galois 필드(GF(2^128))에서의 수학 연산을 기반으로 합니다. 아래는 GMAC 동작과정을 간단하게 설명한 것입니다.

 

 

입력값

  1. 비밀키(K) : 블록암호 알고리즘에 사용하는 키
  2. 초기화 벡터(IV) : Nonce, 길이는 일반적으로 96비트
  3. 인증할 메시지(A) : 암호화하지 않고 인증만 수행할 데이터

동작절차

  • 해시 서브키(H) 생성
    • 블록암호 알고리즘으로 128비트의 0 블록을 암호화하여 해시키 H = K(0128)를 생성
    • 이 키는Galois 필드 연산에 사용됩니다.
  • GHASH 함수 준비
    • GMAC의 핵심은 GHASH라는 함수이니다.
    • GHASH는 해시 키 H와 입력 메시지 A를 Galois 필드에서 곱셈 및 덧셈하여 해시값을 만듭니다.
    • 메시지 A는 128bit 블록으로 패딩되어 처리됩니다.
  • Y0 생성(IV 처리)
    • 96bit IV의 경우 Y_0 = IV || 0x00000001
    • 그 외의 경우 GHASH를 사용하여  Y_0 계산
  • 태그 생성
    • GHASH 결과 S를 얻은 후 Tag = K(Y_0) ⊕ S 계산
    • 이 최종 결과가 GMAC 태그입니다. 이 값은 메시지의 무결성을 보장합니다.
function GMAC(Key, IV, AAD):
    # 1. 해시 서브키 H 계산
    H := AES_Encrypt(Key, 0^128)

    # 2. IV 처리 → 초기 counter 블록 Y₀ 계산
    if length(IV) == 96 bits:
        Y0 := IV || 0x00000001
    else:
        Y0 := GHASH(H, [], IV)  # IV를 GHASH로 처리하여 Y0 생성

    # 3. AAD에 대한 해시 계산
    S := GHASH(H, AAD)

    # 4. 최종 태그 계산
    Tag := AES_Encrypt(Key, Y0) ⊕ S

    return Tag

 

 

보조함수 GHASH

function GHASH(H, AAD):
    X := 0^128  # 초기값

    # AAD를 128비트 블록으로 나눔 (패딩 포함)
    AAD_blocks := split_and_pad(AAD, 128)

    for block in AAD_blocks:
        X := (X ⊕ block) × H  # 곱셈은 GF(2^128) 상에서 수행

    return X

 

GCM과 GMAC의 입력 구성

항목 GCM GMAC
Key(K) O O
IV O
AAD 선택적 필수(인증대상)
Plaintext(P) X
Authentication AAD + P AAD
Encryption X
728x90

+ Recent posts