传纸条与 HTTPS

2021-12-07  本文已影响0人  l1n3x

小李喜欢同班的小梁,于是偷偷往小梁的课桌下塞纸条,纸条上写着:你今天的裙子真好看!-小李。万万没想到这一幕被班主任看见了,于是暗中使坏,把纸条上的字改成了:你今天的裙子也太土了吧?-小李。
第二天,小李还想着和小梁能快乐的玩耍,没想到小梁一看见小李就把头拧过去。小李只能暗暗纳闷,想着自己是不是说错了什么话。
最终,小李发现了班主任的阴谋。虽然如此,但是小李仍然没有放弃,终于在一个小时后,小李想出了如下传纸条的方式:
设存在密钥 key,小李在先使用函数 encry 对纸条内容加密:

y = encry(x, key)

并将加密内容 y 写在纸条上。然后小梁拿到纸条后再使用函数 decry 对纸条进行解密:
x = decry(y, key)

这样班主任就算能看到纸条也无法知道纸条上的内容,更无法修改纸条的内容。小李还给这个传纸条的方式取了一个好听的名字-对称传纸条法。
就这样,小李每一天都会告诉小梁一个密钥,并且开开心心的向小梁传纸条。但是好景不长,某一天班主任在抽查小李课文的时候看到了写在课本上的密钥。于是版主任又偷偷使坏,把小李纸条的内容从“明天小树林见”改成了“你欠我的 50 块钱什么时候还?”
经过第二次的教训,小李痛定思痛,开发出了传纸条2.0算法,并取名为非对称传纸条。具体步骤为:
产生存在一对密钥对<pubkey, seckey>,并且无法根据 pubkey 推算出 seckey。小李先使用函数encry 对纸条内容加密:

y = encry(x, seckey)

小梁再使用函数decry 对纸条进行解密:
x = decry(y, pubkey)

小李只将 pubkey 告诉小梁,这样就算班主任知道了 pubkey 也没有办法对纸条内容进行修改。因为使用 pubkey 加密的内容无法使用 pubkey 解密。小李还将这种传纸条方式称为非对称传纸条。
很快,小李的非对称传纸条技术在全校风靡起来。使用非对称传纸条技术大家都能愉快的传纸条了。
但是唯独班花非常苦恼,因为想给班花传纸条的人实在是太多了,她没有办法记住每个人的公钥是什么。于是有的人混水摸鱼把别人的公钥说成自己的,还有的人把自己的公钥说成别人的。例如校草托小王给班花传纸条,小王偷偷把校草的公钥换成自己的公钥告诉班花,并且用校草的公钥解密纸条内容后再用自己的私钥加密传给班花,就这样一直监听班花和校草的纸条。
班花不得不找到小李来解决这个问题。很快,小李想出了一个解决方案:所有想给班花传纸条的人必须向小李注册一个公钥,并且小李也会审核这个公钥的真实性。然后每次有人向班花传纸条时,先问问小李这个公钥是不是正确的,这样就避免冒名公钥的问题。然而每一次班花收到纸条都必须向小李判断公钥的正确性确实是非常太麻烦的一件事情。于是小李又想出了优化办法:

  1. 小李先使用 HASH 算法对注册的公钥进行摘要计算,计算内容包括公钥以及这个人的名字。并将计算后的摘要使用私钥进行加密,加密的过程称为签名。将公钥,名字,加密后的摘要称之为证书。
  2. 班花需要记住小李的公钥。由于只需要记住这一个公钥,所以不会混乱。
  3. 任何需要向班花传纸条的人需要提供由小李私钥签名后的证书。班花拿到证书后,首先使用相同的 HASH 算法对公钥以及名字进行摘要计算。再使用小李的公钥解密证书中加密后的摘要,比较这两个摘要是否相同。如果相同,则说明这个证书未被修改过。

当某个人修改了证书中的公钥或者名字后,得到的摘要与通过小李的公钥解密得到的摘要必定不同。因此,如果某个人想在不被班花发现地情况下修改证书,则必须连同加密后的摘要一起修改。但没有知道小李的私钥,所有没有人可以修改加密后的摘要,因此没有人可以伪造证书。这样班花只需要记住小李一个人的公钥就可以轻松的判断其他公钥是不是合法的,非常的方便。
当然如果某一天小李合伙其他人一起欺骗班花,这就不是证书可以解决的问题了。要解决就这种情况,也许区块链是一种可行的方式。

上一篇下一篇

猜你喜欢

热点阅读