小朋友都能懂的计算机安全 - 网络劫持
1 张三被勒索
张三去某地旅游,在一个小酒店入住。酒店很便宜,一天只要80元,但看着有点像黑店啊!
不过张三是谁,闯荡江湖这么多年,who怕who啊!
晚上百无聊赖,他连上酒店的wifi,先上银行网站给爸妈转了1000块钱,这是这个月的生活费。张三是个孝顺儿子!
然后他鬼使神差的打开了一个小电影网站,欣赏了几个动作片,放松一下。
第二天结账的时候,账单吓了张三一跳:1800!
什么?明明是80啊!老板不紧不慢的说:其中1720是保密费。你是不是上了一些不该上的网站?然后老板展示了几张图片,正是张三看过的动作片中的截图。
张三很火,但是也很担心:勒索1800块钱是小事,我昨天还做了银行转账,不会把我的账号密码拿去,把我的钱都给转走了吧?里面还有今年辛辛苦苦赚来的2万多块钱!
打工人不容易啊!
他赶紧拿出手机,关掉wifi连接,用流量查了一下余额。还好,钱还在!
为什么老板因为小电影勒索他,而不窃取他的银行卡密码呢?
原因是:张三上的银行网站使用了HTTPS加密:
而小电影网站没有用HTTPS,所以可以被酒店的WIFI捕获所有发送的信息。
没有使用HTTPS的网站类似这样:
我也很震惊,这个china.com竟然没有HTTPS。实际上很多正规的小电影网站都是HTTPS的,不信你去看看。
这样的真实事情,每天都发生在世界的各地!
你永远不知道你会不会成为下一个目标。所以认真读完这篇文章,你就不会成为受害者。
2 中间人劫持
张三正是遭受常见的网络陷阱:中间人劫持。大致过程是这样的:
张三通过酒店WIFI上网的过程是这样的:
浏览器发送消息给酒店WIFI 酒店WIFI发送消息给网站。 网站把内容发送给WIFI。 WIFI把网站内容发给浏览器。
在这个过程中WIFI就是中间人。实际上浏览器和网站中间还有很多中间人,比如运行商。
网站如果没有HTTPS网站,发送的信息都明文的,类似这样的文字:
传了什么消息,中间人看的一清二楚。一旦遭受中间人劫持,中间人可以做很多事情:
监控你的行为,然后勒索你,就像张三这样的情况
篡改你的发送信息: 你本来要给李四转账1000 中间人修改成给他自己转账10万。
记录你的银行卡密码,朋友聊天记录等
请大家注意,这里要害你的不是网站,而是中间人。中间人不光害你,他们也害网站。所以你和网站都是受害者!
如果你上了黑心网站,诈骗你的钱财,那是网站的问题,不是中间人的问题,那是另外一套诈骗方式了。
为了解决中间人劫持的问题,网站可以使用HTTPS,强迫浏览器和网站的通信加密。这个过程变成了这样:
虽然信息发送还是要经过酒店WIFI,但发送的都是密文,酒店WIFI看不懂,只能简单的帮你转发,什么事情都做不了。
如果你是冲着小电影来的吃瓜群众,就记住下面的结论:
使用公共WIFI的时候尽量不要上非HTTPS的网站,地址栏带小锁的网站才是安全的。 如果你必须得上,不要传敏感的信息。假设WIFI的老板知道你的一切网络活动。 在家是不是就可以不用在意HTTPS?还是要注意!虽然WIFI是你的,但你和网站中间仍然有很多中间人,比如运行商。
这真的很重要,请转发给需要的人,让社会少一分伤害!
技术原理
大致的原理前面已经讲清楚了,简单来说就是加密。但这里还有很多细节。
1. 用同一套密码做加密 - 对称加密
浏览器和服务器拥有同一套秘钥来加密和解密。浏览器发送消息之前先加密,服务器收到密文后用同一套秘钥解密。
但这里的问题是:
浏览器怎么知道秘钥是什么? 如果浏览器可以从网站获取秘钥,那中间人也可以轻松获取秘钥!
所以为了加密要先解决秘钥的交换问题。
2. 用非对称加密方式协商密码 - 公钥加密
还好有数学家研究出了一个加密算法,叫做公钥加密。公钥加密有两把钥匙:
一把是公开的,所有人都可以获取 一把是私有的,只有网站自己知道
这两把钥匙的神奇之处在于:
用公开钥匙加密,只有私有钥匙才能解密 用私有钥匙加密,只有公开钥匙才能解密
这样就可以协商密码了:
浏览器从网站获得网站的公钥 浏览器自己生成一个密码,用公钥加密,发送出去 密文传到WIFI上的时候,WIFI没有私钥,无法解开 WIFI只能乖乖的把密文原封不动的传给网站 网站有私钥,可以解开,这样浏览器和网站就成功交换了密码 从此,它们用这个密码加密数据,中间人无计可施
当然实际的密码交换过程比这个要复杂一些,但核心原理就是这样的。
3. 数字证书和CA认证机构
但这事还没完!中间人可以最开始就冒充网站,把它自己的公钥给浏览器:
浏览器试图获取某小电影网站的公钥 经过WIFI的时候,WIFI直接把自己的公钥给了浏览器。 浏览器用WIFI的公钥加密,发送密码。 WIFI用自己的私钥解密,获得了密码。从此浏览器发送的消息,WIFI都知道了。 WIFI把篡改后的信息,再用网站的公钥加密和网站沟通。
为了解决这个问题:
公钥必须得监管!不能随便谁的公钥都可以。
生成了公钥后,要先找监管机构盖个章,生成一个数字证书,这些机构被称为CA机构。世界上被认可的CA机构是有限的。他们签发证书一般都是收费的。
当浏览器获得一个公钥时,看看这个公钥是谁签发的。如果是它不认识的机构签发的,就提醒用户:这个证书是无效的。
这样中间人发来的公钥是无效的,浏览器一下就识别出来了。
所有电脑上都维护了自己信任的CA机构:
我们也可以手工修改添加自己信任的机构:比如把自己的公司加入到信任列表中去。这样自己公司可以签发证书。
如此,基本上就彻底避免了中间人攻击。
这真的很重要,请转发给需要的人,让社会少一分伤害!