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

使用安全可靠的加密算法和随机数生成算法

密钥管理

在密码学里有个基本原则:密码系统的安全性应该依赖于密钥的复杂性,而不是算法的保密性。

在安全领域里,选择一个足够安全的加密算法不是困难的事,难的是密钥管理。在密钥管理中常见的错误是,将密钥硬编码在代码里。硬编码的密钥容易泄露:

① 代码被广泛传播(开源软件,商业软件的二进制文件,逆向工程反编译)。安全方案:通过 Diffie-Hellman 交换密钥体系,生成公私密钥来完成密钥的分发。

② 软件开发团队的成员都能看到代码,从而获知密钥,如果人员流动性较大,则密钥的保密性无法保证。安全方案:改善密钥管理,限制代码读写权限等。

Web 应用中常见做法:将密钥(包括密码)保存在配置文件或数据库中,在使用时由程序读取并加载至内存。密钥所在的配置文件或数据库需要严格的控制访问权限,同时也要确保运维或 DBA 中具有访问权限的人员越少越好。在应用发布到生产环境时需要重新生成新的密钥或密码,以免与测试环境中使用的密钥相同。

密钥管理的主要目的是为了防止密钥从非正常渠道泄露。定期更换密钥是一种有效的做法。一个比较安全的密钥管理系统,可以将所有的密钥(包括敏感的配置文件)都集中保存在一个服务器或集群上,并通过 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算法。

 

转载于:https://www.cnblogs.com/shilxfly/p/6855753.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值