加密解密工具建议你不要使用,原因有2
1:加密解密的工具经常被杀毒软件误以为是病毒或者木马,要是让杀毒给杀了就冤枉了。
2:加密解密并不能保证你的东西不被偷看,加密解密只能挡住一般的菜鸟。高手是挡不住的。
挡菜鸟直接使用压缩加密就可以了。不需要这么麻烦。
空间推荐使用QQ网络硬盘。方便。
《加密与解密(第4版)》(段钢)电子书网盘下载免费在线阅读
链接:
密码:pc94
书名:加密与解密(第4版)
作者:段钢
豆瓣评分:8.8
出版社:电子工业出版社
出版年份:2018-10-1
页数:936
内容简介:
《加密与解密(第4版)》以加密与解密为切入点,讲述了软件安全领域的基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。这些知识彼此联系,读者在掌握这些内容之后,很容易就能在漏洞分析、安全编程、病毒分析、软件保护等领域进行扩展。从就业的角度来说,掌握加密与解密的相关技术,可以提高自身的竞争能力;从个人成长的角度来说,研究软件安全技术有助于掌握一些系统底层知识,是提升职业技能的重要途径。作为一名合格的程序员,除了掌握需求分析、设计模式等外,如果能掌握一些系统底层知识、熟悉整个系统的底层结构,在工作中必将获益良多。
《加密与解密(第4版)》适合安全研究人员、软件调试人员、程序开发人员阅读,也可以作为高校信息安全相关专业的辅助教材。
作者简介:
段钢,国内信息安全领域具有广泛影响力的安全网站看雪学院的创始人和运营管理者,长期致力于信息安全技术研究,对当前安全技术的发展有深入思考。参与和组织专业人士推出的十多部技术专著和相关书籍,有不少入选为大学信息技术专业的教辅材料,如《加密与解密》等,影响广泛。在盛大和众人网络的多年工作经历,使得对安全防护有深刻的认识和理解。在2016年创建上海看雪科技有限公司,项目以看雪学院为基础,构建一个提供B2B、B2C信息安全服务的综合平台。
我们都知道加密的目的是为了保障信息传输过程中的安全性。
对于现在人来说,可能会听说过两个名词,一个是对称加密,一个是非对称加密,那你好奇它们的含义以及它们是怎么演变成现在的样子的吗?
接下来就让我来给大家说道说道,提到加密解密其实涉及到一个名词就是密码学,其实听到这个词不用慌,维基百科上提到密码学被一个学者解释为:“密码学是关于如何在敌人存在的环境中通信”,其实说白了就是如果有不怀好意的人想要查看我和他人的通信信息时,那我应该如何确保信息传输的安全无误呢?这样就是密码学要解决的问题。
当我们了解了密码学的历史后,你就会自然会明白什么是对称加密、非对称加密,以及它们都是怎么就解决问题的。
密码学可以以计算机为分水岭,分为古典密码学和现代密码学,至于为什么这么分,且听我娓娓道来,接下来我们先讲古典密码学中加密解密如何进行博弈的。
古典密码学,这时的最小的加密操作单位还是字母。
大致是四个演进时代:
其实就是把信息通过某种方式藏起来,从而达到一种信息安全的效果。藏起来确实是最容易想到的,但是它的隐患其实是当那些隐藏的方式被大家都知道的时候,其实可以在城关检查时加大检查力度,来削弱隐藏法。
提到隐藏法有一个很有趣的故事,希罗多德的记录中说那会先把送信人的头发剃光,然后在它的头皮上写上要传递的信息,待送信人头发长出来之后,就可以让他去送信了,到了对方那里再把送信人头发剃光,这时就能看到要传递的信息了。
当隐藏法不那么管用之后,其实就需要去考虑有没有其他方式可以对信息进行加密呢?
但我觉得移位法其实是一种特殊的替代法,只是替代规则是每次都是去找这个元素后面移动位数对应的那个元素进行替代即可。
关于替代法有一个很有名故事就是十六世纪苏格兰女王的故事,但其中不仅仅只用到了替代法还用到了隐藏法,其实这些手法并不是同时只能存在其一的,而是可以多种方式结合使用,如果感兴趣,可以下面这个连接了解:
苏格兰的玛丽女王 。
那替代法应该如何破解呢?破解的方法频率分析,利用的是一篇文章中不同英文字母出现的频率不同,本质是大幅降低字母排列组合的可能性。下图是维基百科中英文字母出现频率的统计图:
有了频率分析其实你就可以知道密文中出现最多的字母可能就是 e 了,然后这是第一步,这时还不能完全确定,也许还需要再根据拼写规则筛选一下。
前面我们讲到了替代法,但替代的规则还很原始,就是进行原文密文一对一的替换,所以也很容易被频率分析破解,那我怎样才能让频率分析不起作用呢?对了对抗频率分析,其实我们可以将替代的关系由原来的一对一改为一对多,这时同一个字母可以由多个字母进行表示,就很难分析了。
既然原来只是使用一套字母表进行替换,那维吉尼亚密码干脆直接使用 26 套字母表进行替代,具体如图示:
直接看这个可能会比较懵逼,我来讲讲它具体是如何加密的,比如原文是 hello,现在的替换的规则是需要我自己指定的,比如 h 用第 3 套(找到序号为 3 的那一行,然后在查看序号为 0 的 H 对应的那一列,接下来找到交点,就确定了讲 h 替换为 k),e 用第 8 套,两个 l 分别用第 20 套和第 11 套,o 用第 14 套,这样下来,hello 就变成了 KMFXC。但是真实情况,不会像上面这么乱指定,而是会约定一个替换规则,这个规则也被称为钥匙,看下面的图可能会更好理解,然后根据钥匙去找对应的替换字母,只要根据钥匙不断重复进行替换即可。
不过这个发明后并没有被大规模使用,因为它太麻烦了,一个短语还好,你自己加密篇文章试试?人手动加密也容易出错,所以直到美国内战才是陆续开始有规模的使用维吉尼亚加密法,至于原因嘛,其实是因为机械的出现。
那它该如何破解呢?其实就是从找出重复多次的单词,可能会有多个重复多次的单词,然后每个重复多次的单词中间都会有几个间隔长度,找出这里面的交集,这个交集其实就很有可能是钥匙的长度。算出钥匙的长度有什么呢?其实就是把多套字母表加密的规则降级为单套字母表加密,然后对这个单套字母表加密提取出来的字母进行频率分析。下面这张图其实就是一个简单的例子,出现过两次 BUK,估算钥匙长度为 4,然后从第一个字母开始每个 4 个字母提取出来形成一组字母集,这套字母集就可以用频率分析去做处理试着破解了,其实可以整理出来 4 套字母集,然后去找交集,这样会更准确一些:
这是二战期间德国一直信赖的加密方式,它的原理也是替代,只是比起维吉尼亚加密法,它更难以破解,而如果想要对它进行破解其实也是只能暴力破解,先看看它长什么样子吧:
这张图的恩尼格玛机其实还只是简单版本,德国海军的恩尼格玛机比这个更复杂(三个转子提升到八个转子,并且还有接线器,用来调换字母,比如所有输入的 a 都会替换成 b 然后再进行加密),我觉得它很像计算机,因为它也是三部分,输入 - 处理(加密) - 输出(对应字母的灯泡会亮),中间的齿轮结构被称为转子,它可以保证每次输入进来字母被加密替代的字母都是不一样的,那么是如何保障的呢?当我一个字母进来之后,会根据第一个转子的字母进行替换,然后第一个转子转一格,第一个转子的结果会被当作第二个转子的输入进行再次加密,接着第二转子的结果会被当作第第三个转子的输入再进行加密,并且这个过程不断进行。当第一个转子转一圈后会带动第二个转子转一格,第二个转子转一圈会带动第三个转子转一格,只要是双方设置好相同起始的三个转子的位置,双方就可以进行加密了。而它的钥匙的概率是 26 * 26 * 26(三个转子的情况下),所以就算破解钥匙也只能进行暴力破解。
虽然这种加密方式很强大,但这时候其实电报已经很普及了,你发出去的信息很容易被截获(只要频率相同),也需要稍微考虑我的钥匙该如何传输才更安全,当然这时讨论这个还稍微有点早,这时还可以线下发放钥匙簿(也就是每天按照什么钥匙进行加密通信的统一规则书),但其实德国很谨慎,基本上会每个消息都用一个新钥匙,防止同一天所有消息都是用同一把钥匙从而进一步降低被破解的可能性。
德国人是如何协商密钥的呢?刚才提到了钥匙簿,他们当天会有大钥匙,比如是 WER,然后操作员随便想一个单词比如 XYZ(这就是这次的钥匙,被称为小钥匙),然后先加密一次 XYZ - ASF,然后再加密一次 XYZ - RWF,然后这两个拼在一起就成了 ASFRWF,其实真正的信息是从第七字母开始的,前六个字母就是这条消息的小钥匙,也是大钥匙用来加密本次传输的小钥匙,而小钥匙用来传递本次传输的内容。只要对方按照大钥匙先调整好恩尼格玛机然后把前六个还原为 XYZXYZ 即可,这样对方就知道了后面加密的内容都是用 XYZ 进行加密的,如果不是重复出现 XYZ 就说明通信有问题,不用理会即可。
讲到这里,你也知道了它的破解难度,但大部分人也都听说过图灵的故事,就是他最终完成了恩尼格玛机的破解,当然这其中并不是只有他一批人,而是前前后后五六批人为破解恩尼格玛机做出了贡献,至于图灵是怎么破解的,我三言两语也并不好解释清楚,只需要直到他通过找到德军加密的一些规律,降低了钥匙了可能性,然后就会交给叫做他们发明的一个叫“炸弹”的机器进行暴力破解,毕竟机器还是需要机器去对抗的。
补充:
现代密码学,这时的最小的加密操作单位已经是 0 1 0 1 这样的二进制了。二进制的好处是,它打乱的是语言规律的底层结构,使得改变发生在文本内部。直到现在大致分为三个演进时代。
在了解了古典密码学概念后其实后面的现代加密并不难理解,让我们来看看吧。
魔王加密系统,因为计算机的出现,让加密解密的最小单位从字母变成了数字,数字的变化打乱了信息的底层结构。
它的确实能保证信息主体的安全,但是呢,你要是钥匙怎么传递却是一个很大的问题,不过后面还是有人发明了安全的钥匙传递方法,也就是“迪菲-黑尔曼钥匙交换方案”,这里的具体的数学原理我就不展开讲了,不过靠的是不可逆的单向函数,也就是模运算。感兴趣的人可以看看下面的文章:
迪菲-赫尔曼密钥交换 ;
不要用比喻去理解所有的科学(day48) ;
不过它并没没有解决中间人攻击问题(就是我假装是你的身份和对方通信),而且还需要两者同时在线一起协商出密钥才行,所以并不是很完美,也真是由于这些原因才会迭代出更好的加密方式。
RSA 加密,它解决了钥匙传递中的漏洞,虽然它并不是无法破解的,但因为计算量太大,只要提升钥匙长度在理论上破解时间无限长。
RSA 也是就是我们常常听到的非对称加密,为什么叫非对称加密,其实是因为它有两把钥匙,一把可以公开的钥匙和一把自己私有的钥匙(也就是公钥和私钥),并且它使用到的加解密算法是同一个,而这之前的那些加密方式其实都是对称加密,它们加密和解密都是同一把钥匙,而加密和解密用的是不同算法(基本上是逆向进行)。
而且 RSA 还有一个特性,就是公钥和私钥可以互相加解密。由于是两把钥匙,我只需要将公钥公开给别人,就可以让别人用我的公钥给我发加密信息了。基于这个特性,那么如果爱丽丝想要给鲍勃发消息,只需要拿到鲍勃的公钥进行数据加密即可,这样发过去的消息,只有持有持有私钥的鲍勃本身才能解开这条信息。
虽然这样发过去的消息确实没问题了,只是鲍勃没办法验证消息真的是来自爱丽丝的,如果是中间的伊芙想要捣乱,他可以假装自己是爱丽丝给鲍勃发消息,因为只要我拿到鲍勃的公钥即可,而公钥有时可以在晚上传输的,所以是可以被拦截的。
如果想要解决这个问题就要利用到另一个特性,如果在生活中我想要验证一条消息来自某个人那我只需要让对方把消息写下来并在末尾签上自己的名字即可,因为实际在纸上的签名并没有那么容易进行伪造。这时候我们也需要通过签名这种思路来完成身份验证,那非对称加密中该如何完成这个签名呢?其实只需要利用别人都没有而我只有我有的信息即可,也就是自己持有的私钥,因此用私钥加密的过程也被称为签名,而公钥解密的过程也被称为验签。讲到这里你应该直到该怎么做了,也就是爱丽丝再给鲍勃发消息时只需要先拿鲍勃公钥对信息加密,再对这个密文进行私钥签名即可,而鲍勃收到消息,也会先用爱丽丝的公钥验签,然后在用鲍勃的私钥解密即可完成通信。
但是你以为到这里两边的通信就真的完全安全了吗?并不是,因为在公钥传输的过程中,还是存在中间人伊芙,他可以对网上传输的信息进行拦截和修改,这时候如果他将传输过去的原本鲍勃的公钥换成了自己的,那其实爱丽丝也是并不能发现的,那该怎么呢?这时就需要一个第三方权威机构来给鲍勃的公钥进行信用背书,然后爱丽丝拿到这个背书后进行一系列验证即可,如果验证都没问题,就说明真的可以相信传递过来的公钥就是鲍勃的了,只是这个过程其实也很复杂,而且这里说的信用背书其实就是颁发证书的过程,而验证的过程就是证书验证的过程,具体的验证细节会放到下一讲。
说实话,这玩意我也不懂,我能跳过它吗?
只是听说,如果这个东西真的出来大规模使用了,那 RSA 这种难以破解的加密方式也会容易被破解。
并且由于量子物理本身的特性,在钥匙传输和通信方面量子加密都是非常安全的。
这我不懂我就不多说了。
到这里为止加密解密的基本演进我们也就讲完了,其实这个演进过程是十分有趣的,你能看到人类智力大比拼,并且加密方和解密方不断你方唱罢我登场,但是现在看来,加密方还是占据了上方,毕竟 RSA 并不那么容易破解。
如果不看量子加密,其实我从古典密码学到现代密码学的演进中看到了有一些趋势,比如:
感谢非对称加密的暂时领先,让我们能安心的进行数据传输。
以上内容参考了密码学的维基百科、得到的《卓克·密码学 30 讲》、扔物线的 HenCoder Plus 以及《码书》。
HTTPS即加密的HTTP,HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。
我们首先了解几个基本概念。
共享密钥加密(对称密钥加密) :加密和解密同用一个密钥。加密时就必须将密钥传送给对方,那么如何安全的传输呢?
公开密钥加密(非对称密钥加密) :公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走。
但由于公开密钥比共享密钥要慢,所以我们就需要综合一下他们两者的优缺点,使他们共同使用,而这也是HTTPS采用的加密方式。 在交换密钥阶段使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
这里就有一个问题,如何证明公开密钥本省是货真价实的公开密钥。如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输过程中,真正的公开密钥已经被攻击者替换掉了。为了解决这个问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其他相关机关颁发的公开密钥证书。
下图是https通信步骤图:
下面是详细步骤:
步骤 1: 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包
含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所
使用的加密算法及密钥长度等)。
步骤 2: 服务器可进行 SSL 通信时,会以 Server Hello 报文作为应
答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的
加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证
书。
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶
段的 SSL 握手协商部分结束。
步骤 5: SSL 第一次握手结束之后,客户端以 Client Key Exchange 报
文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master
secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提
示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的
整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确
解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec 报文。
步骤 9: 服务器同样发送 Finished 报文。
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL 连接
就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用
层协议的通信,即发送 HTTP 请求。
步骤 11: 应用层协议通信,即发送 HTTP 响应。
步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报
文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP
的通信。
在以上流程中,应用层发送数据时会附加一种叫做MAC(Message Authentication Cods)的报文摘要。MAC能够查知报文是否遭到篡改从,从而保护报文的完整性。