最近涉及到安全相关的知识,这里对安全秘钥管理要点做简单记录:
加密技术 是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。
0. 基本概念
加密包括两个元素: 算法和 密钥。一个加密算法是将消息与密钥(一串数字)结合,产生不可理解的密文的步骤。
密钥是结合密码算法一起使用的参数,拥有它的实体可以加密或恢复数据。
密钥可以分对称密钥和非对称密钥。
对称密钥: 加/解密使用相同密钥。 -- AES等算法
非对称密钥:需要两个密钥来进行加密和解密。(公钥和私钥) -- RSA等算法
1. 密钥分层管理结构
密钥分层管理至少选择两层结构进行管理:根密钥和工作密钥。
2. 密钥生命周期安全管理
密钥生命周期 由于不良设计可能导致的安全问题
生成: 生成算法随机性差,导致密钥可被预测,或攻击者可以自己生成密钥。
分发: 密钥明文分发,导致密钥存在被攻击者截获的风险。
更新: 密钥从不更新,导致攻击者更容易获取密钥,从而能够轻易获取敏感数据的明文。
存储: 密钥明文存储在数据库中,导致攻击者容易读取出密钥,从而能够轻易获取敏感数据的明文。
备份: 如果重要密钥从不备份,一旦密钥丢失,将导致原有加密的数据不能解密,大大降低了系统可靠性。
销毁: 密钥仅被普通删除,导致攻击者有可能恢复出密钥。
密钥的建立包括密钥的生成和分发。
2.1 生成
- 基于安全的随机数发生器
- 基于密钥导出函数
PBKDF2是一个基于口令的密钥导出函数,导出密钥的计算公式: DK = PBKDF2(HashAlg, Password, Salt, count, dkLen) PBKDF2 :密钥导出函数名 输入: HashAlg :哈希算法(推荐使用SHA256) Password :用户输入的口令或者读取的一串字符串 Salt :盐值,为安全随机数,至少为8字节 count :迭代次数,正整数 dkLen :导出密钥的字节长度,正整数。 输出: DK :导出的密钥,长度为dkLen个字节的字符串。
http://javadoc.iaik.tugraz.at/iaik_jce/current/iaik/pkcs/pkcs5/PBKDF2.html - 基于标准的密钥协商机制
- 基于安全的密钥生成工具等
2.2 分发
密钥的分发是将密钥通过安全的方式传送到被授权的实体,一般通过安全传输协议或者使用数字信封等方式来完成。
数字信封是对称密码体制和非对称密码体制的一种混合应用,即解决了非对称密码体制加解密效率的问题,又妥善解决了密钥传送的安全问题。
在密钥的分发过程中,对于对称密钥和非对称密钥的私钥而言,应保证其完整性和机密性;
推荐产品开发人员使用安全的加密传输协议(如SSL、IPSec、SSH)来传输这些敏感数据。
当产品的应用场景中不具备建立安全传输协议的条件时,也可以使用数字信封来完成密钥的分发。
数字信封加解密接口
接口 | iPSI | OpenSSL |
---|---|---|
加密 | CRYPT_sealInit() | EVP_SealInit() |
加密 | CRYPT_sealUpdate() | EVP_SealUpdate() |
加密 | CRYPT_sealFinal() | EVP_SealFinal() |
解密 | CRYPT_openInit() | EVP_OpenInit() |
解密 | CRYPT_openUpdate() | EVP_OpenUpdate() |
解密 | CRYPT_openFinal() | EVP_OpenFinal() |
对于非对称密钥的公钥而言,应保证其完整性与真实性。
2.3 使用
一个密钥只用于一个用途(如:加密、认证、随机数生成和数字签名等)。
非对称加密算法私钥仅可被其拥有者掌握。
2.4 存储
用于数据加解密的工作密钥不可硬编码在代码中。
对称密钥、私钥、共享秘密等均属于敏感数据,在本地存储时均需提供机密性保护。
上层密钥的机密保护由下层密钥提供 --> 根密钥的安全管理。
密钥组件方式生成根密钥时,密钥组件需要分散存储,当密钥组件存储于文件中时,须对文件名做一般化处理。
2.5 更新
当密钥已经达到其使用期限或者密钥已经被破解时,密码系统需要有密钥更新机制来重新产生新的密钥
密钥须支持可更新,并明确更新周期。
2.6 备份
密钥丢失将导致密文数据无法解密,这样便造成了数据的丢失。
应依据具体场景,来评估是否需要对密钥提供备份与恢复机制
2.7 销毁
不再使用的密钥应当立即删除。
2.8 可审核
密钥管理操作需要记录详细日志。
密钥的生成、使用(作为管理用途,如加解密密钥、派生密钥必须记日志,作为业务用途,如加解密业务数据则不要求)、更新、销毁操作是重要的管理操作。
日志中需详细记录密钥的各项管理操作,包括但不限于记录操作的主体(人或设备)、时间、目的、结果等可用于事件追溯的信息。