大学时候学过密码学,划水太严重。。。
最近仔细思考了一下我和 github 的通过过程,同时结合对加密、解密算法的理解,我觉得通信双方的角色应该是这样的:
github:
github 每天都会接收非常多信息,如果是我的用户名发过去的信息,github 会用我的公钥进行解密。如果能正确解密一个信息(比如,开头是“发给 github 的信”)说明,确实是我发的。
如果解密不对,那就说明受到了攻击。
此处要注意了,关键的点来了:
公钥虽然比较容易拿到,但是,反推私钥的过程是当前计算能力无法在指定时间内完成的。这点由算法来保证!
我:
我从 github 上 pull/clone 数据的时候,我作为一个人是相信 github 的。所以说,验证过程,是由我这个人来做的。因此,我不需要 github 的公钥。
双方的角色是,我可以信任 github ,这是由我个人结合社会经验判断出来的。
但是 github 无法相信网上的“我”,所以它才需要我在最开始的时候,给它一件可以解密我发送的信息的“工具”。