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算法压缩。

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

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5517770.html
Copyright © 2011-2022 走看看