HMAC(Hash-based Message Authentication Code)
메시지 인증 코드(Message Authentication Code, MAC)는 메시지의 인증에 쓰이는 정보(코드)이다. 메시지의 무결성 및 신뢰성을 보장하는 용도로 MAC을 사용한다.
무결성이란, 서버 입장에서 클라이언트로부터 API 요청을 받았을 때, 이 요청이 신뢰할 수 있는 것인지 (정보가 중간에 변경없이 그대로 전달된 것인지)에 대한 성질을 말한다.
HMAC은 인증을 위한 Secret Key와 임의의 길이를 가진 Message를 해시 함수(알고리즘)을 사용해서 생성한다. 해시 함수로는 MD5, SHA-256과 같은 일반적인 해시 함수를 그대로 사용할 수 있으며 각 알고리즘에 따라 다른 고정길이의 MAC(Hash value)가 생성된다.
- Secret Key: 서버와 클라이언트가 함께 알고 있는 외부로 유출되어서는 안되는 값.
- Message: 클라이언트가 전송하는 요청의 전체(Header + Body)가 될 수도 있고, URL만 될 수도 있다.
여기까지가 일반적인 HMAC에 대한 정의이고, 위의 내용만 보면 이해가 쉽지 않아 아래에 좀 더 쉽게 설명하자면,
HMAC은 해싱기법을 이용해서 메시지의 위변조가 있었는지 체크하는 인증 기법이다.
해싱 자체는 원문 메시지를 일정한 길이의 다른 메시지로 변환하되, 일정 길이로 떨어지게 하는 기법. 원문을 해싱하여 나온 메시지를 다이제스트 라고 한다.
해싱의 결과는 유일하고(즉, A를 언제든 같은 해싱 기법으로 변환하면 항상 A' 가 된다), 해싱을 풀어 원문을 찾아낼 수 없다는 것이 장점.
HMAC으로 메세지 위변조 감지 절차
1. 메시지 보내는 쪽과 받는 쪽을 가정하고 이 둘은 두 가지를 공통적으로 알고 있어야한다. 키 그리고 어떤 HMAC 알고리즘 사용할지.(HMAC의 종류가 다양하므로) HMAC-SHA256 알고리즘을 사용한다고 가정한다면(그림에서 HMAC-SHA256 알고리즘은 암호화 알고리즘이 아님)
2. 보내는 쪽에서 보내고 싶은 내용이 있고, 그리고 공통의 KEY(SecretKey)가 있다. 이를 사용해서 보내는 쪽에서 시그니처 Signature라는 것을 생성하는데, 이 값은 메시지의 hash 값이다. KEY와 내용을 HASH 알고리즘에 적용하면, 시그니처가 생성된다.
3. 받는 쪽에서도 KEY(SecretKey)를 알고 있고 알고리즘도 알고 있다. 받는 쪽에서도 똑같이 Signature를 만든 후, 이를 받은 Signature와 맞는지 검증한다.
4. 중간에 메시지가 위조되었다면, "보낸 시점의 메시지와 받은 시점의 메시지가 다르니까 signature도 다르게 나올것이다." 라는 것이 HMAC의 컨셉이다.만약 signature까지 위조하려고 해도, 위조자는 KEY 값을 모르니까 위조할 수 없다는 점이 HMAC의 장점.
HMAC-SHA256에서 SHA-256은?SHA- 시리즈들은 Secure Hash Algorithm 이라는 이름으로, 해시 알고리즘의 종류들을 말한다. SHA-1, SHA-2 .. 등이 있는데, 중간에 모든 숫자가 있는 건 아니다. SHA-2 는 다이제스트의 길이가 다양한데, 이 중 다이제스트의 길이가 256byte인 것을 SHA-256이라고 한다.
'Tech develop > 인증' 카테고리의 다른 글
RSA 암호 알고리즘이란? (0) | 2021.07.29 |
---|---|
블록 암호화에서의 운영 모드 및 패딩 (0) | 2021.07.29 |
[Android] WhiteBox (0) | 2021.07.29 |
Android KeyStore 와 Keystore 의 차이 (0) | 2021.07.29 |