Johannes Gorset이 지적한 것처럼 Matasano Security의 Thomas Ptacek의 게시물은 왜 MD5, SHA1, SHA256 및 SHA512와 같은 단순한 범용 해싱 기능이 암호 해시 선택이 좋지 않은지 설명 합니다 .
왜? 너무 빠르므로 최신 컴퓨터에서 코어 당 초당 1,000,000 개의 MD5 해시를 계산할 수 있으므로 사람들이 사용하는 대부분의 암호에 대해 무차별 대입이 가능합니다. 그리고 그것은 GPU 기반 크래킹 서버 클러스터보다 훨씬 적습니다!
키 스트레칭없이 소금을 칠하는 것은 무지개 테이블을 미리 계산할 수 없다는 것을 의미하기 때문에 특정 소금에 맞게 임시 테이블을 만들어야합니다. 그러나 실제로 그렇게 어렵게 만들지는 않습니다.
사용자 @Will의 말 :
모두가 인터넷을 통해 해킹 당할 수있는 것처럼 이에 대해 이야기하고 있습니다. 이미 언급했듯이 시도를 제한하면 인터넷을 통해 암호를 해독 할 수 없으며 해시와 관련이 없습니다.
그들은 필요하지 않습니다. 분명히 LinkedIn의 경우 공통 SQL 주입 취약점 을 사용하여 로그인 DB 테이블을 가져와 오프라인에서 수백만 개의 암호를 해독했습니다.
그런 다음 그는 오프라인 공격 시나리오로 돌아갑니다.
전체 데이터베이스가 손상되면 해커가 md5 해시에 대해 초당 1 억 건의 비밀번호 시도를 수행 할 수 있습니다. SHA512는 약 10,000 배 느립니다.
아니요, SHA512 는 MD5보다 10000 배 느리지 않습니다. 약 두 배만 걸립니다. 반면에 Crypt / SHA512 는 BCrypt와 마찬가지로 키 스트레칭을 수행 하여 임의의 소금이 내장 된 매우 다른 해시를 생성하며 계산하는 데 500 ~ 999999 시간이 걸립니다. (신축 조정이 가능합니다).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
따라서 PHP의 선택은 Crypt / Blowfish (BCrypt), Crypt / SHA256 또는 Crypt / SHA512입니다. 또는 적어도 Crypt / MD5 (PHK). www.php.net/manual/en/function.crypt.php 참조