4

我正在使用通过 Isopoh.Cryptography.Argon2 NuGet 包提供的 C# Argon2 实现(来自此处的最新版本 1.1.2:https ://github.com/mheyman/Isopoh.Cryptography.Argon2 )。生成和验证 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>>

我编写了一个性能分析器,发现在大约 10 到 12 次迭代之后,每次迭代的实现(大部分)都会变慢,即使在重复测试中也是如此。速度慢约 2 个数量级或更多(从约 10 毫秒到几秒),这让我相信存在垃圾收集/内存泄漏问题。

在此处输入图像描述

4

1 回答 1

3

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

在生成哈希(包括哈希实例和实例的包装,当问题发生时这两者都已经存在)之后立即强制垃圾收集GC.Collect()(我通常不建议手动执行)消除了奇怪的差异哈希生成速度。usingSecureArray<byte>

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

在此处输入图像描述

于 2019-08-12T19:05:56.663 回答