2011-03-17 2 views
21

내 웹 사이트에 사용자 등록 스크립트 (탱크 인증)를 설치하고 있습니다. 그 말한다 설치 가이드에서 Portable (PHPass) 암호 해시. 나는 그들을 사용해야합니까?

,

경고 : 기본적으로 라이브러리는 휴대용없는 강력한 시스템 별 암호 해시를 생성합니다. 일단 생성되면 사용자 데이터베이스를 덤프하고 다른 서버로 내보낼 수 없음을 의미합니다. 이 동작은 도 config-file에서 변경할 수 있습니다.

이렇게하면 딜레마에 빠질 수 있습니다. 앞으로는 서버를 변경하려고 할 수도 있지만 약한 비밀번호는 원하지 않습니다. 휴대용 암호 해시가 큰 위험이 있습니까? 그리고 더 중요한 것은, 해시의 의미는 무엇입니까? 문자 길이입니까?

+4

이것은 화제가 아니며, PHPass가 비 휴대용 모드에서 생성 한 해시의 이식성에 관한 것입니다. –

답변

92

Task Auth uses PHPass for password hashing (이전 버전은 좋은 기호가 아니므로 설치시 update that을 원할 수 있습니다.) PHPass에는 휴대용과 bcrypt의 두 가지 모드가 있습니다.

PHP 버전에 따라 휴대용 해시가 필요하지 않습니다. PHP 5.3 이상에서 PHP는 시스템에서 사용할 수없는 경우 자체 bcrypt 구현을 제공합니다. 모든 서버에 PHP 5.3 이상이있는 경우 휴대용 해시를 해제하는 것이 좋습니다. PHPass "portables hashes"는 PHP가 설치된 버전에 따라 bcrypt를 사용할 수 없기 때문에 존재합니다.

즉, PHPass 휴대용 해시는 해시에 소금을 저장합니다. 그래서 같은 암호를 사용하는 모든 실행이 다릅니다.

또한 PHPass은 버전 가능한 md5() 함수 $rawMode 매개 변수를 지원하는지 * 확인할 그 해시의 발생시 PHP_VERSION를 이용한다. 그렇지 않은 경우 pack()은 16 진수 데이터를 2 진수로 변환하는 데 사용됩니다 (이 작업은 분기가 이루어진 이유 인 $rawMode을 사용하면 상당히 느립니다.).

다시 말해, 모든 서버가 PHP 5.3 이상을 실행하는 경우 휴대용 모드를 해제하고 PHPass가 bcrypt을 사용하도록 강력히 권장합니다. PHP 5.3+가 시스템을 사용할 수 없을 때 자체 구현을 제공하기 때문에 해시는 OS마다 검사 할 수 있습니다. 휴대용 모드를 끄더라도, PHPass는 오래된 해시를 적절한 방법으로 검사 할만큼 똑똑 할 것입니다.

* 131


EDIT 자세한 설명은 여기에 휴대용 모드 해시가 생성되는 방법이다 (단순화 PHPass 검색된 실제 변수를 사용할 수 있지만, 정확하지 않음). PHPass는 자체 버전의 base64 인코딩을 사용합니다.

$final = '$P$'

  • $final .= encode64_int($rounds)

    1. $final .= genSalt() (염 6 바이트 ... 8 바이트 "encode64"포맷 (생성자에서 최소 3 다른 PHP 5+ 5이다)).

      :

    2. $hash = md5($salt . $password)

    3. 2$rounds 번, 그래서 최종 해시가 기본적으로 이것이다 $hash = md5($hash . $password)

    4. $final = encode64($hash)

  • +13

    +1 굉장하고 다이어그램! – JohnP

    +1

    머리를 주셔서 감사합니다, 아무도 잘못된 생각을 갖지 않도록 내 대답을 삭제했습니다. – JohnP

    +1

    놀라운 답변! 고맙습니다! 나는 내가 예상했던 것보다 더 많은 것을 배웠다. – CyberJunkie