2014-11-18 2 views
0

본질적으로 질문은 SHA1 해시를 사용하여 중복 해시가 거의 발생하지 않는 새 사용자에게 확인 이메일을 보낼 수 있습니까? 그들에게이 emai을 보내 반대로 www.example.com/verify.php?hash=[40 digit sha1 hash]SHA1을 사용하여 사용자의 이메일 확인 -

: www.example.com/verify.php?user=123456&hash=[40 digit sha1 hash]

내가 두 번째 사용자 파라미터 전송을 방지 할

나는 사용자에게 이메일을 보내려고합니다.

해시 같은 생성 : $uid 고유

$verifyHash = sha1[$uid.$email.date('r')]; 

, $email는 고유하며 date('r') 유닉스 타임 스탬프 가능한 고유.

중복 된 해시가 생성 될 가능성은 무엇이라고 생각하십니까?

답변

1

Sufficiently close to zero to ignore.

그러나 추가 mt_rand를 사용하여 일부 임의성을 추가해야합니다. 서버의 정확한 시간은 추측하기 쉽고 이메일과 UID는 악의적 인 사용자에게 알려져 있습니다.

+0

내 값에 mt_rand를 추가 하시겠습니까? '$ verifyHash = sha1 [$ uid. $ email.date ('r'). mt_rand()];'? –

+0

여전히 이메일에? user = 12345 매개 변수를 추가 하시겠습니까? 또는 무작위 sha1 해시로 verify.php에 홍수를내는 사람을 보지 않겠습니까? –

+0

예 ('mt_rand()'를 추가하는 것), 아니요 (추가 할 필요는 없습니다), 아니요 (sha1 해시를 매우 추측합니다. 있을 것 같지 않게). – Phillip

1

아무것도 미만 12.8 천조 블록, 그리고 확률은 0.00000000000000000000000000000000000000000000000000 %이다.

12.8 조원 블록의 확률은 .00000000000001110223024625156540423631668090820313 %입니다. 12.8 조 블록을 사용하려면 8KB 청크로 95 EB, 16KB 청크로 190 EB 또는 24 KB 청크로 290 EB가 필요합니다.

출처 : 또한 http://www.backupcentral.com/mr-backup-blog-mainmenu-47/13-mr-backup-blog/145-de-dupe-hash-collisions.html

참조 : 결론적으로 https://pthree.org/2014/03/06/the-reality-of-sha1/

가, 그래, 그것은 매우 안전합니다.

즉, salt을 확인하십시오. 그렇지 않으면 쉽게 재구성 할 수 있습니다. 소금이 얼마나 무작위이고 안전해야하는지는 당신에게 달렸습니다.

+0

여전히 이메일에? user = 12345 매개 변수를 추가 하시겠습니까? –

+1

이것은 데이터베이스에서 조회를 수행하는 방법에 따라 다릅니다. DB에서 사용자 ID와 해시가 확실하게 연결되어 있다면 'user_id FROM users WHERE verify_hash = : hash'를 통해 ID를 얻을 수 있습니다 (해시가 고유하다고 가정하기 때문에). URL에 두 가지 요소 (ID/해시, 전자 메일/해시 등)를 가짐으로써 여러 개의 해시를 추측하고 임의의 사용자를 승인하는 것을 방지합니다. 필요 *할까요? 아마도 그렇지 않습니다. 다른 것을 포함시키는 것이 유용합니까? 아마. –