簡體   English   中英

是否在 System.Security.Cryptography.RSA.Encrypt 方法中使用 RSAEncryptionPadding.OaepSHA256 假設 MGF1 填充?

[英]Is MGF1 padding assumed in System.Security.Cryptography.RSA.Encrypt method with RSAEncryptionPadding.OaepSHA256?

我需要使用 OaepSHA256 和 MGF1 填充使用 RSA 公鑰加密純字節。 所以我想我可以編寫以下代碼(使用 .net framework 4.7):

var encryptionCert = new X509Certificate2(certBytes);
using (var rsaPublicKey = encryptionCert.GetRSAPublicKey()) // Get an instance of RSA derived class
    {
        var encryptedKeyBytes = rsaPublicKey.Encrypt(plainBytes, RSAEncryptionPadding.OaepSHA256);  
}

我不知道 MGF1 填充和最佳非對稱加密填充 (OAEP) 是否相關。

以下是我的問題:

  1. 在 .net 框架中,上面的代碼是否會自動考慮 MGF1 填充(除了提供的 OAEP)?
  2. 如果沒有,那么我有什么選擇來實現我的目標(除了去充氣城堡圖書館)?

OAEP是padding方案,需要2個不同屬性的hash函數來操作。 一個散列函數應該將任意大小的輸入映射到固定大小的輸出。 這種類型的哈希函數是眾所周知的, SHA-256MD5等等都是這種類型。 規范允許將不同的函數用於 OAEP 填充,例如 SHA-256、SHA-1 等。

另一個散列函數應該將任意大小的輸入映射到任意大小的輸出。 這種散列函數稱為“掩碼生成函數”(MGF)。 相關的RFC只定義了一個這樣的函數,MGF1:

這里給出了一個掩碼生成函數:MGF1,它基於散列函數。
...

本文檔的未來版本可能會定義其他掩碼生成函數。

因為只有一個定義的掩碼生成函數,.NET api 不允許您選擇它(沒有任何選擇),並且在您使用帶有 OAEP 填充的 RSA 時總是使用它 (MGF1)。 但是,可以使用散列參數化 MGF1。 例如,參見Java SE 中MGF1ParameterSpec 類 .NET API似乎總是使用特定的哈希函數,不清楚它是 SHA-1 還是 SHA-256。

暫無
暫無

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

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