2011-09-12 63 views
1

我需要驗證包含多個值的消息的簽名。我擁有的唯一參數是簽名,公鑰和值本身。用於創建簽名的算法是具有192位的橢圓曲線密碼學。我已經嘗試在網上找到代碼示例,但是我沒有找到任何關於此案例的信息。使用橢圓曲線加密驗證簽名

有沒有人使用Java進行驗證這種算法經歷?您能否提供代碼或示例鏈接?

謝謝你的幫助!

回答

0
+0

謝謝你的回答。不幸的是,與bouncycastle wiki的鏈接無效,我總是得到一個服務器錯誤。 – sebastian

+0

@Skiontke是的,它現在不適合我,這就是爲什麼我不能給你發送更詳細的答覆。它可能會暫時下降... –

+0

@SKiontke javadocs在這裏:http://bouncycastle.org/docs/docs1.6/index.html檢查以EC開始的課程... –

4

你在資料裏有一個有點短...

存在使用橢圓曲線的幾個簽名方案,但最普遍的(迄今爲止)是ECDSA。您必須擔心以下幾點:

  • 簽名對一系列位進行操作。每一個數據位必須是正確的。在這裏,你有「值」,所以必須將這些值編碼爲一系列位(或字節)。要驗證簽名,您必須使用與用於生成簽名的編碼相同的編碼。

  • ECDSA開始通過用cryptographic hash function散列的輸入數據。還有,您必須使用與生成簽名所使用的相同的名稱。作爲一個猜測,我會說散列函數可能是SHA-1

  • ECDSA在elliptic curve工作。曲線大小不足以定義曲線:有許多192位曲線。但是,由於定義自己的曲線很困難,因此大多數人使用FIPS 186-3中定義的15條曲線中的一條曲線。其中15條曲線中有一條具有「192位大小」(稱爲「P-192」),因此簽名可能會使用該曲線。

  • 的ECDSA公鑰是一個曲線點的編碼。曲線點名義上是一對整數(X,Y)(這些是該點的「座標」)。這些整數來自曲線所在的基礎領域;對於P-192曲線,座標是192位整數。 「正常」編碼爲這樣的公共密鑰在一個49字節的字符串:第一個字節將是0×02,隨後的X(24字節)的大端無符號編碼,那麼無符號編碼ÿ (24字節)。其他編碼是可能的。

  • 的ECDSA簽名正式由兩個整數值,通常被稱爲[R小號(192位整數太)。還有,你擁有的簽名可能是一個字節序列,它是兩個整數的編碼。有兩種常見的編碼,一種是兩個值的原始大端無符號編碼(因此是48字節簽名),另一種是使用ASN.1(對於長度爲53或54字節的簽名,等等)。

正如@Ashkan所說,使用Bouncy Castle是一個好主意。但是,正如你所看到的,對於你的情況有很多假設要做。如果您想深入瞭解正在發生的事情,請購買ANSI X9.62:2005(ECDSA標準)的副本。要注意的是,數學內容非常重要。

+0

我喜歡這個,但我們真的不應該正在調用座標「整數」.. – cidermonkey