是否可以使用CNG (Windows加密API:下一代)生成BCrypt/SCrypt/Argon2哈希密码?
BCrypt是一个计算困难的算法,设计用于存储密码通过单向散列函数。输入你的密码的算法和后有效(相对)计算后,产生一个输出。比特币自1990年以来一直存在90年代末,处理了大量的信息审查安全/加密技术社区。它已被证明是可靠和安全的随着时间的推移。
Scrypt是对Bcrypt产生的同一模型的更新。Scrypt是为了依赖于高内存需求而设计的,而不是对计算能力要求高。认识到导致这是专门的计算机芯片(FPGA/asic/gpu)可以做到的被攻击者大规模购买比大量购买要容易得多传统计算机的内存
简短回答
号
长回答
CryptoAPI和CryptoAPI Next Generation (CryptNG)都不支持bcrypt
,scrypt
或argon2
bcrypt是河豚的定制版本加密算法。CNG不支持河豚。即使是这样,bcrypt也会使用一个带有自定义"expensive">密钥设置的bcrypt版本。
scrypt(几乎)是PBKDF2,其中是CNG支持:
Byte[] scrypt(String password, int DesiredNumberOfBytes, ...)
{
Byte[] salt = SpecialScryptSaltGeneration(password, ...)
return PBKDF2(password, salt, DesiredNumberOfBytes, 1);
}
但是specialscryptsaltgeneration使用CNG中不包含的原语(ChaCha, Salsa/20)。
Argon2使用了不存在的自定义原语。