加密,密钥,证书相关学习总结

对称加密AES SM4,非对称加密RAS SM2,Hash摘要 SHA SM3,这些算法生成的字符串,是如何变成证书的。

加密

密钥

一个字符串,或者准确的说是二进制字符串。为了方便人眼可见,一般用BASE64编码一下。

加密算法就是用这个字符串给数据加密,确保数据原始内容(明文)不泄露。

算法

算法类型

如果加密和解密用的是同一个密钥,那么就是对称加密算法。比如AES, SM4等。

如果加密和解密用的是不同的密钥,那么就是非对称加密算法,比如RSA,SM2等。密钥分成私钥和公钥,其中公钥是可以公开的,任何用户都能获得。私钥是要严格保密的。 通过私钥可以计算出公钥,但从公钥无法算出私钥。

如果这个加密算法是单向,则是Hash摘要算法,比如SHA ,SM3等。原始内容的任何变化,都将导致摘要结果的变动。无法从摘要计算出原始数据。

算法对比表

算法类别核心定义主流代表算法核心使用场景核心优势核心劣势不可触碰的安全红线
对称加密算法加密、解密使用同一把密钥,核心是分组密码 / 流密码,密钥长度固定,算法公开,安全性依赖密钥保密性【国际主流】AES-128/192/256、ChaCha20【国密标准】SM4-128【老旧淘汰】DES/3DES1. 大批量数据 / 文件 / 磁盘加密2. 数据库敏感字段加密3. TLS/SSH/VPN 会话数据加密4. 内网高速数据传输加密1. 加解密速度极快,性能拉满2. 资源占用低,适配嵌入式 / 低功耗设备3. 硬件加速支持完善(AES-NI / 国密芯片)4. 实现简单,兼容性极强1. 密钥分发困难,无法在公开网络安全传递2. 无身份认证能力,无法证明数据来源3. 密钥一旦泄露,加密直接完全失效4. 不支持不可否认性,无法防抵赖1. 生产环境禁止使用 ECB 模式2. 禁止硬编码密钥、禁止提交密钥到代码仓库3. 禁止使用弱密钥 / 固定密钥,必须定期轮换4. 禁止用密码直接替代标准密钥
非对称加密算法(公钥密码)加密、解密使用一对数学强关联的密钥:公钥可公开分发,私钥绝对保密;无法从公钥反向推导私钥【国际主流】RSA、ECC(secp256r1/secp384r1)、Ed25519【国密标准】SM21. 身份认证、数字签名 / 验签2. 密钥协商(如 TLS 握手传递对称密钥)3. 数字证书体系、HTTPS/SSL 通信4. 双向认证、代码签名、区块链、电子签章1. 彻底解决公开网络的密钥分发难题2. 支持身份认证与不可否认性,可防抵赖3. 公钥可完全公开,无需保密传递4. 私钥仅持有者持有,身份可追溯1. 加解密速度极慢,性能远低于对称算法2. 资源占用高,不适合大批量数据加密3. 密钥长度更长,存储 / 传输开销更大4. 实现复杂,对参数合规性要求极高1. 私钥 = 生命线,绝对禁止泄露、禁止明文存储2. 禁止使用弱密钥长度(RSA<2048 位、SM2<256 位)3. 裸公钥必须通过 CA 证书体系认证,防中间人攻击4. 禁止用公钥加密大量数据,仅用于小数据 / 密钥传递
摘要算法(哈希算法)任意长度的原始数据,单向映射为固定长度的唯一哈希值;无密钥,不可逆,无法从哈希值反推原始数据【国际主流】SHA-256/SHA-384/SHA-512(SHA-2 系列)、SHA-3 系列【国密标准】SM3【已破解淘汰】MD5、SHA-11. 数据完整性校验、文件防篡改校验2. 数字签名配套(先哈希再签名)3. 密码加盐哈希存储(服务端禁明文存密码)4. 证书指纹、接口防重放、区块链区块哈希1. 单向不可逆,无法从哈希值反推原文2. 固定长度输出,无论原文多长,结果长度统一3. 计算速度快,资源占用极低4. 可精准验证数据是否被篡改,哪怕 1 字节改动1. 无任何加密能力,仅能做完整性校验2. 无法解决身份认证问题,单独使用无信任背书3. 弱算法存在哈希碰撞风险,可被伪造4. 无法直接用于数据加密传输1. 生产环境绝对禁止使用 MD5、SHA-1 等已破解弱算法2. 密码存储必须加盐哈希,禁止直接用裸哈希值存密码3. 禁止直接用哈希值作为加密密钥使用4. 防篡改场景必须搭配签名 / 证书体系,单独哈希无法防伪造

算法长度

算法后面的数字,比如AES-128表示128位(16个字节)的密钥,AES-256则是32的字节的密钥。而SM4固定是128(16个字节长度)。

算法模式

同样的算法,可能有不同的模式,比如AES-128-CTR,AES-128-CBC、AES-256-GCM、AES-192-CCM;SM4-128-CBC、SM4-128-CTR。

常见模式对比

表格

模式全称特点典型场景
ECB电子密码本最简单、不安全(相同明文 = 相同密文)几乎淘汰
CBC密码分组链接需填充、串行、旧版 TLS老系统、兼容场景
CTR计数器并行、无填充、流加密VPN、磁盘、高性能
GCM伽罗华计数器CTR + 认证(AEAD)、最安全HTTPS/TLS 1.3、SSH、IPsec
CCM计数器 - 密码块链带认证、适合低功耗蓝牙、IoT、802.15.4

算法实现

一些算法会将其提供商或实现厂商放在最后面,比如aes128-ctr@openssh.com。表示这个AES-128算法的CTR模式,是由openssh提供实现的。

证书

密钥是一个字符串,他属于谁?他在有效期吗?他是不是伪造的?

CA(Certification Authority)机构

为了密钥的安全性,需要给密钥做个打包签证,证明该密钥的归属,没有过期,内置签发机构的新的字符串,就是证书。这个签发机构就是CA。

如果认证是私有的,比如局域网内的服务,可以自行搭建CA,分发证书,强制认可。

如果认证是开放的,比如公网服务,则必须是公众认可的CA机构,比如DigiCert,CFCA。

签证申请CSR(Certificate signing request)

为了得到CA认证的证书,需要将申请信息打包成CSR,发送给CA签发机构。该信息为明文,理论上可以发给多家CA机构审核。

CSR 文件里包含:

  • 你的公钥
  • 主体信息(域名 / 单位 / 城市 / 国家等)
  • 一段待签名数据生成时会用本地私钥对 CSR 做自签名,证明请求方持有对应私钥。

其中的一段数据,可以用CSR里的公钥解密,由此证明这个CSR发起者,确实拥有这个公钥对应的私钥。

申请到的证书

其内容,除了申请者的信息外,CA额外增加的部分重要内容:

  • 证书编号: 唯一的
  • 签发机构信息:国家、省份、城市、组织、通用名(CA 名称),代表 “谁发的这张证书”
  • 签名算法:CA 签发时使用的算法,例如 sha256WithRSAEncryptionsm3WithSM2Encryption
  • 有效期:

CA会用自己的私钥,对如上证书内容做加密(数字签名)。用户用签发结构公开的的公钥验证该签名,证明该证书是该正规CA机构签发的,内容真实,未过期。

双向证书

就是客户端和服务器端,分别发送自己的证书给对方验证,确认身份无误后再开始正式通讯。

双方的证书,可以是不同的CA机构签发的,特别是互联网服务。而在局域网环境,为了简化,都自建CA,大部分是同一个CA签发。

其它

密钥的保护

非对称密钥生成时,主要是私钥,可以用AES保护,下次使用私钥时要输入密码。这可以避免私钥明文的泄露。

但如果使用者是后端服务,比如数据库,https服务等,不可能用户访问连接时,后台手工输入密码来使用私钥验证,此时可以通过:

1、将这个保护密码去掉。此时私钥是明文。通过访问权限控制来对明文密钥文件保护。

2、改造后端服务,将密码导入服务内,对私钥解密时提供密码来正常使用。当然,这个密码又成了要保护的对象。如果安全还不允许,那这个密码就不该保存到本地,而是存到密钥管理系统KMS里面。该密码被KMS加密后本地保存。使用时,比如服务启动时,先把加密的密码发送到KMS解密,得到密码明文并只保存在内存里,用于后续私钥的使用。

总结

非对称加密主要用于认证身份,密钥长度一般也长一些,2048甚至4096。为了可公开的公钥信息的安全可信,出现了证书和对应的公认的颁发机构。

对称加密主要用户数据安全传输,性能要求不能下降太多,密钥长度一般128,192或者256足以。这个密钥由通讯双方连接时动态协商,期间用非对方的公钥加密一下再传输即可保证协商过程中的安全。

摘要用于验证某段文字没有被篡改过。