这是最近关于公司内部技术分享,对其进行的梳理,学习了关于信息传输过程中如何通过加密技术来保证信息传输的安全。
RSA+AES通信流程着在了解其中的通讯流程之前,先来了解下对应的加密技术概念
对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中,常见的对称加密:DES、AES等。
非对称加密(Asymmetric Cryptography)
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用公钥进行加密,而解密则需要另一个密钥(私钥)。
保险箱例子有个比较生动的例子就是:公钥就像是一个打开保险门的保险箱,这个打开门的保险箱,只要你要保存东西就会给你一个,你把保护的东西放进去,当你关上保险门的时候,自己将无法获取到里面的东西(公钥只负责加密,无法对已加密的信息进行解密)。在传输的过程中可以保证保险箱里面东西的安全,因为只有拥有钥匙🔑(私钥)的人才可以打开这个箱子,而这个钥匙只会在特定的人手里,拿不到钥匙是无法打开保险箱(可以想象这个保险箱无法暴力破解)。常见的加密方式:RSA。
我们假设的场景就是在信息传输的过程中,有可能会被黑客监听你的传输内容,如何在有中间人监听行为的情况下,还能保证传输信息的安全。
关于通讯流程这块的设计:
获取RSA公钥过程1. 客户端通过请求服务端,获取到RSA公钥,公钥是谁来请求都会给的,私钥只会保存在服务端这边,不会进行私钥的传输。
利用RSA、AES进行加密与解密2. 当客户端拿到服务端的传来RSA公钥,就像前面说到的打开保险箱例子,我们拿这个公钥对临时随机AES密钥与登陆信息(账号、密码等)进行RSA加密(关上保险箱)。我们知道在网络传输中,账号与密码一般不允许通过明文来传输的,通过RSA加密,就算被中间人获取到了RSA加密后的信息,中间人手上没有对应的RSA私钥,无法对其进行RSA解密,所以无法获取到加密前的信息。中间人手上公钥只能进行加密,无法对加密的信息进行解密。
3. 服务端获取到RSA加密后的信息,通过手上的私钥对其进行解密,获取到对应加密前的信息(临时随机AES密钥与账号、密码等),服务端拿到账号密码后登陆校验其身份是否符合要求,当符合要求时会生成对应的正式AES密钥与返回的用户信息。这时需要用到之前从客户端拿到的临时随机AES密钥,对需要返回的正式AES密钥与用户信息进行AES加密(对称加密),返回登陆信息后,客户端通过临时随机AES密钥进行AES解密,拿到服务端返回的正式AES密钥与用户信息。对称加密这块使用的都是同一的密钥。
PS:这里可能会有疑问,就是为什么不直接通过RSA来传输信息呢?因为在使用RSA加密过程中,虽然安全性非常高,不过其对加密信息的长度与效率这块都有很大的限制,打个比喻,可以想象对称加密的效率是非对称加密效率的1000倍。所以在通讯过程中,一般对关键信息进行RSA加密,其它的信息通讯一般使用非对称加密。
正式AES密钥进行网络通讯4. 最终客户端拿到的正式AES密钥,服务端也有正式AES密钥,它们之间的网络通讯就是对网络模块的信息进行AES加密与解密,在此过程中,就能有效的保证传输信息的安全。网络模块中的签名和验签的过程为了保证传输的信息完整性,防止串改。签名这块也有有效性的限制,有些只能检验(验签)一次就失效了,所以就算被中间人拿到这些传输信息也无法再次对服务端发起请求。
网友评论