整理自网络
1. 密钥(secret key)
密钥(secret key)是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
密码学中:密钥(secret key)——用于加解密数据的工具;
私钥(private key)——私有的加解密工具;
公钥(public key)——公开的加解密工具。
1.1 密钥分类
根据密码算法所使用的加密密钥和解密密钥是否相同、能否由加密过程推导出解密过程(或者由解密过程推导出加密过程),可将密码体制分为对称密码体制(也叫作单钥密码体制、秘密密钥密码体制、对称密钥密码体制)和非对称密码体制(也叫作双钥密码体制、公开秘钥密码体制、非对称密钥密码体制)。
1.1.1 对称密钥
对称密钥加密,又称私钥加密或会话密钥加密算法,即信息的发送方和接收方使用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。对称加密的例子包括AES、DES。
对于普通的对称密码学,加密运算与解密运算使用同样的密钥。通常,使用的对称加密算法比较简便高效,密钥简短,破译极其困难,由于系统的保密性主要取决于密钥的安全性,所以,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题。正是由于对称密码学中双方都使用相同的密钥,因此无法实现数据签名和不可否认性等功能。
1.1.2 非对称密钥
非对称密钥加密系统,又称公钥密钥加密。它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开秘钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
不像普通的对称密码学中采用相同的密钥加密、解密数据,非对称密钥加密技术采用一对匹配的密钥进行加密、解密,具有两个密钥,一个是公钥一个是私钥,它们具有这种性质:每把密钥执行一种对数据的单向处理,每把的功能恰恰与另一把相反,一把用于加密时,则另一把就用于解密。用公钥加密的文件只能用私钥解密,而私钥加密的文件只能用公钥解密。 公共密钥是由其主人加以公开的,而私人密钥必须保密存放。为发送一份保密报文,发送者必须使用接收者的公共密钥对数据进行加密,一旦加密,只有接收方用其私人密钥才能加以解密。 相反地,用户也能用自己私人密钥对数据加以处理(这是签名,证明我是我)。换句话说,密钥对的工作是可以任选方向的。这提供了"数字签名"的基础,如果要一个用户用自己的私人密钥对数据进行了处理,别人可以用他提供的公共密钥对数据加以处理。由于仅仅拥有者本人知道私人密钥,这种被处理过的报文就形成了一种电子签名——一种别人无法产生的文件。数字证书中包含了公共密钥信息,从而确认了拥有密钥对的用户的身份。
1.2 公钥和私钥
在非对称加密中,通信双方持有不同的密钥。
服务端的密钥,称之为 私钥(private key),客户端的密钥,称之为 公钥 (public key)。
他们二者的区别是:
私钥应仅在服务端保存,绝不可泄露。而公钥可以存在于任何的客户端,即使黑客拿到了也没有关系。
公钥加密的密文只有相对应的私钥才能解密
私钥加密的内容,所有与之相对应的公钥都能解密。
私钥通常用来生成签名,公钥用来验证签名。
公钥和私钥是相对的,两者本身并没有规定哪一个必须是公钥或私钥。这意味着,公钥只要不对外公开,那就可以做为私钥,私钥公开后也可以做为公钥。
2. 秘钥(password/passphrase)
虽然“秘钥”在中文中有时被用作“密钥”的同义词,但在密码学中更准确的含义是用户用于保护密钥或加密数据的密码。通常情况下,秘钥与密钥结合使用,用于加密密钥或解锁密钥的访问。例如,一个RSA私钥文件可以用秘钥加密,只有知道秘钥才能解锁并使用私钥。
注:
早期密码是加解密算法保密,通过算法对明文加密,对密文解密。
现代密码是加解密算法公开,在算法中加入了自定义参数,即秘钥。通过算法和秘钥联合组成密码,对明文加密,对密文解密。
3. 摘要、签名、证书是啥?
3.1 信息摘要
一段信息,经过摘要算法得到一串哈希值,就是摘要(dijest)。
常见的摘要算法有MD5、SHA1、SHA256、SHA512等。
关于摘要,有几点需要你明白的:
- 摘要算法,是把任意长度的信息,映射成一个定长的字符串。
- 摘要算法,两个不同的信息,是有可能算出同一个摘要值的。
- 摘要算法与加密算法不同,不存在解密的过程。
- 摘要算法不用于数据的保密,而是用于数据的完整性校验。
3.2 数字签名
摘要经过私钥的加密后,便有了一个新的名字 -- 数字签名。
- 签名 是在发送方,这是一个加密的过程。
- 验签 是在接收方,这是一个解密的过程。
那搞懂数字签名的意义是什么?只要回答下面两个问题即可。
第一个问题,有了信息摘要,为何还要有数字签名?
答:信息摘要,虽然也不可逆,但却容易却被伪造。所以信息摘要只用于校验完整性,而要保证信息摘要的正确性,就要依靠数字签名啦。
数字签名的签名和验签是非对称加密,其他人除非拿到私钥,不然没法伪造。
第二个问题,为什么不对内容直接加密,而是对摘要进行加密。
答:由上面我们知道了非对称加密的速度非常慢,如果传输的数据量非常大,那这个加密再解密的时间要远比网络传输的时间来得长,这样反而会得不偿失。
如果我们对传输的内容只有完整性要求,而安全性没有要求(意思是传输的内容被人知道了也没关系)。那就可以对摘要进行加密,到客户端这里解密后得到摘要明文,再用这个摘要明文与传输的数据二次计算的摘要进行比较,若一致,则说明传输的内容是完整的,没有被篡改。
3.3 数字证书
在数字签名那里,不知道你有没有发现一个问题?
数字签名是非对称加密,服务端有一个私钥,客户端一个公钥,只有这两个对上了验签。
那假如说你(客户端)拿到的公钥并不是服务端给的呢,而是黑客塞给你的呢?而你却把这个假公钥当成真的,那么当你使用这个假公钥加密一些敏感信息时,黑客就可以截取你的这段信息,由于这信息是用黑客自己的公钥加密的,这样一来,黑客拿自己的私钥就能解密得到你的敏感信息。
这就是问题所在。
要解决这个问题,其实只要保证『公钥』是可信的。只有服务端发给你的公钥你才能拿,而坏人给你的公钥,你要懂得识别并丢弃它。
数字证书就应运而生了。
要理解数字证书,同样只要搞懂两个问题即可。
- 数字证书是什么东西?其实它就是一个 .crt 文件
- 数字证书是谁颁发的?由权威证书认证机构颁发,一般我们简称为 CA 机构
- 数字证书如何申请的?或者说如何颁发的?
为了让你理解这一过程,我画了下面这张图:
- 在自己的服务器上生成一对公钥和私钥。然后将域名、申请者、公钥(注意不是私钥,私钥是无论如何也不能泄露的)等其它信息整合在一起,生成.csr文件。
- 将这个.csr文件发给CA机构,CA机构收到申请后,会通过各种手段验证申请者的组织信息和个人信息,如无异常(组织存在,企业合法,确实是域名的拥有者),CA就会使用散列算法对.csr里的明文信息先做一个HASH,得到一个信息摘要,再用CA自己的私钥对这个信息摘要进行加密,生成一串密文,密文即是所说的签名。
签名+csr文件中的明文信息,即是证书。
CA把这个证书返回给申请人。
评论 (0)