簡體   English   中英

為什么 ECDSA 會為相同的數據生成不同的簽名,而 RSA 不會?

[英]Why does ECDSA produce different signatures for the same data, whereas RSA doesn't?

考慮使用 RSA 的以下代碼...

例子:

byte[] raw = Encoding.Default.GetBytes("Hello, World!");
RSA key = RSA.Create();

for (int index = 0; index < 5; index++)
{
    byte[] signed = key.SignData(raw, HashAlgorithmType.SHA256, RSASignaturePadding.Pkcs1);
    string hashed = signed.ToSha256String();
    Console.WriteLine(hashed);
}

輸出:

043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89 043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89 043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89 043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89 043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89

現在考慮相同的代碼,除了使用 ECDSA...

例子:

byte[] raw = Encoding.Default.GetBytes("Hello, World!");
ECDsa key = ECDsa.Create();

for (int index = 0; index < 5; index++)
{
    byte[] signed = key.SignData(raw, HashAlgorithmType.SHA256);
    string hashed = signed.ToSha256String();
    Console.WriteLine(hashed);
}

輸出:

043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89 a31fe9656fc8d3a459e623dc8204e6d0268f8df56d734dac3ca3262edb5db883 a871c47a7f48a12b38a994e48a9659fab5d6376f3dbce37559bcb617efe8662d d7ef0a04f3c8055644677299a9414a75adcb15916eb48417416c9317ace2ff4f 779f5dd63960abda52a7da70464b92eedd47f84a8dffda2d672e6a99de1bab95

我期望的 RSA 簽名輸出; ECDSA的,我沒有。 為什么 ECDSA 會為相同的數據生成不同的簽名?

橢圓曲線數字簽名算法(ECDSA) 是經典 DSA 算法的改編版,它依賴於加密安全的隨機數生成器 例如:ECDSA 簽名算法計算消息的哈希值,然后生成一個隨機整數k並計算簽名(一對整數 { R , S } )。 Rk計算得出, S由消息哈希 + 私鑰 + 隨機數k計算得出。 因此,由於隨機性,簽名是不確定的。

您可以在此處試驗橢圓曲線。

ECDSA 的簽名由RS的組合組成,其中R是一個取決於隨機參數k的值,該參數又輸入到 ECDSA 算法中。 S反過來取決於該值。 如果R是一個靜態值,那么它將允許攻擊者計算私鑰 (!)

使用 PKCS#1 v1.5 填充的簽名生成是確定性的這一事實使得它變得奇怪。 實際上,帶有 PSS 填充的 RSA 是使用顯式鹽隨機化的,因此確定性行為與 RSA 沒有任何關系; 您甚至可以說它是一個不需要的屬性,因為它確實將有關已簽名的消息/數據的信息暴露給了驗證者以外的其他方。

但是,如果必須,可以使用基於消息本身和私​​鑰的確定性方案來計算k 這在特定協議中可能有一些優勢; 例如,這意味着不需要存在隨機數生成器。 通常建議使用 ECDSA 的非確定性/隨機版本。

最后,證明在布丁中:如果使用公鑰驗證成功,則您的簽名生成過程符合規范。 為了使方案安全,除其他要求外,公鑰當然必須經過驗證和信任。

暫無
暫無

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

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