microsoft/SymCrypt
GitHub: microsoft/SymCrypt
微软开源的核心密码学函数库,为 Windows、Azure Linux 等产品提供对称与非对称加密算法的安全实现。
Stars: 872 | Forks: 87
# 简介
SymCrypt 是 Windows 目前使用的核心加密函数库。
## 历史
该库始于 2006 年底,首批源代码于 2007 年 2 月提交。
最初的目标仅限于实现对称加密操作,因此得名。
从 Windows 8 开始,它一直是对称算法的主要加密库。
2015 年,我们开始着手为 SymCrypt 添加非对称算法。自 Windows 10 的 1703 版本发布以来,
SymCrypt 已成为 Windows 中所有算法的主要加密库。
## 目标
与任何工程项目一样,SymCrypt 也是在相互冲突的需求之间进行权衡的产物:
- 为 Microsoft 产品所需的加密算法提供安全的实现。
- 在 Windows 支持的所有 CPU 架构上运行。
- 良好的性能。
- 最小化维护成本。
- 支持使用 SymCrypt 的产品通过 FIPS 140 认证。
- 为库的正常功能提供高可靠性保证。
# 克隆仓库
在我们的部分 Linux 模块中,SymCrypt 使用 [Jitterentropy](https://github.com/smuellerDD/jitterentropy-library)
作为符合 FIPS 标准的熵源。要构建这些模块,您需要确保同时克隆了
jitterentropy-library 子模块。您可以在克隆后运行
`git submodule update --init` 来完成此操作。
`unittest/SymCryptDependencies` 子模块提供了 RSA32 和 msbignum 实现,它们在 Windows 上编译时
被用作单元测试中的基准。由于许可限制,我们无法公开发布这些
库,因此只有有权访问我们私有 Azure DevOps 仓库的 Microsoft 员工才能克隆此子模块。
如果您是 Microsoft 外部人员,可以忽略此子模块。它仅在
单元测试中使用,不会改变 SymCrypt 产品代码的行为。
# 构建
开始构建 SymCrypt 最简单的方法是使用 Python 构建脚本 `scripts/build.py`。您
可以使用 `--help` 参数运行它,以获取有关需要哪些参数以及每个参数作用的帮助。如需
详细的构建说明(包括其他构建方式),请参阅 [BUILD.md](BUILD.md)。
# 测试
SymCrypt 单元测试对 SymCrypt 库进行了广泛的功能测试。在 Windows 上,如果其他实现(例如 Windows API CNG 和 CAPI,以及较旧的加密库 rsa32 和
msbignum)可用,它还会将结果与这些实现进行比对。它还提供了详细的性能信息。
成功构建后,您可以使用 `scripts/test.py` 辅助脚本来运行单元测试。
# 版本控制与维护
从版本 101.0.0 开始,SymCrypt 使用
[语义化版本 2.0.0](https://semver.org/spec/v2.0.0.html) 规范定义的版本方案。这意味着:
- 主版本号变更会引入破坏 ABI 和/或 API 的变更(包括行为变更)
- 次版本号变更会引入向后兼容的附加功能或改进,和/或错误修复
- 修订版本号变更会引入向后兼容的错误修复
最初的初始开源版本从版本 100 开始,这是为了与我们之前的
内部版本控制方案保持兼容。
关于维护,我们强烈建议发行版供应商和应用程序开发人员定期
更新到最新版本的 SymCrypt 和 SymCrypt engine,以获取安全修复以及
功能/性能改进。我们致力于为 SymCrypt 维持稳定的 API 和 ABI,并拥有
一套强大的回归测试套件,保持使用当前版本可以避免进行复杂的
且潜在风险更高的向后移植。
# 安全漏洞
如果您认为自己发现了影响此代码安全的问题,请**不要**创建 issue
或 pull request,而是将您的意见发送至 secure@microsoft.com。有关更多信息,请参阅 [SECURITY.md](SECURITY.md)。
# 贡献
我们很乐意收到您的意见和建议。遗憾的是,除非是在特定情况下且来自与我们签订了预先约定协议的经过审查的合作伙伴,否则我们无法接受外部代码贡献。
许多大型客户将加密代码视为高度敏感的内容。
我们的一些大客户非常看重其组织内所使用的加密代码的可靠性保证。
通过将编码工作限制在少数员工手中,我们可以大大降低恶意贡献的(感知)风险。
本项目采用了 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。
有关更多信息,请参阅[行为准则 FAQ](https://opensource.microsoft.com/codeofconduct/faq/),或者
如果有任何其他问题或意见,请联系 [opencode@microsoft.com](mailto:opencode@microsoft.com)。
标签:Azure Linux, C/C++, FIPS认证, UML, 事务性I/O, 加密算法, 客户端加密, 密码学库, 系统底层, 逆向工具