Encryption
幾乎相似,但仍然不同的算法名稱。有什麼區別?
我被從 Stack Overflow 發送到這裡(原始問題)。我對密碼程式很陌生。我想在應用程序啟動時生成 TLS 證書。它是一個 Spring Boot 應用程序,因此是 Java,這意味著我正在使用Bouncy Castle。現在我必須決定預設算法是什麼。我瀏覽了 Bouncy Castle 的所有給定算法,現在我有一個愚蠢的問題:
SHA WITH EC-DSA
和 和有什麼不一樣SHA WITH PLAIN EC-DSA
?
根據該評論,在BSI TR-03111
PLAIN-ECDSA
的第5.2.1.1節中指定。它是ECDSA的變體,具有相同的功能和數學,但使用了不同的簽名編碼。因此,除非驗證算法有意接受這兩種格式,否則這兩者是不兼容的(這將是安全的,但我想這並不常見)。主要的功能區別在於 X9.62 格式具有可變大小簽名,而當
PLAIN-ECDSA
具有恆定大小簽名時。這是因為在簽名的ASN.1編碼中,前者對r $ r $ 和s $ s $ 簽名的組成部分為兩個 ASN.1 INTEGER,當後者使用連接的固定大小表示時r $ r $ 和s $ s $ 作為大端字節串。如果和當 ASN.1 編碼時,簽名是一個 ASN.1 BIT STRING。OID 也不同。對於曲線n $ n $ 剛好低於 256 的冪(很多都是),X9.62 格式的大小對於 ≈25.0% 的簽名是最大的,對於 ≈49.8% 減少一個,對於 ≈25.0% 減少兩個,對於 ≈0.195% 減少三個, ≈0.00114%(繼續)少了四個:X9.62 格式使使用 ad-hoc ASN.1 解析器的簽名解析和黑盒測試變得複雜。
感謝 dave_thompson_085 指出我最初的答案是完全錯誤的。