首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Security.Cryptography是否使用SIMD优化?

System.Security.Cryptography是否使用SIMD优化?
EN

Stack Overflow用户
提问于 2019-01-02 14:18:01
回答 1查看 342关注 0票数 1

我试着用反射镜研究SHA-256的计算。但它会进入一些非托管代码。

我要找的是.NET System.Security.Cryptography实现是否可以优化。例如使用SIMD。

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

编辑:我目前使用的dll是在Microsoft System.Security.Cryptography中使用CAPI本机代码,它调用的代码是非托管,我找不到它的源代码。

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

EN

Stack Overflow用户

回答已采纳

发布于 2019-01-04 17:35:20

我试着用反射镜研究SHA-256的计算。但它会进入一些非托管代码。

.NET中的大多数密码学只是系统库提供的功能的包装器。.NET框架中有一些历史异常(例如SHA256Managed),但这些异常在.NET核心中不再存在(例如,SHA256Managed不再被管理,类型名称只是为了兼容性而存在)。

我要找的是.NET System.Security.Cryptography实现是否可以优化。例如使用SIMD。

System.Security.Cryptography是一个很大的名称空间,其中包含许多不同的东西。既然你特别提到了SHA-2-256,我们可以把它分解一下。

  • SHA256CryptoServiceProvider
    • 这使用了CAPI的SHA-2-256实现(crypt32.dll/advapi32.dll/etc)。
    • 在Windows 10 (可能还有一些旧的Windows版本)上,密码32/etc中的实现只是转发给CNG实现。

  • SHA256Cng
    • 这使用了CNG (bcrypt.dll)的SHA-2-256实现.
    • Windows 8对SSE2指令集的CPU要求最低,因此它至少可能使用SSE2加速比。
    • AES实现在可用时使用AES-NI,因此库已经有探测新指令集的模式,并有后备实现。
    • 最合理的期望是,如果在Windows版本(或Windows 10的6个月更新)发布前一年,在市面上有CPU的指令集能够提高速度,那么CNG团队可能已经使用该指令进行了优化版本。

  • SHA256Managed
    • 在.NET核心中,这只是另一个实现的包装器。
    • 在.NET框架中,你在参考资源上看到的就是你得到的东西。
    • 能加快速度吗?可能吧。
    • 会吗?似乎不太可能;这种类型的使用是不鼓励的。

(注释:它使用avx2吗?)avx512?)

不知道。从理论上讲,您可以进入/分解本机实现并找到答案。我在AVX-512中能找到的最老的处理器是英特尔核心i7-7800X,它来自Q2 2017。我现在能找到的最新的用于Windows的FIPS证书是SHS#4253 (3/9/2018),所以AVX-512有可能在Windows10的最新版本上使用。

(re: avx2 2/avx2 512,用于sha256),我该如何处理呢?

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

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

你需要让亚马逊转而使用SHA256.Create()。没有一种实际的方法来改变其他人的代码(除非它是开放源码的,接受贡献.在这种情况下,您可以尝试直接更改它)。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54007950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档