Hash Argon2id散列速度慢(差异大)

Hash Argon2id散列速度慢(差异大),hash,argon2-ffi,Hash,Argon2 Ffi,我使用的是通过Isopoh.Cryptography.Argon2 NuGet包提供的C#Argon2实现(这里的最新版本1.1.2:)。生成和验证Argon2哈希有时很快,有时非常慢(几秒钟),尽管我理解下面的配置是低成本的 我的Argon2配置如下: Type = Argon2Type.HybridAddressing, Version = Argon2Version.Nineteen, MemoryCost = 16, //I had this at 2048 and lowered to

我使用的是通过Isopoh.Cryptography.Argon2 NuGet包提供的C#Argon2实现(这里的最新版本1.1.2:)。生成和验证Argon2哈希有时很快,有时非常慢(几秒钟),尽管我理解下面的配置是低成本的

我的Argon2配置如下:

Type = Argon2Type.HybridAddressing,
Version = Argon2Version.Nineteen,
MemoryCost = 16, //I had this at 2048 and lowered to 16 for testing, still slow
TimeCost = 2,
Lanes = 2,
Threads = 1,
HashLength = 32, 
ClearPassword = true,
ClearSecret = true
这将导致Argon2哈希,其中显示以下配置头:

$argon2id$v=19$m=16,t=2,p=2$<<hash>>
$argon2id$v=19$m=16,t=2,p=2$
我编写了一个性能分析器,发现在大约10到12次迭代之后,即使在重复测试中,每个迭代的实现(大部分)都会变慢。慢度约为2个数量级或更多(从10毫秒到几秒钟),这让我相信存在垃圾收集/内存泄漏问题


我发现这个问题确实与Argon2实现和/或垃圾收集有关

生成哈希后立即通过
GC.Collect()
(我通常不建议手动执行)强制垃圾收集(其中包括对哈希实例和
SecureArray
实例使用
换行,这两个实例在问题发生时都已存在)移除散列生成速度中的奇数差异

它还允许我将参数调整到更安全的设置,同时保持在~100-150ms的生成时间范围内