2010-01-03 26 views
1

我有以下情形掙扎:數字簽名 - 分離PKCS#7到XML-DSIG

  1. 的XML消息創建客戶端,並使用Mozilla的window.crypto.signText數字簽名。簽名後,消息和簽名通過web服務(.net)傳輸到服務器。一切都很好,直到這一點。

  2. 在服務器上,XML應包含在另一個可公開訪問的XML文檔中。爲了授予不可否認性,簽名也應該公佈。

問:是否有平滑的選項將分離的Pkcs#7轉換爲XML-DSIG(例如.net框架中的功能)?

問題2:還是可以在不使用外部插件的情況下創建已經客戶端的XML-DSIG?

Tnx爲您提供幫助!

阿洛伊斯·波林

回答

4

由於雙方數字簽名格式XML和PKCS#7的性質,它是不可能從一個到另一個轉換。

在一個非常簡單的解釋中,PKCS#7格式的簽名除其他內容外還包含一些稱爲DigestInfo的特定數據結構,其中包含數據摘要和OID(對象標識符),並已用用戶的私鑰加密。格式XML-Dsig將加密算法的最後一步(再次使用用戶的私鑰)應用於從摘要原始XML數據和一些特定XML-DSig數據結構計算出的不同數據值。因此,由於兩個加密值不會相同,所以只能通過用用戶的私鑰簽署數據來生成XML-DSig簽名,而這些私鑰是您無權訪問的(因此名稱爲private)。

從這個解釋中,您的第一個問題的答案是「不,沒有光滑的選項,根本不可能」

因此唯一的選擇是直接在客戶端生成XML-DSig。這是不可能的使用標準的JavaScript,絕對不是與Firefox的window.crypto(它只生成PKCS7分離簽名)。在我的公司(www.isigma.es),我們通過使用applet解決了這個問題,它是數字簽名行業的常用解決方案(有許多商業和一些開源解決方案)。如果你不想使用瀏覽器插件,這可能不是你的選擇。

CAPICOM(您可能在Microsoft設置中使用的基於Windows的活動/ X組件)也不會生成XML-DSig,只生成CMS/PKCS7。

+0

評論你的舊答案 - 因爲你似乎對webapps中的數字簽名有所瞭解,所以我想知道你是否對我的問題有任何建議 - http://stackoverflow.com/questions/17607604/digitally-signing -data-in-a-web-app – user93353 2013-07-12 12:37:52

+0

另外一個問題 - 是否有可能 - 即將XMLDSig轉換爲PKCS#7簽名? – user93353 2013-07-12 12:39:51

+0

這就是我在第一段中的意思。你不能從任何一個轉換到另一個。 – 2013-07-12 16:20:28