簡體   English   中英

System.Security.Cryptography 是否使用 SIMD 優化?

[英]Is System.Security.Cryptography using SIMD optimisation?

我試圖用反射器研究 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。

我試圖用反射器研究 SHA-256 計算。 但它進入非托管代碼的某個地方。

.NET 中的大多數密碼學只是系統庫提供的功能的包裝器。 .NET Framework 中有一些歷史異常(例如 SHA256Managed),但這些在 .NET Core 中不再存在(例如SHA256Managed 不再是 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 中,您在參考源上看到的就是您得到的。
    • 可以加速嗎? 大概。
    • 會嗎? 似乎不太可能; 不鼓勵使用該類型。

(來自評論:它使用 avx2 嗎?avx512?)

不知道。 從理論上講,您可以進入/反匯編本機實現並找出答案。 我能用 AVX-512 找到的最老的處理器是Intel Core i7-7800X ,從 2017 年第二季度開始。我現在能找到的最新的 Windows FIPS CAVP 證書是 SHS#4253 (3/9/2018),所以有機會AVX-512 用於最新版本的 Windows 10。

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

AFAIK,你不能; 除了加入該團隊( https://careers.microsoft.com )。

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

您需要讓亞馬遜更改為使用SHA256.Create() 改變別人的代碼並沒有真正實用的方法(除非它是接受貢獻的開源......在這種情況下,你可以嘗試直接改變它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM