加密算法与随机数生成算法

使用安全可靠的加密算法和随机数生成算法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算法。

相关文章
相关标签/搜索