0 / 4
메시지 인증 코드(MAC, Message Authentication Code)
메시지 원문과 비밀키 K를 함께 해시 함수에 넣으면 고정 길이 값이 나온다. 이 값이 MAC 값이다. 보내는 쪽은 원문 뒤에 MAC 값을 붙여 보내고, 받는 쪽은 같은 키로 MAC 값을 직접 다시 계산해 붙어 온 값과 비교한다.
예: Alice가 Bob에게 “1000원 송금”이라는 메시지를 보낸다. 원문은 그대로 보내고, 뒤에 MAC 값을 붙인다.
1 / 4
Alice: MAC 값 만들기
Alice가 원문 “1000원 송금”과 비밀키 K를 해시 함수에 함께 넣어 MAC 값 3f9a를 만든다. 키가 섞여 들어가므로 K를 모르면 같은 값을 만들 수 없다.
2 / 4
Alice → Bob: 원문에 MAC 값을 붙여 보내기
Alice가 원문 뒤에 MAC 값을 붙여 함께 보낸다. 둘을 더하는 게 아니라 나란히 붙여 보내는 것이다. 비밀키 K는 보내지 않고, 원문은 암호화하지 않아 중간에서 누구나 읽을 수 있다.
3 / 4
Bob: MAC 값 다시 계산
Bob이 받은 원문과 자기가 가진 같은 비밀키 K를 해시 함수에 넣어 MAC 값을 직접 다시 계산한다. 결과는 3f9a다.
4 / 4
Bob: 두 값 비교
다시 계산한 값(3f9a)과 원문에 붙어 온 MAC 값(3f9a)이 같다. 원문이 바뀌지 않았고(무결성), 같은 키를 가진 Alice가 보냈다(메시지 인증)는 것을 확인하고 받아들인다.
1 / 6
Alice: MAC 값 만들기
Alice가 원문 “1000원 송금”과 비밀키 K를 해시 함수에 함께 넣어 MAC 값 3f9a를 만든다.
2 / 6
Alice → Mallory: 가로채기
Alice가 원문에 MAC 값을 붙여 보냈는데, 중간에서 공격자 Mallory가 가로챘다.
3 / 6
Mallory: 원문 바꾸기
Mallory가 원문을 “9000원 송금”으로 바꾼다. 바뀐 원문에 맞는 MAC 값을 만들려면 비밀키 K를 함께 넣어 계산해야 하는데, Mallory에게는 K가 없다. 그래서 붙어 있던 MAC 값 3f9a는 그대로 둔다.
4 / 6
Mallory → Bob: 보내기
바뀐 원문과 원래 MAC 값 3f9a가 Bob에게 도착한다.
5 / 6
Bob: MAC 값 다시 계산
Bob이 받은 원문 “9000원 송금”과 같은 비밀키 K를 해시 함수에 넣으니 81c2가 나온다.
6 / 6
Bob: 두 값 비교
다시 계산한 값(81c2)과 붙어 온 MAC 값(3f9a)이 다르다. 중간에 원문이 바뀐 것을 알아채고 메시지를 버린다.
1 / 6
Alice: 해시 값 만들기
Alice가 원문 “1000원 송금”만 해시 함수에 넣어 해시 값 3f9a를 만든다. 키는 넣지 않는다.
2 / 6
Alice → Mallory: 가로채기
Alice가 원문에 해시 값을 붙여 보냈는데, 중간에서 공격자 Mallory가 가로챘다.
3 / 6
Mallory: 원문과 해시 값 바꾸기
Mallory가 원문을 “9000원 송금”으로 바꾼다. 해시 함수는 키 없이 누구나 계산할 수 있으므로, 바뀐 원문의 해시 값 c71e를 직접 만들어 원래 값 대신 붙인다.
4 / 6
Mallory → Bob: 보내기
바뀐 원문과 새로 만든 해시 값 c71e가 Bob에게 도착한다.
5 / 6
Bob: 해시 값 다시 계산
Bob이 받은 원문 “9000원 송금”을 해시 함수에 넣으니 c71e가 나온다.
6 / 6
Bob: 두 값 비교
다시 계산한 값(c71e)과 붙어 온 해시 값(c71e)이 같아서, Bob은 바뀐 메시지를 그대로 받아들인다. 키가 없으면 변조를 잡지 못한다.