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