문제

비밀번호를 암호화하는 가장 빠르고 안전한 방법(PHP 선호)은 무엇이며, 어떤 방법을 선택하든 이식 가능합니까?

즉, 나중에 내 웹사이트를 다른 서버로 마이그레이션하는 경우 내 비밀번호가 계속 작동합니까?

제가 지금 사용하고 있는 방법은 서버에 설치된 라이브러리의 정확한 버전에 따라 다릅니다.

도움이 되었습니까?

해결책

로그인 시스템에 대한 암호화 방법을 선택하는 경우 속도는 친구가 아닙니다. Jeff는 Thomas Ptacek과 비밀번호 및 암호에 대해 이야기를 나눴습니다. 결론 감당할 수 있는 가장 느리고 가장 안전한 암호화 방법을 사용해야 한다는 것이었습니다.

Thomas Ptacek의 블로그에서:
속도는 비밀번호 해시 함수에서 원하지 않는 것입니다.

최신 비밀번호 체계는 증분형 비밀번호 크래커의 공격을 받습니다.

증분 크래커는 가능한 모든 크랙된 비밀번호를 미리 계산하지 않습니다.이들은 각 비밀번호 해시를 개별적으로 고려하고 PHP 로그인 페이지와 동일한 방식으로 비밀번호 해시 기능을 통해 사전을 제공합니다.Ophcrack과 같은 레인보우 테이블 크래커는 공간을 사용하여 비밀번호를 공격합니다.John the Ripper, Crack 및 LC5와 같은 증분 크래커는 시간이 지나면서 작동합니다.통계와 계산.

비밀번호 공격 게임은 비밀번호 X를 해독하는 데 걸리는 시간에 점수를 매깁니다.레인보우 테이블의 경우, 그 시간은 테이블의 크기와 검색 속도에 따라 달라집니다.증분 크래커를 사용하면 암호 해시 기능을 얼마나 빨리 실행할 수 있는지에 따라 시간이 달라집니다.

비밀번호 해시 기능을 더 잘 최적화할수록 비밀번호 해시 기능이 더 빨라질수록 체계는 더 약해집니다.MD5 및 SHA1은 심지어 DES와 같은 기존 블록 암호도 빠르게 설계되었습니다.MD5, SHA1 및 DES는 취약한 비밀번호 해시입니다.최신 CPU에서는 DES 및 MD5와 같은 원시 암호화 빌딩 블록을 비트슬라이스, 벡터화 및 병렬화하여 암호 검색을 매우 빠르게 수행할 수 있습니다.게임 오버 FPGA 구현 비용은 수백 달러에 불과합니다.

다른 팁

나는 피터와 함께 있어요.개발자가 비밀번호를 이해하지 못하는 것 같습니다.우리 모두는 빠르기 때문에 MD5 또는 SHA1을 선택합니다(저도 이에 대해 유죄입니다).그것에 대해 생각해보면('최근 누군가가 나에게 그것을 지적했기 때문에) 그것은 말이 되지 않습니다.우리는 엄청나게 느린 해싱 알고리즘을 선택해야 합니다.내 말은, 규모면에서 바쁜 사이트는 비밀번호를 해시한다는 것입니까?1/2분마다?서버 측면에서 0.8초가 걸리는지 vs 0.03초가 걸리는지 누가 신경쓰나요?그러나 모든 유형의 일반적인 무차별 공격을 방지하기에는 이러한 추가 속도 저하가 엄청납니다.

내가 읽은 바에 따르면 bcrypt는 보안 비밀번호 해싱을 위해 특별히 설계되었습니다.복어를 기반으로 하며 구현이 많이 있습니다.

PHP의 경우 PHPPass를 확인하세요. http://www.openwall.com/phpass/

.NET을 사용하는 사람이라면 BCrypt.NET을 확인하세요. http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

원하지 않는다는 점을 지적해야 한다. 암호화하다 비밀번호, 당신이 원하는 해시시 그것.

암호화된 비밀번호를 해독하여 누군가가 비밀번호를 볼 수 있도록 할 수 있습니다.해싱은 단방향 작업이므로 사용자의 원래 비밀번호는 (암호화 방식으로) 사라집니다.


어떤 알고리즘을 선택해야 하는지에 대해서는 현재 허용되는 표준 알고리즘을 사용하십시오.

  • SHA-256

그리고 사용자의 비밀번호를 해시할 때 다른 정크 비밀번호도 함께 해시해야 합니다.예:

  • 비밀번호: password1
  • 소금: PasswordSaltDesignedForThisQuestion

사용자 비밀번호에 솔트를 추가합니다.

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");

무엇을 하든 자신만의 암호화 알고리즘을 작성하지 마세요.이렇게 하면 (암호화 전문가가 아닌 이상) 알고리즘에 크랙이 쉽게 발생하는 결함이 있다는 것이 거의 보장됩니다.

사용을 고려해 보세요 bcrypt 이는 laravel과 같은 많은 최신 프레임워크에서 사용됩니다.

저는 반드시 가장 빠르지만 적절한 균형을 찾고 있는 것이 아닙니다. 이 코드가 개발되는 서버 중 일부는 상당히 느리고, 비밀번호를 해시하고 저장하는 스크립트를 실행하는 데 5~6초가 걸리며, 해싱으로 범위를 좁혔습니다(해싱에 대해 주석을 달면 1-2초 안에 실행됩니다).

가장 안전할 필요는 없습니다. 저는 (지금 당장) 은행에 코딩을 하고 있지는 않지만 확실히 하지 않을 것이다 비밀번호를 일반 텍스트로 저장합니다.

password_hash ( string $password , int $algo [, array $options ] ).(PHP 5 >= 5.5.0, PHP 7)

Password_hash()는 강력한 단방향 해싱 알고리즘을 사용하여 새 비밀번호 해시를 생성합니다.Password_hash()는 crypt()와 호환됩니다.따라서 crypt()로 생성된 비밀번호 해시는 비밀번호 해시()와 함께 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top