HMAP과 CHECKSUM

2023. 3. 28. 13:01카테고리 없음

HMAC(Hash-based Message Authentication Code)

 

메시지 인증 코드(Message Authentication Code, MAC)는 메시지의 인증에 쓰이는 정보(코드)이다. 메시지의 무결성 및 신뢰성을 보장하는 용도로 MAC을 사용한다.


-메세지 무결성을 보장하지만, 그사람이 내가 아는 사람인지 보장은 하지 않는다.
-이를 위해 송수신자는 shared secret(공유된 비밀)을 메세지에 붙여서 해쉬함수를 실행한다.

(메세지를 보낸 사람이 내가 아는 그 사람인가?)

*메세지 무결성 
hmac 인증을 위한 시크릿 키와 임의의 길이를 가진 메세지를 해시 함수 ( 알고리즘)을 사용해서 생성한다.
해시함수로는 MD5,SHA-256 과 같은 일반 적인 해시 함수를 그대로 사용 할수 있다.

  • Secret Key: 서버와 클라이언트가 함께 알고 있는 외부로 유출되어서는 안되는 값.
  • Message: 클라이언트가 전송하는 요청의 전체(Header + Body)가 될 수도 있고, URL만 될 수도 있다


1.KEY+메세지를 =해쉬함수로 돌려서 나온 값 MAC + 메세지를 
서버에게 보낸다.

2.그러면 서버는 해시 생성을 하고 (받은 메세지와 + 시크릿 키를 가지고 )= 해쉬함수를 돌래서 
해시 생성을 하고 그것을 클라이언트에서 온 MAC과 비교를 한다.

->내용이 중요한게 아니라 메세지를 보낸 사람이 그 사람이 맞는지가 핵심

 

만약 Message를 변경하지 않고, 중간에 Message를 취득한 공격자가 변조 없이 동일한 요청을 계속 보낸다면, Message를 변조하지 않았기 때문에 서버는 이를 유효한 요청으로 인식할 것이다. 이것을 Replay Attack이라고 하는데 이를 방지하기 위해서 MAC을 생성할 때 timestamp를 추가해서 사용하는 방법이 있다.
이렇게 하면 서버는 이 Message가 생성된 시간을 알 수 있고, 생성된 시간부터 일정 시간내의 호출만 정상적인 호출로 사용하면 된다.

전체 과정은 아래와 같다.

hmac

  1. 해시 생성: 클라이언트는 Key와 Message를 이용해 해시함수로부터 MAC을 생성한다.
  2. 데이터 전송: 생성된 MAC과 Message를 서버에게 전송한다. MAC은 HTTP Request Header 혹은 URL에 포함된다.
  3. 해시 생성: 서버는 클라이언트로부터 전달받은 Message와 갖고 있던 Key를 이용해 해시함수로부터 MAC을 생성한다.
  4. 해시 비교: 서버에서 생성된 MAC과 클라이언트로부터 전달받은 MAC의 값이 같은지 비교한다.

 Checksum

- 네트워크를 통해 전달된 값이 변경되었는지를 검사하는 값으로 무결성을 제공한다

 

- 네트워크를 통해 전달되는 값이 중간에 해커를 통해서든 , 네트워크의 오류로 변질되는 경우를 대비하여

  체크섬값을 같이 보내어 무결성을 제공하게 된다

 

활용 할 수 있는곳?

TCP 같은 경우는 순서가 있는 프로토콜인데  순서가  뒤죽박죽으로 전송이 되었을때, 체크섬을 가지고 어디서 부터 어디까지 전송이 되었는지 확인 가능하다.

 

또한 소프트웨어를 install 할때도 checksum을 제공해주는 곳들이 있다. 변조된 파일을 받지는 않았는지 검증 해야 할때 파일에 , 파일 전체를 해쉬를 해서 값이  바뀌었다면 체크섬에 의해서 검출이 될수 있게 한다.