2013-05-12 3 views
0

로그인을 위해 사용자의 암호를 저장해야하는 응용 프로그램을 코딩합니다.salt와 crypt()를 사용하여 비밀번호를 저장하는 것이 얼마나 안전합니까?

<?php 
    $password = $_GET['password']; 
    $salt = "pepper"; 
    $password = crypt($password,$salt); 
?> 

이 방법은 정확히 얼마나 안전 :

순간

, 나는 다음과 같은 코드를 사용하고? 예를 들어 누군가가 $salt을 얻는다면 데이터를 해독하는 것이 얼마나 쉬운가요?

답변

0

암호 해독 전문가는 아니지만 그 방법은 다소 약합니다. 사용 된 기본 해시 알고리즘은 DES의 수정 된 버전이기 때문에 비교적 짧은 시간에 비교적 비싼 하드웨어로 해독 될 수 있습니다. 수정되지 않은 DES는 1998 년 EFF Deep Crack에 의해 22 시간 만에 금이 갔거나이 수정 된 버전에 대한 충돌을 발견하는 것이 그렇게 어렵지 않아야합니다.

또한 crypt manpage (PHP 함수는 유닉스 나 시스템에 배치된다)보고 :

경고 : 키 스페이스는 2 ** 56 개 7.2e16 가능한 값으로 이루어져있다. 대용량 병렬 컴퓨터를 사용하여이 키 공간을 철저히 검색 할 수 있습니다. 크랙 (1)과 같은 소프트웨어는이 키 공간에서 사람이 일반적으로 암호로 사용하는 부분을 검색합니다. 따라서 암호 선택은 최소한 일반적인 단어와 이름을 피해야합니다.

대신, SHA-512을 사용하고 여러 해시 라운드를 수행 mcrypt_create_iv가를 제공과 함께, 충분한 라운드

// Take advantage of mcrypt extension if it is installed! 
// Otherwise, generate $salt in any other way, but don't use a fixed one 
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.'); 
$hash = crypt($password, '$6$rounds=10000$' . $salt . '$'); 
echo $hash; 

SHA-512는 유닉스 계열의 땅에서 암호 해시에 대한 산업 표준으로 간주됩니다 좋은 (엔트로피의 의미에서) $salt.

최종주의 사항 : 올바른 소금을 사용하고 각 사용자마다 다른 소금을 생성하십시오..

+0

이렇게하면 충돌 가능성이 줄어들지 만 문제는 데이터를 해독하는 것이 얼마나 쉬워 졌는지를 사용자가 사용하는 소금에 거의 불가능합니다. –

+0

OP가 쓴 : "정확히 얼마나 안전한가? ** 예를 들어 ... ...". 키 해독은 가능한 문제의 한 예일뿐입니다. 왜 downvote? –

+0

나는 고쳐졌다. 그것은 실제로 예였습니다. –

관련 문제