前后端分离交互安全-非对称秘钥实现的理解总结

看到大神的一篇博文 “前后端分离架构中的接口安全(上篇)” ,对其动态密钥的获取的描述存在一些迷惑,理解总结后,记录下这篇博文。


为什么要加密?

想象下: 如果你的用户登录信息被抓包抓到的话,上面大摆着

{
    
    
    "username" : "root",
    "password" : "123456"
}

那岂不是很尴尬。 分分钟把你的个人信息给盗了。



什么是非对称加密?

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。 用某用户公钥加密后的密文,只能使用该用户的私钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个密钥的性质。



PHP怎么进行非对称加密?

这里推荐一篇博文,你可以不用满世界找度娘谷哥啦。“PHP rsa密钥生成 加密解密”



非对称加密怎么传输数据?

  1. 客户端生成公私钥对(clientPublicKeyclientPrivateKey) (一直使用这一套公私钥对,要藏好哦)
  2. 调用请求服务端公钥接口,获取服务端返回的serverPublicKey
    1. 服务端也是生成了自己的秘钥对(serverPublicKeyserverPrivateKey)(可以不断动态变换自己的秘钥对)
    2. 服务端将密钥serverPrivateKey存储起来,客户端不可见
    3. 服务端仅返回公钥serverPublicKey给客户端
  3. 客户端获取到serverPublicKey,将它作为公钥,而将clientPublicKey作为明文进行RSA加密(这个做法是,让服务端能够通过使用serverPrivateKey进行解密,让服务端获取到clientPublicKey
  4. 服务端使用客户端的公钥clientPublicKey作为RSA公钥,对客户端所请求的数据结果进行RSA加密,将加密后的数据传送给客户端
  5. 客户端使用clientPrivateKey进行数据解密,得到自己想要的数据

上述步骤中,但凡有一步加密出错获取不到正确的结果,则代表异常访问,不再需要继续执行



黑客劫持数据怎么办?

  1. 黑客在上面第二步中,是可以获取到服务端的公钥serverPublicKey
  2. 客户端的公钥传输,是通过服务端的公钥serverPublicKey进行加密传输,那么黑客没有服务端的私钥serverPrivateKey,无法解密,所以获取不到客户端的公钥clientPublicKey
  3. 黑客可以获取到"服务端使用客户端公钥加密后的数据",但是因为没有客户端公钥,进而无法解密获取数据


黑客能否自己生成秘钥对,从而访问服务端?

​ 首先记住一点:服务端能够获取到的就只有客户端的clientPublicKey。如果服务端没有对进行任何过滤验证的话,那么无疑,黑客是可以访问服务端的!这无疑与我们的需求相违背的。上面的前提条件是服务端没有对进行任何过滤验证。也就是说,服务端一开始对客户端的clientPublicKey存在验证的话,那么便能完美解决这一个问题。

  1. 服务端保存客户端"可以用来获取数据的客户端公钥clientPublicKey",如果判断clientPublicKey是已经记录在案的了,那么它便有获取数据的权限。
  2. 服务端怎么样去保存clientPublicKey
    1. 线下交付无疑是最安全的方法了:拿个U盘拷贝 或者 看别人屏幕手打(真打?在下佩服),网上的黑客怎么获取?当然记住,U盘有病毒的话可怨不得人了。
    2. 超安全线上环境:哥们,做过支付宝支付功能吗?在一开始的申请和配置中,最重要的一步就是在官网上填写你的应用idclientPublicKey等配置数据了,配置无误后,你才能按照它的文档去一步步实现业务支付。它采用的就是线上环境交付clientPublicKey。如果你能自信交付clientPublicKey的环境不会让黑客盗取你的数据的话,当然可以采用这一种方式。
    3. 不安全的线上交付:黑客真的那么多吗?你不怕的话,丢进一个文件,微信/钉钉一发,碰碰运气,祈祷黑客不会在意你,那么你就成功交付了。


黑客从客户端/服务端中盗取秘钥对怎么办?

关于这一点本人是没有什么好的看法的,APP可以被反编译,服务器也并非没有漏洞。就像怎么藏私房钱一样,仁者见仁智者见智。是你有什么好方法的话,也很希望你能在下方讨论分享下,让我这个小渣渣也看看眼界吧,膜拜大佬!

猜你喜欢

转载自blog.csdn.net/weixin_38125045/article/details/107367216