밖으로 나가는 값이 변조됐는지 잡아내는 서명·검증 유틸을 제공합니다.
HMAC은 공유 비밀키와 메시지로 인증값을 계산해 데이터의 출처와 무결성을 확인합니다. 내용을 숨기지는 않으므로 암호화가 필요한 데이터와는 구분해야 합니다. 한 키를 여러 용도에 돌려쓰지 않도록 용도를 입력과 키 계층에 함께 넣습니다.
서명값은 변조를 잡아내지만 메시지 내용을 숨기지 않으므로, 공개돼도 괜찮은 데이터에만 씁니다.
원문이 같아도 쿠키·요청·웹훅처럼 용도가 다르면 인증값이 달라지게 합니다.
비교에 걸린 시간 차이로 인증값을 조금씩 맞혀 가지 못하도록 상수 시간 비교를 씁니다.
HMAC-SHA256으로 서명합니다. 서명해도 내용은 그대로 보인다는 점을 직접 확인해 보세요.
0 / 200바이트 · 입력은 저장되지 않습니다
아래 증명은 글로 된 설명이 아닙니다. 버튼을 누르면 이 서버가 지금 직접 계산합니다.
두 층을 따로 고정합니다. 아래층의 HMAC-SHA-256은 규격 문서에 실린 값을 재현하고, 위층의 envelope은 고정 키에서 항상 같은 문자열을 냅니다. 위층까지 고정해야 다른 언어로 다시 구현해도 서로의 서명을 검증할 수 있습니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
HMAC은 내용을 숨기지 않고 출처와 무결성만 보장합니다. 키를 교체하는 동안에도 이전 키로 서명한 값을 알아보고 재서명 대상으로 표시합니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
서명 검증은 상수 시간 비교로 이뤄지고, 같은 키라도 purpose가 다르면 서명이 통하지 않습니다. 한 용도의 서명값을 다른 용도로 옮겨 쓸 수 없습니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
그럴듯해 보이는 `SHA-256(비밀키 + 메시지)`는 MAC이 아닙니다. 공격자는 비밀키를 몰라도 길이만 알면, 원래 메시지 뒤에 내용을 덧붙인 메시지의 MAC을 계산해 낼 수 있습니다. 이 증명에서는 viewer 권한 토큰이 admin으로 바뀝니다. 같은 입력을 HMAC에 넣으면 막힙니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 먼저 실었습니다. 사례는 이 분야에서 실제로 보안이 뚫린 일을 다룬 자료입니다.
중첩 구성이 길이 확장 공격을 어떻게 막는지 설명합니다.
증명이 재현하는 고정 벡터의 출처입니다.
SHA(비밀‖메시지)를 MAC으로 쓴 실제 서비스가 어떻게 뚫렸는지 보여 줍니다.
다음 단계
소비 언어마다 고정 test vector를 추가해, versioned envelope가 런타임이 달라도 호환되는지 검증합니다.