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库下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21朵水仙花算法java,柏拉图说,如果你有两块面包,你应当用一块去换一朵水仙花。。。。。...

昨天做了一回“黑心商贩”,和我们的团伙一起去卖花了。街上的小情侣们很甜蜜啊,看男孩们眼里的宠爱和迁就还有女孩们小鸟依人的姿态,真是替他们幸福啊!(我跟这儿瞎激动啥啊!)关键是,正谈恋爱的小情侣们掏钱…

Linux 命令之 ps -- 显示进程状态/查看进程信息

文章目录介绍语法格式常用选项命令示例示例 1,查看进程的 PID、名称以及 CPU 占用率示例 2,查看所有的进程示例 3,按内存资源的使用量对进程进行排序示例 4,按 CPU 资源的使用量对进程进行排序示例 5,显示所有进程信息…

ts获取服务器数据_怎么使用Satruts2实现页面列表数据导出到Excel表格

Java codeprivate InputStream excelFile;public void setExcelFile(InputStream excelFile) {this.excelFile excelFile;}public InputStream getExcelFile() {return excelFile;}public String createExcelFile() {try {String[] headName { "昵称","电子邮…

java登录界面命令_Java命令行界面(第5部分):JewelCli

java登录界面命令细算在Java命令行处理与Apache的百科全书CLI , args4j , jbock和命令行中先前的文章,我把注意力转向在这个岗位使用JewelCli完成的命令行参数相似的处理Java中。 几个Java命令行处理库使用批注来定义命令行选项。 到目前为止…

matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)

本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影、仿射、投影、多项式、分段线性、局部加权平均配准的过程。实验平台X86 PC,Windows XP sp2, Matlab 7.1资源的获取matlab工具的使用方法:查看帮助mage Processing Toolb…

Linux 命令之 pstree -- 以树状图显示进程/查看进程信息

文章目录介绍常用选项命令示例介绍 Linux 系统中 pstree 命令的英文全称是“process tree”,即将所有进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显…

totolinkn200up怎么设置_totolinkN200R无线路由器如何设置啊,求高人指点

展开全部totolinkN200R无线路e68a84e8a2ad3231313335323631343130323136353331333337393532由器设置方法:【设置无线路由器方法】【家庭网络环境布线】:1、有猫(modem):猫(modem)----路由器wan口;路由器lan口----电脑。2、没有猫(…

jersey 入门示例_Jersey Web Service Hello World Java示例

jersey 入门示例在Restlet之后, Jersey是另一个流行的开源框架,可以用Java创建RESTful Web服务 。 Jersey符合JAX-RS规范,实际上它是JAX-RS(JSR 311)(http://jsr311.java.net/nonav/releases/1.1/index.htm…

php domdocument getelementbyid,PHP DOMDocument- getElementByID添加Â代替空

PHP DOMDocument-> getElementByID添加代替空(PHP DOMDocument->getElementByID adding in place of empty )我正在使用PHP的DOMDocument对象来解析一些HTML(使用cURL获取)。 当我按ID获取元素并输出它时,任何空的 标记都会获得一个额外的字符并变为 。代码…

Linux 命令之 whois 命令-用于查找并显示用户信息

文章目录介绍参考示例介绍 whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别。 参考示例 [rootlocalhost www]# whois root…

gptuefi优势_UEFI+GPT的区别,有啥不同?写的很详细易懂

搜索相关知识时看到的好文章,由于百度空间挂了,在此注明出处作者QQ:407647406以表谢意,原地址戳我其实楼主早就知道UEFI,曾经也一直关注并试图了解,无奈限于当时国内有关资料匮乏,实在找不到什么使用有效能…

oauth2和jwt_OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

oauth2和jwt免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章: 不要太相信我要说的话。 我之所以这样说,是因为我们正在讨论安全性。 而且, 当您谈论安全性时,除了100%正确的陈述外,还有冒任何其他…

matlab的exec程序,C++调用Matlab画图的一段程序

劳动节闲来无事,写了一天程序,just for fun.看,这是C调用Matlab画图的一段程序。暂时不想多解释了,有兴趣的话,看看下面的代码吧。以下几段代码由上到下,越来越旧。最上面的是最新更新的版本。#include#inc…

Linux 命令之 iwconfig 命令-配置无线网络接口

文章目录介绍常用选项参考文档介绍 使用iwconfig命令可以为无线接口显示或设置网络接口的参数,它可以用来配置无线网络接口,是非常好用的。 常用选项 选项说明essid设置无线网卡的ESSID(Extension Service Set ID)。通过ESSID来区分不同的无线网络&am…

java gc cms_Java垃圾收集器:G1GC何时将CMS强制退出?

java gc cms在针对JDK 9(2017/4/4)提出的JEP中 , Mark Reinhold写道JEP 291 (“弃用并发标记扫描(CMS)垃圾收集器”)是“已被放置在在讨论和审查后,由所有者将其定位为目标”。 如果…

ios 高德地图加载瓦片地图_IOS 高德地图 API 加载 WMS 服务

IOS 高德地图 API 加载 WMS 服务本文主要介绍通过自定义高德地图 MATileOverlay 接口,添加 WMS 服务到地图上。废话少说,先贴代码。代码自定义类 WMSTileOverlayUtil,继承自高德地图接口 MATileOverlay,主要重载函数:-…

Linux 命令之 iwlist 命令-从无线网卡获取更详细的无线信息

文章目录介绍常用选项命令示例介绍 iwlist 命令用于对 /proc/net/wireless 文件进行分析,得出无线网卡相关信息。 常用选项 选项说明scanning搜索当前无线网络frequen显示频道信息rate显示连接速度power显示电源模式txpower显示功耗retry显示重试连接次数(网络不…

drools dmn_DMN 1.1 XML:从建模到使用Drools 7.0的自动化

drools dmn我是一名自由顾问,但今天我是一名博士生。 本文的全球背景是企业架构(EA),它需要对企业进行建模。 由于EA的一个方面是业务流程建模,所以我使用BPMN已有数年之久,但是这种表示法并不十分适合表示…

矩阵期望 matlab,matlab中矩阵元素求和、求期望和均方差

在matlab中求一个矩阵中元素的和可以自己编写for循环来完成,这样比较方便,想求那些数据的和都可以做到,然而效率比较低,如果数据量大程序会跑好长时间。所以我们可以转而用matlab提供的sum函数。设M为一个矩阵,那么&am…

python默认字体大小_python – 如何设置PIL加载的默认字体的大小,使其适合我的8×8矩阵?...

我正在努力在88矩阵显示器上显示文本,而且我没有在我的BeagleBone上知道的.ttf文件.根据示例here,我应该能够说font ImageFont.load_default()而不是加载.ttf,但是,这显然不是指定字体的尺寸!有什么办法吗?或者,是否有一个地方你知道我可以在我的BBB版本…