본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Message Authentication Code
  • 메시지의 무결성(integrity)과 메시지 인증(authentication)
    • 자신에게 도착한 메시지가 송신자가 보낸 그대로 인지를 확인할 수 있다
  • 메시지 인증코드로 막을 수 있는 것들
    • H가 A인척하고 B에게 메시지를 보낸다.
    • A가 B에게 보내는 메시지를 H가 중간에서 조작한다.
(A가 B에게 보여준 메시지를 티 안나게 조작해서 다른 메시지를 보내는 경우도 포함)
해시(메시지+암호키)
  • 주로 해시를 이용하지만 대칭키 암호화 알고리즘을 사용하기도 함
  • 해시를 이용한 메시지 인증 코드를 HMAC이라고 부름

앨리스가 밥에게 송금 의뢰 메시지를 전달하는 경우 가정

  1. 송신자 앨리스와 수신자 밥은 사전에 키를 공유해 둔다.
  2. 송신자 앨리스는 송금 의뢰 메시지를 기초로 해서 MAC 값을 계산한다(공유 키를 사용).
  3. 송신자 앨리스는 수신자 밥에게 송금 의뢰 메시지와 MAC 값을 보낸다.
  4. 수신자 밥은 수신한 송금 의뢰 메시지를 기초로해서 MAC 값을 계산한다(공유 키를 사용).
  5. 수신자 밥은 앨리스로부터 수신한 MAC 값과 계산으로 얻어진 MAC 값을 비교한다.
  6. 수신자 밥은 2개의 MAC 값이 동일하면 송금 의뢰가 틀림없이 앨리스로부터 온 것이라고 판단한다(인증 성공). 동일하지 않다면 앨리스로부터 온 것이 아니라고 판단한다(인증 실패)
  • SWIFT
    • 송금결제 메시지를 인증하고 무결성을 보장하기 위해 위해 메시지 인증 코드 사용
  • IPSec
    • 통신 내용의 인증과 무결성을 확인하기 위해 메시지 인증 코드를 이용
  • SSL/TLS
    • 통신 내용의 인증과 무결성을 확인하기 위해 메시지 인증 코드를 이용
  • VPN
    • 공용 네트워크로 전달되는 트래픽은 암호화 및 메시지인증 코드 등을 사용하여 기밀성과 무결성을 제공[1]
  • 공격 시나리오
    1. A가 B에게 보내는 송금의뢰 메시지와 메시지 인증 코드를 H가 가로챈다.
    2. H는 그 메시지와 메시지 인증 코드를 그대로 다시 전송함으로써 A가 아님에도 송금 요청을 할 수 있다.
  • 해결방안
    • 순서 번호(sequence number): 송신 메시지에 매회 1씩 증가하는 번호를 함께 전달
    • 타임스탬프(timestamp): 송신 메시지에 현재 시각을 함께 전달
    • 비표(nonce): 메시지를 수신하기에 앞서 수신자는 송신자에게 일회용의 랜덤한 값(비표) 전달

부인 방지 불가

편집 원본 편집
  • 공격 시나리오
    1. A는 B에게 결제 요청 메시지와 메시지 인증 코드를 보낸다.
    2. B는 A의 메시지 인증 코드를 확인하여, 결제 요청이 A로부터 온 것임을 확인한다.
    3. B는 A에게 결제를 하고 물건을 보내줄 것을 요청한다.
    4. A는 B에게 결제 요청을 한 적이 없다고 거짓말을 한다.
    5. 메시지 인증 코드에 사용된 암호키는 A와 B만 알고 있는 것이므로, B는 제3자에게 A가 거짓말하고 있다는 사실을 증명할 수 없다.
  • 해결법
방식 기반 설명
HMAC 해시 함수 해시 함수(SHA-256 등)에 키를 두 번 섞어 계산한다. RFC 2104, FIPS 198-1. TLS, IPSec, JWT 등에서 널리 쓴다.
CBC-MAC 블록암호 메시지를 CBC 모드로 암호화한 마지막 블록을 태그로 쓴다. 가변 길이 메시지에서는 위조가 가능해 단독 사용이 위험하다.
CMAC 블록암호 CBC-MAC의 약점을 보완하려고 마지막 블록에 서브키를 XOR한다. NIST SP 800-38B 권고 방식이다.
GMAC 블록암호(GCM) GCM 모드의 인증 부분(GHASH)만 사용한 MAC이다. 암호화 없이 인증만 할 때 쓴다.

암호화와 인증을 한 번에 처리하는 인증 암호(AE) 방식으로 CCM, GCM이 있다. 자세한 모드는 블록암호 모드 참고.

HMAC(K,m)=H((K′⊕opad)∥H((K′⊕ipad)∥m))

  • K'는 키를 해시 함수의 블록 크기(SHA-256은 64바이트)에 맞춘 값이다. 키가 블록보다 길면 먼저 해시하고, 짧으면 0으로 채운다.
  • ipad는 0x36, opad는 0x5C를 블록 길이만큼 반복한 상수이다.
  • 안쪽 해시와 바깥쪽 해시 두 번을 거치므로 단순히 H(K‖m)을 쓸 때 생기는 길이 확장 공격을 막는다.

해시·MAC·전자서명 비교

편집 원본 편집
구분 해시 함수 MAC 전자서명
키 없음 대칭키(공유 비밀키) 개인키 서명, 공개키 검증
무결성 제공(변조 후 재계산 가능하므로 단독으로는 약함) 제공 제공
출처 인증 제공 안 함 제공 제공
부인방지 제공 안 함 제공 안 함 제공
속도 빠름 빠름 느림
예 SHA-256, SHA-3 HMAC, CMAC, GMAC RSA 서명, DSA, ECDSA
  • MAC은 무결성과 출처 인증을 제공하지만 대칭키를 공유하기 때문에 부인방지는 제공하지 않는다.
  • HMAC 식의 ipad(0x36)와 opad(0x5C), 이중 해시 구조가 자주 출제된다.
  • 재전송 공격은 MAC만으로 막을 수 없으며 순서 번호·타임스탬프·Nonce를 함께 쓴다.