高级的E2EE——交叉签名(区块链密码签名)(第一篇-SAS)

本文介绍了如何在客户端中实现端到端加密的高级验证,特别是重点讲解了短验证字符串(SAS)和表情符号验证的过程。内容涵盖了验证流程、SAS的工作原理,以及验证过程中需要注意的事项,帮助开发者实现更安全的密钥验证和设备间信任建立。
摘要由CSDN通过智能技术生成

  如果你使用了上篇文章技术,在客户端中成功实现了端到端加密。那么恭喜你!这是真正值得骄傲的一步,也是值得庆祝的一步!但是,您可能已经注意到,有些事情仍处于粗糙边缘:您必须通过比较公钥来手动验证所有其他设备,解密密钥不会在您的设备之间共享等。如果您想在自己的客户端中实现更进一步这些功能,那么本指南适合您

 这是实现以下所有内容所需的一般路线图:

  1. 表情符号验证(SAS 或短验证字符串)
  2. 根据交叉签名状态显示验证状态
  3. SSSS(安全秘密存储和共享)
  4. 其他密钥的签名
  5. 房间内验证(通过房间内的消息进行验证)
  6. 杂项交叉签名的东西
  7. 引导 SSSS 和交叉签名
  8. 在线密钥备份

  1.实施表情符号验证(SAS)

  表情符号验证是称为 SAS 的验证模型的一部分,用于短验证字符串。除了表情符号验证,还有数字验证。预计所有支持 SAS 的客户端都至少支持数字验证。这是为了确保仍然可以验证可能无法显示表情符号的客户端(可能是某些 CLI 应用程序或嵌入式设备显示)

验证过程概览

验证通过两个设备相互发送消息,通过 to_device 消息或通过房间中的消息进行。想要验证另一个设备 (Bob) 的设备 (Alice) 会发送一条m.key.verification.request 消息及其支持的方法。Bob 用 回答m.key.verification.ready,同时通知 Alice 它支持哪些方法。在客户端 UI 中,Bob 在收到m.key.verification.request 消息后会弹出一个新的验证请求。在双方都接受开始后,任何一方(Alice 和/或 Bob)都可以发送一个m.key.verification.start特定于所使用的验证方法的 。如果 Alice 和 Bob 都发送 a m.key.verification.start且验证方式不匹配,则取消验证请求。如果验证匹配,则m.key.verification.start使用按字典顺序较小的用户 ID。如果它们也匹配(例如,如果您正在验证自己的设备),则使用字典顺序较小的设备 ID。这确保了m.key.verification.start 使用哪个是明确的。从现在开始,使用的设备m.key.verification.start就是发起请求的设备(这很重要,因为 SAS 中的某些事情取决于谁发起了请求)。之后,会发生一些验证过程,即特定的验证方法。如果一切都成功,则双方m.key.verification.done互相发送一个。

为了使所有这些工作,每个验证请求都有一个唯一的交易 ID,这是一个不透明的字符串,用于标识特定的验证请求。在房间验证的情况下,这是第一个发送消息的事件 ID ( m.key.verification.request)。任何一方都可以随时取消验证请求,方法是发送一个m.key.verification.cancel以及有关取消原因的一些信息。

send由于发送的所有消息都会添加一些通用元数据,因此编写一个包装函数来发送密钥验证数据可能是一个好主意。此函数还可以将发送事件处理为 to_device 消息或房间事件。to_device 和房间验证的消息内容略有不同:

对于 to_device 消息,transaction_idfrom_device被简单地添加到发送的对象中。 transaction_id表示交易的唯一 ID,而from_device只是一个包含您自己的设备 ID 的字符串。有效载荷,例如

{
  "foo": "bar"
}

因此看起来像:

{
  "foo": "bar",
  "transaction_id": "some-awesome-id",
  "from_device": "DXKKF"
}

对于房间消息,事务ID,即第一个事件的事件ID,被添加到 m.relates_to事件的部分。设备 ID 与 to_device 消息相同;它应该设置为发送设备的 ID。所以上面的payload就变成了:

{
  "foo": "bar",
  "from_device": "DXKKF",
  "m.relates_to": {
    "rel_type": "m.reference",
    "event_id": "$firstEventId"
  }
}

为简单起见,下面提到的所有有效负载都将在没有这些额外键的情况下显示。

发送的 to_devices 不必加密,因为验证请求的整个想法是它们可以公开。然而,客户端无论如何都可以选择这样做,例如,如果它们发送 to_device 消息的功能默认为加密发送它们。房间消息是否加密通常取决于发送它们的房间是否加密。

[1.7.38] 修复了所有示例。兼容1.7之后的版本。 优化了 Memcached支持。将 libmemcached 的内存分配器改成了易语言统一申请内存的方式。 修复了URI解析过程的一个逻辑陷阱。兼容中文等情况的URI二次解析可能出现的问题。 修复了XML解析等情况下得到的文本内容超出预计范围的问题。 修复了 模板编辑器 的若干问题。 1. 标签[正常输出]为空的情况 2. 包含文件列表为空的情况 修复了 通过后缀名获取文件列表的一些场景下,后缀名包含“.”无法得到文件列表的情况。 [1.7.37] 服务器响应对象加入了标准反馈信息的支持(API)。如果您希望把您的视图做为远程调用函数,强烈建议使用这组方法来写出反馈结果。未来E2EE也会提供更加完善的远程调用机制,也会将此反馈模型做为标准协议提供更多功能的支持。 响应.写出结果() 响应.写出成功() 响应.写出失败() [网站客户端] 修复了设置HTTP请求头后再次执行请求奔溃的问题。 修复了针对JSON和JS的自动编码转换无效的问题(神6、物联科技)。 HTTP中返回的协议头里的Content-Type中,网站客户端只转换了 txt/ 开头的MIME类型,JSON和JS的MIME是以 application 开头的,特地加入了针对这种情况的支持。 [存取键值表] 优化了 合并到() 方法。结果将以 合并到 左边的键值表为主,强制覆盖 目标 键值表中所有主键名称相同的主键和添加不存在的主键内容。 加入了 置为空值() 方法。可设置主键对应的内容为 空 值。 [存取列表] 加入了 置为空值() 方法。可设置指定位置的内容为 空 值。 [1.7.36] 修复了设置Session的ID某些场景下无效的问题(用户首次系统自动产生SessionID时无法再次手动设置等情况)。允许同一次请求执行多次Session的ID设置,只使用最后一次的设置。 [数据库分页] 修复了查询到分页实际的分页尺寸永远为10条的问题。为啥没有人告诉我这个问题!!!(感谢 左边的石头) [通用缓存对象] 在取键值表和列表的数据之前,加入了对象清空操作。避免取到脏数据。 [WebSocket服务器] 加入了 取客户地址 方法。可以获取客户的IP地址。 [1.7.35] [网页内容解析器] 加入了 取下级文本/取下级内部文本 方法,可对选择结果进行二次筛选。 对应的示例[717]做了更新。 [网站客户端] 修复了 某些特殊环境下GET不受控制得不到HTTP响应头的内容(不知道是不是盗版引起)。 渲染() 方法加入了列表的立即值输出。 例如: 列表名为“名称组”,值为 ["a", "b", "c", 1, 2, 3] 则页面上可以使用 {{#名称组}} {{名称组}}  <= 直接使用列表的变量名即可直接输出变量的值 {{/名称组}} [存取键值表] 加入了 子列表添加() 命令。可以对 键值表 中的列表值,进行 添加值 的操作。 [1.7.34] 修复了URL处理中路径包含中文和特殊符号等可能无法正确定位文件的问题。 存取列表 加入了 排序() 方法。具体查看[009 基础对象测试]下的“列表排序”示例。可通过列表内容进行多种形式的排序。 存取键值表 加入了 子列表排序() 方法。作用等同于 列表.排序()。 WebSocket客户端 加入了 置请求头() 方法。可以设置连接到服务器之后提交给服务器的HTTP头内容。 升级到最新版的易语言支持库开发SDK。 [1.7.33] 修复了 URL 解码时遇到的长度极值问题。之前的算法超过127位长度无法获取参数数据。 [1.7.32] 修复了URLEncoded类型的表单提交时解码的问题。 优化了内部流程中URL解码部分的逻辑。 [1.7.31] [ADODB数据库连接池] 加入了 测试连接 方法。可以使用此方法测试指定数据库是否能够连接成功。 [存取键值表/存取列表] JSON处理 修复了某些特殊文本(全角文本或字符)加载失败的问题。 [请求对象] 修复了 取参数()/取所有参数() 中包含 http:// 等关键字的参数解析失败的问题。 重构了URI解析算法。兼容性更好,效率更高。(实测平均每秒能够处理2000万次请求路径) [数据库] 屏蔽了ADO查询到分页数据为空时,输出的错误信息内容。 [1.7.29] 改进了 静态编译 机制。 * 无论是静态编译EXE还是DLL,都能正确释放和调用原始库(因为是伪静态,机制等同于独立编译),不需要手动拷贝e2ee.fne到运行目录。 * 优化了原始库释放和调用流程,只有在临时目录无法使用且不存在原始库的情况下,才会释放原始库到运行目录。 修复了 文件列表 功能可能引起的奔溃问题(第三只眼)。 * 网站打包加入后,通用获
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值