加密与解密

对称加密

原理

       使⽤密钥和加密算法对数据进⾏转换(加密),得到的⽆意义数据即为密⽂;使⽤密钥和解密算法对密⽂进⾏逆向转换,得到原数据。通信双⽅使⽤的是同⼀个密钥。

简化模型

对称加密简化模型

经典算法

  • DES(56 位密钥,密钥太短⽽逐渐被弃⽤)
  • AES(128 位、 192 位、 256 位密钥,密钥比较长,现在最流⾏)

破解与反破解

破解思路

       拿到⼀组或多组原⽂-密⽂对,设法找到⼀个密钥,这个密钥可以将这些原⽂-密⽂对中的原⽂加密为密⽂,以及将密⽂解密为原⽂的组合,即为成功破解。

反破解

       ⼀种优秀的对称加密算法的标准是,让破解者找不到⽐穷举法(暴⼒破解法)更有效的破解⼿段,并
且穷举法的破解时间⾜够⻓(例如数千年)。所以DES由于密钥短,很容易通过穷举法被试出来。

非对称加密(重要)

原理

       使⽤公钥对数据进⾏加密得到密⽂;使⽤私钥对数据进⾏解密得到原数据。

简化模型

非对称加密简化模型

       使⽤⾮对称加密通信,可以在不可信⽹络上将双⽅的公钥传给对⽅,然后在发消息前分别对消息使⽤对⽅的公钥来加密和使⽤⾃⼰的私钥来签名,做到不可信⽹络上的可靠密钥传播及加密通信。

非对称加密场景

非对称加密场景

       由于私钥和公钥互相可解,因此⾮对称加密还可以应⽤于数字签名技术。

签名与验证

简单模型

签名与验证简单模型

       签名与验证和加密与解密的比较:

操作 比较
加密与解密 公钥加密,私钥解密;公钥转换,私钥还原。
签名与验证 私钥签名,公钥验证;私钥转换,公钥还原。

       签名与验证时,往往会将原数据与签名数据一并发送,既可以看原数据,也可以对签名数据做验证,验证后的原数据和发送来的原数据作对比。此处和数据加密不同,数据加密只公布加密后的密文,不公布原数据,否则谈不上加密了。

加密加签名

加密加签名

       现在回头看上面的 非对称加密场景,由于C拥有B的公钥,虽然它看不懂A发出给B的消息(没有私钥B),但是可以假装自己是A,伪造信息发送给B。此处便可以用公钥加私钥的方式来避免:例如A需要给B发消息,使用公钥B对消息进行加密,并使用自己的私钥A对消息进行签名,B拿到消息分别做解密和验证,即可确认消息来自A。在这里,B可以看懂消息是很容易的,因为它有自己的私钥B,B还需要使用A的公钥来验证。由于C并没有A的私钥,所以C无法做出A的签名,C发送给B的消息一定得不到验证。

经典算法

  • RSA(可⽤于加密和签名)
  • DSA(仅⽤于签名,但速度更快)

破解与反破解

破解思路

       和对称加密不同之处在于,非对称加密的公钥很容易获得,因此制造原⽂-密⽂对是没有困难的事,所以,非对称加密的关键只在于,如何找到⼀个正确的私钥,可以解密所有经过公钥加密过的密⽂。找到这样的私钥即为成功破解。由于非对称加密的自身特性,怎样通过公钥来推断出私钥通常是⼀种思路(例如 RSA),但往往最佳⼿段依然是穷举法,只是和对称加密破解的区别在于,对称加密破解是不断尝试⾃⼰的新密钥是否可以将⾃⼰拿到的原文-密文对进⾏加密和解密,⽽非对称加密是不断尝试⾃⼰的新私钥是否和公钥互相可解。

反破解

       和对称加密⼀样,非对称加密算法优秀的标准同样在于,让破解者找不到⽐穷举法更有效的破解⼿段,并且穷举法的破解时间⾜够⻓。

密码学密钥和登录密码

名称 场景 ⽬的 焦点
密钥(key) ⽤于加密和解密 保证数据被盗时不会被⼈读懂内容 数据
登录密码(password) ⽤户进⼊⽹站或游戏前的身份验证 数据提供⽅或应⽤服务⽅对账户拥有者数据的保护,保证“你是你”的时候才提供权限 身份

参考资料:
腾讯课堂 HenCoder

Fork me on GitHub