密码技术

  最脆弱的环节不是密码,而是人类自己!

前言:

  消息传输时,从一台机器传输到另一台机器上,消息会通过许多台计算机和通信设备进行中转,在这个过程中,就存在恶意窃听者窃听的可能性。

  如果不想让别人看到消息的内容,发送者(sender)就需要对消息进行加密(encrypt)后再发送出去,加密之前的消息称为明文(plaintext),加密之后的消息称为密文(ciphertext)。

  而接收者(receiver)就需要对密文进行解密(decrypt)之后再阅读

密码算法:

  用于解决复杂问题的步骤,通常称为算法(algorithm)。密码算法(加密算法和解密算法)中需要密钥(key),无论是加密时还是解密时,都需要知道密钥。

  根据密钥的使用方法,可以讲密码分为对称密码和公钥密码两种。

    对称密码:是指在加密和解密时使用同一密钥的方式。公钥密码:加密和解密时使用不同密钥的方式,又称为非对称密码

其他密码技术:

  单向散列函数:如下载文件时,自行计算所下载的文件的散列值是否和软件发布者公布的散列值相同,验证所下载的文件是否是完整的,有没有被篡改过。

  消息认证码:为了确认消息是否来自所期望的通信对象,可以使用消息认证码技术

  数字签名:私钥加签,公钥验签。能够防止伪装、篡改和否认等威胁的技术。

  伪随机数生成器:是一种能够模拟产生随机数列的算法。随机数和密码相关,因为随机数承担着密钥生成的重要职责。例如在web中进行SSL/TLS通信时,会生成一个仅用于当前通信的临时密钥

(会话密钥)这个密钥就是基于伪随机数生成的。

  隐写术:密码是一种能够让消息内容变得无法解读的技术,还有另外一种技术,不是让消息变得无法解读,而是能够隐藏消息本身,这种技术称为隐写术(藏头诗)。

    密码隐藏的是内容,隐写术隐藏的是消息本身。通过将密码与隐写术相结合,就可以同时产生两者各自具备的效果。如将密文运用隐写术作为数字水印隐藏到图片中。

 

历史上的密码:

  恺撒密码,密码算法:将明文中的各个字母按照指定的字母数平移,密钥:平移的字母数量

  简单替换密码,密码算法:按照替换表对字母表进行替换,密钥:替换表

 

对称密码(共享密钥密码)

  ——用相同的密钥进行加密和解密

编码:现代的密码都是建立在计算机的基础之上的,这是因为现代的密码所处理的数据量非常大,而且密码算法也非常复杂,不借助计算机的力量就无法完成加密和解密的操作。

  计算机的操作对象并不是文字,而是由0和1排列而成的比特序列。文件在计算机中都是用比特序列来表示的。执行加密操作的程序,就是将表示明文的比特序列转换为表示密文的比特序列。

  将现实世界中的东西映射为比特序列的操作称为编码(encoding),如ASCII码。

XOR:exclusive or,中文为异或。异或运算,两个比特位相同,结果为0,不同,结果为1。两个相同的数进行异或运算结果一定为0

那么A XOR B 再XOR B=A。这一步和加密、解密的步骤非常相似:

  将明文A用密钥B进行加密,得到密文A XOR B

  将密文A XOR B用密钥B进行解密,得到明文A

所以,只要选择一个合适的B,仅仅使用XOR就可以实现一个高强度的密码。

对于密码技术而言,“是否可以预测”是非常重要的一点。能够产生不可预测的比特序列,对于密码技术的贡献是巨大的。这种不可预测的比特序列就称为随机数。

 

一次性密码本——绝对不会被破译的密码

  一次性密码本是一种非常简单的密码,它的原理是“将明文与一串随机的比特序列进行XOR运算”。为什么说无法破译呢?因为即使暴力破解解密得到了明文,也无法判断它是否是正确的明文。

    如将一个字符串通过ASCII进行编码并产生一串比特序列,然后再产生一串和明文相同位数的比特序列(密钥),然后将这两个比特序列做异或运算,得到一串新的比特序列(一次性

    密码本的密文)。那么在对密文进行尝试破解的过程中,会得到各种可能的字符串,根本无法判断哪一个才是正确的明文。

  但是由于一次性密码本的密钥的长度必须和明文相同,并且密钥需要传送用于解密,存在密钥过大且传输被截取的风险大,所以一次性密码本没有被广泛使用。

 

DES

  DES(Data Encryption Standard)是一种对称密码。然而随着计算机的进步,现在DES已经能够被暴力破解,所以我们现在不应该再使用DES了。

  加密和解密:

    DES是一种将64bit的明文加密成64bit的密文的对称密码算法,它的密钥长度为56比特,每隔7比特会设置一个用于错误检查的比特。

    DES是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码,DES是分组密码的一种。

    DES每次只能加密64比特的数据,如果要加密的明文比较 长,就需要对DES加密进行迭代。

  DES的结构:

    DES的基本结构称为Feistel网络, 在Feistel网络中,加密的各个步骤称为轮(round),整个加密的过程就是进行若干次的循环。每轮加密将64bit的明文等分为左右各32bit进行处理,

  左侧32bit使用轮函数根据右侧和一个子密钥生成的进行加密的比特序列与左侧进行XOR运算,得到加密后的左侧,右侧不加密,然后左右侧重新拼接输出得到一轮64bit的密文。

  一轮的加密具体步骤如下:

    1、将输入的数据等分为左右两部分

    2、将输入的右侧直接发送到输出的右侧

    3、将输入的右侧发送到轮函数

    4、轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列

    5、将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。

  但是,这样下来右侧根本没有被加密,因此我们需要用不同的子密钥对一轮的处理重复若干次,并在两轮处理之间将左侧和右侧的数据对调。

  Feistel的解密只要按照相反的方向使用子密钥就可以完成了(两个相同的数进行XOR的结果一定为0)。

 

差分分析和线性分析

  TODO

 

三重DES

  DES已经可以在现实的时间内被暴力破解,因此我们需要一种用来替代DES的分组密码,三重DES就是出于这个目的被开发的。

  三重DES(triple-DES)是为了增加DES的强度,将DES重复三次所得到一种密码算法,也成为TDEA(Triple Data Encryption Algorithm),通常缩写为3DES。

  三重DES的密钥分为密钥1,密钥2,密钥3;由于DES的密钥长度为56bit,所以3DES的密钥长度为56*3=168bit。

  三重DES的加密机制为:加密-->解密-->加密。之所以不是3次加密是为了兼容普通的DES,当3DES的3个密钥相同时,3DES也就等同于普通的DES了。

  如果3DES的密钥1和密钥3使用相同的密钥,而密钥2使用不同的密钥,这种3DES就称为DES-EDE2。(EDE表示Encryption->Decryption->Encryption这个流程 )。

  密钥1、密钥2、密钥3全部使用不同的比特序列的三重DES称为DES-EDE3。

  三重DES的解密正好和加密过程相反,是以密钥3、密钥2、密钥1的顺序执行解密-->加密-->解密的操作。

  由于3DES的处理速度不高,除了特别重视 向下兼容性的情况以外,很少被用于新的用途。

 

AES

  AES(Advanced Encryption Standard),高级加密标准,是取代其前任标准DES而成为新标准的一种对称密码算法。在AES算法选拔中,Rijndael算法力压群雄,被NIST选定为AES标准。

  Rijndael的分组长度和密钥长度可以分别以32bit为单位在128bit和256bit的范围内进行选择。不过在AES的规格中,分组长度固定为128bit,密钥长度只有128、192和256bit三种。

  Rijndael的加密和解密:

    和DES一样,Rijndael算法也是由多个轮构成的,其中每一轮分为SubBytes、ShiftRows、MixColumns和AddRoundKey共4个步骤,一般需要重复10-14轮运算。使用的是SPN结构。

    Rijndael的输入分组为128bit,也就是16字节。首先,需要逐个字节地对16字节的输入数据进行SubBytes处理。

      然后,进行ShiftRows处理。这一步是以4字节为单位的行(row)按照一定的规则向左平移,且每一行平移的字节数是不同的。

      之后,进行MixColumn处理,这一步是对一个4字节的值进行比特运算,将其变成另外一个4字节值

      最后,需要将MixColumn的输出与轮密码进行XOR运算,即进行AddRoundKey处理。

 DES、3DES和AES三种对称密码算法中,推荐使用AES。

 

分组密码的模式

  DES和AES都属于分组密码,它们只能加密固定长度的明文。 如果需要加密任意长度的明文,就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。而分组密码的

迭代方法就称为分组密码的“模式”。

  分组密码和流密码:密码算法可以分为分组密码和流密码两种。

    分组密码是每次只能处理特定长度的一块数据和一类密码算法,这里的一块就称为分组,一个分组的比特数就称为分组长度。

      如:DES和3DES的分组长度都是64bit。这些密码算法一次只能加密64bit的明文,并生成64bit的密文。AES的分组长度为128bit,因此AES一次可加密128bit的明文,

      并生成128bit的密文。

    流密码是对数据流进行连续处理的一类密码算法。流密码中一般以1bit、8bit或者32bit等为单位进行加密和解密。一次性密码本属于流密码。

  分组密码处理完一个分组就结束了,因此不需要通过内部状态来记录加密的进度;相对地,流密码是对一串数据流进行连续处理,因此需要保持内部状态。

  明文分组和密文分组:明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码的长度相同。密文分组是指使用分组密码将明文分组加密之后所生成的密文。

  主动攻击者Mallory:窃听者Eve只能被动地进行窃听,而主动攻击者则可以主动介入发送者和接收者之间的通信过程,进行阻碍通信或者是篡改密文等活动,这样的攻击者称为Mallory。

  1、ECB模式(Electronic Code Book 电子密码本模式)

    将明文分组直接加密成密文分组的方式就是ECB模式。使用ECB模式加密时,相同的明文分组会被转换成相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组-->密文分组”的对应表,因此ECB模式也称为电子密码本模式。当最后一个明文分组小于分组长度时,需要用一些特定的数据进行填充。

    ECB模式有一个很大的弱点,假如存在主动攻击者,那么他无需破译密码就能够操纵明文。如Mallory改变了密文分组的顺序,那么解密后的明文分组的顺序也就被改变了,就可能存在A

  对B转账的密文解密后变成B对A转账。

    而且Mallory对密文分组进行替换、删除、复制等操作,得到的明文分组也会被替换、删除和复制。这是一个很大的问题。

  2、CBC模式(Cipher Block Chaining 密文分组链接模式)

    将前一个密文分组和明文分组的内容混合起来进行加密。首先将明文分组和前一个密文分组进行XOR运算,然后再进行加密。

转载于:https://www.cnblogs.com/yangyongjie/p/11389910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值