日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

webcrypto库下载_使用WebCrypto API的电子签名

發布時間:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webcrypto库下载_使用WebCrypto API的电子签名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

webcrypto庫下載

有時我們需要讓用戶進行電子簽名。 通常,人們會理解為以某種方式將您的手寫簽名放置在屏幕上。 根據管轄范圍,可能很好,或者僅存儲圖像可能還不夠。 例如,在歐洲,有910/2014號法規 ,該法規定義了什么是電子簽名。 從法律文本可以預期到,該定義相當模糊:

“電子簽名”是指電子形式的數據,該數據附加到其他電子形式的數據上或與其他邏輯形式相關聯,并由簽字人用來簽署;

是的,再讀幾次,再說幾次“ wat”,讓我們討論一下這是什么意思。 它基本上可以表示任何東西。 僅將繪制的簽名的圖像(例如,使用html畫布)附加到數據上,并且仍然可以計數,這在技術上是可以接受的。

但是,當我們使用更具體的電子簽名類型-高級和合格的電子簽名時,情況會好一些:

高級電子簽名應滿足以下要求:
(a)與簽字人有獨特的聯系;
(b)有能力識別簽字人; (c)它是使用電子簽名創建數據創建的,簽名者可以在其唯一的控制下以高度的信心使用該簽名; 和 (d)它以這種方式鏈接到用其簽名的數據,從而可以檢測到該數據的任何后續更改。

從技術意義上講,這看起來像是正確的“數字簽名”,例如,使用私鑰進行簽名,并使用公共密鑰來驗證簽名。 “合格”簽名需要由合格的提供者發出,該提供者基本上是一個受信任的證書頒發機構。 必須在安全設備(智能卡和HSM)上發布用于放置合格簽名的密鑰,以便除所有者外,其他任何人都不能訪問私鑰。

但是,高級簽名和合格簽名之間的法律區別尚不完全清楚–該法規明確指出,不合格簽名也具有法律價值。 在瀏覽器中使用合格的簽名(帶有智能卡)會給用戶帶來可怕的體驗-在大多數情況下,它會通過Java Applet進行,而Java Applet基本上只能在Internet Explorer和當今的特殊Firefox版本上運行。 替代方案包括處理簽名的桌面軟件和本地服務JWS應用程序,但是智能卡目前是一個大問題,而且話題不多。

那么,我們如何允許用戶“放置”電子簽名? 我有一個想法,那就是可以完全使用WebCrypto API來完成此工作,如今,WebCrypto API在瀏覽器中或多或少地得到了支持。 這個想法如下:

  • 讓用戶輸入密碼以作弊
  • 從密碼中獲取密鑰(例如,使用PBKDF2)
  • 使用派生密鑰在用戶提交的表單內容上簽名
  • 將簽名與其余表單數據一起存儲
  • (可選)存儲派生密鑰以進行驗證

這是實現該流程的javascript要點 。

許多片段來自非常有用的webcrypto示例存儲庫 。 hex2buf,buf2hex和str2ab函數是實用程序(可惜在js中不是標準的)。

該代碼的作用很簡單,即使有點冗長。 所有操作都使用Promise和“ then”鏈接在一起,說實話,這對編寫和閱讀非常繁瑣(但我想不可避免):

  • 密碼作為原始密鑰加載(轉換為數組緩沖區后)
  • 使用PBKDF2導出一個秘密密鑰(具有100次迭代)
  • 密鑰用于對用戶填寫的內容進行HMAC“簽名”
  • 簽名和密鑰被存儲(在此示例中的UI中)
  • 然后可以使用以下數據驗證簽名:數據,簽名和密鑰

您可以在這里進行測試:

存儲簽名應足以滿足“電子簽名”的定義。 這是只有用戶知道的秘密密碼,甚至可能意味著這是“高級電子簽名”。 存儲派生的秘密密鑰是有問題的–如果存儲它,則意味著您可以代表用戶“偽造”簽名。 但是,不存儲它意味著您無法驗證簽名-只有用戶可以。 根據用例,您可以選擇其中一個。

現在,我不得不承認我嘗試從密碼(RSA和ECDSA)派生非對稱密鑰對。 WebCrypto API不允許開箱即用。 因此,我嘗試使用deriveBits()“生成”密鑰,例如,為RSA設置“ n”和“ d”值,為ECDSA設置x,y和d值( 可以在稍作搜索后在此處找到) 。 但是我失敗了–您不能僅將任何值指定為importKey參數,并且約束條件未記錄在任何地方,除了底層算法細節以外,這超出了我的實驗范圍。

目的是,如果我們僅從密碼中獲取私鑰,就可以輕松地從私鑰中獲取公鑰(反之則不然)–然后我們將公鑰存儲以進行驗證,而私鑰仍然是真正的私鑰,這樣我們就不能偽造簽名。

我必須在此處添加免責聲明,因為我意識到這不是很安全。 首先,在許多情況下從密碼派生密鑰是有問題的。 但是,在這種情況下(放置簽名),可以。

附帶說明一下–使用WebCrypto API十分繁瑣。 也許是因為還沒有人真正使用過它,所以搜索錯誤基本上可以為您提供Chromium的源代碼,而沒有其他任何東西。 感覺像是一個未知的領域(盡管文檔和示例足以使您入門)。

我不知道以這種方式進行電子簽名是否有用。 我將其實現為一個實際有意義的用例(參與方成員資格聲明簽名)。 它是否比畫布上的手繪簽名更好–我認為是這樣(除非您從圖像中得出密鑰,否則,由于較高的熵,手寫的密鑰會更好)。

翻譯自: https://www.javacodegeeks.com/2017/06/electronic-signature-using-webcrypto-api.html

webcrypto庫下載

總結

以上是生活随笔為你收集整理的webcrypto库下载_使用WebCrypto API的电子签名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。