对称加密、非对称加密、数字签名、数字证书、签名加密

这篇博客,讲一些名称,很基础,但是一直没有整理过。这些名词包括:

对称加密、非对称加密、数字签名、数字证书、签名加密

1、对称加密

对称加密的方式很简单,就是加密和解密使用同一套规则,这种加密方式有一个很大的问题就是,保存和传递密钥,如果在传递的过程中,信息被截取到,那么就可以使用密钥对信息进行解密。

(图1,图画的很烂)


2、非对称加密

这种加密方式就是,加密方和解密方可以使用不同的加密规则。这样的话就有两套密钥,公钥和私钥。

乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。

甲方获取乙方的公钥,然后用它对信息加密。

乙方得到加密后的信息,用私钥解密。

其中具体的原理在博客:RSA算法原理中有很详细的介绍。

这样就避免了传输明文的时候传输秘钥,即便消息在传输过程中被截获,也不会被破解。

(图2,图画的很烂)

如上图,乙产生公钥和私钥,公钥可以给任何人,加使用公钥对问价加密,乙使用私钥对文件进行解密。

公钥加密,私钥解密。

3、数字签名

数字签名的作用在于用来鉴别接受方接受到的信息是否是发送方发送过来的,并且中间是否又被篡改过。

如上图1,公钥可以被任何获取,然后对文件加密。假设这样一种情况:

甲使用公钥对文件进行加密,然后向乙传输密文,但是传输的过程中,被同样有公钥的丙截获(公钥任何人都可以拥有),这个时候丙利用自己的公钥,重新加密一封密文,传输给乙。如此一来,乙收到的密文不是甲传过来的,而是丙传过来的。但是乙并不知道。如此一来,就产生了文件被掉包。

数字签名的作用就是用来校验文件是否在传输过程中是否被篡改和掉包。具体实现方式有两种:无保密机制签名保密机制签名

3.1无保密机制签名

甲在对明文加密之前,先使用摘要算法,对明文生成摘要,然后把摘要使用非对称加密的方式进行加密,然后传输给乙,乙收到摘要密文后使用私钥进行解密,然后把收到的文件明文进行摘要算法,得到摘要后和乙传输过来的密文进行比对。就可以知道,文件是否被替换。

(图3,图画的很烂)

具体过程如上图:

(1)发送方采用某种摘要算法从报文中生成一个128位的散列值(称为报文摘要);

(2)发送方用RSA算法和自己的私钥对这个散列值进行加密,产生一个摘要密文,这就是发送方的数字签名;

(3)将这个加密后的数字签名作为报文的附件和报文一起发送给接收方:

(4)接收方从接收到的原始报文中采用相同的摘要算法计算出128位的散列值;

(5)报文的接收方用RSA算法和发送方的公钥对报文附加的数字签名进行解密;

(6)如果两个散列值相同,那么接收方就能确认报文是由发送方签名的。

最常用的摘要算法叫做MD5(Message Digest 5),它的作者R.L.

3.2保密机制签名

上面的加密方式中,只是实现了使用签名如何对校验传输数据是否被篡改和替换,但是传输的还是明文,如果要想对传输明文进行加密成密文,是否也要使用RSA加密算法呢?

这种做法很不可取,因为RSA加密算法效率很低,所需加密的明文越长,效率会呈指数下降。那么应该怎么办呢?

方法就是:

使用对称加密的方式对明文加密,然后将对称加密的秘钥使用RSA加密,然后在对密文生成摘要,然后传输

(图4,图太复杂,直接转自其他网站)

如上图,具体加密步骤为:

(1)发送方选择一个对称加密算法(比如DES)和一个对称密钥对报文进行加密;

(2)发送方用接收方的公钥和RSA算法对第1步中的对称密钥进行加密,并且将加密后的对称密钥附加在密文中;

(3)发送方使用一个摘要算法从第2步的密文中得到报文摘要,然后用RSA算法和发送方的私钥对此报文摘要进行加密,这就是发送方的数字签名;

(4)将第3步得到的数字签名封装在第2步的密文后,并通过网络发送给接收方;

(5)接收方使用RSA算法和发送方的公钥对收到的数字签名进行解密,得到一个报文摘要;

(6)接收方使用相同的摘要算法,从接收到的报文密文中计算出一个报文摘要;

(7)如果第5步和第6步的报文摘要是相同的,就可以确认密文没有被篡改,并且是由指定的发送方签名发送的;

(8)接收方使用RSA算法和接收方的私钥解密出对称密钥;

(9)接收方使用对称加密算法(比如DES)和对称密钥对密文解密,得到原始报文。

4、签名证书

假设一种更为复杂的情况,甲在给乙传输密文的时候,使用公钥加密,但是这个时候,丁把甲的电脑偷走,换成自己的公钥,但是甲不知道,使用丁的公钥加密后给乙传输密文,这样如果丁截取到密文,就可以使用自己的私钥进行解密。

那么怎么知道自己的公钥就是自己的呢?这就用到了签名证书。

找“证书中心”(certification authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息进行加密,生成“数字证书”(Digital Certificate)。


不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

推荐阅读更多精彩内容