一文读懂:密钥-加密算法-数字证书相关概念

概念

秘钥和密钥的区别

秘钥密钥没有本质区别,秘钥不是专业说法,按字面意思理解即可。但请注意,在实际应用中,更专业的说法是密钥,而不是秘钥。秘钥可能是某些特定领域或语境下的俗称或误称。

加密和解密

加密

  • 数据加密的基本过程,就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为 “密文”。通过这样的途径,来达到 保护数据 不被非法人窃取、阅读的目的。

解密

  • 加密的逆过程为解密,即将该“编码信息”转化为其原来数据的过程。

签名

使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。

摘要

又称指纹。对需要传输的文本,做一个HASH计算(指纹算法),一般采用SHA1,SHA256来获得。

签名验证

签名验证流程通常包括以下几个步骤:

  1. 生成数字签名。这通常涉及使用公钥私钥对文档进行签名。首先,使用RSA算法生成公钥和私钥,其中私钥由密钥持有者保存,而公钥可以对外发布。然后,准备待签名的文档,并使用哈希算法(如SHA-256)生成该文档的摘要(即文档摘要)。接着,使用签名者的私钥对文档摘要进行加密,得到数字签名。
  2. 传递签名信息。将签名者的公钥、数字签名以及原始文档传递给验签者。
  3. 验证数字签名。验签者收到签名者发过来的公钥、数字签名和文档后,使用签名者的公钥解密数字签名,以获得解密后的文档摘要。然后,验签者再次使用相同的哈希算法对文档生成新的摘要。最后,比较这两个摘要是否完全一致。如果一致,则验签成功,表明文档未被篡改;如果不一致,则验签失败,表明文档可能已被篡改。

密钥对

在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。

公钥和私钥

公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。

私钥用来解密公钥加密的数据。

  • 公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。

  • 如果使用 公钥 对数据 进行加密,只有用对应的 私钥 才能 进行解密

  • 如果使用 私钥 对数据 进行加密,只有用对应的 公钥 才能 进行解密

数字信封

在数字信封中,信息发送方采用对称密钥来加密信息内容,然后将此对称密钥用接收方的公开密钥来加密(这部分称数字信封)之后,将它和加密后的信息一起发送给接收方,接收方先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。

这种技术的安全性相当高。数字信封主要包括数字信封打包和数字信封拆解,数字信封打包是使用对方的公钥将加密密钥进行加密的过程,只有对方的私钥才能将加密后的数据(通信密钥)还原;数字信封拆解是使用私钥将加密过的数据解密的过程。

数字证书

数字证书是Https实现安全传输的基础,它是由权威的CA机构颁发的,证书的主要内容有:公钥(Public Key)ISSUER(证书的发布机构)Subject(证书持有者)证书有效期签名算法指纹(摘要)指纹算法(Hash算法)

在网络中,要想实现自己的数据能够安全地传输,就必须向权威的CA机构申请数字证书,有了数字证书就相当于有了一把安全秘钥(密钥)。

先认识一下证书是长什么样的

下面是CSDN博客的证书内容:

可以看到公钥是一串很长的2048 Bits的字符串,同时也可以看到<使用者>的内容包含了csdn.net网址,在后面验证URL链接是否正确的时候用到,还有颁发者、有效期、签名算法等等。当然还有指纹及指纹算法等其他内容,我们滚动到下面看看另一个截图。

上面展示了CSDN网站的CA证书内容,颁发者是GeoTrust,它就是传说中的权威的CA机构了。这里特别说明一下,CA机构除了给别人颁发证书以外,它也有自己的证书,这个证书是机构自己颁发给自己的,为了区分我们称它为根证书,根证书也有自己的公钥和私钥,在本文中我们称之为根公钥和根私钥,根公钥和加密算法是对外公布的,而根私钥是CA机构自己绝对保密的。这个根证书在验证证书的过程中起着核心的作用。

(如何查看根证书:谷歌浏览器 -> 设置 -> 安全和隐私设置 -> 管理证书)

在受信任的根证书颁发机构中我们看到一系列的CA机构,如上面CSDN的证书的颁发者GeoTrust机构也在其中,这些权威机构的根证书都是浏览器预先嵌入到其系统中的。

点开看看GeoTrust的根证书,可以发现颁发者和使用者都是一样的,其中里面的公钥在验证数字证书的时候非常关键。

数字签名详解

概念

数字签名:对原始信息(如文件或消息)使用哈希函数生成一个哈希值。然后,发送者使用自己的私钥对哈希值进行加密,生成数字签名。

  • 哈希函数:哈希函数算法是一种数学函数,它接收输入(或“消息”)并返回一个固定长度的字符串,通常是一个短的、固定长度的哈希值,这个值通常用一个十六进制的数字串来表示。

    • 常见的哈希函数算法:MD5 (Message Digest Algorithm 5)SHA-1 (Secure Hash Algorithm 1)SHA-2 (Secure Hash Algorithm 2):SHA-256、SHA-384、SHA-512等(项目中运用偏多)、SHA-3 (Secure Hash Algorithm 3)等等

下述场景为:使用数字签名和数字证书来保证数据防篡改的的场景

1、鲍勃有两把钥匙,一把是公钥,另一把是私钥。

2、鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

3、苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

4、鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

5、鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

6、然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

7、鲍勃将这个签名,附在信件下面,一起发给苏珊。(注:信件一直是密文形式 )

8、苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9、苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10、复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

11、后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

12、鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

13、苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。


密钥分类

  • 密钥分为两种:对称密钥非对称密钥
  • 密钥指的是私钥或者公钥 —> 密钥 = 私钥/公钥
  • 密钥对,针对的是非对称加密—> 密钥对 = 私钥+公钥

对称加密

对称加密算法 是应用较早的加密算法,又称为 共享密钥加密算法。在对称加密算法中,使用的密钥只有一个,发送接收双方都使用这个密钥对数据进行 加密解密。这就要求加密和解密方事先都必须知道加密的密钥。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。

  • 数据加密过程:在对称加密算法中,数据发送方将明文 (原始数据) 和加密密钥 一起经过特殊加密处理,生成复杂的加密密文进行发送。

  • 数据解密过程:数据接收方收到密文后,若想读取原数据,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。

非对称加密

又称公钥密钥加密。它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。

例子

甲方生成 一对密钥 并将其中的一把作为 公钥 向其它人公开,得到该公钥的 乙方 使用该密钥对机密信息 进行加密 后再发送给甲方,甲方再使用自己保存的另一把 专用密钥 (私钥),对 加密 后的信息 进行解密。

在实际的应用中,人们通常将两者结合在一起使用,例如,对称密钥加密系统用于存储大量数据信息,而公开密钥加密系统则用于加密密钥


浅谈常见的七种加密算法及实现

浅谈常见的七种加密算法及实现


结论

具体说来,涉及到密钥相关的东西。密钥有公钥和私钥之分。

  • 那么这里一共有两组四个密钥:A的公钥(PUB_A),A的私钥(PRI_A);B的公钥(PUB_B),B的私钥(PRI_B)。
  • 公钥一般用来加密,私钥用来签名。
  • 公钥和私钥都可以加密和解密

公钥和私钥唯一对应,用某个私钥签名过得内容只能用对应的公钥才能解签验证;同样用某个私钥加密的内容只能用对应的公钥才能解密。

A向B发送信息的整个签名和加密的过程如下

  • A先用自己的私钥(PRI_A)对信息(一般是信息的摘要)进行签名。
  • A接着使用B的公钥(PUB_B)对明文数字签名进行加密后发送给B。

当B接收到A的信息后,获取信息内容的步骤如下:

  • 用自己的私钥(PRI_B)解密A用B的公钥(PUB_B)加密的内容,得到明文数字签名
  • 得到解密后的明文后用A的公钥(PUB_A)解签A用A自己的私钥(PRI_A)的签名。

从而整个过程就保证了开始说的端到端的唯一确认。A的签名只有A的公钥才能解签,这样B就能确认这个信息是A发来的;A的加密只有B的私钥才能解密,这样A就能确认这份信息只能被B读取。


参考文章

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值