zoukankan      html  css  js  c++  java
  • 浅显易懂地解释公钥私钥数字签名数字证书

    公钥私钥与数字签名数字证书

    英文文章原文:http://www.youdzone.com/signature.html,在此文章基础上做了一些扩充
    公钥加密,私钥解密;私钥签名,公钥验签。

    私钥对摘要(某明文的hash值)进行加密,加密后产生数字签名。

    Bob 有两把钥匙。Bob 的密钥之一称为公钥,另一个称为私钥。

    Bob 的公钥可供任何需要它的人使用,但他将私钥留给自己。密钥用于加密信息。Bob 的两个密钥中的任何一个都可以加密数据,另一个密钥可以解密该数据。

    Susan可以使用 Bob 的公钥加密消息。Bob 使用他的私钥来解密消息。Bob 的任何同事都可以访问 Susan 加密的消息,但没有 Bob 的私钥,数据就毫无价值。

    现在Bob决定给Pat写一份信,信件的内容不用加密,但是要保证Pat收到信件后,能够确认信件的确是Bob发出的。Bob将信件hash计算一下,得到一串消息摘要,也叫hash值。

    然后对消息摘要使用自己的私钥进行加密,加密后的结果,就是“数字签名”。

    现在,Bob把数字签名附在文档之后一起发给Pat。

    数字签名:私钥对某公开内容的hash值进行加密。

    Pat 收到消息后使用 Bob 的公钥,将数字签名将其改回消息摘要。如果这有效,则证明 Bob 签署了该文件,因为只有 Bob 拥有他的私钥。Pat 之后将文档数据进行hash计算,如果消息摘要与解密签名时创建的消息摘要相同,则 Pat 知道数据没有更改。

    既然Bob的公钥是公开的,Doug可以冒充Bob,将他自己的公钥发给Pat,让Pat误认为收到的公钥就是Bob的,然后就可以冒充Bob给Pat发消息了。所以出现新的问题,如何确保公钥不被冒充?

    使用权威机构(CA)认证的公钥数字证书可以确保公钥不被冒充。通过查看数字证书,可以知道该证书是由哪家权威机构签发的,证书使用人的信息,使用人的公钥等信息。现在 Bob 的同事可以检查 Bob 的可信证书,以确保他的公钥真正属于他。事实上,Bob 公司的任何人都不会接受不存在 CA机构生成的证书的签名。 CA机构有权在私钥被泄露或不再需要时撤销签名。

    证书生成过程:先生成一个文件D,文件大概是:

    • 公钥内容

    • 签发者ID----谁签发的证书

    • Subject----也就是这个证书签发给谁。这里subject和签发者ID相同。

    • 有效期

    • 其他信息

      然后使用hash算法,对以上内容D进行hash计算,得到一个摘要H(hash值)。然后使用签发机构的私钥对摘要H进行RSA加密,得到数字签名S。然后将文件D和数字签名S连成一个文件,这个文件就是数字证书。所以数字证书里,包括证书持有者的身份信息,证书信息,证书持有人的公钥,以及签名信息。

    CA的公钥已经添加到操作系统中了。Bob将公钥以及身份信息发送给CA机构。机构对Bob的身份进行验证,确保公钥和Bob的信息准确无误。CA机构使用自己私钥对持有人公钥与持有人信息进行数字签名,生成数字证书。使用自己的私钥对摘要进行数字签名,放到数字证书中。Susan收到证书之后,利用CA机构公钥对数字签名解析,得到摘要,然后对Bob公钥与Bob信息进行hash计算,查看计算得到的hash值是否与摘要一致,一致则说明公钥未被篡改,不一致则说明已被篡改。

    未经作者同意请勿转载

    本文来自博客园作者:aixueforever,原文链接:https://www.cnblogs.com/aslanvon/p/15337936.html

  • 相关阅读:
    git打补丁、还原补丁
    mysql 查两个表相同的值
    系统更新后vs2012无法打开方案资源管理器
    Node.js之Buffer
    html元素固定
    在windows上用netsh动态配置端口转发
    Git忽略规则及.gitignore规则不生效的解决办法
    MySQL5.7.10 初始化失败error
    Nginx和PHP-FPM的启动、重启、停止脚本分享
    centos添加nginx为系统服务
  • 原文地址:https://www.cnblogs.com/aslanvon/p/15337936.html
Copyright © 2011-2022 走看看