2013-01-06 171 views
4

我需要的是獲得ECDSA的私人和公共密鑰對。斯坦福大學Javascript Crypto Library以非標準方式(https://groups.google.com/forum/?fromgroups#!topic/sjcl-discuss/UaWUyMWS3Rs)做這件事,這對我來說毫無用處 - 比如製作一個MD5庫的目的是什麼?Javascript ECDSA獲取私鑰和​​公鑰?

有沒有一種在JavaScript中使用ECDSA的實際工作方式?

+0

基本上我會遠離SJCL。簡單的原因:已經發現了類似的多個問題 - 包括非常嚴重的驗證錯誤,儘管Mike似乎知道他在說什麼,但圖書館對於使用加密庫的測試還不夠完善。我會認真地嘗試通過使用SSL(用於基於瀏覽器的加密)或包裝​​庫(用於「本地」開發)來解決問題。請注意,我編寫了一個Java兼容性庫,所以我寧願推廣這個軟件。 –

回答

0

首先,您鏈接的評論是關於ECDSA簽名格式的討論,而不是密鑰對。其次,它有點誤導:

ECDSA算法的輸出是區間[1,n-1]中的兩個整數。 ECDSA標準(FIPS 183-3)沒有規定如何將這對數字編碼爲一個字節數組的標準方法。

一種方法是將數字封裝在ASN.1序列中。這是ANSI X9.62RFC3278指定的方式。它是Java和(AFAIR)Microsoft CNG/.NET的標準輸出。

另一種方法是用零填充數字,使它們具有與n相同的字節長度,然後將它們連接起來。這由PKCS#11和大多數智能卡實現完成。

如果我正確讀取源代碼,SJCL以第二種方式編碼ECDSA簽名。您可以輕鬆將此格式轉換爲第一個格式。

+0

是的,這是一個從2個二進制字節串到2個**符號**整數的簡單轉換,以相對簡單的BER格式(具有兩個INTEGER的SEQUENCE)進行封裝。但是請好好測試一下,因爲這種轉換經常**會出錯。 –