密码学

密码学(Cryptography)是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。

密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。

密码算法

什么是密码算法(Cryptography Algorithm),通常是指加、解密过程所使用的信息变换规则,是用于信息加密和解密的数学函数。对明文进行加密时所采用的规则称作加密算法,而对密文进行解密时所采用的规则称作解密算法。加密算法和解密算法的操作通常都是在一组密钥的控制下进行的。

什么是密钥?密钥(Secret Key)是密码算法中的一个可变参数,通常是一组满足一定条件的随机序列。用于加密算法的叫做加密密钥,用于解密算法的叫做解密密钥,加密密钥和解密密钥可能相同,也可能不相同。

加密算法根据密钥的不同分为两类,对称加密算法(Symmetric-key Encryption Algorithm)和非对称加密算法(Asymmetric-key Encryption Algorithm)。

目前,通用的单钥加密算法为 DES(Data Encryption Standard) ,通用的双钥加密算法为 RSA(Rivest-Shamir-Adleman) ,都产生于上个世纪70年代。

对称加密

首先,让我们先从一个情景开始讲起。

比如张三学习比李四好,李四就想在考试的时候让张三“帮助”一下自己,当然,他们俩不可能像我们平常对话一样说,第一题选 A ,第二题选 B 等等,为什么?因为监考老师明白他俩在谈论什么,也就是说这种沟通交流方式属于“明文”,所以李四就想:“需要发明一种只有我和张三明白的交流方式”,那李四做了什么呢?李四去找张三说:“当我连续咳嗽三声的时候你看我,然后如果我摸了下左耳朵,说明你可以开始给我传答案了,如果没反应,那说明我真的是在咳嗽…”, 然后,怎么传答案呢?很简单,“你摸左耳朵代表 A , 摸右耳朵代表 B ,左手放下代表 C ,右手放下代表 D ,”好了,这就是他们的“加密算法”,将信息的一种形式(A, B, C, D),这里我们称为“明文”,转换成了另一种形式(摸左耳朵,摸右耳朵,放左手,放右手),这里称为“密文”,经过这种转换,很显然监考老师不会明白这些“密文”,这样,张三和李四就通过“密文”形式实现了信息的交换。

对称加密算法也叫单钥加密,加密和解密过程都用同一套密钥。历史上,人类传统的加密方法都是前一种,比如二战期间德军用的 Enigma 电报密码,莫尔斯电码都可以看作是一种单钥加密算法。

结合前面的例子对应一下,密钥就是“将(A, B, C, D)转换成(摸左耳朵,摸右耳朵,放左手,放右手)”这么一个规则。

事实上,单钥加密的这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通讯联系。

这句话很好理解了吧,密钥是张三和李四间共同的秘密!只有他俩事先知道。

所以,为什么叫对称加密呢,你可以这么理解,一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。他们之间的关系如下:

symmetric-key-encryption-algorithm.jpg

目前常见的对称加密算法有:

DES, 3DES, AES, Blowfish, IDEA, RC5, RC6...

非对称加密

非对称加密算法也称为双钥加密,加密和解密过程用的是两套密钥。非对称加密是一种比对称加密更加优秀的加密算法。对称加密的密钥只有一把,所以密钥的保存变得很重要。一旦密钥泄漏,密码也就被破解。而在非对称加密的情况下,密钥有两把,一把是公开的公钥,还有一把是不公开的私钥。

非对称加密的原理如下:

  1. 公钥和私钥是一一对应的关系,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之亦成立;
  2. 所有的(公钥, 私钥)对都是不同的;
  3. 用公钥可以解开私钥加密的信息,反之亦成立;
  4. 同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的;

在对称加密体系中,公钥用来加密信息,私钥用来数字签名

比如,李四想给张三发送密文,于是李四开始给张三发消息:

李四:
“hi哥们,我想给你发个密文,把你的公钥给我发过来。”

张三:
“没问题的,这是我的公钥: d#8yHE8eU#hb*!neb ,用这个公钥加密你的信息后给我发过来吧”

李四:
“这是我想对你说的话: *&#@uehuu(**#eehu&$##bfeu&&

为什么公开问公钥?非对称解密算法的强大之处就在这里!公钥可以随意分发,所以即使第三方截取了,也只是知道该公钥而已,但是要是想解密使用该公钥加密的密文!只有一个人可以办得到!就是张三! 为什么?李四使用张三的公钥加密的信息,只有张三的公钥所对应的私钥,这里就是“张三私钥”才可以解密!所以,没有张三私钥的第三方即时截取了这些密文,也破解不了!或者更严格的说在有限时间内比如说几千年内是暴力破解不出的!

非对称加密算法,首先要有一对密钥对 ,一个被称为私钥,一个成为公钥;然后可以把公钥分发给想给你传密文的用户,然后用户使用该公钥加密过得密文,只有使用私钥才能解密,也就是说,只要保存好你的私钥,就能确保别人想给你发的密文不被破解。正因为如此,这种加密是单向的,所以被称为非对称加密算法。

asymmetric-key-encryption-algorithm.jpg

这种加密算法应用非常广泛, ssh/https/ssl/tls,电子证书,电子签名,电子身份证等等都是用到了非对称加密算法。事实上,非对称加密算法可以说是现在互联网的基础。

需要补充说明的是,非对称加密比对称加密的效率低,因此在实际的通信过程中一般会同时使用非对称加密和对称加密来实现数据加密传输。方法是先通过非对称加密协商一个用于对称加密的共享秘钥,后续在传递数据时采用该对称加密秘钥匙来对数据加密,以在保证安全性的同时兼顾加密传输的效率。其中 https/TLS 就采用了类似的加密传输机制。

因为任何人都可以生成自己的(公钥,私钥)对,所以为了防止有人散布伪造的公钥骗取信任,就需要一个可靠的第三方机构来生成经过认证的(公钥,私钥)对。这就是数字证书的作用了,接下来的文章将会继续探讨什么是数字签名以及数字证书。