总结
推荐使用的算法:
- 对称加密算法:AES-GCM-256,SM1 (硬件国密), SM4 (国密)
- 非对称加密算法:RSA2048,SM2 (国密)
- 信息摘要算法:SHA256,SM3 (国密散列算法)
对称加密算法/AES-GCM-256:
- GCM=GMAC (数据完整性) + CTR (Counter mode,计数器并行加密)
- 256密钥长度256bits
- 密钥长度,推荐256bits
- 分组长度,每个分组固定128bits,第1个分组需要使用初始向量加密,最后1块分组可能需要填充
- 初始向量,防止相同明文,产生相同的加密结果。初始化变量参与第一个明文块的异或。相同初始向量+相同明文数据 加密后 产生 相同密文
- 加密方式,每组的加密方式,CTR(Counter Mode,计数器模式)等
- 填充方式,有PKCS5, PKCS7, NOPADDING
- 附加消息,数据完整性,防止篡改,不涉密数据,GMAC (Galois message authentication code mode,伽罗华消息认证码)对不涉密的附加消息进行加密
- 密文=AES(Conter Mode)密文+GMAC密文,数据保密和数据防篡改
非对称加密:
- RSA原理,给出两个素数的乘积,分解乘积得到这两个素数十分困难
- RSA常用PEM格式的PKCS#8报文头
信息摘要算法:
- 使用高效散列算法(SHA256)加密“明文+盐值(长度够长+唯一性)”
- 使用耗时散列算法(BCrypt或PBKDF2)加密“明文+盐值(长度够长+唯一性)”
简介
对称加密算法:需要秘钥,相同秘钥
- 定义:用于加密和解密的秘钥相同。
- 分类:分组密码算法(Block cipher), 流密码算法 (Stream cipher)
- 常用分组密码算法:AES (常用), SM1 (硬件国密), SM4 (国密), DES (淘汰), 3DES (淘汰), IDEA, RC2等
- 常用流密码算法:RC4等
对称加密算法/分组密码算法:
- 加密过程:先将明文分组,再加密每个明文块,最后组合密文块
对称加密算法/流密码算法:
- 加密过程:1个bit或1个byte的加密
- 解密过程:1个bit或1个byte的解密
非对称加密算法:需要秘钥,一对秘钥
- 作用:密文传输,HTTPS证书签发
- 定义:使用两把完全不同但完全匹配的钥匙,即公钥和私钥。在使用不对称加密算法加密文件时,只有使用同一对公钥和私钥,才能完成对原来数据的加密和解密的过程。 使用公钥加密明文,使用私钥解密密文。公钥是众所周知的。私钥由秘钥生成者持有。
- 常用:RSA, SM2 (国密), DH, DSA (Digital Signature Algorithm,数字签名算法), ECDSA (Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法), ECC等
信息摘要算法:不需要秘钥
- 作用:加密用户密码
- 定义:不需要秘钥而使用盐值加密不同长度的明文得到相同长度的不能被解密的密文,作为信息的摘要
- 特点:只有输入相同的明文数据&&相同的信息摘要算法&&相同的盐值才能得到相同的密文。
- 常用:MD (Message Digest, 消息摘要算法)不安全;SHA (Secure Hash Algorithm,安全散列算法);SM3 (国密散列算法);BCrypt (耗时散列算法);PBKDF2 (耗时散列算法);MAC (Message AuthenticationCode,消息认证码算法)
信息摘要算法/MD (Message Digest, 消息摘要算法):
- MD2, MD4, MD5
信息摘要算法/SHA (Secure Hash Algorithm,安全散列算法):
- SHA-1, SHA-2(SHA-224, SHA-256, SHA-384, SHA-512)
信息摘要算法/MAC(Message AuthenticationCode,消息认证码算法):
- HMACMD5, HMACSHA1, HMACSHA256, HMACSHA384, HMACSHA512等
对称加密算法/AES-GCM-256
AES原理:XOR异或运算
AES算法 | 分组长度 | 密钥长度 | 迭代轮数 |
---|---|---|---|
AES 128 | 128bits | 128bits | 10 |
AES 192 | 128bits | 192bits | 12 |
AES 256 | 128bits | 256bits | 14 |
AES (Advanced Encryption Standard):高级加密标准
AES安全保证:
- 秘钥长度+迭代轮次
- AES256密钥长度256bits
AES加密过程:先将明文分组,再加密每个明文块,最后组合密文块
- 分组长度,每个分组固定128bits,第1个分组需要使用初始向量加密,最后1块分组可能需要填充
- 初始向量,防止相同明文,产生相同的加密结果。初始化向量与明文块相异或
- 加密方式,每组的加密方式,CTR(Counter Mode,计数器模式)等
- 填充方式,有PKCS5, PKCS7, NOPADDING
- 附加消息,数据完整性,防止篡改,不涉密数据,GMAC (Galois message authentication code mode,伽罗华消息认证码)对不涉密的附加消息进行加密
- 密文=AES(Conter Mode)密文+GMAC密文,数据保密和数据防篡改
加密方式:
加密方式 | 说明 | 适用 |
---|---|---|
CTR (Conter mode) | 明文分组与计数器(经过加密)相异或,计数器随分组编号增加而加1 | 并行加密过程,加密速度快 |
ECB (Electronic code book) | ||
CBC (Cipher block Chaining) | ||
OFB (Output feedback) |
加密方式,每组的加密方式,CTR(Counter Mode,计数器模式):
- 并行加密:所有的块只依赖于Nonce(初始向量)与Counter,并不会依赖于前一个密文块,适合高速传输
加密方式,每组的加密方式,CTR(Counter Mode,计数器模式):
附件消息,数据完整性,防止篡改,GMAC (Galois message authentication code mode,伽罗华消息认证码):
- MAC(Message Authentication Code, 消息认证码)防止数据在传输过程中被篡改
- GMAC就是利用伽罗华域(Galois Field,GF,有限域)乘法运算来计算消息的MAC值
- 详细内容见 信息摘要算法/MAC系列
GCM(Galois/Counter Mode):
- GCM=GMAC+CTR
- CTR是AES的一种加密方式用于保证数据的保密性,GMAC作用于附加消息起到保证数据完整性,防止篡改的作用
AES-GCM加密过程图:
- IV(initialization vector):初始向量
- E k E_k Ek:AES块加密器
- Auth tag:附加消息,认证标签,用于验证数据完整性
- 最终加密文本:包含初始向量IV、密文ciphertext和身份验证标记Auth tag
AES-GCM-256:
- GCM=GMAC+CTR
- 256密钥长度256bits
AES-GCM-256使用:msg(明文数据), iv(初始向量), tag(附加消息)
- 密钥长度,推荐256bits
- 分组长度,每个分组固定128bits,第1个分组需要使用初始向量加密,最后1块分组可能需要填充
- 初始向量,防止相同明文,产生相同的加密结果。初始化变量参与第一个明文块的异或。相同初始向量+相同明文数据 加密后 产生 相同密文
- 加密方式,每组的加密方式,CTR(Counter Mode,计数器模式)等
- 填充方式,有PKCS5, PKCS7, NOPADDING
- 附加消息,数据完整性,防止篡改,不涉密数据,GMAC (Galois message authentication code mode,伽罗华消息认证码)对不涉密的附加消息进行加密
- 密文=AES(Conter Mode)密文+GMAC密文,数据保密和数据防篡改
非对称加密算法/RSA2048
RSA原理:给出两个素数的乘积,分解乘积得到这两个素数十分困难,分解几百位的乘积得到这两个素数几乎不可能
RSA作用:
- 数字签名,HTTPS使用RSA颁发证书
RSA的不同格式:
- 常用的是PEM格式,PEM格式有两种报文头PKCS#8和PKCS#1
PKCS#8
"-----BEGIN PUBLIC KEY-----": PKCS#8 格式公钥
"-----BEGIN PRIVATE KEY-----": PKCS#8 格式私钥
"-----BEGIN RSA PUBLIC KEY-----": PKCS#1 格式公钥
"-----BEGIN RSA PRIVATE KEY-----": PKCS#1 格式私钥
PKCS#8/公钥
-----BEGIN PUBLIC KEY-----
public key
-----END PUBLIC KEY-----
PKCS#8/私钥
-----BEGIN PRIVATE KEY-----
private key
-----END PRIVATE KEY-----
PKCS#1/公钥
-----BEGIN RSA PUBLIC KEY-----
public key
-----END RSA PUBLIC KEY-----
PKCS#1/私钥
-----BEGIN RSA PRIVATE KEY-----
private key
-----END RSA PRIVATE KEY-----
RSA算法流程:
- 随机选择两个大素数 p , q p, q p,q
- 计算乘积 n = p ∗ q n=p*q n=p∗q
- 计算乘积 ϕ ( n ) = ( p − 1 ) ∗ ( q − 1 ) , ϕ ( n ) 关于 n 的欧拉函数 \phi(n)=(p-1)*(q-1), \phi(n)关于n的欧拉函数 ϕ(n)=(p−1)∗(q−1),ϕ(n)关于n的欧拉函数
- 选择整数 e e e,使得 g c d ( ϕ ( n ) , e ) = 1 , e ∈ ( 1 , ϕ ( n ) ) , e 和 ϕ ( n ) 互为素数 , g c d ( ) 是最大公约数函数 gcd(\phi(n),e)=1, e\in(1,\phi(n)), e和\phi(n)互为素数, gcd()是最大公约数函数 gcd(ϕ(n),e)=1,e∈(1,ϕ(n)),e和ϕ(n)互为素数,gcd()是最大公约数函数
- 计算乘法逆元 d d d, d = e − 1 m o d ϕ ( n ) d=e^{-1} mod \phi(n) d=e−1modϕ(n)
- 得到公钥:{e,n}
- 得到私钥:{d,n}
- 加密: B = A e m o d n , A 明文 , B 密文 B=A^e mod n, A明文, B密文 B=Aemodn,A明文,B密文
- 解密: A = B d m o d n , A 明文 , B 密文 A=B^d mod n, A明文, B密文 A=Bdmodn,A明文,B密文
信息摘要算法/SHA256
SHA作用:是一种从任意长度数据中创建固定长度的数字指纹(信息摘要)的算法
SHA-2:包括SHA-224, SHA-256, SHA-384, SHA-512
信息摘要算法/MAC系列
MAC(Message Authentication Code, 消息认证码):
- 作用:防止数据在传输过程中被篡改
- 发送者:
与发送者商议秘钥,相同秘钥
明文消息》MAC算法+秘钥》MAC值1
发送明文消息+MAC值1 - 接收者:
与接收者商议秘钥,相同秘钥
接收到明文消息+MAC值1
接收到的明文消息》MAC算法+秘钥》MAC值2
对比:MAC值1和MAC值2是否相等
信息摘要算法/问题
问题:黑客事先准备一个密码明文的各种散列算法结果(彩虹表)进行暴力破解
问题解决/使用高效散列算法+盐值(长度够长+唯一性):
- 高效散列算法执行一次耗时时间短,仍然可以通过穷举 盐值+明文内容 进行破解
问题解决/使用耗时散列算法+盐值(长度够长+唯一性):
- 使用耗时散列算法BCrypt和PBKDF2算法,他们可以通过参数设置重复计算的次数,重复计算的次数越多耗时越长
总结:
- 使用高效散列算法(SHA256)加密“明文+盐值(长度够长+唯一性)”
- 使用耗时散列算法(BCrypt或PBKDF2)加密“明文+盐值(长度够长+唯一性)”