2 个稳定版本
1.0.1 | 2024 年 6 月 19 日 |
---|---|
1.0.0 | 2024 年 6 月 18 日 |
#849 in 密码学
31KB
383 行
ms-offcrypto-writer
此软件包允许使用 MS-OFFCRYPTO 中描述的敏捷加密方法加密 ECMA376/OOXML (如 XLSX 等较新的 MS-Office 文件)。
使用方法
使用 Ecma376AgileWriter
包装器围绕一个 File
或 Cursor
(或你使用的任何其他 writer) 用于其他软件包,例如 simple-xlsx-writer
。
如果发现安全漏洞
如果你发现除了数据结构未归零之外的其他安全漏洞,请通过电子邮件发送给我 [email protected]。我将在两天内 尝试 回复。
兼容性说明
创建的文件与“Microsoft Excel für Microsoft 365 MSO (16.0.13001.20508) 64-Bit”使用的参考实现创建的文件并非字节等效,但 CFB 文件中的嵌入流是等效的,并且超出访问日期的 CFB 元数据(特别是 CFB 版本以及每个存储和流的 state bits & CLSID)也是等效的。
这还包括一个与标准的偏差,该标准指定 HMAC 密钥的长度应与盐长度相等 <keyData>
。然而,参考实现使用 64 位的 HMAC 密钥长度。
使用的值是
- 对于加密,
<keyData>
和<p:encryptedKey>
的盐大小均为 16 - 对于加密,
<keyData>
和<p:encryptedKey>
:AES256 with CBC,及其导出值 - 对于散列,
<keyData>
和<p:encryptedKey>
:SHA512,及其导出值 - HMAC 密钥长度为 64,这与标准相反,但遵循参考实现
- 自旋计数为
100_000
贡献
PRs已打开;这个实现的目标是尽可能简单且易于审计。一个更完整的实现(包括读取功能以及更多特性和可配置性)正在开发中 - 如果你对那个感兴趣,请发送电子邮件至[email protected]!
文件 src/encryption_info.xml
如果你需要编辑这个文件,你可能会想使用二进制编辑器。它包含开头的二进制数据,使用CRLF,不应包含尾部换行符。
路线图
- 一个更完整的实现(尽管那将是一个第二个crate,这个crate将继续接收更新)
- 使XML模板更合理。主要是文件完全UTF8且尾部换行符(如vim添加的)不会成为问题。
- 添加示例和测试
- 可能包括CFB容器文件在内的字节等效文件(尽管那将需要CFB的重新实现)。
- 可能实现即时加密,实际上不会将未加密数据提交给底层writer。虽然我对这个非常感兴趣,但还有一些设计决策需要商讨,以及需要进行的基准测试。
- 可能优化速度。它应该足够快,如果不够快,那么
cfb
crate或直接将write!
使用到流中可能是罪魁祸首,但关于性能没有任何验证或测试。 - 可能实现数据结构的零初始化。
以下不是此crate的目标,只能在更完整的crate中找到
- 任何信息权限管理功能
- 除了敏捷以外的加密
- 可配置的敏捷加密
- 证书
- 支持旧办公二进制文件格式(例如XLS,而不是XLSX)
- 读取加密文件
- 写保护
- 签名
- 我在MS-OFFCRYPTO中不知道它们做什么的事情:敏感性标签、MsoDataStore、EncryptedSIHash、EncryptedDSIHash、EncryptedPropertyStreamInfo
依赖项
约2.5MB
约45K SLoC