信息安全管理体系文档
—应用系统加解密技术规范
文件编码:
版 本:V1.0
发布日期:
文档信息
一、编制目的
为了增强XXXX应用系统数据加解密的规范性和密钥管理安全性,特制订本规范。
二、适用范围
适用于XXXX所有产品线。
三、术语定义
ECC(Elliptic Curves Cryptography):椭圆曲线非对称公钥加密算法。
SM2:基于一条特定ECC曲线实现的国产非对称公钥加密算法。
SM3算法:国产安全哈希算法(Secure Hash Algorithm),其散列值输出为256bit。
SM4:国产对称分组加密算法,分组与密钥长度均为128bit。
盐值(SALT):特指在加密过程中加入随机化因素,增加加密结果的复杂性。
初始化矩阵(IV):特指在分组链式加密过程中添加的随机化因素,增加加密结果的复杂性。
加密填充(padding):特指对加密过程中小于算法分组长度的最后一个明文块进行填充的过程,使其明文块长度与分组长度对齐,解密时可根据填充模式自动恢复成填充前明文信息。常用的加密填充模式包括PKCS5Padding、PKCS7Padding、OAEPPadding等填充模式。
ECB:电子密码本加密(Electronic Codebook)。一种分组加密模式,每个明文分组单独加密,互相不影响,加解密过程中的错误不会扩散,是一种基本的加解密模式。
CBC:密文分组链接(Cipher Block Chaining)。一种分组加密模式,这种模式中上一个明文块的加密结果会与下一个明文块进行异或运算,运算结果作为明文输入参与加密过程。CBC加密需要IV,加解密过程中的错误具有扩散效应,通常认为是一种更安全的加解密模式。
四、加解密算法安全要求
4.1 总体要求
- 不允许使用自定义加密算法
- 不允许使用不安全的加密算法
- 各种过时或废弃的随机数生成算法
- 各种Hash值低于256位的Hash算法(主要包括MD2/4/5、SHA1等算法)
- 各种密钥长度低于128位的对称加密算法(主要包括DES、RC4等算法)
- 密钥长度低于1024位的RSA算法
- 密钥长度低于256的ECC算法或SM2算法
- 密钥不允许通过键盘手工生成
- 禁止加解密密钥硬编码在配置文件或代码中
- 新代码在不涉及中国以外地区或国家的监管要求时,应优先使用国产加密算法
- 算法库应部署在第一优先加载目录,不允许存在恶意部署优先于正式库加载的情况
4.2 随机数安全要求
4.2.1 以下场景需要使用安全随机数
- 验证码生成
- 一次一密口令(短信验证码)
- 密钥生成
- IV初始化序列
- SALT(加密过程或哈希过程中使用到的盐)
- Token(SessionID、CSRF token、邮件找回密码Token、其他会话相关、行为相关或用户标识相关Token)
4.2.2 随机数生成算法要求:
- 上述场景1&2除外,其他场景随机数长度不得低于64bit
- 随机数生成应使用安全随机数,java语言开发应使用java.Security.SecureRandom类
4.3 Hash算法安全要求
4.3.1 Hash算法数据要求
- 文件或代码完整性保护场景,哈希值需要与目标文件或文件夹分开存储,原则上不允许具有相同的根目录。
- 口令Hash加密存储场景,口令hash加密存储需要加盐,加盐要求参考本规范随机数使用要求,每个用户需要具有不同盐值
- 口令Hash加密认证场景,不允许使用固定盐值,每次Hash加密认证应加入动态变化因子
4.3.2 Hash算法要求:
- 禁止使用MD2&4&5\SHA1等不安全随机数算法
- 新开发的代码逻辑中,不涉及到其他国家或地区法律监管的hash运算要求使用国产hash算法SM3,否则使用SHA256或强度等同的hash算法
- 已有代码逻辑中涉及到的不安全Hash算法,原则上需要探讨安全迁移方案,设定迁移计划
4.4 对称加密安全要求
4.4.1 对称加密数据要求
- 对于机密性等级为2级和3级的敏感数据存储和公网传输,原则上应该加密,无法进行加密的内容应在安全设计文档中说明
- 对于系统间通信认证相关的口令、token、盐值等内容的本地存储和公网传输,应进行加密存储
4.4.2 对称加密算法要求
- 对称加密算法使用SM4和AES,对于新开发系统优先使用SM4算法。
- 对机密性等级为3级的敏感数据存储加密,秘钥长度不得低于128bit,加密算法为AES或SM4算法,AES算法要求密钥长度为256bit。
- 对机密性等级为2级的敏感数据,秘钥长度不得低于128bit,加密算法为AES或SM4算法
- 对于系统间通信认证相关的口令、token、盐值等内容的本地存储,按照机密性等级为3级的敏感数据类同处理
- 对称加密填充使用PKCS7Padding
- 对称加密优先采用CBC模式
4.5 非对称加密安全要求
4.5.1 非对称加密数据要求
- 对于航信与外部机构间存在数据文件交互的情况时,应对数据文件进行数字签名,交付数据文件的同时交付数字签名以及相应的数字证书
- 对于特别重要的业务操作场合,在条件具备的情况下(客户端可部署U盾),应使用数字签名增强抗抵赖性
- 对于航信与外部机构间数据文件交互没有安全通道保证传输机密性的场景,双方应协商使用数字信封保证其安全性
4.5.2 非对称加密算法要求
- 非对称加密算法使用SM2和RSA算法,条件允许的情况下(PKI平台支持SM2算法),新系统建设应优先使用SM2算法
- 使用RSA进行加密,对于机密性或完整性为2级的敏感数据,其密钥长度不得低于1024bit
- 使用RSA进行加密,对于机密性或完整性为3级的敏感数据,其密钥长度不得低于2048bit
- 数字签名应使用SHA256withRSA,SM3withRSA或SM3withSM2(SM2算法需要航信PKI进行支持)
- 数字信封应使用RSAwithAES256、RSAwithSM4,SM2withAES256,或SM2withSM4(需要得到外部机构PKI的相关支持)
- 非对称加密采用OAEPPadding填充模式
五、密钥管理要求
- 代码或配置文件中不允许存储明文密钥或明文密钥的编码转换格式(如Base64编码)
- 在第三方工具软件不允许寄存明文密钥或明文密钥的编码转换格式(如Base64编码)
- 对称密钥不允许任何形式的带内明文分发
- 密钥管理应符合密钥三级管理原则
- 主密钥应存储在独立的硬件设备中,如加密机、U盾或其他专用加密设备
- 密钥加密密钥加密状态存储于客户端应用系统中,或者存储于安全设备中,使用结束后必须能够进行内存擦除
- 会话密钥只允许存在于客户端系统内存中,使用结束后必须能够进行内存擦除
- 主密钥由安全设备生成
- 密钥加密密钥和会话密钥可由客户端应用或安全设备生成