【问题标题】:Is System.Security.Cryptography using SIMD optimisation?System.Security.Cryptography 是否使用 SIMD 优化?
【发布时间】:2019-05-29 04:42:33
【问题描述】:

我尝试使用反射器研究 SHA-256 计算。但它进入了非托管代码的某个地方。

我想要找到的是是否可以优化 .NET System.Security.Cryptography 实现。以 SIMD 为例。

所以问题是 - .NET 4.6+ SHA-256 是否使用 SIMD。如果不能 - 是否可以通过使用 SIMD 来提高性能,或者当前的实现几乎是最好的?

编辑:我目前使用的 dll 在 Microsoft System.Security.Cryptography 中使用 CAPI 本机代码,它调用的代码是 unmanaged,我无法在 atm 中找到它的源代码..

托管实现https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/sha256managed.cs 似乎没有使用 SIMD。

【问题讨论】:

标签: c# .net cryptography simd sha256


【解决方案1】:

我尝试使用反射器研究 SHA-256 计算。但它进入了非托管代码的某个地方。

.NET 中的大多数加密技术只是对系统库提供的功能的包装。 .NET Framework 中有一些历史例外(例如 SHA256Managed),但在 .NET Core 中不再存在(例如SHA256Managed is no longer managed,类型名称只是为了兼容性而存在)。

我想要找到的是是否可以优化 .NET System.Security.Cryptography 实现。以 SIMD 为例。

System.Security.Cryptography 是一个很大的命名空间,里面有很多不同的东西。由于您特别提到了 SHA-2-256,我们可以将其分解一下。

  • SHA256CryptoServiceProvider
    • 这使用来自 CAPI (crypt32.dll/advapi32.dll/etc) 的 SHA-2-256 实现。
    • 在 Windows 10(可能还有一些较旧的 Windows 版本)上,crypt32/etc 中的实现只是转发到 CNG 实现。
  • SHA256Cng
    • 这使用来自 CNG (bcrypt.dll) 的 SHA-2-256 实现。
    • Windows 8 对 SSE2 指令集的 CPU 要求最低,因此它至少可能使用 SSE2 加速。
    • AES 实现在可用时使用 AES-NI,因此该库已经具有探索新指令集和回退实现的模式。
    • 最合理的预期是,如果在 Windows 版本(或 Windows 10 的 6 个月更新)发布前一年使用市场上 CPU 的指令集可以提高速度那么 CNG 团队可能已经使用该指令制作了优化版本。
  • SHA256 托管
    • 在 .NET Core 中,这只是另一个实现的包装器。
    • 在 .NET Framework 中,您在参考源上所见即所得。
    • 可以加快速度吗?可能。
    • 会吗?似乎不太可能;不鼓励使用该类型。

(来自cmets:它使用avx2吗?avx512?)

不知道。从理论上讲,您可以进入/反汇编本机实现并找出答案。从 2017 年第二季度开始,我可以使用 AVX-512 找到的最古老的处理器是 Intel Core i7-7800X。我现在可以找到的最新的 Windows FIPS CAVP 证书是 SHS#4253(2018 年 3 月 9 日),所以 AVX 有可能-512 在最新版本的 Windows 10 上使用。

(re: avx2/avx512 for sha256)我该如何管理?

AFAIK,你不能;除了加入那个团队 (https://careers.microsoft.com)。

例如,我有 Amazon.Glacier dll,它使用 sha256 托管而不是 Cng。我想让它使用我不需要的默认设置。

您需要让亚马逊改为使用SHA256.Create()。更改别人的代码并没有真正实用的方法(除非它是接受贡献的开源...在这种情况下,您可以尝试直接更改它)。

【讨论】:

  • 是的,谢谢.. 迄今为止最好的信息.. Re: Glacier - 我今天重新创建了他们在我自己的代码中使用的任何内容,并使用 Cng 提供我自己的哈希值。速度提升 48%。
  • P.S. 2015 年 8 月的至强也应该有 AVX512,所以它不是太奇特
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多