2013-10-26 47 views
3

.NET中Microsoft橢圓曲線支持的侷限性是什麼?我僅指的是System.Cryptography命名空間的可能性。.NET中支持什麼橢圓曲線?我可以定義自己的曲線,還是重複SEC標準?

使用該命名空間,我可以實現自定義曲線,還是僅限於在框架中硬編碼的不同子集?

我特別感興趣的一條曲線是secp256k1,但我不想限制自己。

爲什麼我不使用Bouncy Castle,只專注於微軟?原因是因爲Hash函數的微軟實現比Bouncy Castle快很多倍,所以我認爲基於橢圓曲線的自定義加密算法。

我不介意是否需要更新註冊表或ini文件以添加對其他曲線的支持或構建底層類;我只想看看可能性和侷限性。

+0

這有幫助嗎?:http://bitcoin.stackexchange.com/questions/3875/which-programming-languages-support-secp256k1 – weston

+0

@weston我已經看到了那個鏈接,以及它引用的C#代碼。不,它只顯示了Bouncy Castle的實現......我有興趣使用僅限微軟的庫來實現EC – LamonteCristo

+2

@ makerofthings7:如果僅MS的東西真的可以做到值得該死,爲什麼它很難找到*不*圍繞第三方庫的例子? – cHao

回答

2

.NET支持的唯一曲線是NIST在Suite B中定義的P-xxx曲線(並且長期以來)。任何其他曲線不支持開箱即用。您已經定義了特定的非NIST非素數曲線(Koblitz曲線),因此CNG不支持該曲線。

更確切地說,ECDSA和ECDH密鑰的CNG only supports the following domain parameters。當它們被用於 「命名曲線」 過這些參數只支持:

P-256,P-384,P-521

注:因爲我沒有簽署保密協議或者與微軟類似,我無法檢查這些值是否是硬編碼的,但我會認爲這很可能。

+1

所有推薦的曲線都是由NSA'backdoored' 。不要使用它們。 – RedHotScalability

+0

@RedHotScalability不要傳播FUD。沒有人找到一種方法來查看當前參數如何被利用。隨機數的產生有點可疑,所以你最好使用[安全曲線](http://safecurves.cr.yp.to)。我們唯一可以肯定的後門是唯一的雙EC *隨機數發生器*。 –