XE에서 보면 비밀번호 암호화 알고리즘이 bcrypt, pbkdf2, md5 이렇게 3개뿐인데,

Rhymix의 경우에는 bcrypt, pbkdf2, sha512, sha256, sha1, md5 이렇게 6개나 있더군요.

 

여기서 물어보고 싶은 것은 각자 암호화가 어느정도로 튼튼한지, 빠른지를 궁금하거니와,

그냥 속편하게 이 암호화 알고리즘을 쓰면 된다라는 명쾌한 답변을 듣고 싶습니다.(무리일지는 모르겠지만..)

 

인터넷에서 찾아보기로는 제일 튼튼한 순으로 치면

bcrypt >= pbkfd2 > sha512 > sha256 > sha1 > md5 이렇게 되는걸로 알고 있는데 맞나요?

  • profile
    자문자답.
    될 수 있으면 bcrypt 사용하고, php버전이 안되면 pbkfd2 사용을 권장한다고 내용을 찾았습니다.
    http://qqiwan.blog.me/220025164096
  • profile
    해시 함수들(sha512, sha256, sha1, md5)은 개발된게 메시지 송수신시 무결성 검사를 위해서 였습니다. 그래서 빠른 속도가 필요하죠... 하지만 바꿔 말하면 해커가 DB를 탈취 했을때 빠른 속도로 비밀번호를 알아낼 수 있다는 말이 되기도 합니다.

    bcrypt는 처음부터 패스워드 저장을 위해서 설계되었습니다. 패스워서 저장에서의 해시 함수의 문제점을 보완해서 나온것이 pbkfd2라고 알고 있구요... bcrypt >= pbkfd2라고 말씀 하셨는데 맞기도하고 틀린 말입니다. 비밀번호의 길이가 6글자까지는 둘이 비슷하지만 그 이후 부터는 bcrypt가 월등하게 비싼 비용을 들여야 비밀번호를 알아낼 수 있습니다. 보통 8글자 부터는 동일 시스템에서 bcrypt가 pbkfd2보다 4배 이상의 시간을 소모해야 비밀번호를 알아낼 수 있다고 알고 있습니다.

    가능하다면 bcrypt사용하시고 sha512, sha256, sha1, md5등은 비추 합니다.
  • profile profile
    매우 자세하고 간단명료한 답변 감사합니다!
  • profile

    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

  • profile profile

    참고 링크까지 알려주시고.. 너무 감사합니다!! 참고할게요.

  • profile ?
    argon2i 도 괜찮나요? 무슨문제있다는 글을봐서요..
  • ? profile
    PHP 7.2 미만 버전에서는 지원되지 않는다는 문제가 있습니다 ㅎㅎ
  • profile ?
    7.2 적용중인데 bcrypt 대신 써도 되겟죠?
    'memory_cost' => 1<<17
    'time_cost' => 2
    'threads' => 2

    이렇게 설정해도 bcrypt보단 강력할거같아서요 ㅎ
  • ? profile
    cost 설정을 어떻게 하는지에 따라 bcrypt보다 약할 수도 있고 강할 수도 있습니다.
    bcrypt도 마찬가지로 work factor를 조절할 수 있기 때문에...
  • profile ?
    그냥 적당히 암호화하는데 0.5초 정도 걸리게 설정해야겟네요..