흔히 우리가 문서가 변조 또는 위조되었는지 확인하기 위해서 핑거프린트(finger frint)를 사용하지요. 디지털에서는 어떻게 위조되었는지 알 수 있을까요?

디지털 메시지를 다룰때 우리는 그 메시지가 변경이 되었는지 또는 이 메시지가 내가 알고 있는 그 사람에게 왔는지 확인해야할 필요가 있는데 메시지 변경 감지 코드(MDC:Modification Detection Code)메시지 인증 코드(Message Authentication Code)가 그 역할을 합니다.

 

MDC(Modification Detection Code)

메시지 변경 감지 코드는 메시지의 변경이 일어났는지 아닌지를 확인합니다. 즉, 데이터의 무결성을 판단하게 됩니다.

 

송신자 : 송신자는 원본의 메시지는 그대로 보내고 그 메시지를 암호학적 해쉬 함수를 통해 해쉬값을 만든게 MDC인데, 안전한 채널로 보내게 됩니다. 이때 안전한 채널로 외부로부터 변경이 되지 않는다는 보장이 되어야합니다.


암호학적 해쉬 함수 : 암호학적 해쉬 함수는 메시지의 해쉬 값을 만드는 함수로 일방향 함수여야합니다. 그러니까 해쉬값을 만드는 것은 되지만 해쉬값으로부터 원본 값을 알 수 없어야하고 메시지와 해쉬값이 1:1이 되어야합니다. 암호학적 해쉬함수의 기준은 3가지 저항성을 충족시켜야합니다. 
1) preimage resistance
2) second preimage resistance
3) collision resistance

한마디로 깨기 어려워야한다는 것이고, 저도 암호학적 해쉬함수에 해박한 지식은 없으므로 이정도하고 넘어갑시다.

수신자 : 수신자는 전달받은 메시지를 MDC로 다시 만들며 전달받은 MDC와 비교하여 이 둘이 같다면 변경이 되지 않은 것이고 변경이 되었다면 이 메시지는 변경되었다고 판단합니다.

 

MAC(Message Authentication Code), TCP/IP 2계층 아님.

메시지가 내가 원하는 바로 그 사람으로부터 왔는지 판단하려면 어떻게 하면 좋을까요? 서로만 아는 사실 하나만 추가하면 됩니다. 바로 키만 섞어주면 되죠.

 

송신자 : 송신자는 수신자와 미리 공유된 키를 가지고 메시지 해쉬값을 만들어 냅니다. 이것이 우리가 이야기하는 메시지 인증 코드, MAC입니다. 이것을 메시지와 함께 보냅니다.

수신자 : 송신자로부터 받은 MAC과 메시지를 키와 함께 해쉬값을 만든 후 비교합니다. 같다면 원하는 송신자로 온것이 확인이 되고 아니라면 메시지가 변경이 되었거나, 누군가가 임의로 보낸거겠죠? 

 

 

MAC은 이처럼 무결성과 인증을 같이 제공합니다. 

CMAC

메시지는 일반적으로 큰 경우가 많기 때문에 이 메시지를 한번에 MAC으로 만들 수는 없습니다. 그래서 메시지를 일정 비트 단위로 쪼개서 MAC을 만들어가는데 그 중 한가지가 CMAC입니다.

CMAC은 CBCMAC과 같은 의미로 불리는데 블록 암호에서 CBC와 유사한 방법을 사용하기 때문입니다.  CMAC을 진행하기 전에 송신자와 수신자는 key를 공유한 상황이어야합니다.

 

CMAC은 다음의 과정을 거치게 됩니다. 

 

1) 메시지를 m bit씩 n개로 쪼갭니다.

2) 만약 마지막 메시지 블록이 m bit가 못된다면 나머지 첫비트는 1, 다른 비트는 전부 0으로 채워버립니다. 패딩이라고 하지요.

3) 이제 앞의 메시지 블록부터 차례대로 사전에 공유된 키, key로 암호화하고 암호화한 값을 이 후의 블록과 xor을 진행합니다.

이 과정을 마지막 블록까지 진행합니다.

4) 마지막 블록에는  k와 xor 연산을 진행한 후 마지막 암호화를 진행합니다.  k는 마지막에 한번만 xor연산을 위해 사용되는데 key로부터 파생된 값입니다. m bit의 메시지 블록을 xor하기 위해서는 k도 m bit의 크기를 갖고 있어야겠지요.

5) 그 결과를 왼쪽의 n비트를 뽑아서 메시지에 붙여서 보냅니다.

 

 

 

이상으로 메시지 변경 감지 코드, 메시지 인증 코드, 메시지 인증 코드의 CMAC 방식을 알아보았습니다.

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,