散列与加密算法的几处实际应用场景

算法,包含

  • 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后,电视机怎么允许了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容