安基网 首页 安全 安全学院 查看内容

黑客之道密码学

2018-12-13 02:53| 投稿: xiaotiger |来自: 互联网


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 密码主要功能机密性:为了防止信息被窃听,对应的密码技术有对称密码和公钥密码。完整性:为了防止信息被篡改,对应的密码技术有单向散列函数、消息认证码、数字签名。认证:为了防止攻击者伪装成真正的发送者,对应 ...

密码主要功能

  • 机密性:为了防止信息被窃听,对应的密码技术有对称密码和公钥密码。
  • 完整性:为了防止信息被篡改,对应的密码技术有单向散列函数、消息认证码、数字签名。
  • 认证:为了防止攻击者伪装成真正的发送者,对应的密码技术有消息认证码和数字签名。
  • 不可否认性:为了防止发送者事后否认自己没有做过,对应的密码技术为数字签名。

信息安全和密码技术之间的关系可以用下图来表示:

常见密码技术

  • 对称密码:也称为共享密钥密码、私钥密码等,是指在加密和解密时使用同一密钥的方式。
  • 公钥密码:也称为非对称密码,是指在加密和解密时使用不同密钥的方式。对称密码和公钥密码可以保证数据的机密性。
  • 单向散列函数:MD5、SHA-1,就是单向散列函数的例子,使用单向散列函数可以计算出散列值,散列值也称为哈希值、密码校验和、指纹、消息摘要。使用单向散列函数可以保证数据的完整性。
  • 消息认证码:消息认证码是一种确认完整性并进行认证的技术,英文名称为message authentication code,简称为MAC。
  • 数字签名:数字签名相当于现实世界中的盖章、签字的功能,使用数字签名可以识别篡改和伪装,还可以防止否认。
  • 伪随机数生成器:伪随机数生成器并不直接解决信息安全问题,但它承担了密钥生成的重要职责。而密钥的重要性就不用多说了。

对称密码

  • DES(Data Encryption Standard)是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特,即7个字节。DES的结构采用的是Feistel网络。Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。下图是Feistel网络中一轮的计算流程。DES是一种16轮循环的Feistel网络。)


一轮的具体计算步骤如下:

  1. 将输入的数据等分为左右两部分;
  2. 将输入的右侧直接发送到输出的右侧;
  3. 将输入的右侧发送到轮函数;
  4. 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列;
  5. 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。
  6. 其中,子密钥指的是本轮加密使用的密钥。每一轮的子密钥都是不同的。轮函数的作用则是根据“右侧”和子密钥生成对“左侧”进行加密的比特序列,它是密码系统的核心。
  7. 但是,这样一来“右侧”根据没有被加密,因此需要用不同子密钥对一轮的处理重复若干次,并在没两轮之间将左侧和右侧的数据对调。

  • 三重DES

  • 明文经过三次DES处理才能变成最后的密文,而由于DES的密钥长度为56比特,因此三重DES的密钥长度则为563=128比特。另外,从图中也可以发现,三重DES并不是进行3次DES加密,而是加密->*解密->加密的过程。这是为了向下兼容,即使用DES加密的密文,也可以通过三重DES进行解密。
  • 三重DES的解密过程和加密相反,是以密钥3、密钥2、密钥1的顺序执行解密->加密->解密的操作。即将上图从明文到密文的箭头反过来就是解密的流程了。
  • AES
  • AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法。AES最终候选算法名单中,总共有5种算法,分为为:MARS、RC6、Rijndael、Serpent、Twofish。但最终被选定为AES的是Rijndael算法。Rijndael使用的并不是Feistel网络,而是SPN结构。Rijndael加密中的一轮如下图所示,其分组为128比特,即16字节,加密过程经过4个步骤:SubBytes、ShiftRows、MixColumns、AddRoundKey。

分组模式

  • 常见的分组模式(DES、AES都属于分组密码,它们只能加密固定长度的铭文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而迭代方法就称为分组密码的“模式”。分组密码有很多种模式,主要有:ECB、CBC、CFB、OFB、CTR。如果模式选择不恰当,就无法保证机密性。)
  • ECB模式(ECB全称为Electronic CodeBook,电子密码本模式,是最简单的一种模式,它直接将明文分割成多个分组并逐个加密,如下图,其中,加密和解密是指用分组密码算法加密和解密,其中也省略了密钥的描述。)

  • 当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。优点:简单、快速,加密和解密都支持并行计算。而缺点也比较明显,因为每个明文分组都各自独立地进行加密和解密,如果明文中存在多个相同的明文分组,则这些分组最终会被转换为相同的密文分组。这样一来,只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码。另外,攻击者可以通过改变密文分组的顺序,或删除密文分组,或替换掉密文分组,就可以达到对明文操纵的目的,而无需破译密码。
  • CFB模式(CFB全称为Cipher FeedBack,密文反馈模式,前一个密文分组会被送回到密码算法的输入端,如下图:)

  • CFB模式中,由密码算法所生成的比特序列称为密钥流(key stream)。需要注意的是,CFB模式解密时,密码算法执行的是加密操作,因为密钥流是通过加密操作来生成的。CFB模式无法抵御重放攻击。因此,一般不建议使用了,推荐用CTR模式代替。
  • OFB模式

  • OFB模式有个缺陷,如果对密钥流的一个分组进行加密后其结果碰巧和加密前是相同的,那么这一分组之后的密钥流就会变成同一值的不断反复。因此,一般不建议使用了,推荐用CTR模式代替。
  • CTR模式(CTR全称为CountTeR,计数器模式,是一种通过逐次累加的计数器进行加密来生成密钥流的流密码,如下图:)

  • CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。计数器分为两部分,前部分为nonce,这和初始化向量一样,也是一个随机比特序列;后部分为分组序号。
  • 从图中还可以知道,CTR模式对每个分组的处理是相对独立的,这就意味着加密和解密都能够实现并行计算。
  • CTR模式在错误和机密性方面都具有不错的性质,也没有上面提到的CFB和OFB的弱点,因此,现在都推荐使用CTR了。

初始化向量问题

CBC、CFB、OFB都用到了初始化向量IV,而CTR则使用了计数器,计数器的nonce部分和初始化向量IV是一样的,只是叫法不同而已。关于初始化向量IV,是一个随机比特序列,为了提高安全性,建议每次加密时都使用不同的值,这样的话,即使有两条相同的明文信息,加密后的密文也是不同的。但是,每一次发送端使用IV对明文加密后,接收端也需要使用同样的IV才能够解密,那么,发送端和接收端如何同步这个IV呢?关于这个问题,书中没有提到。于是,只好自己寻找解决方案。

最简单的方式可能就是,发送端每次发送信息时,将IV和加密后的密文一起发送给接收端。接收端收到信息后,就可以将收到的IV用于解密收到的密文了。而这种方式最明显的缺陷就是IV直接暴露给攻击者了,攻击者就可以利用IV发起攻击,比如使用CBC模式时,攻击者将IV进行比特反转,就可达到操纵明文的目的。攻击者将IV中的任意比特进行反转(1变0,0变1),则解密后的明文分组中相应的比特也会被反转。

为了避免将IV直接暴露,那将IV进行加密后再发送呢?因为IV的长度和一个分组的长度是等长的,这就不需要考虑分组迭代的问题,即不需要考虑使用什么模式了,直接用密码算法进行加密即可。加密后,攻击者再想通过比特反转IV来操纵明文就困难多了。

密钥配送问题(对称密钥)

  • 通过事先共享密钥来解决
  • 事先用安全的方式将密钥交给对方,就称为密钥的事先共享。这是密钥配送问题最简单的一种解决方法,但有其局限性。公司内部开发的应用产品,客户端和服务端都是自己开发的,事先共享密钥就很简单,服务端人员生成密钥后直接给到客户端的开发人员就可以了。但这种情况又会带来其他问题,比如密钥在客户端如何才能安全的保存。
  • 一般,密钥都是通过硬编码或存为文件的形式保存在客户端的,那么客户端应用一旦被反编译,就很容易窃取到密钥了。而如果是开放性平台,像微博开放平台、微信开放平台等,要做到事先共享密钥就很有难度了。
  • 开发者在开放平台注册的应用,其密钥都是通过平台的管理端给到开发者的,也就是通过了网络,那就存在被窃听的风险了。
  • 通过密钥分配中心来解决
  • 当使用密钥分配中心时,需要通信的双方可以事先在密钥分配中心注册,然后密钥分配中心给每个注册方发送一个密钥,不同注册方的密钥是不同的。那么,当某个发送端需要向某个接收端发送消息时,通信流程如下:
  • 1.发送端向密钥分配中心发起希望与接收端通信的请求;
  • 2.密钥分配中心随机生成一个会话密钥,该会话密钥是供发送端和接收端在本次通信中使用的临时密钥,我们简称为TempKey;
  • 3.密钥分配中心查询出发送端的密钥,即发送端注册时分配的密钥,我们简称为SenderKey;
  • 4.密钥分配中心使用SenderKey对TempKey进行加密,加密后的密文称为CipherTempKeyToSender,并发送给发送端;
  • 5.密钥分配中心用同样的方式查询出接收端的密钥,简称为ReceiverKey;
  • 6.密钥分配中心再用ReceiverKey对TempKey进行加密,加密后的密文称为CipherTempKeyToReceiver,并发送给接收端;
  • 7.发送端对来自密钥分配中心的CipherTempKeyToSender,用自己的密钥即SenderKey进行解密,得到TempKey;
  • 8.发送端将要发送给接收端的消息用TempKey进行加密,然后发送给接收端;
  • 9.接收端对来自密钥分配中心的CipherTempKeyToReceiver,用自己的密钥即ReceiverKey进行解密,也得到TempKey;
  • 10.接收端收到发送端的密文后,用TempKey对密文进行解密;
  • 11.通信完毕,发送端和接收端都删除TempKey。
  • 这个通信过程还挺复杂的,总的来说就是,发送端和接收端通信时是使用密钥分配中心分配的临时密钥进行加密和解密的。
  • 这种方案,密钥分配中心的安全性就显得非常重要了。如果攻击者入侵了密钥分配中心,盗取到所有密钥,则后果很严重。
  • 通过Diffie-Hellman密钥交换来解决
  • 在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息,而这些信息即便被窃听者窃听到也没有问题。根据所交换的信息,双方可以各自生成相同的密钥,而窃听者却无法生成相同的密钥。
  • 虽然这种方法叫“密钥交换”,但实际上双方并没有真正交换密钥,而是通过计算生成出了一个相同的共享密钥。因此,这种方法也称为Diffie-Hellman密钥协商。支撑Diffie-Hellman密钥交换算法的是有限群的离散对数问题的复杂度。
  • 通过公钥密码来解决

  • RSA非对称加密算法

  • 公钥密码问题
  • 1.公钥密码处理速度远远低于对称密码
  • 2.公钥密难以抵御中间人攻击(通过公钥认证书预防次问题)


  • 混合密码系统

从图中就可得知:

1.会话密钥是随机生成的,因此,每次加密的会话密钥都会不同;
2.混合密码系统的明文是用对称密码加密的,而加密使用的密钥就是上一步生成的会话密钥;
3.用公钥密码对会话密钥进行加密,形成了加密后的会话密钥;
4.将加密后的会话密钥和加密后的消息组合在一起,就是混合密码系统的密文。

单向散列函数

  • 单向散列函数特点
  • 根据任意长度的消息计算出固定长度的散列值
  • 能够快速计算出散列值
  • 具备单向性
  • 消息不同散列值也不同(碰撞现象
  • 常见单向散列函数(MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3)
  • -单向散列函数可以用于完整性检查

消息认证码

  • 概念(消息认证码(message authentication code)是一种确认完整性并进行认证的技术,简称为 MAC。消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,它可以输出固定长度的数据,这个数据称为 MAC 值。)

  • 消息认证常见实现方法(HMAC)

数字签名(完整性和防否认性)

公钥证书

  • 公钥证书的概念:公钥证书(Public-Key Certificate,PKC)和驾照类似,一般会记有姓名、组织、邮箱地址等个人信息,以及属于本人的公钥,并由认证机构(Certification Authority、Certifying Authority,CA)施加数字签名。
  • 证书应用场景



小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6634024600088871428/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

 最新
返回顶部