
HMAC 구현 예제 및 설명
Python에서 Flask를 사용한 기본 HMAC(해시 기반 메시지 인증 코드) 구현 예제입니다.
해시 기반 메시지 인증 코드(HMAC)는 서버와 클라이언트 각각에 해당 특정 서버와 클라이언트만 알 수 있는 개인 키를 제공합니다. 클라이언트는 요청 데이터를 개인 키로 해싱하여 요청의 일부로 전송함으로써 서버에 대한 각 요청마다 고유한 HMAC(해시)를 생성합니다. HMAC이 MAC(메시지 인증 코드)보다 더 안전한 이유는 키와 메시지가 별도의 단계로 해시되기 때문입니다.

클라이언트가 서버에 요청을 보낼 때 다음 헤더를 포함합니다:
X-Authorization-Content-HMAC: HMAC 해시 (전체 요청 URI, 현재 유닉스 타임스탬프(UTC), HMAC 비밀 키)
X-Authorization-Timestamp: 클라이언트 현재 유닉스 타임스탬프(UTC)
(request)
GET /example/users?user=test&institutionID=999&signature=7e745d74b69b7f62e8e2 HTTP/1.1
Host: example.com
X-Authorization-Content-HMAC: 1c73495878ccea24af9dd281a4c883c40a3551ba799d30f4ad7d9afb6a60fbd4
X-Authorization-Timestamp: 1711662980
[ 클라이언트 요청 프로세스 ]
서버가 유효한 요청에 응답할 때 다음 헤더를 포함합니다:
X-Response-Content-HMAC: HMAC 해시 (전체 응답 본문, 현재 유닉스 타임스탬프(UTC), HMAC 비밀 키)
X-Response-Content-TimeStamp: 현재 유닉스 타임스탬프(UTC)
(response)
HTTP/2 200 OK
Date: Fri, 29 Mar 2024 06:50:49 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 52
X-Response-Content-HMAC: 529c33aac3e33bf2a95d534f8b3ac61dee2ed79232d729e571dc669417a1a2ae
X-Response-Content-TimeStamp: 1711663027
Connection: close
{"result": "ok", "users": "test", "sub": 2840345654}
[ 응답 프로세스 ]
Server response HMAC verification successful
--------------
Response timestamp: 2024-03-29T09:25:31
Current time: 2024-03-29T09:25:31
Time difference: 0
도움이 되셨다면 "별표"🌟를 눌러 추가 개선을 지원해 주세요.