如何设计一封安全且“自毁”的电子邮件?

2023-12-12

正如大多数人所知,电子邮件非常不安全。即使客户端和发送电子邮件的服务器之间有 SSL 安全连接,消息本身在 Internet 上的节点间跳跃时也将采用明文形式,从而容易被窃听。

另一个考虑因素是,发件人可能不希望邮件在一段时间后或在被阅读一次后可读,即使是预期的收件人。有许多的原因;例如,该消息可能包含可通过传票请求的敏感信息。

一种解决方案(我认为是最常见的解决方案)是将消息发送给受信任的第三方,并将该消息的链接发送给收件人,然后收件人从第三方读取该消息。或者,发送者可以向接收者发送加密消息(使用对称加密),并将密钥发送给第 3 方。

无论哪种方式,这种方法都存在一个根本问题:如果第三方受到损害,您的所有努力都将变得毫无用处。有关此类事件的真实示例,请参阅涉及的崩溃加密股份公司与国家安全局勾结

我见过的另一个解决方案是Vanish,它对消息进行加密,将密钥分割成多个片段并将这些片段“存储”在 DHT(即 Vuze DHT)中。通过简单地查找哈希值(哈希值与消息一起发送),可以轻松且某种程度上可靠地访问这些值。 8 小时后,这些值就会丢失,甚至预期的收件人也无法阅读该邮件。拥有数百万个节点,不存在单点故障。但这也通过对 DHT 发起 Sybil 攻击而被打破(有关更多信息,请参阅 Vanish 网页)。

那么有人对如何实现这一目标有想法吗?

EDIT:我想我没说清楚。主要关心的不是收件人故意保留消息(我知道这是无法控制的),而是消息在某处可用。

例如,在安然事件中,法院传唤他们索取其服务器上的所有电子邮件。如果消息被加密并且密钥永远丢失,那么拥有加密消息而没有密钥对他们没有任何好处。


(免责声明:我没有阅读有关 Vanish 或 Sybil 攻击的详细信息,这可能与下面的内容类似)

首先:电子邮件通常很小,尤其是。与 50 MB 的 YouTube 视频相比,您每天可以下载 10 次或更多。基于此,我假设存储和带宽不是这里真正关心的问题。

从常识来看,加密会在系统中引入一些难以理解的部分,因此也难以验证。 (想想每个人都会执行的典型 openssl 魔法,但 99% 的人真正理解;如果 HOWTO 上的某个步骤 X 会说“现在转到站点 X 并上传 *.cer *.pem 和 *.csr”来验证步骤1 到 X-1,我猜十分之一的人会这样做)

结合这两个观察结果,我对安全(*)且易于理解的系统的建议:

假设您有一条 10 kb 的消息 M。取 N 乘 10 kb 的内容/dev/(u)random,可能来自基于硬件的随机源,将其称为 K(0) 到 K(N-1)。使用简单的异或运算来计算

K(N) = M^K(0)^K(1)^...^K(N-1)

现在,根据定义

M = K(0)^K(1)^...^K(N)

即要理解该消息,您需要全 K。使用您喜欢的任何协议,在随机 256 位名称下存储与 N 个不同(或多或少受信任)方的 K。

要发送消息,请将 N 个链接发送到 K 个链接。

要销毁一条消息,请确保至少删除一个 K。
(*) 关于安全性,系统将与托管 K 的最安全方一样安全。

不要采用固定的 N,不要在每条消息的单个节点上使用固定数量的 K(即将一条消息的 0-10 K 放在同一节点上)以使暴力攻击变得困难,即使对于那些可以访问所有存储密钥的节点。

注意:这当然需要一些额外的软件,就像任何解决方案一样,但所需的插件/工具的复杂性是最小的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设计一封安全且“自毁”的电子邮件? 的相关文章

  • 使用您正在散列的内容的散列作为盐?

    假设用户注册了您的网站 您对他们选择的密码进行哈希处理 然后使用该哈希值作为盐 并使用该盐重新哈希其密码 Example String hash1 MD5 password String endHash MD5 hash1 password
  • 对 Java 安全性和 BouncyCastle API 感到茫然和困惑

    我一直在尝试理解 Java 的 BouncyCastle 加密 API 不幸的是 我发现 Java 密码学总体上被服务提供者接口和术语所掩盖 以至于我无法理解任何东西的实际作用 我已经尝试反复阅读必要的文档 但它仍然难以理解 引入了许多远远
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 如何使用 python 标准库 zipfile 检查 zip 文件是否已加密?

    我正在使用 python 的标准库 zipfile 来测试存档 zf zipfile ZipFile archive name if zf testzip None checksum OK True 我收到这个运行时异常 File pack
  • 正确使用 EncryptedSharedPreferences

    Android 最近发布了 EncryptedSharedPreferences 它自动加密 SharedPreferences 键 值数据 虽然这很好 但我发现我可以简单地连接 API 调用并检索解密的值 除了在调用 EncryptedS
  • 我正在使用 Wincrypt for Diffie-Hellman — 我可以以纯文本形式导出共享机密吗?

    好的 感谢Mike https stackoverflow com users 6970 mike dimmick 我能够让 Wincrypt 生成 Diffie Hellman 密钥对 我想出了导出公钥 以及如何导入对方的公钥 根据文档
  • 在 ruby​​ 中读/写受密码保护和加密的文件

    我想加密一个 ruby 程序将从中加载数据的文件 此外 我需要程序在启动时提示输入密码 该密码将用于解密文件 换句话说 该文件需要加密地驻留在计算机上 只有拥有密码的用户才能运行该应用程序 我已经开始研究 openpgp 但据我了解 这仍然
  • 此 JavaScript 如何在 Firefox 中打开 Windows 设置?

    新安装 Firefox 45 开发版后 我看到了这个页面 它有一个按钮 让我们开始吧 单击该按钮时 会以某种方式打开选择默认应用程序Windows 10 中的设置页面 这是怎么做到的 我无法通过开发者控制台在该页面上迷宫般的代码中找到任何内
  • 仅使用公钥在 HD 钱包中生成以太坊地址 (bitcoinj/web3j)

    我尝试为使用 bitcoinj 库实现的 HD 钱包密钥生成以太坊地址 但我感到困惑 DeterministicSeed seed new DeterministicSeed some seed code here null 1409478
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • python 和 android 中通过 AES 算法加密和解密

    我有用于 AES 加密的 python 和 android 代码 当我在android中加密文本时 它在python上成功解密 但无法在android端解密 有人有想法吗 Python代码 import base64 import hash
  • .png 和 .jpg 文件解密

    我正在尝试修改我正在使用的软件的图形资产 出于审美目的 我想很难对图形资产做一些有害的事情 但开发人员对它们进行了加密 我不确定他为什么决定这样做 因为我使用和修改了一堆类似的软件 而这些软件的开发人员并没有打扰 因为我看不出为什么需要加密
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • JSEncrypt 在后端解密(Bash)

    看起来 JSEncrypt 在 RSA 加密字符串中添加了一些随机填充 因此我无法使用 OpenSSL 对其进行解密 我的 JS 代码如下所示 const rsaEncrypt new window JSEncrypt rsaEncrypt
  • 在nodejs中解密.Net cookie

    我在 Net 中创建了一个加密的cookie 并尝试在nodejs 中解密它的内容 但是nodejs不断抛出异常 TypeError DecipherFinal失败 在 Net中 我使用带有密钥的AES加密方法 932D86BB1448EE
  • Symfony2 Secure by IP 不起作用

    在我的 Symfony 2 3 1 Security YML 中 我有这一行 安全 yml access control path mysecurearea roles IS AUTHENTICATED ANONYMOUSLY ip 0 0
  • Java BigInteger bitLength() 方法忽略前导 0 位

    Java jre1 8 0 45 我完成了椭圆曲线类的调试 并在记录密钥的所有特征时 我还记录了密钥的位长度 对于椭圆曲线 其位长度并不总是偶数 我通过 BigInteger 显示密钥的位长度 ECPrivateKey oPK genera
  • 使用 C 测试 X509 证书到期日期

    如何以编程方式测试 X509 证书是否过期 他们是直接的加密 API 吗 或者我必须获取 not after 时间并在我的代码中手动检查它 你没有说是哪种语言 所以我还是总结一下 php data openssl x509 parse fi
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • 在 PHP 中使用 phpseclib 时出现 RSA 问题

    我正在尝试在 phpseclib 中使用 RSA 实现 我认为在函数中执行一次代码并重新使用该函数会更容易 当我尝试向代码发送短信时 我收到一条错误消息 提示 解密错误 测试还让我意识到每次代码运行时密文都是不同的 所以我显然在那里做错了什

随机推荐

  • python 中的 urllib2 相当于 ruby

    我在 python 中有一些代码 可以在 python 中发送 http 请求 但我试图弄清楚如何在 ruby 中执行此操作 因为我的服务器是 Rails import urllib2 sys json url http new openb
  • 将本地文件推送到 github 存储库中的目录

    我的本地存储库中有一个文件 我想将其推送到我的 Github 存储库中的目录 我有以下文件 F Development Python Workspace StringCalculator py 我需要将此文件推送到我的存储库的以下路径 ht
  • 尽管存在显式实例化,但类模板的成员函数模板找不到定义。不链接

    Edit 这不是链接问题的重复 因为我使用的是显式实例化 并且只有特定类型的成员函数不链接 其他函数会链接 以下代码可以编译但无法链接 我不明白为什么 它显式实例化Vector类来限制可能的参数数量T因此隐藏了定义Vector
  • SQL Server 2008 Express 无法附加 mdf 文件

    这是消息 它出什么问题了 是安装问题吗 标题 Microsoft SQL Server Management Studio 无法显示请求的对话框 附加信息 参数名称 nColIndex 实际值为 1 微软 SqlServer GridCon
  • Powershell - 根据文件名创建文件夹,然后将该文件放入该文件夹中

    我有一个文件列表说 T123 Product 1 jpg T123 Product 2 jpg T123 Product 3 jpg T456 Product 1 jpg T456 Product 2 jpg T456 Product 3
  • 如何在循环中使用 mutate 和 ifelse?

    我所做的是创建虚拟变量来指示连续变量是超过某个阈值 1 还是低于该阈值 0 我通过几次重复的突变实现了这一点 我想用循环代替 load tidyverse library tidyverse create data data lt data
  • 覆盖 XML 序列化方法

    我在尝试自定义 DateTime 变量在我的对象中序列化的方式时遇到问题 我希望它输出为 2011 09 26T13 00 00Z 但是当我重写 GetObjectData 函数 我认为这是执行此操作的方法 时 根本不会为它们输出任何 XM
  • 带有动态选项组的下拉列表

    嗨 cakephp 专家 我正在寻求您对带有动态 optgroup 的动态下拉列表的帮助 假设我有两个表 countries id country name counties id county name country id 现在 我想显
  • Android-NavigationView从右到左

    我正在使用 Android Studio 1 5 的最新版本 我想使用抽屉布局制作一个菜单 用于定位其调用 GravityCompat 我正在尝试使用这个组件并修改它 将抽屉从右向左放置 这是我的代码 public class MainAc
  • iOS 8 中的 NSDateFormatter 日期格式问题

    我有一个 NSDateFormatter 用来将 NSDate 格式化为字符串 以下格式不起作用 ddMMyyyy hhmmss SSS 当我尝试格式化 NSDate 时 我得到以下输出 18092014 08 49 03 638 其中有一
  • Azure 搜索是否处理同义词

    Azure 搜索 可以根据同义词进行搜索吗 例如 如果我搜索 鞋类 系统应该获取以下结果 鞋类的同义词 如鞋子 凉鞋等 我进行了很多搜索 但未能找到有关它的适当文档 我能找到的最接近的是一个帖子说它还不支持 但这是一个旧帖子 https s
  • 从静态方法调用 startActivityForResult

    我有一个按钮监听器 当用户单击按钮时我想启动相机意图 目前我有这个 public class ButtonListener implements View OnClickListener private ArrayList
  • 在整个页面加载之前显示加载栏

    我想在加载整个页面之前显示一个加载栏 目前 我只是使用了一个小的延迟 document ready function page fadeIn 2000 该页面已使用 jQuery 注意 我已经尝试过这个 但它对我不起作用 脚本运行时加载栏
  • Python“for i in”+变量

    我有以下代码 Euler Problem 1 print We are going to solve Project Euler s Problem 1 euler number input What number do you want
  • 如何在Linux上指定时间运行脚本? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个包含特定日期和时间的文本文件 我希望能够在该文件中指定的时间运行脚本 你将如何实现这一目标 创建另一个在后台运行的脚本 类似于守护程序 并每秒检查当前时间是否与文件中的时间匹
  • 将电子邮件另存为 MSG 文件,无需使用 Outlook(COM 对象等)或第 3 方软件

    现在 我正在使用 Exchange Web 服务 API 和 PowerShell 从 Exchange 中提取特定电子邮件并将其保存为 EML 文件 这很好用 但是 用户 客户要求电子邮件采用 msg 格式 我见过有两种方法可以做到这一点
  • 录制时拍摄相机屏幕截图 - 就像 Galaxy S3 一样?

    我正在开发一个使用 SurfaceView 进行显示的相机应用程序 我可以截取 SurfaceView 的屏幕截图 并将其保存为位图 使用 getDrawingCache 在包装 SurfaceView 的布局上 还有canvas draw
  • VBA:等待 Bloomberg BDP 通话完成

    我有一个脚本将一些外部数据导入到工作表中 这反过来会影响一些 BDP 公式 最好 我想在复制数据后立即对 BDP 结果进行一些检查 Bloomberg Excel 插件异步更新 如何等待结果然后恢复脚本 似乎只有在 VBA 脚本完成后才会导
  • 为 Nitrogen6x 构建 Qt 5 时出现 libm 重定位错误

    我正在尝试在 Qt 5 上构建氮气6x板由 i MX6Q 供电 我已经安装了Debian 喘息在板上 我正在使用乌班图12 10交叉编译机 配置 Qt 就像一个魅力 但我陷入了 make 步骤 这是我运行的配置脚本 configure v
  • 如何设计一封安全且“自毁”的电子邮件?

    正如大多数人所知 电子邮件非常不安全 即使客户端和发送电子邮件的服务器之间有 SSL 安全连接 消息本身在 Internet 上的节点间跳跃时也将采用明文形式 从而容易被窃听 另一个考虑因素是 发件人可能不希望邮件在一段时间后或在被阅读一次