hmac — 메시지 인증을 위한 키 해싱

소스 코드: Lib/hmac.py


이 모듈은 RFC 2104에서 설명한 대로 HMAC 알고리즘을 구현합니다.

hmac.new(key, msg=None, digestmod=None)

새로운 hmac 객체를 반환합니다. key는 비밀 키를 제공하는 바이트열이나 바이트 배열(bytearray) 객체입니다. msg가 있으면, update(msg) 메서드 호출이 수행됩니다. digestmod는 다이제스트 이름, 다이제스트 생성자 또는 HMAC 객체가 사용할 모듈입니다. hashlib.new()에 적합한 모든 이름을 지원하며 기본값은 hashlib.md5 생성자입니다.

버전 3.4에서 변경: 매개 변수 key는 바이트열 또는 바이트 배열 객체일 수 있습니다. 매개 변수 msghashlib가 지원하는 모든 형이 될 수 있습니다. 매개 변수 digestmod는 해시 알고리즘의 이름이 될 수 있습니다.

Deprecated since version 3.4, will be removed in version 3.8: digestmod에 대한 묵시적 기본 다이제스트로서의 MD5는 폐지되었습니다.

hmac.digest(key, msg, digest)

주어진 비밀 keydigestmsg의 다이제스트를 반환합니다. 이 함수는 HMAC(key, msg, digest).digest()와 동등하지만, 최적화된 C 나 인라인 구현을 사용해서, 메모리에 맞는 메시지에는 더 빠릅니다. 매개 변수 key, msgdigestnew()에서와 같은 뜻입니다.

CPython 구현 세부 사항, 최적화된 C 구현은 digest가 문자열이고 OpenSSL에서 지원하는 다이제스트 알고리즘의 이름일 때만 사용됩니다.

버전 3.7에 추가.

HMAC 객체에는 다음과 같은 메서드가 있습니다:

HMAC.update(msg)

hmac 객체를 msg로 갱신합니다. 반복되는 호출은 모든 인자를 이어붙인 단일 호출과 동등합니다: m.update(a); m.update(b)m.update(a + b)와 동등합니다.

버전 3.4에서 변경: 매개 변수 msghashlib가 지원하는 모든 형이 될 수 있습니다.

HMAC.digest()

지금까지 update() 메서드로 전달된 바이트들의 다이제스트를 반환합니다. 이 바이트열 객체는 생성자에게 주어진 다이제스트의 digest_size와 길이가 같습니다. NUL 바이트를 포함하여 비 ASCII 바이트를 포함할 수 있습니다.

경고

검증 루틴에서 digest()의 출력을 외부에서 제공되는 다이제스트와 비교할 때, == 연산자 대신 compare_digest() 함수를 사용하여 타이밍 공격의 취약점을 줄이는 것이 좋습니다.

HMAC.hexdigest()

다이제스트가 16진수만 포함하는 길이가 두 배인 문자열로 반환된다는 점을 제외하고는 digest()와 같습니다. 이것은 전자 메일이나 기타 비 바이너리 환경에서 값을 안전하게 교환하는 데 사용될 수 있습니다.

경고

검증 루틴에서 hexdigest()의 출력을 외부에서 제공되는 다이제스트와 비교할 때, == 연산자 대신 compare_digest() 함수를 사용하여 타이밍 공격의 취약점을 줄이는 것이 좋습니다.

HMAC.copy()

hmac 객체의 복사본(“클론”)을 반환합니다. 이것은 공통 초기 부분 문자열을 공유하는 문자열들의 다이제스트를 효율적으로 계산하는 데 사용할 수 있습니다.

hmac 객체에는 다음과 같은 어트리뷰트가 있습니다:

HMAC.digest_size

결과 HMAC 다이제스트의 크기(바이트).

HMAC.block_size

해시 알고리즘의 내부 블록 크기(바이트).

버전 3.4에 추가.

HMAC.name

이 HMAC의 규범적 이름, 항상 소문자, 예를 들어 hmac-md5.

버전 3.4에 추가.

이 모듈은 또한 다음 도우미 함수를 제공합니다:

hmac.compare_digest(a, b)

a == b를 반환합니다. 이 함수는 내용 기반의 단락(short circuiting) 동작을 피함으로써 타이밍 분석을 방지하도록 설계된 접근법을 사용해서 암호화에 적합하게 만듭니다. ab는 모두 같은 형이어야 합니다: str (ASCII만, 예를 들어 HMAC.hexdigest()에 의해 반환된 것과 같은 것) 이나 바이트열류 객체.

참고

ab의 길이가 다르거나 에러가 발생하면, 타이밍 공격이 이론적으로는 ab의 형과 길이에 관한 정보를 드러낼 수 있습니다 - 하지만 그 값은 아닙니다.

버전 3.3에 추가.

더 보기

모듈 hashlib

안전한 해시 함수를 제공하는 파이썬 모듈.