披露:我爲CoSign工作。
解決方案是使用安全的硬件加固的數字簽名設備。
您提出了在網絡「邊緣」對數據進行數字簽名的常見問題。
由於您討論的原因,在客戶端/邊緣進行簽名的想法的好運。並忘記Javascript,它是completely insecure from the cryptography point of view。
你是對的,簽名者的私鑰不應該發送到任何地方。
好消息:有一種替代架構,將:
- ,不需要將私鑰被髮送到任何地方
- 保護私鑰
- 啓用從所有類型的客戶包括移動簽約, Android的,.NET的iOS等通過集中化的密鑰和密鑰管理
- 降低行政成本
答案:使用集中式簽名設備。設備在硬件級別被硬化:如果您嘗試打開盒子,則鍵被銷燬。簽名設備由我的公司和其他人制作。
在這個系統中,文檔(或更好,只是它的散列)從邊緣設備發送到集中式簽名設備。用戶還使用設備進行身份驗證(使用多種技術中的任何一種)。設備持有私鑰。它簽署散列,並將數字簽名返回給邊緣客戶端。
根據客戶端的功能,它可以:
組裝簽署文件本身(合併與源文件的數字簽名)。好處:需要在邊緣客戶端和簽名設備之間發送更少的數據。問題:需要更多的客戶端sw。或者:
設備可以返回完整的簽名文檔。受益於客戶端更簡單的實現,但要求將文檔從邊緣客戶端發送到簽名設備。
請注意,整個PDF文檔不必被髮回 - PDF數字簽名僅附加到源文檔。所以流程可以是:
- 發送整個PDF進行簽名。 (或者,如果客戶端可以計算它,就發送哈希。)
- 接收整個PDF(簽名),或者只是一個「尾部」,當它附加到源PDF時創建簽名文檔。
多種數據類型 我公司支持PDF簽訂的Word,Excel,XML和其他文件類型的開箱即用。例如,Word文檔使用Word「標準」進行簽名 - 數字簽名的Word文檔可由接收方(依賴方)進行驗證,而不需要安裝Word以外的任何內容。無插件等
簽名者身份驗證 簽名者需要使用集中式設備進行身份驗證。我公司支持多種類型的認證,包括OTP和2FA。
由於JavaScript中的安全性是一個有缺陷的方法(如此處所述:http://www.matasano.com/articles/javascript-cryptography/),您運氣不好。 –