当前位置: 首页 > news >正文

【网络安全技术】电子邮件安全PGP,SMIME

一、PGP(Pretty Good Privacy

PGP是一种邮件加密手段,他在发邮件一方加密,然后发给发送方邮件服务器,发送方邮件服务器再发送给接收方邮件服务器,然后接收方再从接收方邮件服务器pop出来,这整个过程都是pgp加密过的,接收方拿到之后才会解密。

所以整体走的发邮件流程还是先前提到的SMTP那套,只不过在源加了密,在接收方解了密。

1.PGP加密流程

这个流程包括了Authentication 和 Confidentiality,看看他是怎么做的

首先邮件消息哈希之后用A的私钥签名,连接到原来的消息上,这一步做了认证。

然后刚才的消息加签名过压缩。

然后A自己生成一个session key,这个是对称加密,用来加密消息的,他用这个session key加密刚刚压缩完的东西,同时,他也需要把这个session key告诉B啊,他用B的公钥加密session key,然后把他连接到刚才用session key加密过的东西上,这一步提供了机密性。

然后这就是最终加过密的消息了。

所以说整个过程不管是认证还是加密,都是基于双方非对称密钥的安全的,因为如果非对称密钥被妥协了,那么整个流程就不安全了。

在考虑一个问题,压缩的目的是什么,为什么要在加签名之后,加密之前压缩?

首先压缩最根本的是为了减少传输的字节,其次,压缩同时消除了原文的统计特性,减少了被crypto analysis的风险。

在签名之后压缩,是基于签名的意义,那就是对数据完整性提供认证,而如果对压缩过后的信息签名,那虽然也能达到同样的效果,但是丢失了原本的含义。同时我认为这是某种设计理念,但是目前还不是很能理解。

在加密之前压缩,一方面是可以减少加密和解密的时间,另一方面就是刚才说的,如果压缩在加密,黑客拿到的是加密的压缩文件,是没法进行crypto analysis从而进行唯密文攻击的,而如果是先加密再压缩,黑客拿到了压缩的加密文件,那他只要解压缩之后,就可以进行crypto analysis从而进行唯密文攻击了。

还有一个比较扯淡的说法,是说,如果是先压缩再签名,那么接收方就需要存压缩文件来验证签名,尽管我看不出来这有什么问题。他还说,如果想不存压缩文件的话,那就需要解压缩之后再压缩,这更是扯淡,如果先压缩在签名,对称解密完就是签名和压缩文件,直接验证就好了,哪还需要重复压缩。

2.PGP解密

那就是刚才,拿到用公钥加密的session key和加密消息的连接,那就先拿自己的私钥把session key解出来。

然后就可以拿session key解密加密的压缩文件了。

然后再解压缩,拿到签名和原文,用A的公钥解签名,对原文做哈希,比对来验证签名,也就是数据完整性。

3.PGP提供的邮件适应性

因为之前说了,SMTP只传7-bit ASCII码,所以刚才那一套认证、加密走完之后的8-bit octets stream,也就是字节流,要想进SMTP,他需要转换成7-bit ASCII码。

它采用的是Radix-64 algorithm,他把原来的字节流的每6bit,映射成一个Radix-64的ASCII字符,包括26个大写字母(A-Z)、26个小写字母(a-z)、10个数字(0-9),以及两个额外的符号(通常是+/),或者从字节角度理解,就是把每3字节(24bit)映射成4个Radix-64的ASCII字符。

他还增加CRC。

所以看下面整体的PGP发送的格式,从下往上看,数据部分,签名部分,这两部分是对称加密的,然后上面就是对称加密的session key。整体的消息会过一遍64-radix。

这里的两个公钥上面都有一个id,这涉及下面要说的PGP的公钥管理。

4.PGP公钥管理

从上面的PGP流程可以看出,非对称密钥安全是整个加密安全的保障,因为对称密钥也要通过非对称加密来传。

PGP用户没人维护两个表,一个私钥表(Private-key ring)一个公钥表(Public-key ring),私钥表存自己的公私钥对,公钥表存别人的公钥id和公钥。

PGP每个用户可能有多个公私钥对。

私钥表比较好理解,每个entry如下,主要就是这个公私钥对的id,公钥,以及使用passphrase key加密的私钥。

这个passphrase key就相当于是对自己的私钥提供了一层额外的保障,黑客只有同时妥协了passphrase key和私钥表,才能有他的私钥。

公钥表较复杂,

除了key id,公钥,所有者id以外,还有一堆trust什么的,传统的对称密钥通过一个公认的CA签名来确保公钥的合法性,PGP系统里使用这些信任来确定,这里一个一个看。

Owner trust就是我是否相信这个人给别人签的名,当然这里是一个degree。

signature就是某个人给这个公钥签的名,signature trust就是我是否相信这个签名。

key legitimacy是PGP系统算出来的,就是通过所有拥有这个公钥对应签名的人的signature trust来算出来的。

5.总结

总结以上内容,再来看一版完整版的PGP发送和接收流程。

发送的时候,还是先hash,这里签名之前,先要找到私钥,那就是先选择key id,然后去私钥表里找到加密过的私钥,用Passphrase key来解出来私钥,再来签名,签完名再把这个id和签名一起连接到原来的消息上。

然后还是压缩。

然后生成session key,对压缩文件进行加密,之后要用B的公钥加密session key,首先要找到B的公钥,他选择一个B的公钥id,去公钥表里找到B的公钥,加密session key,再把这个公钥id和加密的session key以及加密后的消息连接,这就是最终的发送的东西了。

再来看解密,拿到之后,先拆开,处理session key部分,用这个公钥id去自己的私钥表里找到对应的加密过的私钥,然后用Passphrase key解密出来私钥,再用私钥来解密session key。

有了session key就可以解密了,解出来是压缩文件。

解压缩,出来是签名部分和原文部分。

先处理签名部分,根据这个A的key id,去自己的公钥表里找对应的A的公钥,然后解签名出来一个哈希值,同时自己在对原文做一遍哈希,对比是否一致。

以上就是完整的流程了。

二、SMIME

这个比较简单,和PGP类似,但没有那么复杂的钥匙管理。

发送方就是哈希出来一个消息摘要,私钥签名,然后生成一个content-encryption key,对称加密,AES-128加CBC,然后再用对方的公钥加密这个对称密钥,附上一起传过去。

解密就是先拆出来对称密钥,用自己的私钥解密,然后把用对称密钥解密消息,然后拆出来签名,用对方的公钥验证签名。

公钥管理采用X.509 v3公钥证书。

相关文章:

【网络安全技术】电子邮件安全PGP,SMIME

一、PGP(Pretty Good Privacy) PGP是一种邮件加密手段,他在发邮件一方加密,然后发给发送方邮件服务器,发送方邮件服务器再发送给接收方邮件服务器,然后接收方再从接收方邮件服务器pop出来,这整…...

CSS学习笔记整理

CSS 即 层叠样式表/CSS样式表/级联样式表,也是标记语言, 用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距)以及版面的布局和外观显示样式 目录 准备工作 Chrome调…...

SpringData自定义操作

一、JPQL和SQL 查询 package com.kuang.repositories;import com.kuang.pojo.Customer; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingR…...

【Java JVM】运行时数据区

JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的数据区域, 这些区域有着各自的用途。 根据《Java虚拟机规范》中规定, JVM 所管理的内存大致包括以下几个运行时数据区域, 如图所示: 这个运行时数据区被分为了 5 大块 方法区 (Method Area)堆 (Heap)虚拟机栈 (V…...

k8s中pod监控数据在grafana中展示

实现目标:将kubesphere[K8S]中运行的pod监控数据在grafana平台进行展示。 前提说明:需要在k8s每个集群中内置的prometheus配置中将pod指标数据远程写入到victoriametrics持久化数据库中。 实现效果如下: CPU使用量: round(sum by (namespace, pod) (irate(container_cpu…...

人机协同之间也有混馈机制

不懂数学的狮子,能精准的在最佳时刻、最佳路径捕捉到羚羊,这种天赋的“算计”能力,可谓叹为观止!里面既有反馈也有前馈,应该是混馈机制。混馈机制是指信息在系统中同时进行正向和反向的传递与调节。在狮子捕捉羚羊的过…...

微服务网关Gateway

springcloud官方提供的网关组件spring-cloud-starter-gateway,看pom.xml文件,引入了webflux做响应式编程,请求转发用到了netty的reactor模型,支持的请求数在1W~1.5W左右。hystrix停止维护后,官方推荐resilience4j做服务熔断,网关这里也能看到依赖。 对于网关提供的功能…...

flume:Ncat: Connection refused.

一:nc -lk 44444 和 nc localhost 44444区别 nc -lk 44444 和 nc localhost 44444 是使用 nc 命令进行网络通信时的两种不同方式。 1. nc -lk 44444: - 这个命令表示在本地监听指定端口(44444)并接受传入的连接。 - -l 选项…...

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装,主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…...

【Unity】2D项目中如何让Camera展示的大小正好等于某一个Game Object的大小

【背景】 用Unity做工具软件的话希望Camera大小正好和界面Panel一致。 【方法一:手动调整】 相机设置成正交后手动调整边框,当然这种方法精确度不高。 【方法二:在Camera上追加如下脚本】 这里面的public变量里面拖放你想要对齐的目标对象即可。 using UnityEngine;pu…...

last block incomplete in decryption

测试AES加密参数时报出的错,对比参数,发现接口收到的请求参数少了个号。这是因为号在URL中是一个特殊字符,所以传递时可能会丢失。 处理方案 使用param.replaceAll(" ", "")统一替换空格为号。前端传递参数时&#xff0c…...

Guardrails for Amazon Bedrock 基于具体使用案例与负责任 AI 政策实现定制式安全保障(预览版)

作为负责任的人工智能(AI)战略的一部分,您现在可以使用 Guardrails for Amazon Bedrock(预览版),实施专为您的用例和负责任的人工智能政策而定制的保障措施,以此促进用户与生成式人工智能应用程…...

flutter学习-day12-可滚动组件和监听

📚 目录 简介可滚动组件 SingleChildScrollViewListView separated分割线无限加载列表带标题列表 滚动监听和控制 ScrollController滚动监听NotificationListener滚动监听 AnimatedList动画列表滚动网格布局GridView 横轴子元素为固定数量横轴子元素为固定最大长度…...

LeetCode:967连续查相同的数字(DFS)

题目 返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。 请注意,除了 数字 0 本身之外,答案中的每个数字都 不能 有前导零。例如,01 有一个前导零,所以是无效的;但 0 是有效的。 …...

深入剖析NPM: Node包管理器的介绍和使用指南

导言:NPM(Node Package Manager)是JavaScript世界中最受欢迎的包管理器之一。它的出现大大简化了JavaScript开发过程中的依赖管理和模块化。本文将向您介绍NPM的基本概念、功能和常见用法,并为您提供一份详尽的NPM使用指南。 一、…...

AI视频-stable-video-diffusio介绍

介绍 stbilityai/stable-video-diffusion-img2vid-xt模型,由Stability AI开发和训练的基于散度的图像到视频生成模型。该模型可以接受一张静态图像作为条件,并生成出一个短视频。 该模型通过在SVD Image-to-Video [14帧]的基础上进行微调而来,可以生成576x1024分辨…...

day01-报表技术POI

前言 报表[forms for reporting to the higher organizations],就是向上级报告情况的表格。简单的说:报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表 多样的格式 动态的数据”。 1、开发环境搭建 功能说…...

如何预防最新的.locked、.locked1勒索病毒感染您的计算机?

尊敬的读者: 近期,网络安全领域迎来一股新潮——.locked、.locked1勒索病毒的威胁,其先进的加密技术令人生畏。本文将深入剖析.locked、.locked1勒索病毒的阴谋,提供特色数据恢复策略,并揭示锁定恶劣行径的先锋预防手…...

实现两张图片的接缝线拼接

使用ORB算法检测特征点,并通过BFMatcher进行特征点匹配。然后,根据Lowes ratio test选择好的匹配点,并使用findHomography计算单应性矩阵。最后,使用warpPerspective将图像进行透视变换,然后将第二张图像粘贴到变换后的…...

基于JNI 实现 嵌套 List 类型参数解析

基于JNI 实现 嵌套 List 类型参数解析 背景分析解决 背景 在前面两篇文章中,我们总结了Java 调用 C/C SDK 的几种方案,分享了JNI在实践过程中的一些踩坑点,而在这篇文章将继续分享针对Java List类型及其嵌套类型,我们的JNI如何接…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...