七夕之夜,如何保证私密信息不泄露?架构师之路关注共 1657字,需浏览 4分钟 ·2020-08-26 11:38 七夕之夜,想和另一半聊一些私密的话,如何保证聊天内容不被黑客窥探,看完此文,终于略知一二了。一、初级阶段:信息裸传特点:(1)在网络上传递明文;黑客定理一:网络上传递的数据是不安全的,网络属于黑客公共场所,能被截取。如何改进呢?很容易想到,先加密,再传输。二、进阶阶段:传输密文特点:(1)服务端和客户端先约定好加密算法,加密密钥;(2)客户端,传输前用约定好的密钥加密;(3)传输密文;(4)服务端,收到消息后用约定好的密钥解密;黑客定理二:客户端是不安全的,属于黑客本地范畴,能被逆向工程。任何客户端与服务端提前约定好的算法与密钥都是不安全的,那如何改进呢?不能固定密钥,一个用户一个密钥。三、中级阶段:一人一密,服务端生成密钥特点:(1)客户端和服务端提前约定好加密算法,在传递消息前,先协商密钥;(2)客户端,请求密钥;(3)服务端,返回密钥;(4)然后用协商密钥加密消息,传输密文;这么传输安全么?答案是否定的。(1)根据黑客定理一,网上传输的内容是不安全的,于是乎,黑客能得到加密key=X;(2)根据客定理二,客户端和服务端提前约定的加密算法是不安全的,于是乎,黑客能得到加密算法;(3)于是乎,黑客截取后续传递的密文,可以用对应的算法和密钥解密;应该如何优化呢?根本上,密钥不能在网络上直接传输。四、再进阶阶段:一人一密,客户端确定密钥,密钥不再传输特点:(1)协商的密钥无需在网络传输;(2)使用“具备用户特性的东西”作为加密密钥,例如:用户密码的散列值;(3)一人一密,每个人的密钥不同;(4)然后密钥加密消息,传输密文;(5)服务端从db里获取这个“具备用户特性的东西”,解密;黑客定理三:用户客户端内存是安全的,属于黑客远端范畴,认为是安全的。画外音:中了木马,电脑被控制了另说。使用“具备用户特性的东西”作为加密密钥,一人一密,是安全的。但这仍不是最优方案。五、高级阶段:一次一密,密钥协商每次通信前,都进行密钥协商,一次一密。密钥协商过程,如下图所述,需要随机生成三次动态密钥:(1)两次非对称加密密钥(公钥,私钥);(2)一次对称加密密钥;此称为,安全信道建立的“三次握手”,安全信道建立之后,再进行密文发送。密钥交换的步骤为:(1)服务端随机生成公私钥对(公钥pk1,私钥pk2),并将公钥pk1传给客户端;画外音:此时黑客能截获pk1。(2)客户端随机生成公私钥对(公钥pk11,私钥pk22),并将公钥pk11,通过pk1加密,传给服务端,服务端收到密文,用私钥pk2解密,得到pk11;画外音:此时黑客能截获密文,也知道是通过pk1加密的,但由于黑客不知道私钥pk2,是无法解密的。(3)服务端随机生成对称加密密钥key=X,用pk11加密,传给客户端,客户端收到密文,用私钥pk22解密,可到key=X;画外音:同理,黑客由密文无法解密出key。至此,安全信道建立完毕,后续通讯用key=X加密,以保证信息的安全性。六、总结信息安全方案设计三大假设:(1)网络上传递的数据是不安全的,能被截取;(2)用户客户端是不安全的,属于黑客本地范畴,能被逆向工程;(3)客户端内存是安全的,属于黑客远端范畴,可以认为是安全的;对于信息安全传输的不同阶段:(1)明文消息传递如同裸奔,不安全;(2)客户端和服务端提前约定加密算法和密钥,不安全;画外音:好多公司都是这么实现的=_=。(3)一人一密,服务端随机生成密钥,发送给客户端,不安全;(4)一人一密,客户端使用“具备用户特性的东西”作为加密密钥,安全;(5)一次一密,三次握手建立安全信道,安全;好了,这下可以嘿嘿嘿了。对了,很多公司说,我们绝不存储,绝不窥探用户聊天记录,你信不? 浏览 26点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 面试官:HashSet如何保证元素不重复?互联网全栈架构0进阶,Kafka 如何保证消息不丢失?飞天小牛肉0回答面试官:如何保证消息不丢失大鱼仙人0回答面试官:如何保证消息不丢失java宝典0MySQL是如何保证不丢失数据的呢?欢少的成长之路0每天给男朋友发短信如何保证有趣不乏味?“你好,我是气象台的美女主播,今日风大,请问你穿的多么,如果穿太少了,请您保持心态,尽量不要往别人身上取暖,我很快来解救你” “先生您好需要情感陪护吗,学生小姐少妇各种款式任您选择,可上门服务,在您孤寂的时刻只需一个电话,让您一天的疲劳一扫而空,你还在等什么?mua” 还有些见面的时候没事干了可以操作的游戏啊..之前写着发朋友圈里了_(:3」∠)_ 还有突然发一条问他“如果我系DJ你会爱我嚒?” 还有这个嘻嘻面试题:HashSet是如何保证元素不重复的面试官:你能简单介绍List和Set有什么区别吗?小憨:List是一个有序的集合,在内存是连续存储的,可以存储重复的元素,List查询快,增删慢;Set是一个无序的集合,在内存中不连续,不可以存储重复的元素,Set增删快...面试官:HashSet是如何保证元素不重复的?Java中文社群0文件 IO 中如何保证掉电不丢失数据?Kirito的技术分享0RabbitMQ 如何保证全链路数据100%不丢失?java12340点赞 评论 收藏 分享 手机扫一扫分享分享 举报