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

这篇具有很好参考价值的文章主要介绍了高级的E2EE——交叉签名(区块链密码签名)(第一篇-SAS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

  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 消息的功能默认为加密发送它们。房间消息是否加密通常取决于发送它们的房间是否加密。

文章来源地址https://www.toymoban.com/news/detail-803109.html

到了这里,关于高级的E2EE——交叉签名(区块链密码签名)(第一篇-SAS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • J2EE&通用分页02

    目录 一.重构-提取公用方法            1.为了进行公共方法的抽取,需要找出上面实习中的可通用部分,和差异化部分     2.公用方法封装思路       3. 具体实现 二.分页标签 2.1 准备一个Servlet  3.2 结果展示页面 三. 过滤器解决中文乱码问题 四.加入分页功能 四.封装分

    2024年02月15日
    浏览(31)
  • J2EE&集合框架&List

    目录 一.UML ①集合类图 ②线下教育平台用例图  二.List集合特点 ①学集合框架就是了解容器的数据结构(增删改查) ②有序的 可重复的 三.遍历方式 ① foreach ② iterator 迭代器 ③ for 四.LinkedList ①对比ArrayList是数据结构 Linkedlist: 链表 特点:查询修改慢,增加删除快 Arrayli

    2024年02月13日
    浏览(24)
  • J2EE&集合框架&Map

    目录 一.Map特点 1.无序,键值对,键不能重复,值可以重复 2.键重复则覆盖,没有继承Collection接口 二.遍历方式 1.拿到key,再拿值2.拿到映射关系,键值都有  取出保存所有Entry的Set,再遍历此Set即可 三.HashMap与Hashtable的区别 1.Hashtable更安全 2.JDK 1.8之前hashtable的key不能存放null

    2024年02月15日
    浏览(36)
  • J2EE&集合框架&Set

    目录 一.Set特点 特点:无序,不重复 思考:如果对List容器中的元素去重? 二.遍历:foreach,迭代器 三.扩容: 初始容量16,负载因子0.75,扩容增量1倍 性能参数:初始容量,负载因子 默认值: 初始容量16,负载因子0.75 示例:new HashSet(20, 0.5f); 四.HashSet 五.思考 1. 如何给Arra

    2024年02月13日
    浏览(26)
  • J2EE&集合框架&set集合

    目录 一.Set特点 特点:无序,不重复 思考:如果对List容器中的元素去重? 二.遍历:foreach,迭代器 三.扩容: 初始容量16,负载因子0.75,扩容增量1倍 性能参数:初始容量,负载因子 默认值: 初始容量16,负载因子0.75 示例:new HashSet(20, 0.5f); 四.HashSet 五.思考 1. 如何给Arra

    2024年02月13日
    浏览(29)
  • J2EE项目部署与发布(Linux版本)

    目录 一.jdktomcat安装 1.jdk的安装  1.2解压对应的安装包 1.3配置环境变量  2.tomcat的安装  二.mysql的安装 三.后端接口部署  后端部署 导入war包 修改端口  开启访问 1.jdk的安装 登录VMware Workstation Pro 然后连接MobaXterm      将 jdk tomcat mysql 导入到MobaXterm   1.2解压对应的安装包  

    2024年02月06日
    浏览(24)
  • J2EE项目部署与发布(Windows版本)

    目录 一、会议OA单体项目Windows部署 1.1 数据测试 1.2 项目部署 1.3 报错解决 1.4 最终效果 二、spa前后端分离项目Windows部署 2.1 后端代码测试 2.2 前端代码测试 2.3 项目部署 2.3.1 数据导入 2.3.2 后端部署 2.3.3 前端部署 2.3.3.1 Node.js环境配置 2.3.4 端口问题解决 2.3.4.1 method1 2.3.4.2 meth

    2024年02月07日
    浏览(33)
  • J2EE自定义mvc【框架配置及功能】

    目录 一、配置步骤 二、配置框架前三步 导入相应的jar 导入相应的Class 导入xml文件 三、优化基本操作(增删改) 1、基础优化 编写实体类 编写BookDao类 优化BookDao JUnit测试 2、后台优化 3、前端优化 将框架打成jar包,然后导入新工程,并且把框架的依赖jar包导入进去 将分页标

    2024年02月12日
    浏览(37)
  • 虚拟机部署与发布J2EE项目(Linux版本)

                                                      🎬 艳艳耶✌️:个人主页                                                   🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》                                                     ⛺️ 越努力 ,越幸

    2024年02月06日
    浏览(32)
  • 14天学会:基于J2EE的JAVA WEB基础

    手把手教你:基于Django的新闻文本分类可视化系统(文本分类由bert实现) 手把手教你:基于python的文本分类(sklearn-决策树和随机森林实现) 手把手教你:岩石样本智能识别系统 本文通过一个14天的学习文档教会大家学会 基于J2EE的JAVA WEB基础 本次上传的资源比较大,因此分

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包