#encryption #office #password #ooxml #encoding #ecma376

ms-offcrypto-writer

使用 MS-OFFCRYPTO 中描述的敏捷加密方法加密 ECMA376/OOXML 文件

2 个稳定版本

1.0.1 2024 年 6 月 19 日
1.0.0 2024 年 6 月 18 日

#849 in 密码学

MIT/Apache

31KB
383

ms-offcrypto-writer

此软件包允许使用 MS-OFFCRYPTO 中描述的敏捷加密方法加密 ECMA376/OOXML (如 XLSX 等较新的 MS-Office 文件)。

使用方法

使用 Ecma376AgileWriter 包装器围绕一个 FileCursor (或你使用的任何其他 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