我们可以使用 CNG (Windows Cryptography API) 生成 BCrypt / SCrypt / Argon2 哈希密码吗?

问题描述

是否可以使用 CNG(Windows Cryptography API:Next Generation)生成 BCrypt / SCrypt / Argon2 哈希密码?

BCrypt 是一种计算困难的算法,旨在存储 通过单向散列函数获取密码。你输入你的 密码算法和后显着(相对) 计算,产生输出。 Bcrypt 一直存在 上世纪 90 年代末,并通过信息处理了重要审查 安全/密码学社区。它已被证明是可靠和安全的 随着时间的推移。

Scrypt 是对 Bcrypt 产生的同一模型的更新。密室 被设计成依赖于高内存要求而不是 对计算能力的高要求。导致的认识 这是专门的计算机芯片(FPGA/ASIC/GPU)可以 攻击者大规模购买比大量购买更容易 传统计算机的内存。

解决方法

简答

没有

长答案

CryptoAPI 和 Crypto API Next Generation (CryptNG) 都不支持 bcryptscryptargon2

bcrypt 是 blowfish 加密算法的定制版本。 CNG 不支持 Blowfish。即使是这样,bcrypt 也使用带有自定义“昂贵” 密钥设置的 bcrypt 版本。

scrypt 是(几乎)PBKDF2,它受 CNG 支持:

Byte[] scrypt(String password,int DesiredNumberOfBytes,...)
{
   Byte[] salt = SpecialScryptSaltGeneration(password,...)
   
   return PBKDF2(password,salt,DesiredNumberOfBytes,1);
}

SpecialScryptSaltGenration 使用未包含在 CNG 中的原语(ChaCha、Salsa/20)。

Argon2 使用在任何地方都不存在的自定义原语。