Daylogs/Security

Salted Hashes vs. HMAC

ohgyun 2021. 2. 9. 00:49

발생일: 2020.05.25

키워드: HMAC, salted hash

문제:

 

HMAC 과 hash 에 salt 를 적용한 게 어떤 차이가 있을까?

실제로 쓰다보면 큰 차이가 없는 것 같은데...

 


해결책:

 

잘 정리된 글이 있다.

security.stackexchange.com/questions/29951/salted-hashes-vs-hmac

 

요약하면,

 

- 해시 함수는 기본적으로 길이에 제한이 있는 취약점(length extension)이 있음

  (예: 모든 해시값에 대한 사전을 만들어두고 역으로 조회)

 

- 이런 사전형 복호화를 방어하기 위해 salt를 적용하는데, (예: hash(원본 + salt))

  이렇게 해도 사전으로 복호화하면 몇 가지 패턴으로 원본과 salt를 구별해낼 수 있음

- 원래 HMAC(메시지 인증 코드, hash-based message authentication code)의 목적은 비밀번호의 단방향 해시를 생성하는 것과는 다름.

  HMAC은 메시지가 공개되어 있고, key가 비밀임. 메시지의 무결성과 송신자 여부를 확인하기 위한 것임. 그래서 salt 대신 key라는 용어를 씀. 예) hmac(message, key)

- hmac은 중첩적으로 수십~수만번 hash 처리함(물론 salt를 써야함). 사전으로 복호화하더라도 많은 비용이 듬.

결론: hmac 이 단순히 hash + salt 하는 것보단 약칸 느리지만 안전하겠음

 

반응형