zoukankan      html  css  js  c++  java
  • 公私钥(证书)理解

    公私钥加解密、加签、验签是在与各类银行、第三方机构进行对外通讯中,必然涉及一些知识。PS:我这里提到的密钥概念可以理解为一个String串就行(也有二进制形式的,同理),比如你把.cer文件以文本方式打开其实就是一个String串而已。

    首先我们讨论下加密方式的分类:对称加密和非对称加密。

    1、  对称加密:也就是加密和解密所使用的密钥是同一个,常用到的有AES、DES、3DES等等,这类加密方式容易理解,不过多赘述。

    2、  非对称加密:加密和解密所使用的密钥是一对,也就是两个,若A、B是一对密钥,那么加密使用A则解密只能使用B,加密使用B则解密只能使用A。这也就是公私钥的原型。

    接下来我们来说公私钥分别是用来干嘛的,通常我们说公钥用来加密,私钥用来解密,但其实这不是必须的,对于程序而言,你用什么加密,用什么解密并不重要,只要是一对就行。所以也可以用私钥来加密,公钥来解密。那为什么我们不这么用呢?我们先来看看公私钥的定义,公钥,如字面意思,就是公开的、甚至可以发布在网上的密钥,每个人都可以拿到它,称之为公钥;私钥则相反,只有一个人能拥有,并且是保密的。那么问题就解决了,如果你拿着私钥加密,发出去的信息地球人都能解开,那……,但是如果用公钥加密,发出去的信息只有你一个人能解开,那就是有意义的,,没毛病吧。所以结论就是:公钥加密,私钥解密。

     加解密问题解决了,但是网络通讯远没有这么简单,报文信息被黑客拦截了怎么办?拦截后黑客替换成他的报文,还能用公钥继续加密发出去,那不就完了,所以我们还需要个方式来验证发送方的身份,也就是我们经常听说的数字签名。

    数字签名和加解密不同,是对一段信息做hash算法(MD5,RSA等)运算,生成唯一标识该信息的一个特征串,比如你小时候背课文,背完让家长签名(加签),然后第二天老师检查签名(验签),老师就会认为你完成了作业。老师认为该签名唯一且只能由你家长生成,所以认同你背过课文。(虽然你可以模仿)。

    那么我们要做的就是对我们的密文信息再进行一次签名,将签名得到的签名特征串附在原文后,那么对方接收到报文以后,如果能验签通过,那就能确定消息是你发的了。

    确定了数字签名的作用了,我们分析下到底是公钥加签呢还是私钥加签呢?如果你用公钥签名,那么地球人都能签出一样的特征串,而只有一个人能验签,那又陷入僵局……,但如果用私钥签名,那么只有你一个人能唯一签出该特征串,地球人都能验签,那就都能确定该信息是你发出的,很权威有不有!所以结论就是:私钥加签,公钥验签。

    所以一般来说,如果用到的是非对称加密,那么你和第三方之间就有两对公私钥,各自持有对方的公钥和自己的私钥。网络通讯中我们一般用自己的私钥加签将报文,用第三方提供的公钥将报文中涉及安全隐私的部分加密,然后第三方会用我们提供公钥进行验签,验签通过后再用他们自己的私钥将报文加密部分解密。如果还需要响应返回,那么他们还将重复一遍我们这边的过程,我们这边也需要重复一边他们那边的过程,用他们提供的公钥验签返回回来的报文,并用自己的私钥解密隐私部分。这里又有个问题,既然公钥是公开的,你如何确定这个公钥是你的而不是别人的?这样一想,其实就变成了一个循环,没法证明绝对安全,鸡生蛋蛋生鸡的问题。

    其实在密码学中也是这样,你必须建立一个信赖点,不然任何都是无法信赖的。所以在此基础上,出现了一个可信任的第三方认证中心(CA),CA把你的公钥进行认证,并颁发一个数字证书给到你,该证书里面包含了你的公钥,而你给别人的公钥也替换成数字证书,别人拿到数字证书,看了下,确实是CA签发的,那么这里面的公钥就是你的,你是可信的。这里就又把大家所迷惑的一个概念理清楚了,证书就是经过认证的公钥。
    ————————————————
    版权声明:本文为CSDN博主「这个杀手带点冷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_32632367/article/details/82704568

    人生还有意义。那一定是还在找存在的理由
  • 相关阅读:
    Java中关系操作符==的学习以及与equals的对比
    关于alibaba.fastjson的使用
    给有C或C++基础的Python入门 :Python Crash Course 1
    快速幂基本模板
    断言封装及应用(有难度)
    断言封装之key检查及kv实战示例
    正则取值及断言实战示例
    关联实现下-jsonpath取值(有难度!!耗时长)
    关联实现上-jsonpath取值
    requests顺序执行实现
  • 原文地址:https://www.cnblogs.com/shiqi17/p/14700980.html
Copyright © 2011-2022 走看看