2012-10-19 2 views
0

프로젝트에서 작업 중이므로 &은 처음부터 암호 저장을 유지하려고합니다. 아이디어 단계에서, 그러나 이것은 대략 내가 사용하고자하는 것입니다.PHP에서 다중 해시 사용

class Crypto { 
    public function hash1($string, $salt) { 
     return hash('sha512', $string . $salt); 
    } 

    public function hash2($string, $salt) { 
     return hash('sha512', $salt . $string); 
    } 

    public function compareToHash($string, $salt, $hash1, $hash2) { 
     return($this->hash1($string, $salt) === $hash1 && $this->hash2($string, $salt) === $hash2); 
    } 
} 

알다시피 충돌을 피하려고합니다. 이것이 효과적인 방법인가요? 너무 심플하게 보이고 뭔가 빠져 있는지 궁금합니다.

감사합니다.

+1

'충돌을 피하기 위해'란 무엇을 의미합니까? – Baba

+0

동일한 해시를 반환하는 두 개의 별도 문자열 에서처럼 – CDCM

+0

'SHA521'에서 '충돌'가능성은 '2^256'입니다. 암호 해시에서 이길 수 있다고 생각하십니까 ?? – Baba

답변

0

아마도 웹 사이트를 암호로 보호 할 계획이므로 이미 인코딩 된 클라이언트에서 암호를 보내야하는지 설명해야합니다. 그렇지 않으면 스니퍼가 실제 암호를 찾고 사람들이 일반적으로 사용하는 방법을 알게됩니다. 암호? 많은 많은 계정에서 동일합니다.

내가 몇 시간 전에시 stubled, 그것은 해싱 및 암호 보호 모든 문제 설명을 위해, 그것에 대한 링크를 보존 게시물을 살펴 복용 제안

: 얼마 http://www.codinghorror.com/blog/2007/09/rainbow-hash-cracking.html

를 - 사용하는 강력한 (sha1은 더 이상 강하지 않다.) 암호 엔코더도 가능하다. 가장 빠른 것이 아닙니다. 해커가 침입하려고하는 귀중한 시간을 낭비하게하십시오. 너무 많이, 침입하면 매력이 없어집니다.

희망, 그리고 행운을 빕니다.

0

그건 꽤 기본입니다. OWASP에서 Password Storage Cheat Sheet을 확인했습니다. 이미 생성되고 검증 된 암호 해싱 라이브러리가 많이 있습니다.

OpenWall에서 Portable PHP Hashing Framework을 살펴 보겠습니다. 매우 안전한 해시를 만들고 적절한 반복 횟수를 수행합니다. 꽤 널리 사용됩니다.

SHA512로 해싱하는 경우 충돌 방지를 위해 특별히해야 할 일이별로 없지만 최근에 충돌을 찾는 것이 아직까지는 가능하지 않다는 것을 알았습니다.

내가 집중해야 할 두 가지 주요 사항은 안전한 소금 (20 바이트 이상)이며 공격 시간을 늘리기 위해 해시를 최소 64,000 회 반복하는 것입니다.

0

암호 보안의 첫 번째 규칙 : 보안이 확실하지 않은 경우 확률이 높아지지 않습니다.

방금 ​​암호 루틴을 작성하기 시작 했으므로 지금 당장 조언을 드리겠습니다.

PHP5.5 (2 월/2013 년 3 월 출시 예정)에는 최상의 보안을 염두에두고 암호를 처리하기 위해 특별히 설계된 새로운 기능 세트가 제공됩니다. 5.5가 릴리스되면이 함수는 PHP에서 암호를 처리하는 유일한 방법이 될 것입니다.

좋은 소식은 이러한 기능을 사용하기 위해 5.5를 기다리거나 업그레이드 할 필요가 없다는 것입니다. 5.3 및 5.4에서 실행되도록 백 포트되어 있으므로 지금 사용할 수 있습니다. 여기에서 라이브러리를 다운로드 : https://github.com/ircmaxell/password_compat

참조 기사 : http://www.h-online.com/open/news/item/PHP-5-5-should-reduce-password-sloppiness-1707835.html

+0

그것은 엄지 손가락의 좋은 규칙이다. 이것은 그 범위가 아니라 단순한 개요입니다. – CDCM

+0

내가 실제로 얻는 것은 암호가 단순히 하나가 아니라 두 개의 해시와 비교하여 보안이 대폭 증가한다고 생각하는 것이 잘못된 것입니다. – CDCM

+0

나는 그것에 대한 확신있는 대답을 줄 정도로 모른다. 그것은 논리적 이어야만하는 것처럼 들리지만, 암호화와 관련해서는 대단히 직관적 인, 특히 이와 같은 질문에 대한 많은 것들이 있습니다. http://security.stackexchange.com/에 질문을 던지기를 원할 것입니다. 더 많은 전문가들이있어 최고의 추측 이라기보다는 확고한 답을 줄 것입니다. 필자의 경우, 필자는 내가 링크 된 PHP 표준 암호 API를 조사하는 것이 좋습니다. 목표는 이러한 질문의 필요성을 제거하고 기본적으로 보안을 제공하는 것입니다. – Spudley

0

당신은 처음부터 암호 저장 보안 확인하려면, 당신은 sha512 또는 기타 빠른 해시 알고리즘을 사용해서는 안 대신 키 유도를 사용 기능BCrypt입니다.

빠른 알고리즘의 문제점은 일반 하드웨어 (in 2012)로 초당 80 메가 sha512 해시를 계산할 수 있다는 것입니다. 그렇게하면 수십 밀리 초 만에 약 500000 단어로 전체 영어 사전을 무차별 적으로 사용할 수 있습니다! 다른 알고리즘은 더 빠릅니다.

BCrypt는 해시 암호로 특별히 설계되었으므로 이 느림 (약간의 계산 시간이 필요함)입니다. 비용 요소를 사용하면 필요한 시간을 미래의 (따라서 빠른) 하드웨어에 적용 할 수 있습니다.

BCrypt를 사용하면 sha512 해시를 사용하는 것처럼 쉽습니다. phpass과 같은 잘 설정된 라이브러리를 사용하는 것이 좋습니다. 구현 방법을 이해하려면 article을 읽고 가장 중요한 점을 설명하려고했습니다.

sha512와의 충돌이 결코 문제가되지 않으므로 두 개의 개별 해시가있는 스키마는 보안을 향상시키지 않습니다. 최악의 경우 두 해시를 모두 저장해야하기 때문에 보안이 취약 해 지므로 공격자는 해시 된 암호에 대한 두 가지 관련 정보를 갖게됩니다.