密码技术学习一:密码

0、前言

本文是作者阅读《图解密码技术》时,学习总结的一些知识,在此推荐想要深入学习密码知识的同志,将此书作为入门书来看还是比较适合的。

1、密码技术简介

1.1加密与解密

在两者通信过程中,不想通信的内容被第三方知道,就需要发送者将明文加密发送给接收者,然后接收者通过解密将密文解开,才能读懂通信的内容;

第三方截取到密文也无济于事,因为他读不懂密文,这个过程就叫做加密和解密。

 

1.2对称密码和公钥密码(非对称密码)

        在计算机技术中,用来解决复杂问题的步骤通常称做算法,从明文生成密文的步骤也叫做"加密算法",解密的步骤叫做“解密算法”,二者统称为”密码算法“;

现实世界中,我们开锁,上锁都需要用到钥匙,而密码算法中需要也需要用到类似的东西进行加解密,这个东西叫做“密钥”。

对称密码:是指在加密和解密过程中使用同一种密钥的方式。

公钥密码:是指在加密和解密中使用不同密钥的方式,因此公钥密码又被成为非对称加密。

1.3其他密码技术

        密码技术不仅仅是基于密码的机密性,用于校验消息是否被篡改的完整性、以及确认消息是否是本人认证的技术等都是密码技术的重要组成部分。

1.3.1 单向散列函数

场景:我们在日常使用软件的时候,是不是经常从一些非官方途径获取(嘿嘿能看这文章的兄弟,绝对有经历),那我们也会担心我们使用软件之前,软件被人破解修改过,甚至加入病毒程序也有可能。

        为了防止程序被篡改,可以在发布软件的同时发布该软件的散列值,该散列值就是用单向散列函数计算出来的数值;下载该软件的人可以自行计算该文件的散列值并与发布者的散列值对比,如果一样就说明未被篡改。

1.3.2消息认证码

为了确定消息是否来自所期望的通信对象,可以使用消息认证码技术,它还可以确认消息是否被篡改。

1.3.3 数字签名

        数字签名技术就好比将现实世界中的签名和盖章移植到数字世界的技术;

举个例子:A将消息“花100块购买一个篮球”通过电子邮件发送给B,怎么保证这个消息不是别人伪装A发的?怎么保证消息内容正确,没被人篡改过?怎么让A无法否认自己发了消息?

数字签名技术的解决办法是在A发送消息之前,给消息内容加上数字签名,然后再发送,B接收到消息后,可以先对数字签名进行验证,判断是否内容被篡改,是否消息是A发送的。

1.3.4伪随机数生成器

        伪随机数生成器是一种能够模拟产生随机数列的算法。场景举例:在web中进行ssl/tls通信时,会生成一个仅用于当前通信的临时密钥,这个密钥就是通过伪随机数生成器生成的。

 

1.4隐写术和数字水印

隐写术隐藏的是消息本身,而密码隐藏的是真正的内容。

        隐写术很容易理解,我们都知道藏头诗,想表达的内容都在每一行的第一个字,将真正的消息隐藏起来了就是隐写术的体现,但是一旦我们知道是藏头诗,便可以直接读出内容,因此无法代替密码本身。

数字签名:

        数字签名就应用了隐写术加密码:数字签名是一种将著作权拥有者及购买者的信息加密后嵌入文件中的技术。这样以来即便有人能发现密文也无法读取出嵌入文件的签名内容。

2、对称密码

2.1比特序列密码

        现代的密码都是建立在计算机的基础上,而计算机底层能读懂的是机器语言即0和1,所有类型的数据都会转化为0和1组成的比特序列,拿字母举例,比如midnight这个单词对应的比特序列如下:

 

每个字母有对应的二进制码,这个即我们熟知的ASCII码,这种方式称为编码

为什么不说是加密呢,因为尽管我们人类看不懂(说不定有天才),但计算机可以凭借强大的运算能力轻而易举地“读懂”。

2.1.1 XOR

XOR全称是exclusive or,就是异或,异或运算就不用介绍了吧。

这种运算对于加密的场景,举例如下:

        在这里要是蒙版使用的比特序列完全随机,那么就保证了图像真正的完全被掩盖,因为你不知道蒙版的情况下,就无法预测和推测出这个随机比特序列产生的结果。

2.2、一次性密码本

        因为存在暴力破解这样遍历密钥空间的方法,那么一切密文都迟早会被破解出来,针对这种情况怎么应对呢?答案之一是一次性密码本

        一次性密码本:就是将明文与一串随机的比特序列做XOR运算。

比如上面提到的midnight单词,编码后是8*8共64位长的比特序列,我们随机生成64位比特序列和前者做XOR运算,产生出密文。我相信大家都会有疑惑“不是刚才说密钥空间有限(随机比特序列只有64位),那么暴力破解啊,不是迟早能蒙出来么?”,但是换个角度去想,暴力破解是能破解出所有的可能结果,但是作为破解方,在众多结果中,他如何能知道midnight就是答案呢?主要是不能确定哪个密钥是加密使用的,那么就无法判断结果。

        提一个结论:一次性密码本几乎无法实际中使用。

        我相信每个人都感觉到了问题所在,一次性密码本确实绝对无法被破解,但是作为消息接收方,必须获取密钥才能破解密文啊,问题来了:密文丢了就丢了,坏人无法破解,可是密钥也丢了咋办?笑晕,一次性密码本仅仅是将“如何保护密码”转变成“如何保护密码本”了啊,实际上加密传输的问题并没实质性得到解决。据说一些高度机密的场合(自己脑补)一次性密码本会使用,那么就肯定要通过绝对随机的方式生成密码本先,然后加密完,通过不同的手段(特工007?呵呵)分别送到接收方,过程中要严格保证不被截获或遗失。

2.3、DES

        DES:全称data encryption standard,是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码,一直以来被美国及其他国家政府和银行等广泛使用,但如今几十年过去,des已经在短时间内被破解。

        原理:des是将64比特的明文加密成64比特密文的对称加密算法,它的密钥长度是64位,但每隔7位会设置一个用于错误检查的比特,因此实际密钥长度是56位。des只能加密64比特的数据,要是明文过长,需要将其分成许多段,每段64比特分别加密。

        des的基本结构是基于Feistel网络,在Feistel网络中,加密的各个步骤称为轮。

步骤:细节不多写了,大家感兴趣可以针对性的去了解,大致总结为以下步骤(解密的话,按照步骤反着来就行):

  • 将输入的数据分为左右两个部分;
  • 右侧的部分直接作为输出的右侧;
  • 右侧数据发送到轮函数,用了生成密钥序列;
  • 将密钥序列与左侧数据做XOR运算,得到输出的左侧;

总结:无论多少轮,无论用多复杂的论函数、Feistel网络都能够使用相同结构进行加密和解密。

 

2.4、AES

AES概念:取代DES而成为新标准的一种对称密码算法,2000年Rijndael打败其他竞争对手被NIST(美国国家标准技术研究所)选为AES标准。和DES一样,Rijndael算法也是根据多轮所构成,但它没有使用Feistel网络,它的结构是SPN结构,详细细节咱们就不做深究了,感兴趣的同学可以专门去了解。总之:Rijndael的特点就是从明文到密文的加密过程,全称可以用公式来表达,此算法背后有着严谨的数学结构,到目前为止还没有出现针对AES的有效攻击,所以大家在选择使用哪种密码时尽量考虑用AES,用的人越多,表明对其进行研究的人也越多,当发现什么缺陷时,人们都会第一时间得知。

2.4.1、分组密码

概念:分组密码就是每次只能处理特定长度的一块数据的一类密码算法,AES就是此类算法,它的分组长度可以从128bit、192bit和256bit中选。

2.4.2、模式

概念:分组密码算法只能加密固定长度数据,当我们需要加密的明文超过了此固定长度,就需要对分组密码算法进行迭代。迭代的方式称为模式:

  • ECB模式:电子密码本模式;
  • CBC模式:密码分组链接模式;
  • CFB模式:密文反馈模式;
  • OFB模式:输出反馈模式;
  • CTR模式:计数器模式。

注意:ECB模式是所有模式中最简单的一种,它的明文分组和密文分组是一一对应的关系,这会被当做破译密码的线索,因此ECB模式有一定的风险,建议不要使用。

推荐使用:CBC和CTR模式,详情参见《实用密码学》

3、公钥密码(非对称密码)

密钥配送问题:我们之前提到的对称密码,在使用过程中,加密和解密都用的同一套密钥,这个特性就导致,若是密钥被人截取,就能直接解密对应的密文,所以在如何配送和保管密钥上面存在很大的问题。

可以通过公钥密码解决密钥配送问题:密钥分为加密密钥和解密密钥两种,发送者使用加密密钥对消息进行加密,接收者使用解密密钥对消息进行解密,加密密钥是接收者提前发给发送者的,这里即便有人截获密钥也没有用,这个只能用来加密,解密密钥一直都在接收者处。

公钥和私钥:公钥密码中,加密密钥一般是公开的,被称之为公钥,相对的,解密密钥不能公开给任何人,只能你自己使用,所以称为私钥;公钥和私钥是一一对应的,一对公私钥被称为密钥对,各自不能单独生成。

3.1、RSA算法

比较常用的公钥密码算法是RSA算法

密文 = 明文 E mod N (RSA加密)

密文就是明文E次方对N求余,其中E和N的组合就是公钥

明文 = 密文 D mod N (RSA解密)

明文是密文D次方对N求余,D与N的组合是私钥

破译:RSA算法难以破解的密码是因为目前为止人类还没有发现对大整数进行质因数分解的高效算法,甚至无法确定是否存在这种算法。

优缺点:公钥密码在安全性上比对称密码要好很多,但是效率上与对称密码相差甚远,所以特定的场景下,对称密码还是很实用。

其余还有EIGamal方式、Rabin方式、椭圆曲线密码

3.2、混合密码系统

  • 用对称密码加密消息
  • 通过伪随机数生成器生成:对称密码加密中使用的会话密钥
  • 用公钥密码加密会话密钥
  • 从混合密码系统外部赋予:公钥密码加密时使用的密钥

混合密码系统加密流程

 解密流程:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿星_Alex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值