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


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

    密钥管理

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

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

    ① 代码被广泛传播(开源软件,商业软件的二进制文件,逆向工程反编译)。安全方案:通过 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算法。

  • 相关阅读:
    CRM详细介绍网址
    element上传多图片
    多图片上传WebForm
    MemCached原理
    Redis的原理
    Ninject用法详解
    SQLsugar和unity 的用法
    json中的转义字符的处理
    fiddler
    orm多表关系
  • 原文地址:https://www.cnblogs.com/shilxfly/p/6855753.html
Copyright © 2020-2023  润新知