算法,包含
- SHA*
- MD5
- AES
- 椭圆曲线
场景1:比特币挖矿
比特币挖矿原理是,给定固定长度数据input
,要求算出另外一段数据coin
作为比特币奖励,使得SHA256(input+coin)
的结果,前面N个字节都是0,当挖到矿coin
之后,再由coin
计算下一段输入数据input
, 如此往复。
根据当前挖矿的速度调节N,使得挖矿难度保持在一定的区间内。
因为SHA的不可逆,所以数据coin只能一个一个的遍历,因为SHA算法的CPU或者GPU都有并行计算的方法,所以显卡可以挖矿,还出现了单独为此设计的ASIC芯片。
这样原本普通人可以挖矿的事情,现在都集中到矿场主去了,所以有了部分其它的币,来避免算力集中的问题。
场景2:压缩文件的密码
RAR: 从RAR文件中可以找到两段字节A和B,测试password,把A+password
进行多次SHA256与md5,使得最终的结果和B相等则密码正确
7z: 除了RAR这样的机制外,还需要去实际解压文件,使得解压出来的CRC于7z中存放的CRC相等
具备并行计算的可能性
场景3:PDF密码
从PDF文件中找到字节A和B,测试password,把A+password
作为input
进行运算得出B,则密码正确,运算过程如下
while (round_time < 64)
aes_result = AES(input)
n = (aes_result / 3)的余数
if n == 0: <-----此处的if决定了没有办法并行计算,因为无法预测分支
sha = sha256
else if n == 1:
sha = sha384
else
sha = sha512
input = sha(input)
if (ars_result.last > round_time - 32)
break;
在这个循环中,因为有根据余数来选择SHA算法,所以没有办法并行计算
场景4:AirPlay协议
在数据传输之前的协商阶段,采用了椭圆曲线加密和摘要,这是一个不同于RSA的只需要单方生成密钥对公开公钥,椭圆曲线需要双方都生成密钥对,并且明文交换公钥,双方都利用对方的公钥,生成相同的share_key用于通信加密,意味着算法比较奇特,需要满足
share_key = p(f(sec_key_a), pub_key_b) = p(f(sec_key_b), pub_key_a)
AirPlay协议不用RSA的原因是,传输过程没有CA的帮助,无法知道有没有中间人攻击来偷窥或者修改数据,否则就被发现投屏/镜像的数据了。椭圆曲线秘钥的交换过程,中间人无法算出c。
但是该算法依然无法解决投错对象的问题,比如想投电视机,结果投个冰箱,这需要了解airplay后,电视机怎么允许了。