2011-09-19 5 views
1

나는 임의의 소금 및 암호 해싱을 생성하기 위해 phpass를 사용하지만 내 질문은 고유 한 토큰을 만드는 암호 재설정과 같은 것입니다. 기본적으로 16 바이트의 임의의 데이터를 가져 와서 sha256 해시를 통과시킵니다. 이 좋은 연습 아니면 그냥 그것이 있어야 데이터토큰에 대한 임의의 데이터 해시로 보안이 향상됩니까?

private static function get_random_bytes($count) { 
    $output = ''; 
    if (is_readable('/dev/urandom') && 
      ($fh = @fopen('/dev/urandom', 'rb'))) { 
     $output = fread($fh, $count); 
     fclose($fh); 
    } 

    $random_state = microtime(); 
    if (function_exists('getmypid')) 
     $random_state .= getmypid(); 

    if (strlen($output) < $count) { 
     $output = ''; 
     for ($i = 0; $i < $count; $i += 16) { 
      $random_state = 
        md5(microtime() . $random_state); 
      $output .= 
        pack('H*', md5($random_state)); 
     } 
     $output = substr($output, 0, $count); 
    } 

    return $output; 
} 

답변

3

임의의 데이터가 강력한 암호 인 경우의 16 바이트를 사용하여 충실해야하고 더 당신은 그것을 해시 필요하지 않습니다.

rand()으로 검색된 데이터와 같이 데이터가 암호화되지 않은 경우 해시가 약간 더 안전 할 수 있지만 이점은 미미하며 더 강력한 PRNG 만 사용해야합니다. 사람

  1. 솔트 생성에 패턴을 발견 데이터베이스에서 모든 암호 염 당겨 SQL 인젝션을 사용하는 경우이 경우

    는 가능한 유일한 보안 결함은
  2. 데이터베이스에서 데이터를 다시 얻으십시오.
  3. 무지개 표를 사용하여 데이터베이스에서 많은 수의 암호를 해독하십시오.

기본적으로 아니오, 보안을 추가하지 않습니다. 또한 위의 코드는 매우 강한 임의성을 제공하는/dev/urandom을 사용하므로 위에서 나열한 2 단계가 더 이상 또는 거의 불가능하므로 이점이 훨씬 더 줄어 듭니다. 그 중대한 불의 밑에있는 유일한 조직은 NSA, CIA 및 유사한 그룹이다.

+0

나는 임의의 바이트를 얻기 위해 사용하는 함수를 추가했는데, 보통 32를 얻은 다음이를 사용하여 알파 숫자 문자열을 생성합니다. 하지만 질문은 어떤 방식 으로든 보안을 저하시키는 것이 아닌가 생각됩니다. – Brian

+0

더 자세히 답변 된 질문에 대한 답변이 확장되었습니다. – regality

0

예, 암호 재설정 토큰에 대한 해시 임의 데이터는 절대적으로 보안을 강화합니다.

비 해시 토큰 계정 타협 도움이 될 수있는 시나리오 :

  1. 는, 토큰
  2. 대기 암호 재설정 토큰 테이블 <g>에서 데이터베이스에 대한 읽기 액세스 표시에 도달

    공격자를 ,

  3. 은 토큰, 관련 이메일 주소 및 공예품을 가져옵니다.

    http://example.com/password_reset?t=gobble-dee-goo-token

  4. 이제 관련 이메일 주소의 비밀번호를 변경할 수 있습니다.

phpass 해싱을 통해 공격자가 DB에 대한 읽기 권한을 얻더라도 암호 재설정 기능을 사용하여 계정을 손상시킬 수 없습니다. 이는 토큰 해시를 사용하여 URL을 조작 할 수 없기 때문입니다.

+0

두 가지 질문이 있습니다[email protected]가 쓴 것처럼, token_을 생성하기 위해 무작위 데이터를 해쉬하는 것은 아무 것도 향상시키지 않지만, 토큰이 database_에 저장되기 전에는 해싱이 중요합니다. 토큰이 강력하면 (20 자 a-z A-Z 0-9) 소금이없는 간단한 해시 (SHA-256)가 안전하므로 데이터베이스에서 검색 할 수 있습니다. – martinstoeckli

관련 문제