zoukankan      html  css  js  c++  java
  • 现代密码学应用的范例-PGP

    PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。

    产生背景:

    电子邮件在传输中使用SMTP协议存在这样的问题

    1.无法保证邮件在传输过程中不被人偷看

    2.无法确认来源

    3.无法确定邮件是否在传输过程中被篡改

    4.当邮件被发到错误地址,可能造成信息泄漏

    PGP对这些问题提供一个安全电子邮件解决方案,具有以下功能

    1.消息加密

    2.数字签名

    3.完整性确认

    4.数据压缩

    PGP使用的对称算法: IDEA, DES, Triple DES, CAST, AES, Twofish

    PGP使用的不对称算法: RSA, DH

    加密流程:

    用会话钥匙加密明文,然后用公共钥匙加密会话钥匙,讲这两个加密出来的内容打包放在一起传输。

    解密流程:

    将收到的数据(密文和加密后的会话钥匙)分开,用私钥来解密加密后的会话钥匙,得到会话钥匙,用会话钥匙来解密密文。

    会话钥匙加密解密用的同一把,所以是对称加密算法。另外的公钥加密,私钥解密,是公钥加密算法。

    PGP整合了对称加密和公钥加密的方案。

    保持了对称加密算法速度快的特点,又具有公钥算法密钥分配方便的特点。

    PGP数字签名:

    签名算法:RSA+MD5, RSA+ SHA1, DSS+SHA1

    数字签名过程:

    数字签名是用私钥加密,就可以确认消息来源和保证完整性,因为私钥是个人持有的且是对明文签名。

    但是直接对明文进行数字签名存在一些问题

    1.速度非常慢

    2.生成大量的数据

    PGP的解决办法是对明文使用一种Hash函数(PGP使用Hash函数: MD5, SHA1),产生定长的数据,称为消息摘要。使用签名算法对摘要签名,然后将签名和明文放在一起。

    下面来说说公钥密码算法的一个重要问题,如何传播公钥?

    假设有这样一个场景,A想写信给B,A先要得到B的公钥,A在某处查到一个公钥以为是B的,实际上是C的公钥,是C有意假冒B,C窃听到密信,然后用对应的私钥解密,C看到了信的内容。此时,C已经假冒B成功了,C再给A写一封信,A仍用B的假公钥来打开C的信,A读到C假冒B写的信。

    因此,公钥的分发是很重要的。

    公钥分发模型:

    1.金字塔模型

    这个模型的基础是要有上层的机构是值的信赖的机构,由上层机构来分发公钥,需要公钥的时候,向上层机构询问。

    2.信任网络模型(PGP采用):

    PGP数据证书:

    证书包含拥有者的信息

    证书可以自己创建和声明

    证书上包含自签名

    证书可能包含多个人的签名

    证书正确性检查

    1.手工途径:要求接收者亲自把公钥交给你

          检查证书的指纹

    2.信任途径:相信已经进行了检查过程的第三方结果(上面可能有一些签名,保证证书上的公钥属于某个人)

    私钥保护问题:

    PGP利用一个Passphrase来获得自己的私钥。

    压缩预处理问题:

    PGP对明文加密前进行压缩处理,使用PKZIP算法压缩。

    好处:压缩后比原来的明文更短,节省网络传输的时间;压缩相当于一次变换,信息变的杂乱,对攻击的抵御能力更强。

  • 相关阅读:
    javascript继承(对象冒充的多重继承)
    jQuery联动日历(一)
    jQuery联动日历(二)
    jQuery放大镜
    javascript快速排序
    jQuery倒计时
    打造一个自定义的echarts组件
    使用async返回promise<pending>状态的解决
    递归组件的小心得
    数论
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5517770.html
Copyright © 2011-2022 走看看