日韩国产精品99成人不卡在线无毒|狠狠躁夜夜爽一级二级精品|亚洲日日噜噜孕妇中文字幕|日韩久草中文三级片

新聞動(dòng)態(tài)

程序員是如何處理密碼的?

常見問題 發(fā)布者:cya 2019-12-31 08:47 訪問量:348

本文經(jīng)授權(quán)轉(zhuǎn)自公眾號(hào)CSDN(ID:CSDNnews)

作者 | Nathilia Pierce

譯者 | 彎月,責(zé)編 | 屠敏

數(shù)據(jù)大爆炸時(shí)代,信息泄露事件屢見不鮮。作為程序員,從自身做起,有什么加固信息保護(hù)的方法嗎?事實(shí)上,復(fù)雜且好記的密碼就是必備手段之一。

以下為譯文:

如今,密碼仍然是主要的身份驗(yàn)證方式——以某種熟悉的形式。人類很懶惰,經(jīng)常設(shè)置保密程度很低的密碼或重用密碼。

人們?cè)诒Wo(hù)密碼方面進(jìn)行了很多研究和思考。我們所用的密碼就是挑戰(zhàn)-應(yīng)答式(Challenge-Response)認(rèn)證方案中最簡(jiǎn)單的形式。

因?yàn)樘魬?zhàn)問題“您的密碼是什么?”會(huì)被反復(fù)詢問,應(yīng)答也會(huì)反復(fù)使用,因此為重放攻擊(replay attack)敞開了大門。

1、選擇正確的哈希算法

Argon2是一個(gè)密鑰派生函數(shù),它是最好的密碼哈希算法,因此新項(xiàng)目應(yīng)該考慮使用該算法。如果你無(wú)法使用Argon2,則可以考慮Scrypt。其他密鑰派生函數(shù)都不應(yīng)考慮在內(nèi)。

Argon2i可以抵御旁路攻擊(side-channel attack),而Argon2d則可以抵御時(shí)空平衡攻擊(time-memory tradeoff attack)。Argon2id是兩者的結(jié)合,可以同時(shí)抵抗兩種攻擊,并且適用于大多數(shù)情況。

因此,我們都應(yīng)該使用Argon2id。

2、正確地給哈?!凹欲}”

“鹽”與Nonce(只使用一次的隨機(jī)數(shù))密切相關(guān),然而,Nonce只能用于通信協(xié)議,無(wú)法用于哈希。Nonce可以防止重放攻擊,而“鹽”可以防止預(yù)先計(jì)算好的哈希(又名彩虹表)。區(qū)分二者很重要,因?yàn)樗鼈冾A(yù)防的攻擊是不同的。

“鹽”唯一的要求是它應(yīng)該對(duì)于每個(gè)哈希是唯一的,而且是公開的,但為了防止加鹽后的哈希被預(yù)先計(jì)算,“鹽”的產(chǎn)生應(yīng)當(dāng)是不可預(yù)測(cè)的。

我們可以認(rèn)為,密碼學(xué)安全偽隨機(jī)數(shù)生成器產(chǎn)生的32字節(jié)輸出是不可預(yù)測(cè)的唯一值。

3、正確地給哈?!凹雍贰?/span>

如果你曾研究過(guò)互聯(lián)網(wǎng)的“鹽”,那么你可能也聽說(shuō)過(guò)“胡椒”?!昂贰笔且环N密鑰,用于哈希函數(shù),“胡椒”不可預(yù)測(cè)且對(duì)每個(gè)應(yīng)用程序來(lái)說(shuō)都是唯一的。

等等,聽起來(lái)很像是密鑰散列消息認(rèn)證碼,對(duì)嗎?沒錯(cuò),它就是。你必須非常小心地實(shí)現(xiàn)“胡椒”,因?yàn)樗赡芤l(fā)長(zhǎng)度擴(kuò)展攻擊和Bcrypt的棘手問題。 

Argon2的官方規(guī)范中實(shí)現(xiàn)了一個(gè)secret value,可以充當(dāng)“胡椒”的可選參數(shù)。如果你使用的實(shí)現(xiàn)不支持secret value,那么請(qǐng)對(duì)哈希進(jìn)行加密。如果你不使用Argon2,那么請(qǐng)對(duì)哈希進(jìn)行加密。

不要在實(shí)現(xiàn)“胡椒”和加密哈希上浪費(fèi)時(shí)間,你不會(huì)得到任何的實(shí)際好處,而且你應(yīng)該將密鑰存儲(chǔ)在硬件安全模塊中。

4、庫(kù)與服務(wù)

你不應(yīng)該在生產(chǎn)中使用自己編寫的身份驗(yàn)證系統(tǒng),而是應(yīng)該使用現(xiàn)成的庫(kù)和服務(wù)。但是你應(yīng)該學(xué)習(xí)如何實(shí)現(xiàn)身份驗(yàn)證系統(tǒng)及其工作原理。

如果你是PHP開發(fā)人員,則可以使用內(nèi)置的password_hash函數(shù),若使用Halite則更佳。請(qǐng)確保你使用的PHP 7.2及更高的版本。請(qǐng)注意,PHP的默認(rèn)密碼哈希算法是Bcrypt。

使用Halite進(jìn)行哈希處理,然后對(duì)你的密碼進(jìn)行加密。該庫(kù)需要一個(gè)密鑰來(lái)存儲(chǔ)密碼。 

PargonIEHalitePassword::hash($_POST["password"], $encryptionKey);


可以考慮的第三方解決方案包括:

  • SimpleLogin

  • Okta

  • OpenID 

5、使用合理的密碼政策

  • 最大長(zhǎng)度不少于128個(gè)字符。

  • 最小長(zhǎng)度為12或16個(gè)字符。

  • 支持所有(至少支持絕大部分)的Unicode和空白。

  • 通過(guò)HIBP API拒絕已知密碼。

  • 拒絕與標(biāo)識(shí)符一致的密碼,例如電子郵件、用戶名。

  • 不要強(qiáng)制使用特殊字符、大寫、小寫、符號(hào)等。

  • 不要以任何方式截取、清理或格式化密碼!

  • 不要阻止將密碼復(fù)制并粘貼到密碼字段中。

  • 不要限制密碼字段中可以輸入或不能輸入的字符。

  • 不要頻繁要求更改密碼。

最重要的是密碼本身的長(zhǎng)度和信息量。請(qǐng)抑制你內(nèi)心的渴望,不要強(qiáng)制執(zhí)行上述任何密碼策略,與其這樣還不如實(shí)施因素身份驗(yàn)證,可以更好地保護(hù)用戶的賬號(hào)。

如果強(qiáng)制執(zhí)行某個(gè)密碼策略,那么用戶可能會(huì)被迫寫下密碼,他們會(huì)忘記密碼,會(huì)感到不厭其煩或選擇保護(hù)度過(guò)弱的密碼。如果你強(qiáng)制用戶更改密碼,他們也會(huì)將密碼寫下來(lái)。

正如@nylen指出的那樣,密碼和標(biāo)識(shí)符之間應(yīng)該保持萊文斯坦距離(Levenshtein距離),如果跨入危險(xiǎn)距離內(nèi)則拒絕密碼。當(dāng)然你應(yīng)該設(shè)定合理的最小距離。

6、鼓勵(lì)用戶使用良好的做法

鼓勵(lì)用戶使用diceware、passphrases、密碼管理器(如BitWarden)和多因素身份驗(yàn)證(FIDO和TOTP協(xié)議)。

不鼓勵(lì)用戶使用姓名、日期、生日等個(gè)人信息作為密碼,還要建議用戶盡可能不要與他人共享密碼。

補(bǔ)充

  • 使用TLS 1.2及更高版本(SSL協(xié)議的后續(xù)版本)保護(hù)通信。否則,敏感信息(密碼)會(huì)被公開,即便采用最新的哈希也無(wú)濟(jì)于事。

  • 不要通過(guò)手機(jī)短信實(shí)現(xiàn)多因素身份驗(yàn)證!SIM卡交換詐騙和詐騙電話很容易獲取驗(yàn)證碼



關(guān)鍵字: 開封網(wǎng)站建設(shè) 晨展科技 處理密碼

文章連接: http://www.hsjyfc.com.cn/cjwt/662.html

版權(quán)聲明:文章由 晨展科技 整理收集,來(lái)源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請(qǐng)聯(lián)系我們,我們會(huì)立即刪除。如轉(zhuǎn)載請(qǐng)保留