逻辑图

加密(Encrypt)

  • 加密的概念:简单来说就是一组含有参数k的变换E。信息m通过变换E得到c = E(m)。原始信息m为明文,通过变换得到的信息c为密文。从明文得到密文的过程叫做加密,变换E为加密算法,参数k称作秘钥。同一个加密算法,可以取不同的密钥,得出不同的加密结果。从密文c恢复明文m的过程称作解密,解密算法D是加密算法E的逆运算。解密算法也有参数,称作解密算法的秘钥。

  • 加密的方式:私钥密码(对称加密)和公钥密码(非对称加密)。

私钥密码(对称加密)

私钥密码实例-凯撒(J.Caesar)密码:

1
2
3
公元前罗马皇帝凯撒(J.Caesar)曾用密码传递作战命令。他的加密方法是把每个字母按字母表的顺序向后移动3位,最后3个字母依次变成前3个字母。例如,"take action at middle night",经过加密变成"wdnhdfwlrqdwplqqohqljkw"(忽略掉空格)。(这个加密算法应该都不陌生,数据结构双向循环链表部分应该都实现过的)

凯撒密码的加密算法是把字母按字母表的顺序循环移动k位,取k=3就是凯撒所用的加密算法。如果用数字0 ~ 25分别表示26个字母,算法可表示成 E(i) = (i + k)mod26, i = 0, 1, ..., 25,其中k就是加密秘钥。凯撒密码的解密算法是D(i) = (i - k) mode 26, i = 0, 1, ..., 25。其中k就是解密秘钥。它的解密算法的秘钥与加密算法的秘钥相同。

私钥密码

由以上例子可以看出。私钥加密的秘钥是对称的,只要知道加密秘钥就能推出解密秘钥(所以称为对称加密)。通信双方分别持有加密密钥和解密密钥,密钥对外是绝对保密的,必须通过秘密渠道传送 。常见的对称加密算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES。

公钥加密(非对称加密)

公钥加密概念

迪菲(W.Diffie)和赫尔曼(M.Hellman)于1976年提出公钥密码的思想,这种密码是非对称的,也就是说,不能从加密密钥推算出解密密钥,所以又称之为非对称加密。加密密钥不需要保密,可以公开,称之为公钥,只需要保守解密秘钥称之为私钥。公钥和私钥是成对的。常见的非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC。

公钥加密简单举例:甲乙两人通信,甲将他的加密密钥(公钥)公布,任何想与甲通信的人都可以使用这个加密密钥将要传送的信息(明文)加密成密文发送给甲,只有甲自己知道解密密钥(私钥),能够把密文还原为明文。任何第三方即使截获到密文也不可能知道密文所传递的信息。

两种加密方式对比如下图(图1-0)所示:

基于公钥密码的加密和认证

加密和认证是两个不同的概念,其中加密是保证数据的安全性,认证是确保用户的真实性。只有通信双方确定是真正要通信的双方,通信才有进行下去的必要。这也就是认证的主要目的。

基于公钥密码的加密过程

比如有两个用户Alice和Bob,Alice想把一段明文通过公钥密码的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

1、Bob将他的公钥传送给Alice。
2、Alice用Bob的公钥加密她的消息,然后传送给Bob。
3、Bob用他的私钥解密Alice的消息。

Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

基于公钥密码的认证过程

认证和加密就不同了,主要是鉴别用户的真伪。还是Alice和Bob这两个用户,Alice有一对公私钥,Alice想让Bob知道自己是真实的Alice,而不是假冒的,因此Alice只要使用私钥对文件加密发送给Bob,Bob使用Alice的公钥对文件进行解密,如果可以解密成功,则证明Alice的私钥是正确的,因而就完成了对Alice的身份鉴别。

整个身份认证的过程如下:

1、Alice用她的私钥对文件加密,从而对文件签名。
2、Alice将签名的文件传送给Bob。
3、Bob用Alice的公钥解密文件,从而验证签名。

Alice使用自己的私钥加密,Bob用Alice的公钥进行解密。

基于公钥密码的加密和认证的思考

在加密过程中,思考如何保证Alice拿到公钥后就能确定是Bob的公钥,若是篡改的公钥,通信进行下去已经无意义。接下来的第二篇文章数字签名和数字证书来解答这个问题。

哈希(Hash)

哈希与加密是不同的,概括来说,哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。

两者有如下重要区别:
1、哈希算法往往被设计成生成具有相同长度的文本,而加密算法生成的文本长度与明文本身的长度有关。

2、哈希算法是不可逆的,而加密算法是可逆的。
这里重点强调一下Hash和Encrypt的主要区别,因为接下来的文章要用到这两个概念,这里对此不做深究。详细介绍可看我下面参考的一篇文章哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用

总结

第一篇讲解的都是一些常用的基本概念,做安全肯定是会经常遇见,后续的几篇文章也依赖于对这些概念的理解,所以这里先提一下。关于Hash也只强调了一下和加密的区别。

参考

屈婉玲,耿素云,张立昂. 离散数学:高等教育出版社
详解公钥、私钥、数字证书的概念
哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用

来源:http://www.jianshu.com/p/2542c95fb023