MD2, MD4, MD5, MD6, HAVAL-128, HMAC-MD5, DSA (which uses SHA-1), RIPEMD, RIPEMD-128, RIPEMD-160, HMACRIPEMD160 그리고 SHA-1 과 같은 암호화 해시 알고리즘은 더 이상 안전하다고 여겨지지 않습니다. 이러한 알고리즘은 충돌(적은 컴퓨터 연산으로도 충분히 다른 두 개의 인풋에 대해 같은 해시값을 가질 수 있는)이 발생할 수 있기 때문입니다.
스스로에게 물어보십시오
해시된 값은 다음과 같은 보안 상황에서 사용됩니다.
- 유저의 비밀번호 저장
- 보안 토큰 생성(웹사이트에 회원 가입 시 이메일을 확인할 때, 패스워드를 초기화할 때 등…)
- 일부 메시지의 무결성을 계산할 때
이러한 상황에 해당되는 경우, 상단의 알고리즘을 사용하는 것은 위험할 수 있습니다.
추천되는 안전한 코딩 관습
SHA-256, SHA-512, SHA-3과 같은 더 안전한 해싱 알고리즘이 권장되며 암호 해싱의 경우 bcrypt, scrypt, argon2 또는 pbkdf2와 같이 너무 “빠르게” 계산하지 않는 알고리즘을 사용하는 것이 무차별 대입 공격을 느리게 만들 수 있기에 더 좋습니다.
취약한 코드의 예
MessageDigest md1 = MessageDigest.getInstance("SHA"); // 취약함: SHA 는 표준 이름이 아닌, 대부분의 보안 업체에서 SHA-1 을 부르는 별칭입니다.
MessageDigest md2 = MessageDigest.getInstance("SHA1"); // 취약함
규칙을 준수한 해결책
MessageDigest md1 = MessageDigest.getInstance("SHA-512"); // 규칙을 준수한 코드
참고
- OWASP Top 10 2021 Category A2 - Cryptographic Failures
- OWASP Top 10 2017 Category A3 - Sensitive Data Exposure
- OWASP Top 10 2017 Category A6 - Security Misconfiguration
- Mobile AppSec Verification Standard - Cryptography Requirements
- OWASP Mobile Top 10 2016 Category M5 - Insufficient Cryptography
- MITRE, CWE-1240 - Use of a Risky Cryptographic Primitive
- SANS Top 25 - Porous Defenses
If you like SONARKUBE, don’t forget to give me a star.