加密
加密是通过网络传输信息的基础。通俗地讲,加密就是利用数学方法将明文(需要被隐蔽的数据)转换为密文(不可读的数据)从而达到保护数据的目的。 就好比把要传递的数据信息通过某种数学算法转化成奇奇怪怪的组合好比“%Sd@#183DF6&K)”等。
对称密钥加密(对称加密算法)
对称密钥加密又叫做共享密钥加密,它使用同一个密钥对数据进行加密和解密。
甲跟乙首先商量好加解密的密钥,具体加解密过程如下:
- 甲使用对称密钥对明文进行加密,加密之后明文变成密文,随机把密文发送给乙。
- 乙接收到了密文之后,再使用对称密钥对密文进行解密,于是就得到了最初的明文。
优点:效率高,算法简单,系统开销小,适合加密大量数据。
缺点:实现困难,扩展性差。困难体现在在实际交换之前,需要以安全的方式进行密钥的交换,如果被攻击者劫持密钥,那么就可以随意接收或发送信息,伪造成对方;扩展性体现在每对用户在进行交互之前都要协商密钥,如果有N个用户要进行此方式的信息传递,那就要N*(N-1)/2个密钥。
目前比较常用的对称密钥加密算法,主要包含DES(Data Encryption Standard)、3DES(Triple Data Encryption Standard)、AES(Advance Encrypt Standard)算法。
公钥加密(非对称加密算法)
公钥加密又叫做非对称密钥加密,它使用两个不同的密钥:一个可对外公开,称作“公钥”;一个只有所有者知道,称作“私钥”。
公钥加密解决了对称密钥的发布和管理问题,一个用于加密信息,一个用于解密信息,通信双方无需事先减缓密钥就可以进行保密通信。通常以公钥作为加密密钥,以私钥作为解密密钥。因为其他人没有对应的私钥,发送的加密信息仅该用户可以解读,从而实现通信的加密传输。
因为公钥是在网络中传输的,所以甲乙都有对方的公钥,具体加解密过程如下:
- 甲使用乙的公钥对明文进行加密,并将密文发送给乙。
- 乙收到密文之后,使用自己的私钥对密文进行解密,得到最初的明文。
公钥加密的有点就是无法从一个密钥推导出另一个密钥;公钥加密的信息只能用相应的私钥进行解密。缺点就是算法比较复杂,加密时时间很长,并且加密后的数据会变得很长,不利于在网络中进行传输。
目前比较常用的公钥加密算法,主要包含DH(Diffie-Hellman)、RSA(Ron Rivest、Adi Shamirh、LenAdleman)和DSA(Digital Signature Algorithm)算法。
数字信封和数字签名
数字信封
数字信封是指发送方采用接收方的公钥来加密对称密钥之后所得到的数据(发送方使用对方公钥对数据进行加密得到的一个东西)。采用数字信封的时候,接收方需要使用自己的私钥才能够打开数字信封获得对称密钥。
公钥在网络中进行传输,甲乙都有对方的公钥,具体加解密过程如下:
- 甲使用对称密钥对明文进行加密,明文变成密文。
- 甲使用乙的公钥对对称密钥进行加密,生成数字信封。(这里有几点需要注意:第一步中甲使用对称密钥对明文进行加密,此时只有对称密钥才能够解开密文;第二步:甲使用了乙的公钥对对称密钥进行加密,而能解开信封的密钥,即乙的私钥只有乙有,保证了只有乙能打开这个信封,获取到信封中的对称密钥,然后进而可以使用对称密钥对密文进行解密,这一步是精髓)
- 甲将数字信封和密文信息一起发送给乙。
- 乙接收到了甲的加密信息之后,使用自己的私钥打开数字信封,得到对称密钥。
- 乙使用对称密钥对密文中的信息进行解密,得到最初的明文。
从这个过程中可以发现,使用数字信封在数据进行加解密的过程中,巧妙的运用了对称加密算法和非对称加密算法的优点,解决了速度慢,传递不安全,扩展性差等问题。(之前因为非对称加密算法加密之后数据会非常长,而且时间也长,现在只用加密对称密钥等非常少的数据,时间短,数据短,而且保证了安全性;又因为对阵加密算法不安全,但是加解密速度快,所以对端解开信封之后,使用对称密钥进行解密,很快的就能读出数据。二者的优点都用到了,而且巧妙的避开了缺点)
但是!数字信封还有个问题,如果攻击者拦截甲的信息,用自己的对称密钥加密伪造的信息,并且用乙的公钥加密自己的对称密钥,然后发送给乙。乙收到加密信息之后,解密得到明文,而且乙始终认为是甲发送的信息。(简单说就是数据被篡改了,无法证实数据的真实性)所以,需要一种方法确保接收方收到的信息就是指定发送方发送的。
数字签名
数字签名是指发送方用自己的私钥对数字指纹进行加密之后所得到的数据。采用数字签名时,接收方需要使用发送的公钥才能解开数字签名得到数字指纹。什么是数字指纹呢?
数字指纹又叫做信息摘要,是由发送方通过对明文信息进行HASH计算得到的数据。(HASH算法几乎不可逆,可以理解为是不可逆的加密算法)采用数字指纹时,发送方会把数字指纹和明文一起发送给接收方,接收方收到之后,会用同样的方式对明文进行HASH计算,然后将生成的数字指纹与发送来的数字指纹进行对比,如果一致的话,那就证明信息没有被篡改过。
公钥是在网络中进行传输的,甲乙都有相互的公钥,具体传输过程如下:
- 甲使用乙的公钥对密文进行加密,生成密文信息。
- 甲使用HASH算法对明文进行HASH计算,生成数字指纹。(这一步用于保证信息的完整性,保证不被篡改)
- 甲使用自己的私钥对数字指纹进行加密,生成数字签名。(这一步用于验明身份)
- 甲将密文信息跟数字签名一块发送给乙。
- 乙使用甲的公钥对数字签名进行解密,得到数字指纹。
- 乙接收到甲的加密信息之后,使用自己的私钥对密文进行解密,得到最初的明文。
- 乙使用HASH算法对明文进行运算,生成数字指纹。
- 乙将生成的数字指纹与得到的数字指纹进行对比,如果一致,证明信息没有被篡改,接收;否则丢弃。
从加解密过程中,可以看出,数字签名技术不但证明了信息未被篡改,还证明了发送方的身份。数字签名和数字信封技术也可以组合使用。
但是,数字签名技术还有个问题,如果攻击者更改乙的公钥,甲获得的是攻击者的公钥,攻击者拦截乙发送给甲的信息,用自己的私钥对伪造的信息进行数字签名,然后与使用甲的公钥的加密伪造的信息一起发送给甲。甲收到加密信息后,解密得到的明文,并验证明文没有被篡改,则甲始终认为是乙发送的信息。此时,需要一种方法确保一个特定的公钥属于一个特定的拥有者。
数字证书
数字证书简称证书,它是一个经证书授权中心(即在PKI中的证书认证机构CA)数字签名的文件,包含拥有者的公钥及相关身份信息。
数字证书可以说是Internet上的安全护照或身份证。当人们到其他国家旅行时,用护照可以证实其身份,并被获准进入这个国家。数字证书提供的是网络上的身份证明。
数字证书技术解决了数字签名技术中无法确定公钥是指定拥有者的问题。