【网络】对称加密与非对称加密
MIT《Missing Semester》
- 对称加密
keygen() -> key (this function is randomized) encrypt(明文:array<byte>,key) -> array<byte> (密文) decrypt(密文:array<byte>,key) -> array<byte> (明文)
应用实例
- 加密文件以存储在不受信任的云服务中。这可以与 KDF 结合使用,因此您可以使用密码加密文件。生成
key = KDF(passphrase)
,然后存储encrypt(file, key)
。使用者需要记住的只是passphrase密语。
- 非对称加密
keygen() -> (public key, private key) (this function is randomized) encrypt(明文:array<byte>,公钥)-> array<byte>(密文) decrypt(密文:array<byte>,私钥)-> array<byte>(明文) sign(message:array<byte>,私钥)->array<byte>(签名) verify(message:array<byte>,签名:array<byte>,公钥) -> bool (whether or not the signature is valid)
应用实例
在ssh使用中,一旦服务器知道客户端的公钥(存储在
.ssh/authorized_keys
文件中),连接客户端就可以使用非对称签名证明其身份。这是通过 质询-响应【sign和verify】来完成的。在高层次上,服务器选择一个随机数并将其发送给客户端。客户端然后对该消息进行签名并将签名发送回服务器,服务器根据记录的公钥检查签名。这有效地证明了客户端拥有与服务器文件中的公钥对应的私钥.ssh/authorized_keys
,因此服务器可以允许客户端登录。