说在前面
经常看谍战片的小伙伴们都知道,诸如《悬崖之上》,《潜伏》等,好多需要传递的消息都不是直接发送出去的,而是通过加密的方式,收件方通过特定的密码本来对内容进行破译和解读,这是因为发送出去的消息可能会被特务或者其他无线电台拦截,如果不进行加密,消息很快就会被破解。
网络中也是一样,一些商业机密,甚至是悄悄话都可能会被截获,消息会经过公司防火墙、路由器,也可能会有黑客对数据进行拦截,此时将发送的数据进行加密才可以保护隐私,你拦截到了,但是你破解不了!
对称加密
对称加密是最快速,最简单的一种加密方式,加密方和解密方使用同一套密钥(secret key),就好比有一个密码本:
1a : 我 1b : 你 1c : 码头 1d : 见面
2a : 今天 2b : 明天 2c : 后天 2d : 大后天
3a : 上午 3b : 下午 3c : 饭馆 3d : 交易
4a : 1点 4b : 2点 4c : 3点 4d : 4点
...
A,B 双方都有一套密码本,A给B写信 , 2b 3a 4b 1c 1d
B拿到信件以后进行破译,就知道A想跟他明天上午2点在码头见面了。当然了,计算机世界的加密与上述过程还是不同的,他会针对二进制进行加密实现。
数据加密标准
网络世界中有自己的加密准则,数据加密标准(DES)算法在1976年被美国国家标准局定为使用标准。DES密钥长64位,其中56位参与运算,其余8位是校验位。目前已经证明,通过暴力破解的方法(遍历所有可能的密钥)是可以破解的,广大的极客爱好者甚至为了破解DES专门打造了破解机,后续陆续有人发明了微分密码分析法、线性分析法来破解DES,言而总之,目前DES已经不足够安全。
上有政策下有对策,DES给我们提供的更多的是一种思路,后续很多组织开始使用3DES
,密钥长168位,这种虽然有一定的概率会被攻破,但是成本极高。
为了解决令人担忧的暴力破解问题,美国国家标准局与2001年发布了高级加密标准(AES),目前没有证据能支持AES
可以被破解,日常项目开发中,可以使用AES
加密。
对称加密的不足
有一个比较大的问题是密钥的管理与分配,比如和一个远在美国的老表想加密通信,我们势必要先把密钥发送到他手里,但是这个过程中很有可能被拦截。
非对称加密
与对称加密最直观的不同,应该就是他使用不同的密钥进行加密和解密。现实生活中常用的场景就是将对称加密的密钥进行非对称加密,然后发送给对方。
非对称加密使用公钥(public key)和 私钥(private key),思考一个问题,密钥的创建者需要如何操作才能做到数据保密呢?回答正确!就是他把公钥发送给用户,用户通过公钥对数据进行加密,然后发送给创建者,创建者用私钥对数据进行解密,如此一来,就算公钥被窃取,也完全不影响数据的私密性。目前使用最广泛的加密算法是RSA
算法。
应用场景
除了文初所说的,将对称加密的密钥进行加密,还有一个大家日常生活中更广泛使用的场景,我平时使用git时,喜欢使用ssh的方式进行操作。在此之前我们需要生成一对公钥和私钥。
ssh-keygen -t rsa -C 'your email'
生成了以后,在C:\User\当前用户名.ssh文件夹里面可以看到有这么两个文件:
id_rsa
私钥
id_rsa.pub
公钥
然后我们只需要把公钥上传至git
中,后续push
或者clone
时,都会使用私钥对身份信息进行加密,服务端利用公钥进行解密,如果匹配成功,则完成对应操作。
非对称加密的不足
既然非对称加密不存在密钥丢失的风险(排除敌人派特工来你公司窃取),那么就用非对称加密就好了呀!**他的加密速度远远慢于对称加密。**有热心网友对效率进行了测试,对160bytes
的明文进行加密,取10000次结果总和,对称加密算法比非对称加密快了整整1500倍!
摘要
这个摘要某种意义上类似于我们写论文时的摘要,看到摘要,论文内容是由八九也就了然了,换算到日常生活中,一个人的指纹也能唯一确定一个人,比如目前的指纹解锁,指纹破案等等。摘要算法得到的散列值又被称为”数字指纹“。
消息摘要算法有三个很鲜明的特点,
无论输入的消息有多长,计算出来的长度都是固定的;
不同的输入必然得到不同的输出,同一个文件,哪怕改变一个标点,输出的结果相差巨大;
加密过程中不需要密钥,摘要算法加密的数据是不可逆的。
摘要算法有很多种,主要分为三大类MD、SHA和MAC
。每种都有各自的衍生算法MD5
,SHA-1
以及HmacSHA1
等等,实战中推荐大家使用SHA-1
,这个算法至今仍在许多安全协议中广为使用,包括SSH
以及为https
协议保驾护航的TLS/SSL
。
摘要的应用
摘要独有的特性就决定了他的价值,实际应用场景中,常见系统中,对于用户密码一般不存储明文,而是存储用户密码的摘要,这样即使数据库被攻破,也不会导致密码泄露。
另一个更重要的用途就是 签名 。上面说过摘要好比一个人的指纹,摁了指纹就没有办法否认自己曾经发送过该消息。其他人可以再伪造一份你发送的文件,但是文件上的指纹却没有办法伪造。上述过程一共涉及了信息安全的两个特性:完整性和不可否认性。
现在大家结合上面提到的知识想象一下,如何操作才可以让互联网上发送的信息实现这一想法?
假设: A 密钥创建者,将公钥分配给 B,A 发送消息给 B,此时A向B发送了一份文件。
1、A使用摘要算法生成文件摘要;
2、A使用私钥将文件摘要加密;
3、A将加密后的摘要与文件发送至B;
4、B接收到信息后,使用公钥得到摘要信息,并将文件重新生成一遍摘要与解密私钥进行对比,如果一致,说明文件没有被篡改(完整性)。
5、B可以用A的公钥进行解密,所以这份文件就是A发给B的(不可否认性)。
以上。
敬请期待:《HTTPS
网站为什么如此值得信赖?》