Notice
Recent Posts
Recent Comments
Link
반응형
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붕어의 개발 기록

MAC(Massage Authentication Code) 본문

공부/암호학

MAC(Massage Authentication Code)

은붕어_ 2025. 8. 14. 18:00
반응형

오늘은 MAC입니다. MACBOOK의 MAC도 아닌 NIC에 할당되는 물리주소인 MAC도 아닌 Massage Authentication Code의 약자입니다 껄껄껄….

데이터가 위조되지 않았는지, 그리고 정말 믿을 수 있는 사람이 보낸 게 맞는지를 검증하고 싶을 때 필요한 것이 바로 MAC (Message Authentication Code)입니다. 해시와 유사한 부분도 있지만 보안 키까지 포함하여 메시지를 인증하는 방식입니다.


MAC이란?

  • 메시지 + 비밀 키 -(MAC함수)→ MAC 값(인증 태그)
  • 수신자도 같은 키로 다시 계산해서, 원래 보낸 사람인지 확인

즉, MAC은 해시처럼 보이지만 비밀 키를 사용합니다.

그래서 메시지의 무결성뿐 아니라 송신자의 인증도 확인할 수 있습니다.


 

위의 구조는 MAC의 작동 구조를 설명하기 좋은 예시입니다.

  1. 앨리스와 밥이 공유 키를 미리 정함
  2. 앨리스가 메시지 + 키로 MAC을 생성합니다
  3. 앨리스가 밥에게 메시지와 MAC를 보냅니다.
  4. 밥은 메시지 + 키로 MAC을 계산합니다.
  5. 밥이 받은 MAC 값과 만든 MAC 값을 비교합니다.
  6. 같으면 인증 성공, 다르면 위조 또는 오류

MAC의 보안 요구사항

위협 유형 방어 방식

충돌 공격 서로 다른 두 입력값 M ≠ M′에 대해,MAC_K(M) == MAC_K(M′)인 경우를 찾는 공격입니다.
생일역설에 기반하여 공격자는 2^(n/2)의 공격만 진행해도 충돌이 발생활 확률이 50%가 됩니다.
충분한 길이 확보  
리플레이 공격 리플레이 공격이란, 공격자가 이전에 가로챈 유효한 메시지와 MAC 값을 그대로 재전송함으로써 시스템을 속이는 공격입니다. 일련번호, 타임스탬프 사용  

단점: 부인 방지 불가 – 제 3자에게 증명할 수 없음 (디지털 서명이 필요)


MAC의 종류

HMAC

  • SHA-256 등 해시 함수 기반
  • Ipad, Opad를 활용한 이중 해싱
  • TLS, SSH, JWT 등에서 널리 사용

  1. 입력: Key, Message
  2. 키 준비 (길이 조정)
    • 해시 블록 크기보다 길면 → 해시로 줄임
    • 짧으면 → 0으로 패딩
    • → 블록 크기(예: SHA-256이면 64바이트)에 맞춰 조정한 키 K'를 만듬
  3. 두 개의 패딩 적용
    • ipad: 0x36로 채운 블록 (내부 패딩)
    • opad: 0x5C로 채운 블록 (외부 패딩)
    • 키 K1 = 키K⊕ ipad
    • 키 K2= 키K⊕ opad
  4. 두 번 해싱
    1. 내부 해시: 키 K1 과 메시지를 붙여 해싱
    2. 외부 해시: 키 K2와 K1을 붙여 다시 해싱
    3. 최종 결과가 MAC

KMAC

  • SHA-3 기반, cSHAKE 구조
  • 출력 길이 자유 설정 가능
  • MAC뿐 아니라 해시, KDF로도 활용됨

 

 

 

  1. 입력: Key, Message, 출력 길이 (L)
    • KMAC은 해시 함수처럼 작동하지만, 키를 따로 입력으로 받음
    • 출력 길이도 설정 (256비트, 512비트 등)
  2. 도메인 분리(Domain Separation) 적용
    • 내부적으로 "KMAC"이라는 태그 + 일부 포맷 정보를 같이 넣음
    • encode(K, M, L)
  3. 키와 메시지를 하나로 이어붙임
    • 키 || 메시지 || 길이 정보를 하나의 입력 블록으로 만들어줌
    • 이 입력을 그대로 Keccak 함수에 넣음
  4. Keccak 함수 (Sponge 구조)
    • Sponge 구조를 사용하여 해시 대신 MAC 값을 뽑아냄
  5. 출력: MAC 값 (길이 L만큼)
    • 사용자 요청에 따라 MAC 길이를 128비트든 512비트든 마음대로 정할 수 있음

CMAC

  • AES 기반, 해시 없이 구현
  • CBC 모드로 암호화, 마지막 블록이 MAC
  • 하드웨어에서 빠르고 효율적

 

 

 

 

 

  1. 메시지를 블록 단위로 자름
    • 예: 128비트 AES를 쓰면 16바이트씩 나눔
  2. CBC 모드처럼 암호화(이전 결과 ⊕ 현재 블록)
    • 각 블록을 이전 암호화 결과와 XOR 후, AES로 암호화
    • 첫 블록은 그냥 0과 XOR
      1. 랜덤한 IV를 쓰면 매번 결과가 달라져서 검증이 어렵기 때문에 고정값 사용
      2. 메시지가 바뀌지 않았는지 검증 하기 위해 정해진 입력에서 항상 같은 MAC이 나와야함.
  3. 특수한 키(K1, K2) 생성
    • 원래 키에서 파생된 K1, K2를 사용해서 마지막 블록을 처리할 준비를 함
  4. 마지막 블록 패딩 여부 확인
    • 마지막 블록이 딱 맞게 떨어지면 K1 사용
    • 아니면 패딩하고 K2 사용
  5. 마지막 AES 출력이 MAC
    • 최종 출력된 블록이 바로 인증태그

MAC은 해시보다 한 단계 더 나아간 인증 도구입니다. 간단한 구조처럼 보여도 MAC을 안전하게 구현하려면, 키 관리, 구조 설계, 출력 길이 등 여러 요소를 고려해야 합니다.

 

 

 

 

 

 

반응형

'공부 > 암호학' 카테고리의 다른 글

비대칭 암호화와 하이브리드 암호화  (0) 2025.09.04
키 교환  (3) 2025.08.28
인증암호화  (0) 2025.08.21
Hash Function  (4) 2025.08.07
Cryptography  (3) 2025.07.31