메시지 인증 코드

From CS Wiki
Message Authentication Code

목표[edit | edit source]

  • 메시지의 무결성(integrity)메시지 인증(authentication)
    • 자신에게 도착한 메시지가 송신자가 보낸 그대로 인지를 확인할 수 있다
  • 메시지 인증코드로 막을 수 있는 것들
    • H가 A인척하고 B에게 메시지를 보낸다.
    • A가 B에게 보내는 메시지를 H가 중간에서 조작한다.
(A가 B에게 보여준 메시지를 티 안나게 조작해서 다른 메시지를 보내는 경우도 포함)

생성[edit | edit source]

해시(메시지+암호키)
  • 주로 해시를 이용하지만 대칭키 암호화 알고리즘을 사용하기도 함
  • 해시를 이용한 메시지 인증 코드를 HMAC이라고 부름

절차[edit | edit source]

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

  1. 송신자 앨리스와 수신자 밥은 사전에 키를 공유해 둔다.
  2. 송신자 앨리스는 송금 의뢰 메시지를 기초로 해서 MAC 값을 계산한다(공유 키를 사용).
  3. 송신자 앨리스는 수신자 밥에게 송금 의뢰 메시지와 MAC 값을 보낸다.
  4. 수신자 밥은 수신한 송금 의뢰 메시지를 기초로해서 MAC 값을 계산한다(공유 키를 사용).
  5. 수신자 밥은 앨리스로부터 수신한 MAC 값과 계산으로 얻어진 MAC 값을 비교한다.
  6. 수신자 밥은 2개의 MAC 값이 동일하면 송금 의뢰가 틀림없이 앨리스로부터 온 것이라고 판단한다(인증 성공). 동일하지 않다면 앨리스로부터 온 것이 아니라고 판단한다(인증 실패)

사용 사례[edit | edit source]

  • SWIFT
    • 송금결제 메시지를 인증하고 무결성을 보장하기 위해 위해 메시지 인증 코드 사용
  • IPSec
    • 통신 내용의 인증과 무결성을 확인하기 위해 메시지 인증 코드를 이용
  • SSL/TLS
    • 통신 내용의 인증과 무결성을 확인하기 위해 메시지 인증 코드를 이용
  • VPN
    • 공용 네트워크로 전달되는 트래픽은 암호화 및 메시지인증 코드 등을 사용하여 기밀성과 무결성을 제공[1]

취약점[edit | edit source]

재전송 공격[edit | edit source]

  • 공격 시나리오
    1. A가 B에게 보내는 송금의뢰 메시지와 메시지 인증 코드를 H가 가로챈다.
    2. H는 그 메시지와 메시지 인증 코드를 그대로 다시 전송함으로써 A가 아님에도 송금 요청을 할 수 있다.
  • 해결방안
    • 순서 번호(sequence number): 송신 메시지에 매회 1씩 증가하는 번호를 함께 전달
    • 타임스탬프(timestamp): 송신 메시지에 현재 시각을 함께 전달
    • 비표(nonce): 메시지를 수신하기에 앞서 수신자는 송신자에게 일회용의 랜덤한 값(비표) 전달

부인 방지 불가[edit | edit source]

  • 공격 시나리오
    1. A는 B에게 결제 요청 메시지와 메시지 인증 코드를 보낸다.
    2. B는 A의 메시지 인증 코드를 확인하여, 결제 요청이 A로부터 온 것임을 확인한다.
    3. B는 A에게 결제를 하고 물건을 보내줄 것을 요청한다.
    4. A는 B에게 결제 요청을 한 적이 없다고 거짓말을 한다.
    5. 메시지 인증 코드에 사용된 암호키는 A와 B만 알고 있는 것이므로, B는 제3자에게 A가 거짓말하고 있다는 사실을 증명할 수 없다.
  • 해결법