加密原理及应用
本文最后更新于:2022年2月12日 上午
流程
加密

Hash

算法
加密
对称加密
DES、3DES-加密标准、3重加密标准
AES-高级加密标准,分组加密 在4x4的字节矩阵上运作
密钥加法层
进行异或运算
字节代换层 混淆
S盒映射:字节到字节的映射
每个字节的高四位作为第一个下标,低四位作为第二个下标
行位移层 扩散
对矩阵的每一行进行左移:0123
列混淆层 扩散
左乘一个矩阵
非对称加密
RSA—公钥加密算法 安全性:大整数因式分解的困难性
ECC-椭圆曲线加密算法 安全性:解决椭圆曲线离散对数问题的困难性
- 私钥签名、公钥验证
- 公钥加密、私钥解密
- 公钥、私钥的产生(例)
1、素数 p = 2 和 q = 7 ,计算乘积为 N = pq = 14 (小于14与14不互质的数:2,4,6,7,8,10,12,密钥长度2)
2、根据欧拉函数,r =
= (p-1)*(q-1) =(2-1)(7-1) = 6
3、选择整数 e = 5,e 和 r 互质,求得 e 关于 r 的模拟元 d
4、即ed-1=xr,d = 11
5、公钥为(N, e),私钥为(N, d)即公钥(14, 5),私钥(14, 11)
- 加密
1、明文为n = 10(需要小于N)
2、密文
,即c=12,
- 解密
1、密文c = 12
2、明文
,即n=10,
- 安全性
1、由公钥、私钥生成第3/4步可知,要求d,需要知道e和r
2、由公钥、私钥生成第2步可知,要求r,需要知道p和q
3、由公钥、私钥生成第2步可知,要求p和q,需要知道N,公钥由e和N组成,所以要破解私钥,需要对N因式分解
- 结论
密钥长度越长,该算法越安全
- 已知的攻击方法
1、因数分解
- 1999 RSA-155(512 bits)被成功分解 花费5个月时间 224 CPU hours
- 2009 RSA-768 (768 bits) 被成功分解
2、时间攻击
- 利用计算机加密使用的时间推算私钥的内容
总结:明文与密文是一对一的关系
Hash
MD5、SHA
正向快速
给定明文,有限时间、有限资源可以计算出hash值
逆向困难
使用hash值在有限时间内很难推出明文
输入敏感
输入的文本略有不同,摘要需要很大不同
Hash碰撞/散列碰撞
找到hash值一致的两段明文的难度要足够大
总结:输入文本与摘要结果是多对一的关系
使用原则
如果被保护数据仅仅用作比较验证,在以后不需要还原成明文形式,则使用哈希
如果被保护数据在以后需要被还原成明文,则需要使用加密。
应用场景
1、HTTPS对数据的加密
对称加密 + 非对称加密
具体方式:
2、Git的无口令访问(SSH)
Hash(MD5) + 非对称加密
具体方式:
Web API的使用
Hash
1 | |
RSA
1 | |
AES
1 | |
第三方库介绍
jsrsasign
优点:
- 加密方法齐全
- Nodejs\web端都可以使用
缺点:
- 生成密钥耗时长
- 加密、解密耗时长
jsencrypt
优点:
- 比jsrsasign加密速度快
- Nodejs\web端都可以使用
缺点:
- Java验签时不兼容
- 无法生成rsa密钥





= (p-1)*(q-1) =(2-1)(7-1) = 6
,即c=12,
,即n=10,

