摘要:我們不會提及任何糟糕的密碼庫的。僅對而言如果你一定要安裝對稱密鑰加密,請使用上述的的密碼庫。的密碼庫為你提供了認證加密,而的實施并不會驗證密文。當前的最佳密碼庫之一是內建的。這種散列算法對的編程者或企業來說都是穩定有效的。
如果本文中的術語讓你感到疑惑,請先參閱密碼學術語及概念一文。
密碼學不是魔術。加密一個應用程序并不能保證它在襲擊下的安全(特別是在你沒有設置驗證密文的情況下)。但如果出于商業需求你要確保程序的安全,傳統做法會建議你最好不要嘗試設計你自己的密碼。你應該使用已有的密碼庫。
好了,以上我都了解了。那么我應該用哪個PHP密碼庫呢?
這取決于你的實際需求。讓我們來看一下一些好的選擇。(我們不會提及任何糟糕的密碼庫的。)
安全的PHP密碼庫建議下面是一個安全信任度較高的可部署在生產環境中的PHP密碼庫清單。本清單基于以下三項標準進行優先排序。
若正確使用,此密碼庫的安全程度如何?
風險行為的困難度如何?
一個非密碼破譯者最大限度使用之的簡易度如何?
Halite – 來自 Paragon Initiative Enterprises我們推薦此密碼庫不僅是因為它是我們自寫的,首推它是因為你可以通過簡單直觀的接口獲取使用libsodium的全部安全保護。這是一款免費軟件,并且源碼是可以直接獲取的。
使用Halite的好處? 主線
對稱密鑰認證加密
對稱密鑰認證(例如:API 消息)
非對稱密鑰認證加密
非對稱密鑰匿名加密
非對稱密鑰數字簽名
? 全文件加密(見:所有主線特征)
? 加密cookies
? 密碼存儲
? 你不需要知道現時值是什么,你也不需要特別關注認證加密。Halite會幫你做好一切。
我們創建Halite以供PHP開發者通過一個更簡單的接口獲取libsodium拓展的所有安全性優勢。查看Halite的相關文件就能知道它的使用是多么簡便。(盡管 API 是固定的,Halite幫助文件依然是不完善的。然而它已經足以涵蓋入門級的內容。)
唯一的缺陷是你必須安裝PHP的libsodium擴展包才能使用Halite。因此對于很多項目來說,Halite方式是行不通的。
安裝指南:安裝PHP的libsodium擴展包
需要 paragoniehalite`
很顯然,如果你不喜歡我們對于Halite所做的決策,那么可以考慮直接使用libsodium。
使用libsodium的優勢? 對稱密鑰加密認證(同:AEAD)
? 對稱密鑰認證
? 非對稱密鑰認證加密
? 非對稱密鑰匿名加密
? 非對稱密鑰數字簽名
? 加密哈希函數
? 密碼存儲
? 瑞士軍刀式的密碼學原語(比如:基于Curve25519的Diffe-Hellman密鑰交換協議的橢圓曲線)
? 在PHP中的內存清除(補零)能力
? 還有好多
請向Frank Denis以及創作了NaCl(libsodium由此分生)的小組致敬,因為libsodium一直是世界上最可靠的,跨平臺的密碼學庫。
安裝指南請參閱相關文件。
PHP Encryption – 來自 Defuse Security如果你不能從PECL(也就是永遠不能安裝libsodium)安裝PHP拓展包,這個密碼庫應該是你的備用選擇。通常情況下,不論你的框架提供了什么方案,你都應該優先考慮它,因為我們的安全小組經常能發現PHP框架提供的對稱密鑰加密功能的缺陷。
使用Defuse Security 的 PHP密碼庫的優勢:? Symmetric-key authenticated encryption
? 對稱密鑰認證加密
它解決了大多數人都會遇到的一個問題(并且解決得非常棒)。該密碼庫的第二版(即將發布!)將同樣涵蓋全文件加密,但是由于它還未發布,因此我們還不能以此為加分項。
Phpseclib - Jim Wigginton, et al. (僅對 RSA 而言)如果你一定要安裝對稱密鑰加密,請使用上述的Defuse的密碼庫。Defuse Security的密碼庫為你提供了認證加密,而phpseclib的AES實施并不會驗證密文。因此如果你使用它,你對選擇密文攻擊的抵抗力將十分脆弱。(他們的交互文件在ECB模式下同樣出錯嚴重,是我們提過的最壞分組密碼模式。)
盡管phpseclib為通用對稱秘鑰加密方式提供的 API 等級過低,使得我們不愿向缺乏密碼學背景的PHP開發者在這種使用方式下推薦它,但是它相對extopenssl而言提供了一種更好的非對稱秘鑰加密方式。
如果你堅持必須使用非對稱秘鑰加密方式(公共秘鑰加密,電子簽名)并且出于各種原因無法使用libsodium,那么你就應該考慮安裝phpseclib,并且嚴格遵循Colin Percival提出的密碼算法的正確解答。
特別注意RSA加密算法:RSA-OAEP(最優不對稱加密填充),首先考慮
$rsa-setMGFHash("sha256")
RSA
簽名加密:RSA-PSS(probabilistic
signature scheme),再次明確指定使用MGF1+SHA256
如果你剛好是一位密碼學專家,那你可以忽略我們的警示信息,使用phpseclib提供的對稱秘鑰加密方式。但是對大多數非密碼學專家的編程者來說,請最好不要忽略我們的提示。
使用PHPSecLib的優勢:對稱秘鑰認證(通過HMAC秘鑰,PHP同樣提供)
非對稱秘鑰匿名加密(RSA)
非對稱秘鑰電子簽名方式(RSA)
更新內容 (2015-11-19) Easy RSA在本篇博客發布以后,我們又針對建議開發了插入式安裝包,EasyRSA。EasyRSA是一種方向確定且默認安全設置的phpseclib使用。
EasyRSA加密過程問題:使用RSA加密一段超大字符串,即使RSA本身也不支持加密超大字符串數據。
原始解決方案是將你輸入的字符串切分分塊并多帶帶分別加密。然而這和可怕的電碼本(ECB)模式十分相似。同樣的:它的處理進程也十分緩慢。這是個非常糟糕的解決方案。
我們的解決方案生成臨時秘鑰
使用Defuse Security的PHP對稱秘鑰加密密碼庫加密您的消息
使用已有RSA公共秘鑰加密臨時秘鑰(一種對padding oracles攻擊方式抵抗效果良好的方式)
基于64位編碼,并且使用版本標記前綴來連接密文
附加第四步中的校驗和(截取的哈希SHA256加密算法)來增強傳輸存儲錯誤檢測能力。
要解密一段消息驗證檢驗和和版本標記
使用正確RSA私鑰來解密臨時秘鑰
使用上一步獲取的解密秘鑰來獲取明文
EasyRSA只使用RSAES-OAEP + MGF1-SHA256 with e = 65537來進行公鑰加密,已知此種加密方式對任何padding oracle攻擊都是有良好抵抗力的。
EasyRSA 簽名方式RSA簽名方式是相對直接的:使用RSASS-PSS + MGF1-SHA256 with e = 65537來計算RSA簽名,然后校驗它是否設定為僅接受此種簽名。
但是認真講,如果你真的想為你的PHP程序找到一種確保安全的加密方式,請嘗試尋找能使用libsodium的方式。我們正推動使libsodium成為PHP7.1中的核心拓展包,因此希望它的使用能夠在將來同“更新新版PHP”一樣簡單。
關于我們提供的PHP加密庫建議 那其他密碼庫呢?任何未在上文提及的密碼庫的落選原因都可以由以下三條可能原因解釋:
我們審核了該密碼庫,但是憑心而論并不足以讓我們進行推薦。(有可能我們已經告知創作者其密碼庫存在缺陷,以便他們加以改進。)
密碼庫使用范圍太窄(比如Crypt GPG),或者盡管安全,它和加密的廣泛使用情況并不相關。
我們太忙了,還沒審核該密碼庫。(我們可能還不知道有這個密碼庫的存在。)
如果你對我們認定有缺陷的密碼庫感興趣,請查看安全建議頁以獲取更多信息。
在PHP中,我們應該使用何種方式加密密碼?你不需要加密密碼,你只需要用合適的密碼散列算法(哈希密碼算法)來雜亂密碼。當前的最佳密碼庫之一是PHP內建的: password_hash() andpassword_verify()。這種散列算法對99%的編程者或企業來說都是穩定有效的。這個算法就是這么棒。
然而,如果你將數據庫中的密碼存儲在你網頁應用的不同服務器中,你可以通過加密散列(而不是加密密碼本身)來減輕密碼入侵風險。要使用這種方式,請查看Halite密碼課程。
重要的安全建議免責聲明盡管我們雇傭了一些PHP開發安全的行業頂尖專家(并且我們精于應用密碼學),在不了解你的特定項目要求和風險模型的前提下,他們在寫作這篇向導時并不能指引你選取最符合需求的解決方案。
因此如果,比如,你需要使用非對稱加密算法,還執意選擇使用Defuse Security的對稱加密密碼庫,請不要說“是Paragon Initiative Enterprises讓我這么干的!”
如果你想根據自己的特定項目獲得我們的安全建議,請考慮雇用我們進行安全咨詢服務。
或者用法律術語說:此文信息不提供任何擔保,使用風險自負。
原文地址:Choosing the Right Cryptography Library for your PHP Project: A Guide
本文系 OneAPM 工程師編譯整理。OneAPM 是應用性能管理領域的新興領軍企業,能幫助企業用戶和開發者輕松實現:緩慢的程序代碼和 SQL 語句的實時抓取。想閱讀更多技術文章,請訪問 OneAPM 官方博客。
本文轉自 OneAPM 官方博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21417.html
摘要:讀音,全稱,是系列產品一個重要版本,其軟件識別名稱為即是一個基于框架進行開發的一個功能強大易于開發和強拓展的社交系統。另一方面,程序采用嚴格模式,從根本上盡量避免弱級錯誤的產生。哪怕你不會框架,也能讓你入門框架基礎,并勝任應用開發。 Plus (讀音:[pl?s],全稱:ThinkSNS+ [θ??k es en es pl?s],是 ThinkSNS 系列產品一個重要版本,其軟...
摘要:而利用的功能,能夠讓我們省去這一步,下面我就以碼云的為例,實現服務端的代碼自動同步部署。查看是哪個用戶執行該命令參考文章使用腳本遠程部署項目利用實現自動部署代碼碼云通過實現自動同步代碼部署執行系統外部命令函數 當進行開發的環境在本地,而運行的環境要在服務端時,每一次提交代碼都需要在服務端pull一次。而利用git的hooks功能,能夠讓我們省去這一步,下面我就以碼云的webhooks為...
摘要:這大概是我沒有及早使用,或多數開發者流連現狀造成的。它就是,一個的框架。行為驅動開發是來自測試驅動開發的開發過程。簡單的說,它就是經常可能一天幾次將小塊代碼整合進基礎代碼當中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區協同翻譯的文章,已完成翻譯,更多信息請點擊?協同翻譯介紹?。 文章...
摘要:之前幫別人開發的,只是花了一天的時間,做好了前端后端,還有后臺哦很簡單的一個小程序,就是表單圖片上傳。留言板小程序部署教程打開服務端文件夾,打開,修改第二行的數據庫地址,數據庫賬號,數據庫密碼,以及第行的數據庫名,保存。 之前幫別人開發的,只是花了一天的時間,做好了前端+后端,還有后臺哦!!!很簡單的一個小程序,就是表單+圖片上傳。下面是小程序的界面。 showImg(https://...
摘要:以下清單的內容將有助于完善你的擴展,并且在社區中得到更多的重視。編寫單元測試覆蓋大部分的代碼。使用,一個常用的單元測試框架。使用持續集成使用服務來自動檢查編碼是否標準并且能否通過運行測試。 showImg(https://segmentfault.com/img/bV880X?w=1240&h=755); 想要做出一個成功的 PHP 擴展包,不僅僅是簡單的將代碼放進文件夾中就可以了,除...
閱讀 2910·2023-04-26 02:14
閱讀 3760·2019-08-30 15:55
閱讀 1847·2019-08-29 16:42
閱讀 2762·2019-08-26 11:55
閱讀 2851·2019-08-23 13:38
閱讀 489·2019-08-23 12:10
閱讀 1317·2019-08-23 11:44
閱讀 2807·2019-08-23 11:43