欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

加密、签名、证书基本概念

程序员文章站 2022-07-28 13:09:32
1.非对称加密 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。 因为加密和解密使用的是两个不同的密钥 ......

1.非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

工作原理

  • a要向b发送信息,a和b都要产生一对用于加密和解密的公钥和私钥。
  • a的私钥保密,a的公钥告诉b;b的私钥保密,b的公钥告诉a。
  • a要给b发送信息时,a用b的公钥加密信息,因为a知道b的公钥。
  • a将这个消息发给b(已经用b的公钥加密消息)。
  • b收到这个消息后,b用自己的私钥解密a的消息。其他所有收到这个报文的人都无法解密,因为只有b才有b的私钥。

rsa算法

rsa加密算法是一种非对称加密算法

rsa是三位开发者姓氏开头字母拼在一起组成的。

2.对称加密

所谓对称,就是采用这种加密方法的双方使用方式同样的密钥进行加密和解密。

密钥是控制加密及解密过程的指令。

算法是一组规则,规定如何进行加密和解密。

优缺点

由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。

加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

工作原理

  • 数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。
  • 接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
  • 在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。

aes

高级加密标准(英语:advanced encryption standard,缩写:aes)

这个标准用来替代原先的des

des全称为data encryption standard,即数据加密标准,是一种使用密钥加密的块算法

aes属于对称加密方法

3.密码散列函数

密码散列函数(cryptographic hash function),又译为加密散列函数,是散列函数(哈希函数)的一种。

它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。

这种散列函数的输入数据,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。

特点

  • 对于任何一个给定的消息,它都很容易就能运算出散列数值
  • 难以由一个已知的散列数值,去推算出原始的消息
  • 在不更动散列数值的前提下,修改消息内容是不可行的
  • 对于两个不同的消息,它不能给与相同的散列数值

md5

md5消息摘要算法(英语:md5 message-digest algorithm),一种被广泛使用的密码散列函数

可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

sha家族

安全散列算法(英语:secure hash algorithm,缩写为sha)是一个密码散列函数家族,是fips所认证的安全散列算法。

能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。

家族成员

  • sha家族的五个算法,分别是sha-1、sha-224、sha-256、sha-384,和sha-512
  • sha-1在许多安全协定中广为使用,包括tls和ssl、pgp、ssh、s/mime和ipsec
  • sha-1的安全性如今被密码学家严重质疑;后四者有时并称为sha-2,至今尚未出现对sha-2有效的攻击

4.证书机制

  • 引入一个公正的第三方
  • 当某一方想要发布公钥时,它将自身的身份信息及公钥提交给这个第三方
  • 第三方对其身份进行证实,如果没有问题,则将其信息和公钥打包成为证书(certificate)
  • 而这个公正的第三方,就是常说的证书颁发机构(certificate authority)
  • 当我们需要获取公钥时,只需要获得其证书,然后从中提取出公钥就可以了

解决问题:

通常情况下,获取外部平台的公钥时,除非对方手把手将公钥交给我们,否则公钥在网络中传递时,可能被篡改

5.数据安全传输条件

数据传输安全要满足的要求:

  • 消息的发送方能够确定消息只有预期的接收方可以解密(不保证第三方无法获得,但保证第三方无法解密)。
  • 消息的接收方可以确定消息是由谁发送的(消息的接收方可以确定消息的发送方)。
  • 消息的接收方可以确定消息在途中没有被篡改过(必须确认消息的完整性)。

如何实现?

假设有两组四个密钥

a的公钥(pub_a),a的私钥(pri_a);b的公钥(pub_b),b的私钥(pri_b)

公钥一般用来加密,私钥用来签名

a发送消息

  • 利用加密散列函数(sha-2、md5)对要发送的消息进行运算,单向生成消息摘要
  • a用自己的私钥(pri_a)对消息摘要进行签名
  • a用b的公钥(pub_b)对消息和签名后的消息摘要进行加密

b接受消息

  • b用自己的私钥(pri_b)解密a用b的公钥(pub_b)加密的内容
  • 解密后的内容分为两部分,一部分是消息,一部分是签名后的消息摘要
  • b用a的公钥(pub_a)解签a用a自己私钥(pri_a)签的签名
  • 对解密后的消息,进行加密散列函数运算,生成新的消息摘要,对比解签后的消息摘要,判断是否一致

非对称加密尽可能的保证了,消息在网络传输过程中,即使被截取,也无法被解密;

对消息摘要解签的过程,要用到发送方的公钥,这样也就确定了消息的发送方;

消息摘要的前后对比,保证了消息的完整性。

非对称加密是一种很耗时的操作,而对称加密效率虽然高,但不安全。

我们可以结合使用。

利用非对称加密,加密(签名)消息摘要和对称加密中的密钥;利用对称加密方式,加密消息数据

偷了一幅图:

加密、签名、证书基本概念

这篇博客写的很详细,图偷他的:

加密、签名和ssl握手机制细节

图中利用私钥,加密摘要信息生成数字签名,就是 签名 的过程。

参考

加密和签名的区别:

签名、加密、证书的基本原理和理解:https://www.cnblogs.com/caersi/p/6720789.html

加密、签名和ssl握手机制细节

还有一篇,关于前后端代码层面的,可以看一下:

前后端api交互如何保证数据安全性https://mp.weixin.qq.com/s?__biz=mziwmdy0nzk2mw==&mid=2650319474&idx=1&sn=58d93748e1fce98a49378f611584dac2&chksm=8ef5fe06b982771076064fdca41117a5aadf782f7a2cecb7ca1b6208fadbe4103ade35bafdf7&scene=21#wechat_redirect

api数据加密框架monkey-api-encrypthttps://mp.weixin.qq.com/s?__biz=mziwmdy0nzk2mw==&mid=2650319952&idx=1&sn=7cc80ab7ed6f3e1df48c23b245372ba8&chksm=8ef5f824b9827132f60d34dbe6915fe0528a2c56a8554b8f49ac797f372822d212f4f2a5f642&mpshare=1&scene=1&srcid=01163fldzck0cq47ty4zg0da&pass_ticket=sn9gxtq46kclz60j3cs6mnkxjxgssgkre48qz7idtxou200ohd5v420i5wmypewp#rd