加密和解密

为了敏感数据的安全和数据再网络中的安全传输,通过数据加密传输可以很好的避免数据被监听和篡改。

加密方式根据是否是可逆的可以分为

  • 不可逆加密 加密的最终数据无法得到原始数据。 比如 MD5
  • 可逆加密 通过加密的数据可以解析出原始数据 比如 DES

单向散列函数

单向散列函数(one way hash function):单方向的通过要加密的内容计算出一个固定长度散列值也就是hash值。

散列函数也可以被称为 消息摘要函数,哈希函数。输出的散列值,被称为消息摘要 ,指纹。

单项散列函数可以用来加密字符串,也可以用来加密文件,相同的散列算法生成的值都是相同长度的。

MD5

MD5 信息摘要算法(Message-Digest Algorithm),是一种被广泛使用的密码散列函数,可以产生出一个 128 位(即 16 字节)的散列值,用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,并于 1992 年公开,用以取代之前的 MD4 算法。MD5 算法的程序在 RFC 1321 标准中被加以规范。

1
加密: 123456 --> e10adc3949ba59abbe56e057f20f883e

此种加密算法是不可逆的,一般的破解方式是通过跑字典穷举法来破解,所以针对简单的字符串可以轻易的被反破解出来。

不安全

SHA-1

​ SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。 最终获得160bit的值

1
加密: 123456 --> 7c4a8d09ca3762af61e59520943dc26494f8941b

不安全

SHA-2

SHA-2安全散列算法2(Secure Hash Algorithm 2)一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256

可以理解为SHA-1 的加强版。

SHA-3

SHA-3第三代安全散列算法(Secure Hash Algorithm 3),之前名为Keccak算法。

SHA-3包括:SHA3-224、SHA3-256、SHA3-384、SHA3-512。

                     各个算法的散列值长度和安全情况

单向散列函数的用途

加密密码

存储的密码只存储一个加密后的值,在执行登录的时候,对登录输入的密码再次执行散列算法,最终得到的结果和存储的散列值进行比对。

文件校验

单向散列算法可以针对文件计算散列值,那么通过获取文件的散列值和原始文件的散列值做比较,可以确认文件是否被修改过。

一般网络上下载的文件会提供了散列值,下载完后可以再执行一次散列值计算如果和提供的散列值不相同,表示可能文件不完整或错误。

可逆加密

可逆加密分为 **对称加密算法 ** 和 非对称加密算法

​ 对称加密

在数据加密的时候,需要提供一个秘钥,而解密的时候也需要一个秘钥,加密秘钥和解密秘钥是同一个叫做对称加密算法,如果不是一个叫做非对称加密算法。

区分就是加密秘钥和解密秘钥是否是同一个

对称加密算法

主要特点是加密和解密的秘钥是用一个。

DES

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.

DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位。

此算法只能加密64比特的数据,如果加密数据的长度超过了64比特,那么就会依次返回进行每64比特的加密。

此算法已经不安全了,不建议使用

3DES

3DES (Triple Data Encryption Algorithm): 将DES重复三次得到的一种加密算法。

3DES 的加密过程中使用到了3个秘钥,3次加密使用不同的秘钥。

加密过程

  • 明文 首先用 秘钥3 执行一次加密
  • 针对上次的加密结果,用 秘钥2 进行解密
  • 针对上次的加密结果,用 秘钥1 再次加密

整个过程经历 加密 —》 解密 –》 加密 的过程。

解密过程

解密过程使用和加密过程完全相反的操作,

  • 密文 首先用 秘钥1 执行一次解密
  • 针对上次的解密结果,用 秘钥2 进行加密
  • 针对上次的加密结果,用 秘钥3 再次解密

解密过程经历 加密 –》 加密 –》 加密 的过程。

通过三次的加解密过程,对原有的DES的安全性得到提升,但是加密性能会有下降。

AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

秘钥的长度有 128 ,192 ,256 三种。

AES 是使用比较多的一种对称加密算法

非对称加密算法

主要特点是加密用的秘钥和解密用的秘钥不是同一个。

一般生成 成对 的两个秘钥,一个自己保留,称为 **私钥 ** ,另一个秘钥交给加密方,是可以公开共享的,称为 公钥

私钥自己保存,公钥给到数据加密方。

通过公钥加密的数据,可以由对应的私钥解密。

通过私钥加密的数据,可以由对应的公钥解密。(私钥加密的叫签名)

非对称加密算法 相对于 对称加密算法有更加安全的特性,但是同时也消耗更多的计算资源。

RSA

RSA是最流行的非对称加密算法之一。也被称为公钥加密。它是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA是非对称的,也就是用来加密的密钥和用来解密的密钥不是同一个。和DES一样的是,RSA也是分组加密算法,不同的是分组大小可以根据密钥的大小而改变。如果加密的数据不是分组大小的整数倍,则会根据具体的应用方式增加额外的填充位。

ECC

ECC全称为“Ellipse Curve Ctyptography”,是一种基于椭圆曲线数学的公开密钥加密算法。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

ECC 主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长

主要的优点是比RSA 的秘钥更短,缺点是比RSA的计算消耗更多。

混合密码系统

混合密码系统(Hybrid Cryptosystem) : 是同时利用对称加密算法和非对称加密算法,将两者的优点进行结合的一种加密方案。

如果单独使用 对称加密算法

优点是:资源消耗少,加解密比较的快。缺点是:当秘钥在传输的过程中,能够被窃听,导致数据被解密。

如果单独使用 非对称加密算法

优点是: 加密算法比较安全。 缺点是: 加解密的过程消耗资源比较多。

那么通过混合密码系统来结合两种加密算法的优点。

加解密步骤

  1. 发送者拿到 消息接收者的公钥。
  2. 在发送消息的时候,针对此次数据发送 随机 生成一个对称秘钥
  3. 明文消息 使用 生成的对称秘钥进行加密,生成对称加密的密文。
  4. 对生成的对称秘钥,使用非对称公钥进行加密,生成加密后的对称秘钥。
  5. 数据进行传输 ,传输了2个数据,一个是用对称秘钥加密的数据,一个使用非对称加密后的 对称秘钥。也就是说对称秘钥 通过 非对称加密的方式加密传输过去了。
  6. 接受者接收到2个数据,首先用自己的私钥 解密 对称秘钥,得到真正的对称秘钥。
  7. 得到对称秘钥后,用对称秘钥解密密文。

数字签名

即使通过混合密码系统,也可能出现一些问题。

  1. 因为接受者的公钥是公开的,那么消息可能被篡改。
  2. 可以发送伪装成发送者的消息
  3. 由发送者发送的消息,发送者却否认

为了解决这些问题,那么使用数字签名。

由发送者 生成签名 ,接收者 验证签名。

数字签名过程

  1. 发送者生成秘钥对,私钥自己保留,公钥发送者接收者。
  2. 发送消息的时候,使用私钥对消息进行加密,通过私钥加密的信息为 签名 ,(因为只有它自己有此私钥)。
  3. 消息和签名一起发送给接收者。
  4. 接收者收到签名和消息后,首先通过发送者的公钥对签名进行解密。
  5. 解密的结果和消息进行比对,如果一值说明消息未被修改,如果不一致说明消息可能被修改或不是发送者发送的。

以上的签名方案有一个问题,因为使用的是非对称加密算法,如果消息的内容很多,会带来非常大的性能消耗。

为了减少性能的消耗,使用**混合密码系统 **做一下改进。

主要的改进是:

原来是使用非对称加密算法对整个消息进行加密签名,现在是首先对消息计算单向散列值,因为单向散列的值是固定的,所以值不会太大,然后使用非对称加密算法对向散列的值进行签名。

解密的时候首先根据消息计算散列值,再通过签名解密出散列值 比对是否一致。

签名的主要作用

  • 确认消息内容的完整性
  • 识别消息是否被篡改
  • 防止消息发送人否认

证书

在使用非对称加密算法的过程中,需要对公钥进行网络传输,而公钥在网络传输的过程中,是有可能被拦截的。

拦截者 将 消息接收者发送给 消费发送者 的公钥拦截下来保存下来,然后将自己的公钥发给消息发送者。冒充消息接收者的身份进行消息的传输,达到攻击的目的。

为了保证公钥的安全传输合法性,使用证书 (Certificate)来保证公钥的安全。

密码学中的证书,全称叫 公钥证书 (Public-Key Certificate ,PKC),证书中存储了姓名,邮箱,公钥信息。

证书一般由权威认证机构 发放数字签名。

证书的流程

  1. 数据接收者向认证机构注册公钥信息或者在认证机构生成公钥和私钥信息,然后将私钥下载下来。
  2. 认证机构对公钥使用机构自身生成的私钥 生成数字签名。
  3. 发送者获取到证书后,发送者一般都有权威机构的公钥,使用机构的公钥验证证书中的签名是否正确。
  4. 验证签名正确后,使用接收者的公钥加密数据发送。
  5. 接收者使用自己的私钥来解密数据。

​ 各个权威 CA机构公钥,默认内置到浏览器中和操作系统中。

总结

  1. 单向散列函数 是不可逆的,也称为哈希函数,主要用于密码的生成,文件的校验等。性能一般比较好,生成的散列值的大小是固定的,常用的有MD5, SHA 等。推荐使用SHA2 和SHA3 。

  2. 可逆加密 可以通过解密后的密文反推出加密的原始值的内容,分为对称加密和非对称加密,对称加密是加密用的秘钥和解密用的秘钥为一个,非对称加密秘钥是加密秘钥和解密秘钥用的不是一个。

  3. 对称加密一般使用AES算法,非对称加密算法一般使用RSA算法。

  4. 对称加密算法的安全性查,但是性能好,非对称算法的安全性好,但是性能差,通过混合加密算法将两者的优点结合起来。

  5. 为了验证数据传输中数据是否被修改的问题,引入了数字签名,通过发送者的私钥加密消息,使用发送者的公钥解密消息验证数据是否被修改过。

  6. 非对称加密 是使用公钥加密 ,私钥 解密。数字签名是 使用私钥 加密 ,使用公钥解密。因为私钥只能自己拥有,也因为使用私钥才能验证身份。

  7. 为了解决数据传输中公钥被拦截的问题,使用证书的方式验证合法的公钥。