CNG支持的SHA-3和量子抗性算法

随着量子计算的发展,传统的加密算法面临着被破解的风险。为了应对这一挑战,微软推出了CNG(Cryptography API: Next Generation)SDK,允许开发者创建用户模式的DLL扩展,以支持包括自定义哈希提供者在内的CNG。此外,还发布了新的CRYSTAL算法系列,这些算法被认为能够抵抗量子计算机的破解尝试。

CRYSTAL算法系列

CRYSTAL算法系列包括:

  • CRYSTALS-Kyber:公钥/私钥加密/解密算法。
  • CRYSTALS-Dilithium:公钥/私钥签名/验证算法。
  • CRYSTALS-Sphincs:公钥/私钥签名/验证算法。

这些算法提供了不同位数的实现,包括512位、768位和1024位。

微软发布的CNG SDK允许开发者创建用户模式的DLL扩展,以支持包括自定义哈希提供者在内的CNG。注册DLL包括调用SDK中的函数,并将DLL放入system32目录中(否则无法工作)。DLL提供了从用户调用的BCryptCreateHash()、BCryptHashData()等函数路由的占位符函数。

构建库

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

安装库

库包括DllRegisterServer/DllUnregisterServer集,因此可以使用regsvr32对其进行注册。它注册了以下名称:

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

使用库

与其他CNG哈希函数一样:

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

要使用公钥/私钥加密/解密,调用BCryptEncrypt和BCryptDecrypt。请注意,Kyber算法需要32字节的数据进行加密/解密,因此使用了哈希。要使用公钥/私钥签名/验证,调用BCryptSignHash和BCryptVerifyHash。

Test.cpp包含了一个简单的演示。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485