XE에서 보면 비밀번호 암호화 알고리즘이 bcrypt, pbkdf2, md5 이렇게 3개뿐인데,
Rhymix의 경우에는 bcrypt, pbkdf2, sha512, sha256, sha1, md5 이렇게 6개나 있더군요.
여기서 물어보고 싶은 것은 각자 암호화가 어느정도로 튼튼한지, 빠른지를 궁금하거니와,
그냥 속편하게 이 암호화 알고리즘을 쓰면 된다라는 명쾌한 답변을 듣고 싶습니다.(무리일지는 모르겠지만..)
인터넷에서 찾아보기로는 제일 튼튼한 순으로 치면
bcrypt >= pbkfd2 > sha512 > sha256 > sha1 > md5 이렇게 되는걸로 알고 있는데 맞나요?
기네스아키히코
Lv. 1
댓글 10
될 수 있으면 bcrypt 사용하고, php버전이 안되면 pbkfd2 사용을 권장한다고 내용을 찾았습니다.
http://qqiwan.blog.me/220025164096
bcrypt는 처음부터 패스워드 저장을 위해서 설계되었습니다. 패스워서 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2라고 알고 있구요... bcrypt >= pbkfd2라고 말씀 하셨는데 맞기도하고 틀린 말입니다. 비밀번호의 길이가 6글자까지는 둘이 비슷하지만 그 이후 부터는 bcrypt가 월등하게 비싼 비용을 들여야 비밀번호를 알아낼 수 있습니다. 보통 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있다고 알고 있습니다.
가능하다면 bcrypt사용하시고 sha512, sha256, sha1, md5등은 비추 합니다.
bcrypt >= pbkdf2 >>>>>>>>>> 넘사벽 >>>>>>>>>> sha512 >= sha256 > sha1 > md5
XE와 라이믹스에서 bcrypt와 pbkdf2는 암호화 소요시간 설정에도 영향을 받습니다. 두 알고리즘의 차이를 고려하여 일반적인 x64 서버에서 대략 비슷한 시간이 걸리도록 기본 세팅을 해두었기 때문입니다. 만약 bcrypt를 쓰더라도 소요시간이 8이라면 pbkdf2를 12로 해놓고 쓰는 것보다 못합니다. 4단계 높이면 실제 소요시간은 24 = 16배 더 걸리거든요. 윗분이 말씀하신 4배 정도의 차이는 거뜬히 만회하는 거죠.
pbkdf2는 내부적으로 sha256이나 sha512를 사용하지만, 그냥 sha256이나 sha512를 쓰는 것과는 비교할 수 없을 만큼 강력합니다. 솔트(salt)라고 불리는 랜덤 문자열을 섞어서 암호화하는 등 다양한 양념(?)이 추가로 들어갔거든요. 만약 고객사에서 반드시 sha256이나 sha512이 포함된 알고리즘을 써야 한다는 조건을 붙인다면 bcrypt와의 미묘한 차이를 고민하지 마세요. 안심하고 pbkdf2를 쓰셔도 됩니다.
참고: https://www.phpschool.com/link/tipntech/78316
참고 링크까지 알려주시고.. 너무 감사합니다!! 참고할게요.
'memory_cost' => 1<<17
'time_cost' => 2
'threads' => 2
이렇게 설정해도 bcrypt보단 강력할거같아서요 ㅎ
bcrypt도 마찬가지로 work factor를 조절할 수 있기 때문에...