加密算法與隨機數生成算法

使用安全可靠的加密算法和隨機數生成算法java

密鑰管理算法

在密碼學裏有個基本原則:密碼系統的安全性應該依賴於密鑰的複雜性,而不是算法的保密性。數據庫

在安全領域裏,選擇一個足夠安全的加密算法不是困難的事,難的是密鑰管理。在密鑰管理中常見的錯誤是,將密鑰硬編碼在代碼裏。硬編碼的密鑰容易泄露:安全

① 代碼被普遍傳播(開源軟件,商業軟件的二進制文件,逆向工程反編譯)。安全方案:經過 Diffie-Hellman 交換密鑰體系,生成公私密鑰來完成密鑰的分發。服務器

② 軟件開發團隊的成員都能看到代碼,從而獲知密鑰,若是人員流動性較大,則密鑰的保密性沒法保證。安全方案:改善密鑰管理,限制代碼讀寫權限等。運維

Web 應用中常見作法:將密鑰(包括密碼)保存在配置文件或數據庫中,在使用時由程序讀取並加載至內存。密鑰所在的配置文件或數據庫須要嚴格的控制訪問權限,同時也要確保運維或 DBA 中具備訪問權限的人員越少越好。在應用發佈到生產環境時須要從新生成新的密鑰或密碼,以避免與測試環境中使用的密鑰相同。dom

密鑰管理的主要目的是爲了防止密鑰從非正常渠道泄露。按期更換密鑰是一種有效的作法。一個比較安全的密鑰管理系統,能夠將全部的密鑰(包括敏感的配置文件)都集中保存在一個服務器或集羣上,並經過 Web Service 的方式提供獲取密鑰的 API。每一個 Web 應用在須要使用密鑰時,經過帶認證信息的 API 請求密鑰管理系統,動態獲取密鑰。Web 應用不能呢把密鑰寫入本地文件中,只加載到內存。密鑰集中管理下降了系統對密鑰的耦合性,也有利於按期更換密鑰。函數

使用可靠的僞隨機數算法測試

僞隨機數是經過一些數學算法生成的隨機數,並不是真正的隨機數。密碼學上的安全僞隨機數是不可壓縮的。對應的真隨機數一般由物理系統產生,好比電壓的波動、空中電磁波的噪聲等。編碼

安全的隨機數生成算法:在 Java 中,可使用 java.security.SecureRandom;在 Linux 中,可使用 /dev/random 或者 /dev/urandom;在 PHP5.3.0 及以後的版本中,若支持 OpenSSL 擴展,也能夠直接使用函數來生成( string openssl_random_pseudo_bytes(int $length [, bool &$scrypto_strong]) )

此外,從算法上能夠經過多個隨機數的組合來增長隨機數的複雜性。好比給隨機數使用 MD5 算法後再鏈接一個隨機字符,而後再使用 MD5算法。

相關文章
相關標籤/搜索