.NET实现的scrypt

56

我了解了关于scrypt的一些信息,它在某些情况下比bcrypt哈希算法具有优势。

不过,似乎scrypt的应用还没那么广泛。有没有人看到过它的.NET实现(在C#中很受欢迎)?


找到了原始论文的链接(与您发布的链接相比,删除了一些链接)。 - Cameron
8
我不确定有多少好的密码学家审查了 scrypt。在您信任加密前,审查非常重要。 - CodesInChaos
@Cameron:这不是Tarsnap网站提到的同一份PDF文件吗:http://www.tarsnap.com/scrypt/scrypt.pdf? - Martin Buberl
4
我个人认为开发难以通过专用硬件暴力破解的KDF(密钥导出函数)非常重要。不确定为什么很少讨论这样的功能。通常,良好用户拥有一个强大的通用处理器和大量内存,而对于攻击者来说,每个逻辑门的性能都很重要。大多数哈希函数在硬件上实现非常廉价。 - CodesInChaos
@CodeInChaos:我同意!我不想在生产环境中使用它。但我想玩一下,并研究一下它是否可以成为未来某种替代方案。 - Martin Buberl
@Martin:是啊!我没有发现那个;-) - Cameron
3个回答

54

最后我在CryptSharp库中找到了一份C#版本的scrypt实现。
该库是开源的,并使用ISC许可证

版本历史

1.2.0 2011年1月23日:
SCrypt KDF现在作为CryptSharp.Utility.SCrypt得到支持。
添加了djb的Salsa20,是SCrypt所需的。


6
感谢开源啊。https://github.com/ChrisMcKee/cryptsharp 以及在 NUGET 上的 https://nuget.org/packages/CryptSharp/。 - Chris McKee
1
以前从未听说过 ISC 许可证。 - nawfal

22
如果像我一样通过快速谷歌搜索来到这个问题(该问题是顶部链接),你现在可以将SCrypt作为Nuget包下载到你的项目中。
PM> Install-Package Scrypt.NET

使用方法如下:

ScryptEncoder encoder = new ScryptEncoder();
string hashsedPassword = encoder.Encode("mypassword");

并进行比较

ScryptEncoder encoder = new ScryptEncoder();
bool areEquals = encoder.Compare("mypassword", hashedPassword);

这里是 Github 链接


19

这里有一个新的SCrypt .NET实现:https://github.com/replicon/Replicon.Cryptography.SCrypt

与伟大的库CryptoSharp不同,这个实现是作为一个打包封装了本地库的包装器实现的。这使得它可以使用本地级别的指令(如SSE2)大大提高实现的性能。

缺点是它必须包含本地编译的程序集,检测正确的程序集并解压加载它。这意味着它并不适用于所有环境,但在适合的环境中表现很好。


我宁愿将本地dll文件保留在与程序集相同的目录中,而不是按需解压它们。 - CodesInChaos
44
马丁:当然,scrypt 的整个意义在于即使在理想情况下实现,它也不是高效的。但是,你不希望使用一个比暴力攻击者使用的实现慢十倍的库。这将导致你使用调优参数看起来很强大,但实际上比你预期的要弱得多。 - mfenniak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接