Post

(Java) HmacUtils, Mac이 thread-safe하지 않다?

일반적으로 Hash, HMAC 만들 때는 아래 Util 클래스 사용한다.

1
2
org.apache.commons.codec.digest.DigestUtils
org.apache.commons.codec.digest.HmacUtils

그러나 HmacUtils은 thread-safe 하지 않다.

[!tip] 송신자 or 메시지 생성자 인증 2가지 방법
대칭키 : HMAC
비대칭키 : 서명

HMAC과 일반 hash의 차이

  • HMAC은 메시지 무결성 검증과 송신자 인증을 위해서 사용하는데,
  • 일반적인 hash 생성 할 때, static salt (또는 secret key)를 넣어서 hash를 하면, 결국 HMAC이랑 똑같은거 아닌가? 싶은 생각이 들 수 있다.
1
2
3
HmacUtils(HmacAlgorithms.HMAC_SHA_256, secretKey).hmacHex(message)
 vs
DigestUtils.sha256Hex(message + secretKey)
  • 단순 hash로도 같은 효과를 낼 수는 있지만, HMAC은 해시 함수의 구조적 약점을 보완하도록 설계되어 있어 더 안전하고, 표준화된 방법이다.
  • HMAC은 키를 패딩하고 해시를 두번 돌리는 등 단순 해시 생성하는 방식과 차이가 있고, 이 것이 보안과 충돌 저항성을 강화해준다.
  • 그래서 secretKey(비밀 salt)를 넣어서 hash를 해야 한다면, HMAC 사용하는게 더 좋다.
This post is licensed under CC BY 4.0 by the author.