1. 
          

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

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

            常見(jiàn)問(wèn)題 發(fā)布者:cya 2019-12-31 08:47 訪(fǎng)問(wèn)量:196

            本文經(jīng)授權轉自公眾號CSDN(ID:CSDNnews)

            作者 | Nathilia Pierce

            譯者 | 彎月,責編 | 屠敏

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

            以下為譯文:

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

            人們在保護密碼方面進(jìn)行了很多研究和思考。我們所用的密碼就是挑戰-應答式(Challenge-Response)認證方案中最簡(jiǎn)單的形式。

            因為挑戰問(wèn)題“您的密碼是什么?”會(huì )被反復詢(xún)問(wèn),應答也會(huì )反復使用,因此為重放攻擊(replay attack)敞開(kāi)了大門(mén)。

            1、選擇正確的哈希算法

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

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

            因此,我們都應該使用Argon2id。

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

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

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

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

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

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

            等等,聽(tīng)起來(lái)很像是密鑰散列消息認證碼,對嗎?沒(méi)錯,它就是。你必須非常小心地實(shí)現“胡椒”,因為它可能引發(fā)長(cháng)度擴展攻擊和Bcrypt的棘手問(wèn)題。 

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

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

            4、庫與服務(wù)

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

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

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

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


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

            • SimpleLogin

            • Okta

            • OpenID 

            5、使用合理的密碼政策

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

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

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

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

            • 拒絕與標識符一致的密碼,例如電子郵件、用戶(hù)名。

            • 不要強制使用特殊字符、大寫(xiě)、小寫(xiě)、符號等。

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

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

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

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

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

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

            正如@nylen指出的那樣,密碼和標識符之間應該保持萊文斯坦距離(Levenshtein距離),如果跨入危險距離內則拒絕密碼。當然你應該設定合理的最小距離。

            6、鼓勵用戶(hù)使用良好的做法

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

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

            補充

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

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



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

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

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

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.