23 个版本 (14 个重大更新)
0.15.0 | 2024年5月9日 |
---|---|
0.14.0 | 2023年10月5日 |
0.13.1 | 2023年2月15日 |
0.12.0 | 2022年9月12日 |
0.1.0 | 2016年12月12日 |
430 在 加密学
583 每月下载量
在 13 个 crate 中使用(通过 ruma)
575KB
12K SLoC
ruma-signatures
ruma-signatures 为根据 Matrix 规范创建数字签名提供功能。
lib.rs
:
根据 Matrix 规范的数字签名。
数字签名由 Matrix 家服务器用于验证 Matrix 系统中事件的真实性,以及家服务器之间的联盟请求。每个家服务器都有一个或多个签名密钥对(有时称为“验证密钥”),它使用这些密钥对签名所有事件和联盟请求。Matrix 客户端和其他 Matrix 家服务器可以向家服务器请求其公钥,并使用这些密钥验证签名数据。
每个签名密钥对都有一个标识符,该标识符由它所使用的数字签名算法的名称和一个“版本”字符串组成,用冒号分隔。版本是一个任意标识符,用于区分同一家服务器使用相同算法的密钥对。
任意 JSON 对象以及 Matrix 事件的 JSON 表示都可以进行签名。在这两种情况下,签名都存储在 JSON 对象本身的 signatures
键下。事件还必须包含其内容的哈希值,这些哈希值同样存储在经过哈希的 JSON 对象的 hashes
键下。
在 JSON 表示中,签名和哈希都以 base64 编码的字符串形式出现,使用标准字符集,不带填充。
签名和哈希
要签名任意 JSON 对象,请使用 sign_json
函数。请参阅此函数的文档以获取更多详细信息和使用示例。
签署事件比签署任意JSON过程更复杂,因为事件可以删除,即使后来从事件中删除数据,签名也需要保持有效。Homeservers需要在与其他Homeservers交换之前,生成事件内容的哈希并签署事件。尽管签署事件的哈希和签名算法比签署任意JSON更复杂,但ruma-signatures用户界面的接口是相同的。要哈希和签署事件,请使用hash_and_sign_event
函数。请参阅此函数的文档以获取更多详细信息和使用示例。
验证签名和哈希
当Homeserver通过联邦从另一个Homeserver接收数据时,需要通过验证它们的签名来验证数据的真实性和完整性。
要验证任意JSON上的签名,请使用verify_json
函数。要验证事件上的签名和哈希,请使用verify_event
函数。请参阅这些函数的文档以获取更多详细信息和使用示例。
依赖项
~11–15MB
~296K SLoC