zoukankan      html  css  js  c++  java
  • 数字签名和数字证书技术简介(两)

    信息摘要、数字签名

    根据文章,绍了的非对称密钥算法:

    http://blog.csdn.net/u014419512/article/details/26290821

    如今我们能够继续我们的场景:

    如果有一天。Alice收到了一份署名为Bob的文件。Alice希望可以确认这份文件一定是来自Bob;另外Alice希望可以确信。这份文件在传输过程中并没有被它人篡改。那么基于非对称密钥算法我们应该怎么做?

    确认文件一定来自于Bob,事实上就是Bob无法否认自己发送过这份文件。信息安全中称作不可抵赖性。还有一方面,确信文件并没有中途被篡改,则称作不可篡改性

    在非对称密钥算法中提到,公钥加密的内容使用私钥能够解密。相同的,基于私钥加密的内容使用公钥也能够解密,两者一一相应。

    因此我们能够非常easy想到。假设Bob利用自己手里的私钥对文件进行加密后,传输给AliceAlice再通过公钥库中Bob的公钥进行解密,则能够证明文件一定是由Bob发出(由于仅仅有Bob持有私钥)。

    另外,由于传输的是密文,假设能够使用公钥解密,同一时候也证明了文件并没有中途被篡改。

    这种做法事实上已经同一时候满足了不可抵赖性和不可篡改性。

    然而。因为传输的文件可能非常大,为了证明文件的不可抵赖性和不可篡改性,须要对整个文件进行加密,因为非对称算法效率较低。这样做的代价太大。因此常规的做法是用到信息摘要数字签名的方式。

    所谓信息摘要,事实上就是某种HASH算法。将信息明文转化为固定长度的字符,它具有例如以下特点:

    不管输入的消息有多长。计算出来的消息摘要的长度总是固定的

     

    用同样的摘要算法对同样的消息求两次摘要,其结果必定同样;

     

    一般地。仅仅要输入的消息不同。对其进行摘要以后产生的摘要消息也差点儿不可能同样;

     

    消息摘要函数是单向函数。即仅仅能进行正向的信息摘要,而无法从摘要中恢复出不论什么的消息

     

    好的摘要算法,没有人能从中找到碰撞。尽管碰撞是肯定存在的。

    即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息。是它们的摘要同样。

     

    一般的,我们将信息的摘要也称作信息的指纹。如同指纹的含义。同样的信息一定会得同样的指纹,而仅通过指纹又无法还原出原始信息。眼下基本的摘要算法有MD5SHA1

     

    当有了信息摘要技术以后。基于BobAlice发送文件的场景,我们能够进行例如以下的操作:


    第一步:

    ① Bob将原始的信息进行一次信息摘要算法,得到原始信息的摘要值;

     

    ② Bob使用自己的私钥,对该摘要值进行加密。得到信息摘要的密文;

     

    ③ Bob将原始文件和摘要值的密文一起发送给Alice

     

    ④ 一般的,我们将原始文件和摘要密文称作Bob对原始文件的签名结果。



    第二步:

    ① 当Alice接收到Bob传输的信息(原始文件。信息摘要密文)后。使用Bob的公钥将摘要密文解密,得到信息摘要明文;

     

    ② 使用信息摘要算法,取原文的摘要信息,获取原始文件摘要信息。

     

    ③ Alice比較解密后的摘要信息和取得的摘要信息。

    假设同样,则能够证明文件一定由Bob发送,而且中途并没有经过不论什么篡改。

    一般将这个过程称作验签。

     

    所谓数字签名,就是对原始文件的“指纹”进行了私钥加密。这样。就可以保证文件的特征(摘要值)一定经过了私钥的加密。同一时候因为信息摘要的长度普遍不长(MD5128位。SHA1主要为256位),也并没有带来太大的开销。

    如同对称密钥算法。在大部分开发语言中。基于非对称算法的数字签名。数字加密算法。也都进行了一定的封装。例如以下链接就比較具体的描写叙述了基于JCE怎样实现数字签名、加密、验证等:http://blog.csdn.net/centralperk/article/details/8538697

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    web前端
    touch.js——手机端的操作手势
    js实现touch移动触屏滑动事件
    Javascript闭包(Closure)
    javascript的垃圾回收机制与内存管理
    浏览器渲染页面
    Web前端面试题目汇总
    gulp VS grunt
    [编写高质量代码:改善java程序的151个建议]建议88 用枚举实现工厂方法模式更简单
    [编写高质量代码:改善java程序的151个建议]建议86,87 default值,valueOf
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4847184.html
Copyright © 2011-2022 走看看