当前位置: 首页 > 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如何接…...

探索灵活性与可维护性的利器:策略(Strategy)模式详解

目录 ​编辑 1. 策略模式概述: 2. 主要角色: 3. 实例场景: 4. 具体实现步骤: 步骤一:定义策略接口 5. 使用策略模式的客户端代码: 总结: 我的其他博客 1. 策略模式概述: 策…...

压缩包文件暴力破解 -Server2005(解析)

任务五十一: 压缩包文件暴力破解 任务环境说明:Server2005 1. 通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机服务版本信息,将 Telnet 版本信息字符串 作为 Flag 提交; flag:Microsoft Windows XP telnetd 2. 通过本地PC中渗透测试平台Kali对服务器场景Windows进行渗透测…...

mars3d加载arcgis发布的服务,⽀持4523坐标

问题 1.从这个服务地址加载,具体在哪⾥去转坐标呢? 加个 usePreCachedTilesIfAvailable:false 参数即可 坐标系为4490的arcgis影像服务图层,配置后瓦片加载不出来,没报错 甚至可以跳转 没有看出问题,或者测…...

『K8S 入门』二:深入 Pod

『K8S 入门』二:深入 Pod 一、基础命令 获取所有 Pod kubectl get pods2. 获取 deploy kubectl get deploy3. 删除 deploy,这时候相应的 pod 就没了 kubectl delete deploy nginx4. 虽然删掉了 Pod,但是这是时候还有 service&#xff0c…...

十七、如何将MapReduce程序提交到YARN运行

1、启动某个节点的某一个用户 hadoopnode1:~$ jps 13025 Jps hadoopnode1:~$ yarn --daemon start resourcemanager hadoopnode1:~$ jps 13170 ResourceManager 13253 Jps hadoopnode1:~$ yarn --daemon start nodemanager hadoopnode1:~$ jps 13170 ResourceManager 15062 Jp…...

华为云CodeArts Deploy常见问答汇总

1.【Deploy】部署java项目,为什么通过springboot启动步骤启动失败了? 答:用户所部署的jar包源码并不是springboot框架,所以无法用springboot启动步骤启动,该步骤并不等同于java -jar 命令,需要使用shell脚…...

前后端交互—开发一个完整的服务器

代码下载 初始化 新建 apiServer 文件夹作为项目根目录,并在项目根目录中运行如下的命令,初始化包管理配置文件: npm init -y运行如下的命令,安装 express、cors: npm i express cors在项目根目录中新建 app.js 作为整个项目的入口文件&a…...

前端框架的虚拟DOM(Virtual DOM)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

什么是http状态码?

什么是http状态码? 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。 ht…...

linux/CentOS 7安装Nginx

Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境。 Nginx一般使用非root账号安装,如果还没有非root账号,先创建账号 创建账号 创建组&#xf…...

建设社团网站的可行性分析/必应站长平台

配置嘉里项目本地rabbitmq服务的流程: 1. 登录本地rabbit服务 输入 http://localhost:15672/ ,输入用户名、密码,登录本地rabbit服务 2.创建 crm-user 和 kip-user 两个用户 创建crm-user 用户: 同上创建kip-user 用户&…...

古风网站建设模板/seo入门基础教程

一、什么是序列化 在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式。这个过程叫序列化,不同的序列化结果也不同,但目的是一样的,都是为了存储和传输 在Python中…...

做网站现在赚钱吗/做企业网站哪个平台好

这个是开了multidex的,如果你没开multidex, 可能不是这个错误,但是也是一个dex error的错误,出现这个错误的根本原因一般是项目中出现了重复的java类导致冲突。 所谓的“项目中出现了重复的java类”一般包括下面几种情况: libs下…...

社区平安建设基层网站/上海seo培训中心

ES安装及head插件安装1.官网下载2.windows下安装3.如果内存小 修改配置文件jvm.options启动参数4.启动 双击elasticsearch.bat5.访问 127.0.0.1:92006.安装可视化界面 以及启动7.解决跨域问题8.再次启动elasticsearch-head-master 访问http://localhost:9100/总结JDK1.8 &#…...

wordpress 图片 说明 居中/电子商务网站

本文讲的是记一例“特殊”的运营商流量劫持强弹广告案例诊断,由于没有上HTTPS,国内最大的政府网站疑似遭遇流量劫持,被恶意弹窗涉嫌色情的广告。 一份网上传播的文档截图中记录了整个事件经过。在这份《关于xx院app中h5页面弹出广告的专题会议…...

济南网站建设公司晟创未来/软文世界平台

1、高考的失利,只是一时的成败。 2、被生活逼出的动力,你真的有曾感到绝望吗? 3、找到方向很重要,你可能与我一样,只是差了一位引路人。 4、兴趣是最好的老师,持续编程是我唯一坚持超过一年的事情 5、短…...