DevSecOps

비밀번호 해싱에 대하여

hackid 2023. 7. 12. 05:31

대한민국에서 정보통신서비스를 제공하는 국내 기업에서는 비밀번호를 암호화 해싱할 때 대부분 SHA2(256 ~ 512)으로 해싱하게 됩니다.

그런데, SHA2는 데이터무결성을 검증하기 위한 해시 함수로 동일한 데이터를 해싱했을때 100번이든 1000번이든 동일한 결과값이 나오기 때문에 개인적으로는 비밀번호와 같은 정보를 해싱 하기에는 부적절하다고 생각했습니다.

비밀번호는 내가 아닌 다른 사람은 알아선 안된다.
Hashing vs Encryption

그렇다면 우리가 왜 SHA 해시함수를 이용하여 비밀번호를 해싱하여 저장하는지에 대해서 먼저 알아보도록 하겠습니다.

국내에서는?

비밀번호 = 개인정보이기 때문에 우리는 개인정보와 관련한 법령과 해설들을 살펴보아야 하는데요.

개인정보의 안전성 확보조치 기준 (2022.12)

제7조(개인정보의 암호화)

2 개인정보처리자는 비밀번호 및 바이오정보는 암호화하여 저장하여야 한다. 다만, 비밀번호를 저장하는 경우에는 복호화되지 아니하도록 일방향 암호화하여 저장하여야 한다.

개인정보의 기술적 관리적 보호조치 기준 (2022.08)

제6조(개인정보의 암호화)

1 정보통신서비스 제공자등은 비밀번호는 복호화 되지 아하도록 일방암호화하여 저장한다.

개인정보의 암호화 조치 안내서 (2020.12)

개인정보의 암호화 조치 안내서(2020.12월)에서는 일방향 암호 알고리즘으로 SHA-224/256/384/512 Whirlpool 등을 예시로 제시하고 있습니다.

 

우리는 2018년 12월의 기준을 가지고 현재를 살아가고 있습니다.
2018년도에는 애플 실리콘도 없었고, GeForce 4090도 없었고, 디아블로4도 없었습니다.
SHA2는 하드웨어의 성능이 높아짐에 따라 SHA1, MD5와 같이 깨질 수 있습니다.

 

해외에서는?

그렇다면 과연 해외에서는 비밀번호를 저장할 때 어떻게 하는지 알아보겠습니다.

Okta

IAM(Identity and Access Management) SaaS 서비스로 유명한 Okta의 경우에는 비밀번호를 해싱하기 위하여 bcrypt를 사용하고 있습니다.

Datadog

APM(Application Performance Management)으로 많이들 사용하고 있는 Datadog 역시 비밀번호를 암호화하기 위해서 bcrypt를 사용하고 있습니다.

NIST SP 800-63B Digital Identity Guidelines

NIST(National Institue of Standads and Technology)에서는 해시함수에 대하여 PBKDF2, HMAC, SHA-3 사용을 권고하며 32 bit 이상의 Salt를 반드시 적용하도록 가이드하고 있습니다.

 

OWASP Password Storage Cheat Sheet

OWASP에서는 비밀번호를 저장하기 위한 해싱 알고리즘으로 Argon2id, scrypt, bcrypt, PBKDF2, Parallel PBKDF2 등 다양한 알고리즘을 제안하고 있습니다.

마치며.

SHA2를 이용하여 비밀번호를 해싱하는 것이 익숙하겠지만, SHA2는 비밀번호를 일방향 해싱하기 위한 하나의 예시일 뿐 SHA2가 아닌 다른 방법으로 비밀번호를 해싱하여도 전혀 무관하다는 것을 알 수 있습니다.

비밀번호를 해싱하여 저장하는 목적은 해싱된 비밀번호가 유출되더라도 복호화 되어 이용자 등의 비밀번호를 획득하지 못하게 하기 위한 목적인데 salt를 적용하지 않고 SHA512로 비밀번호를 해싱하여 저장한다면 국내의 법적 요건은 준수할 수 있겠지만 해싱된 비밀번호가 유출되었을 때에는 비밀번호가 결코 안전하지 않다는 것을 알 수 있습니다.

국내의 법적 요건은 최소한의 요구사항으로 SHA2(256/384/512)를 사용한다면 반드시 salt(32bit 이상의 길이)를 적용하시고, bcrypt, PBKDF2 등을 이용하여 비밀번호를 안전하게 해싱하여 저장하시기 바랍니다.

참고자료