【问题标题】:.NET implementation of scryptscrypt 的 .NET 实现
【发布时间】:2011-06-18 06:34:51
【问题描述】:

我已经了解了scrypt 以及它在某些情况下相对于bcrypt 散列算法的一些优势。

无论如何,scrypt 似乎还没有被广泛使用。到目前为止,有没有人见过它的 .NET 实现(在 C# 中更受欢迎)?

【问题讨论】:

  • 找到original paper 的链接(从您发布的链接中删除了一些链接)
  • 我不确定优秀的密码学家审查了多少 scrypt。在您信任加密货币之前,审查非常重要。
  • @Cameron:这不是 Tarsnap 网站引用的同一个 PDF:tarsnap.com/scrypt/scrypt.pdf 吗?
  • 我个人认为用专门的硬件很难暴力破解的 KDF 的开发很重要。不知道为什么对这些功能的讨论如此之少。良性用户通常拥有一个强大的通用处理器和大量 RAM,而对于攻击者而言,每个逻辑门计数的性能。而且大多数哈希函数在硬件中实现起来非常便宜。
  • @CodeInChaos:我同意!我不想在生产环境中使用它。但我想玩弄它并研究它是否可以成为将来以某种方式使用的替代品。

标签: c# .net cryptography hash scrypt


【解决方案1】:

最后,我在CryptSharp library 中找到了 C# 中 scrypt 的实现。
该库是开源的,使用ISC license

版本历史

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

【讨论】:

【解决方案2】:

如果您像我一样通过快速 google (作为顶部链接出现)找到了这个问题,您现在可以将 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 link here

【讨论】:

    【解决方案3】:

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

    与 CryptoSharp 不同的是,它是一个很棒的库,它是作为一个封装了原生库的包装器来实现的。这允许它使用本机级指令(如 SSE2)来显着提高实现的性能。

    缺点是它必须包含本地编译的程序集,检测正确的使用,解包,然后加载它。这意味着它并不适用于所有环境,但它在工作的地方都能很好地工作。

    【讨论】:

    • 我宁愿将原生 dll 保存在与程序集相同的目录中,而不是按需解包。
    • Martin:当然,scrypt 的全部意义在于,即使它实现得很理想,它也不是高性能的。但是,您不想使用执行速度比暴力攻击者将要使用的实现慢十倍的库。这将导致您使用看似强大但实际上远低于您预期的调整参数。
    猜你喜欢
    • 2014-04-09
    • 2017-03-31
    • 2011-11-28
    • 2017-09-04
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多