zoukankan      html  css  js  c++  java
  • [转]密码技术-实现数字信封和数字签名

    密码技术-实现数字信封和数字签名

    转载自:http://hi.baidu.com/king0332/item/ea9b19da597aec17e1f46f5b

      

     

    数字信封是公钥密码体制在实际中的一个应用,是用加密技术来保证只有规定的特定收信人才能阅读通信的内容。
     
      在数字信封中,信息发送方采用对称密钥来加密信息内容,然后将此对称密钥用接收方的公开密钥来加密(这部分称数字信封)之后,将它和加密后的信息一起发送给接收方,接收方先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。这种技术的安全性相当高。数字信封主要包括数字信封打包和数字信封拆解,数字信封打包是使用对方的公钥将加密密钥进行加密的过程,只有对方的私钥才能将加密后的数据(通信密钥)还原;数字信封拆解是使用私钥将加密过的数据解密的过程。

    对称加密和非对称加密各有千秋。对称加密实现简单,加解密速度快,非对称加密算法牢固,容易实现数字签名,但是加解密速度稍慢,所以一般情况下,将对称加密和非对称加密结合起来应用,就可以达到良好的加密效果。典型的应用之一就是电子信封。

    1、我们先引入几个符号和一个概念

    M 明文信息 C 密文信息 E 加密算法  D 解密算法  Ke 公钥  Kd 私钥

    H 散列串 SIGN 签名

    然后再介绍一个叫做MD(message digest)消息摘要的东西

    消息摘要就是通过单向散列函数(Hash函数)将信息运算为一个固定长度的散列串,不管你的文件长度是多少,经过hash函数的运算生成的散列串的长度一定是固定的大小,比如著名的md5,生成的就是128位的串。

    消息摘要有什么用呢,它可以实现对文件的签名,由于不同的文件hash后得到的散列串是不一样的,所以可以用来判断文件是否被改动,比如病毒修改了某个文件,这个文件的大小虽然没有变,但是hash函数计算出来的散列串肯定是不一样的。

    2、对数据进行加密,然后发送

    第一步,先用设备生成一个对称密钥,然后将这个密钥用B的公钥Ke进行加密,生成密钥包Ek。

    第二步,对文件用hash函数计算出H=hash(M).然后再加上时间戳t,使用B的公钥ke进行加密,生成签名SIGN。这里加上时间戳的目的是为了防止重放攻击,就是如果窃听方对窃听到的信息进行了重放,但是时间不对,我们就可以觉察到信息传送是否出现了问题。

    第三步、将数字签名SIGN和文件用对称密钥进行加密,生成密文数据C。

    最后,将第一步产生的密钥包Ek和密文C发送给B。

    3、解密的过程

    第一步,B用自己的私钥Kd解密收到的密钥包Ek,得到A使用的对称加密密钥。

    第二步,用对称密钥对收到的密文C进行解密。

    第三步,用hash函数计算文件的散列串,得到H1。

    第四步,用私钥解密签名SIGN,得到H和时间戳。

    最后,用H和H1对比,如果两者相等,则说明文件在传递的过程中没有被更改,如果时间戳标记的也正确的话,那么此次信息安全传递完成。

    五、实现不可抵赖的数字签名

    1、A用它自己的私钥加密信息M得到C1,然后用B的公钥加密信息C2,发送给B。

    2、B收到信息后,用它的私钥解密,得到C1这样实现了第一个功能,就是确保信息只能被B正确解读,因为别人没有B的私钥,所以只有B能解密该信息。

    3、得到C1后,再用A的公钥解密,得到明文信息M。这里实现了数字签名的第二个功能,因为只有使用A的公钥才能解密这个信息(C1是使用A的私钥加密 的),这样就保证了A的不可抵赖,就是说,这个信息一定是A发出的。因为用A的公钥对信息成功的进行了解密。

    所以,使用非对称算法,可以成功的实现数字签名。对成算法和非对称算法结合起来应用,就可以实现文件的安全传递。

      

     

    数字信封是公钥密码体制在实际中的一个应用,是用加密技术来保证只有规定的特定收信人才能阅读通信的内容。
     
      在数字信封中,信息发送方采用对称密钥来加密信息内容,然后将此对称密钥用接收方的公开密钥来加密(这部分称数字信封)之后,将它和加密后的信息一起发送给接收方,接收方先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。这种技术的安全性相当高。数字信封主要包括数字信封打包和数字信封拆解,数字信封打包是使用对方的公钥将加密密钥进行加密的过程,只有对方的私钥才能将加密后的数据(通信密钥)还原;数字信封拆解是使用私钥将加密过的数据解密的过程。
  • 相关阅读:
    PHP面试题(二)
    机房的带外管理---远程管理你的开发测试机
    《Qt编程的艺术》——8.2.1 在Designer中使用View类
    一步一步学android之事件篇——单击事件
    OC类方法和实例方法 及常用的for/in方法
    终止imp/exp和expdp/impdp进程运行的方法
    java MessageFormat 应用 和 疑惑
    菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
    视频监控之VSCloud版本计划
    ural 1136. Parliament
  • 原文地址:https://www.cnblogs.com/Crysaty/p/5844774.html
Copyright © 2011-2022 走看看