2

我試圖開發一個網站,在客戶端執行數字簽名,然後將簽名的文檔發送到服務器端。 由於沒有發送用戶的私鑰,我想在客戶端執行簽名。該密鑰(理論上)必須始終與用戶共享,並且不得將其發送到Web(即使使用SSL進行保護)。每個平臺上的XML,PDF和Office文檔的數字簽名

我希望每個平臺都可以簽署文件。我已經使用簽名算法開發了一個Java Applet,但是在iOS或Android中不支持Java。在.NET中也是不可能的。所以我認爲我僅限於JavaScript,但我不知道任何簽署XML,PDF和Office文檔的JavaScript庫。我該怎麼辦?只有使用Javascript每個平臺的作品..

你能幫助我嗎?

Regards, William。

+1

由於JavaScript中的安全性是一個有缺陷的方法(如此處所述:http://www.matasano.com/articles/javascript-cryptography/),您運氣不好。 –

回答

2

披露:我爲CoSign工作。

解決方案是使用安全的硬件加固的數字簽名設備。

您提出了在網絡「邊緣」對數據進行數字簽名的常見問題。

由於您討論的原因,在客戶端/邊緣進行簽名的想法的好運。並忘記Javascript,它是completely insecure from the cryptography point of view

你是對的,簽名者的私鑰不應該發送到任何地方。

好消息:有一種替代架構,將:

  • ,不需要將私鑰被髮送到任何地方
  • 保護私鑰
  • 啓用從所有類型的客戶包括移動簽約, Android的,.NET的iOS等通過集中化的密鑰和密鑰管理
  • 降低行政成本

答案:使用集中式簽名設備。設備在硬件級別被硬化:如果您嘗試打開盒子,則鍵被銷燬。簽名設備由我的公司和其他人制作。

在這個系統中,文檔(或更好,只是它的散列)從邊緣設備發送到集中式簽名設備。用戶還使用設備進行身份驗證(使用多種技術中的任何一種)。設備持有私鑰。它簽署散列,並將數字簽名返回給邊緣客戶端。

根據客戶端的功能,它可以:

組裝簽署文件本身(合併與源文件的數字簽名)。好處:需要在邊緣客戶端和簽名設備之間發送更少的數據。問題:需要更多的客戶端sw。或者:

設備可以返回完整的簽名文檔。受益於客戶端更簡單的實現,但要求將文檔從邊緣客戶端發送到簽名設備。

請注意,整個PDF文檔不必被髮回 - PDF數字簽名僅附加到源文檔。所以流程可以是:

  1. 發送整個PDF進行簽名。 (或者,如果客戶端可以計算它,就發送哈希。)
  2. 接收整個PDF(簽名),或者只是一個「尾部」,當它附加到源PDF時創建簽名文檔。

多種數據類型 我公司支持PDF簽訂的Word,Excel,XML和其他文件類型的開箱即用。例如,Word文檔使用Word「標準」進行簽名 - 數字簽名的Word文檔可由接收方(依賴方)進行驗證,而不需要安裝Word以外的任何內容。無插件等

簽名者身份驗證 簽名者需要使用集中式設備進行身份驗證。我公司支持多種類型的認證,包括OTP和2FA。

+0

只有一個問題:你如何確保發送的文檔/散列是正確的(即,在發送時沒有被某人修改)? – William

+0

設備的所有連接都使用SSL來防止數據被篡改。另外,客戶可以通過檢查其證書的已知良好本地副本的SSL證書來驗證該證書的ID。這可以防止某人僞裝成你的sw盒。 –

相關問題