65.9K
CodeProject 正在变化。 阅读更多。
Home

cngsha3:较新算法的加密下一代实现

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.68/5 (7投票s)

2023年1月10日

CPOL

2分钟阅读

viewsIcon

16704

在 Win32 项目中使用 SHA-3 和 CRYSTALS Kyber、Dilithium 和 Sphincs

引言

虽然 SHA-3 已经发布很久了,但 Windows CNG API 尚未支持它。这里提供了一个 DLL,您可以将其安装到系统中,以便任何使用 CNG 的应用程序(包括 CMS)都可以完全支持 SHA-3 系列。

此外,据称能够抵抗量子计算机破解尝试的新 CRYSTAL 算法已经发布。它们是:

  • CRYSTALS-Kyber,一种公钥/私钥加密/解密算法。实现在这里。512、768、1024 位实现。
  • CRYSTALS-Dilithium,一种公钥/私钥签名/验证算法。实现在这里。有三个版本(2、3 和 5)。
  • CRYSTALS-Sphincs,一种公钥/私钥签名/验证算法。实现在这里

背景

Microsoft 发布了一个 CNG SDK 在这里。该 SDK 允许开发人员为 CNG 创建用户模式 DLL 扩展,包括自定义哈希提供程序。

此 DLL 的注册包括调用此 SDK 中的函数,并将 DLL 放入 system32 目录(否则它将无法工作)。该 DLL 为从用户调用 BCryptCreateHash()BCryptHashData() 等路由的函数提供占位符。

我使用了 librhash 来实现 SHA-3。

构建库

  • 按照上述说明安装 CNG SDK。
  • 使用 Visual Studio 打开解决方案。
  • 在 DLL 和测试项目属性中,将 C++ include 路径设置为上述 CNG SDK(我的设置为 c:\Windows Kits\10\Cryptographic Provider Development Kit\include)。
  • 构建项目。

准备好了!

安装库

该库包含一个 DllRegisterServer/DllUnregisterServer 集,因此您可以使用 regsvr32 在其上注册。它注册以下名称:

inline const wchar_t* ProviderB = L"Michael Chourdakis CNG Implementations";
#define SHA3_224_ALGORITHM  L"SHA3-224"
#define SHA3_256_ALGORITHM  L"SHA3-256"
#define SHA3_384_ALGORITHM  L"SHA3-384"
#define SHA3_512_ALGORITHM  L"SHA3-512"
#define KYBER_512_ALGORITHM  L"KYBER-512"
#define KYBER_768_ALGORITHM  L"KYBER-768"
#define KYBER_1024_ALGORITHM  L"KYBER-1024"
#define DILITHIUM_2_ALGORITHM  L"DILITHIUM-2"
#define DILITHIUM_3_ALGORITHM  L"DILITHIUM-3"
#define DILITHIUM_5_ALGORITHM  L"DILITHIUM-5"
#define SPHINCS_ALGORITHM  L"SPHINCS"

使用库

就像任何其他 CNG 哈希函数一样

  • 使用 BCryptOpenAlgorithmProvider 使用上述算法之一打开提供程序。
  • 使用 BCryptCreateHash 创建哈希。
  • 使用 BCryptHashData 反复哈希数据。
  • 使用 BCryptGetProperty 获取哈希长度。它将分别返回 24、32、48 或 64。
  • 通过调用 BCryptFinishHash 获取哈希。
  • 您可以使用 BCryptHashData 重复使用句柄。

要使用公钥/私钥加密/解密,请调用 BCryptEncryptBCryptDecrypt。请注意,Kyber 算法需要 32 字节的数据进行加密/解密,所以我使用哈希。

要使用公钥/私钥签名/验证,请调用 BCryptSignHashBCryptVerifyHash

Test.cpp 包含此功能的简单演示。

历史

  • 2023 年 8 月 14 日:添加了新的算法
  • 2023 年 1 月 11 日:首次发布
cngsha3:CodeProject 的下一代密码学实现 - 代码之家
© . All rights reserved.