随着量子计算的发展,传统的加密算法面临着被破解的风险。为了应对这一挑战,微软推出了CNG(Cryptography API: Next Generation)SDK,允许开发者创建用户模式的DLL扩展,以支持包括自定义哈希提供者在内的CNG。此外,还发布了新的CRYSTAL算法系列,这些算法被认为能够抵抗量子计算机的破解尝试。
CRYSTAL算法系列包括:
这些算法提供了不同位数的实现,包括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哈希函数一样:
要使用公钥/私钥加密/解密,调用BCryptEncrypt和BCryptDecrypt。请注意,Kyber算法需要32字节的数据进行加密/解密,因此使用了哈希。要使用公钥/私钥签名/验证,调用BCryptSignHash和BCryptVerifyHash。
Test.cpp包含了一个简单的演示。