2016-09-23 86 views
0

我需要了解一下,如果我們沒有在數據庫中存儲實際密碼,那是因爲安全原因。我們通常存儲單向加密密碼。現在,如果這是真的,我們不想改變密碼,一些知名的網站如何發現新密碼非常接近或部分匹配舊密碼,並且他們提示我們改變它。要發生這種情況,他們將不得不將舊密碼存儲在某個地方,或者需要雙向加密的密碼才能再次解密。重置新密碼與舊密碼匹配

+1

這裏真正的問題是糟糕的密碼規則。通過讓用戶定期更改密碼,您可以確保用戶的密碼較差,並且更可能將其寫在「正面」筆記上。新的NIST提出的規則(800-63-3:數字認證指南)將此稱爲不應該做的練習。不要:1.需要組合規則2.允許提示3.需要例行密碼過期。請參閱[新密碼規則](https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/)。 OTOH您的組織可能對使用失敗的做法更感興趣。 – zaph

回答

1

有兩種可能性:

  1. 通常,當您更改密碼,您首先需要輸入舊密碼,以確認你是你。該網站可能會暫時將舊密碼保存在內存中,以便它可以將舊密碼與新密碼進行比較。
  2. 當您輸入新密碼時,它可以檢查簡單修改數量的哈希值是否映射到舊密碼的哈希值。

例如,如果您在您的新密碼爲「password7」型,那麼該網站可能會做一些檢查,如下列:

password_hash("password0", old_salt) == value stored in database? 
password_hash("password1", old_salt) == value stored in database? 
password_hash("password2", old_salt) == value stored in database? 
password_hash("password3", old_salt) == value stored in database? 
password_hash("password4", old_salt) == value stored in database? 
password_hash("password5", old_salt) == value stored in database? 
password_hash("password6", old_salt) == value stored in database? 
password_hash("password7", old_salt) == value stored in database? 
password_hash("password8", old_salt) == value stored in database? 
password_hash("password9", old_salt) == value stored in database? 

這將是非常,非常緩慢如果他們使用了正確的密碼哈希算法(如bcrypt或scrypt),但如果在某些實現中實際完成這項操作,我不會感到驚訝。

當然,也有第三種可能性,愚蠢的網站從未散列您的密碼在第一位!

+0

感謝您的合理回答。但是這似乎是一種高度概率的方法。如何確定新密碼的字謎。也是最接近的anagram,例如,password6的hash可能與password7的hash或7password的hash非常不同。如果是這樣,我會再次認爲這個問題仍然是開放的。 – siddhusingh