「区块链基础概念100」:数字签名 | 014
「区块链基础概念100」由火星财经「学习区块链」频道出品,在区块链基础概念之上延展深度阅读,并紧密连接产业,关注产业发展热点和趋势。
1. 基础概念
数字签名/Digital signature
数字签名可以被附着在一条消息后面,证明这条消息的发送者就是和某个公钥相对应的一个私钥的所有人,同时可以保证私钥的秘密性。
某人在检查签名的时候,将会使用公钥来解密被加密了的哈希值(数据通过哈希运算得到的),并检查结果是否和这条信息的哈希值相吻合。
如果信息被改动过,或者私钥是错误的话,哈希值就不会匹配。在比特币网络以外的世界,签名常常用于验证信息发送者的身份 – 人们公布他们自己的公钥,然后发送可以被公钥所验证的,已经通过私钥加密过的信息。
2. 深度解读
比特币中的密码学:数字签名和转账基本原理
作者:村头二旧 (加密二锅头)
我们一步一步的讲,先以最简单的发电子邮件为例。
现在A向B发出一封email,这封邮件是加密的,根据之前的公钥加密原理也就是非对称加密原理,B是收email的,那么,A就拿着B的公钥加密这个email信息,B收到后用自己的私钥就可以解开这个email信息,知道里面的内容。
大家对这个非对称加密的流程已经比较熟悉了,这里面有一个问题,如果这个email的信息很重要,当然,不重要也不需要非对称加密了。我是说如果这个信息里面是关于钱的,最直接的说就是A在邮件里写了,“我欠了B十万块钱”,这时候这个email就有了一点点类似欠条的法律效用。
问题来了,欠条都需要有个签字签名手印等凭证,这个email有什么凭证呢?没有,只能说这个email是写给B的,因为是B的公钥加密的,也只有B能用自己的私钥解开看到,但是没有什么凭证说明是谁写的。
这个时候就需要一个东西,叫做数字签名,就像是现实世界的亲笔签名、按手印。
数字签名如同指纹一样独一无二。怎么做呢?
A发信息给B,用自己的私钥去加密这段信息,这时候B收到后,拿着A的公钥(公开的),去验证下是A发出的,这就是数字签名。
这时候结合之前的方法,A发出的时候用A自己的私钥对信息进行签名,然后用B的公钥进行加密,B收到后有B自己的私钥解密看到信息,又可以用A的公钥验证签名,整个流程就完成了。

用公钥加密就是上图,公钥密码的基本流程,用私钥加密就是下图,其实是一样的,只不过翻了过来,一个用公钥,一个用私钥。

而私钥加密相当于生成签名,而用公钥加密相当于验证签名。
公钥和私钥是成对出现的,有严谨的数学逻辑,用公钥加密的密文只能用与之对应的私钥进行解密;同样的,用私钥加密的密文需要与之对应的公钥进行解密。也就是说用某个公钥如果成功解密了密文,说明这个密文就是用和这个公钥对应的私钥加密得到的,而世界上掌握这个私钥的人只有一个,也就是这个私钥的主人。
讲到这里,你就知道了,比特币的交易信息传递,也是这样的。


以上摘自比特币的白皮书(中英文版本都放在上面),相信各位读者第一次看到这图的时候,也是比较懵逼的状态,因为不理解非对称加密(公钥加密)的话,理解这个图有一定困难。
从创始区块开始的转账都在这一个链条上,产生新的比特币的方法就是挖矿,也就是生成货币的过程。而每一个交易比特币的人,或者说转账,我转给你10个比特币,这个信息就是我的私钥对之数字签名,收到比特币的人拿我的公钥进行验证,就知道是我转的,而我转给你的信息就是我拿着你的公钥加密的,这个别人看得到对应的地址,别人也知道我这个地址转给你的地址,但是能使用这个地址上的比特币的只有拥有私钥的你一个人。地址对应的人具体是谁不知道,也就是公开透明的转账,但是又保护隐私的原理。
至于私钥推出公钥(反过来不行),公钥推出公钥哈希(反过来不行),公钥哈希推出地址(反过来可以),这个过程不是很难的东西,随意去网上搜索就可以知道。公钥私钥加密解密的过程在比特币网络上自动就完成了,你看到的就是比特币从一个地址转到另一个地址。
所以,整个密码学系列文章讲到这里就打通了整个知识链条,从隐藏法、移位替换法到维基尼亚加密法到恩尼格玛机,然后讲到非对称加密、哈希函数,以及利用哈希函数的挖矿原理,利用非对称加密的数字签名。比特币就是建构在这个密码学之树上的一个重要果实。
如果你认真读过这一个系列的文章,相信会超过很多人对密码学和比特币的认知,而如果能做到这一点,我的工作就没有白费,我也希望看到文章的你,当有朋友问你比特币是什么的时候,比特币怎么转账的时候甩出一句“你知道非对称加密法吗?你知道哈希函数的作用吗?我来给你讲讲吧”,当然,你也可以把我的系列文章发给朋友,先搞清楚基本原理,后面的都好理解。
导读:利用哈希函数的挖矿原理,利用非对称加密的数字签名。比特币就是建构在这个密码学之树上的一个重要果实。
密码学、数字签名与比特币,谁成就了谁?
想要了解比特币中的数字签名,就必须先了解一点密码学知识。
01. 从密码学说起
对谍战片感兴趣的朋友可能听说过密码学,这是一门将数学应用于加密数据和解密数据的科学。利用这门科学,我们可以确保只有信息接收者才能看到信息内容。
具体来说我们根据一定的加密算法,用密钥将明文加密为密文,随后由接收方再使用加密算法和密钥从密文中解密出明文。
传统密码学中,发送方和接受方使用的加密算法和密钥是相同的,因此这类加密算法被称为“对称加密算法”。
历史上一个有名的对称加密算法是凯撒算法,据传说是凯撒大帝用来保护军事信息用的。
凯撒算法很简单。假设收发双方约定密钥为 4,则发送方将明文中的每一个字母用字母表中与其相隔三位的字母替代,即 A 变为 E,B 变为 F,"HELLO" 变为 "LIPPS"。
这种加密方法看起来非常简单,通常攻击者能够从语言学角度找到重复的字母,推断出密钥。
但这类移位算法经过一代代密码学家的增强,最终在二战时期进化为德军的恩尼格玛(Enigma)。

恩尼格玛是二战德军使用的机械加解密机器,其加密原理基于“复式移位替换法”。
同一个字母在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,又可以代表明文中的不同字母。这使得恩尼格玛产生的密文在没有计算机的年代其密文很难被破译。
今天被广泛使用的对称加密算法是 AES(Advanced Encryption Standard),由美国国家标准与技术研究所于2001年建立。使用 128 bits 密钥的 AES 算法被认为足以免于暴力破解法的攻击。
对称加密算法能够保护机密信息不被窥探,但这种算法要求收发双方拥有相同的密钥。
在某些情况下,收发双方无法分享密钥。例如,当收发双方在一个可能受到监听的环境中时,其发送密钥的通道可能被截获,导致密文被破译。
因此一些密码学家开始研究如何在不安全信道上进行密钥交换。
02. 迪菲-赫尔曼密钥交换协议
为了安全地交换密钥,惠特菲尔德·迪菲和马丁·赫尔曼在 1976 年发表了迪菲-赫尔曼密钥交换协议。

简单来说,假设 Alice 要给 Bob 发送一个密文。为了让 Bob 能够解密, Alice 还需要发送密钥给 Bob。
首先,Alice 和 Bob 各自选择一个足够大的素数 x 、 y。
然后 Alice 和 Bob 约定两个数 g 、 n,这两个数可以公开给所有人。
Alice 计算 g^x mod n 并告知 Bob 结果,Bob 计算 g^y mod n 并告知 Alice 结果。
这样双方就知道密钥为 g^(xy) mod n = (g^y mod n)^x mod n = (g^x mod n)^y mod n。
使用这个对称密钥,Alice 和 Bob 就可以进行安全的加密通讯。
为了破解这个密钥,攻击者必须实验所有的 g^(x*y) mod n 的可能值。当 n 是一个至少 600 位的素数时,就能够保证该对称密钥的安全性。
交换协议解决了如何在不安全信道上交换密钥的问题。但是它要求收发双方必须同时在线,才能生成对称密钥。另外交换协议中还无法保证和 Alice 进行密钥交换的是真正的 Bob,而不是其他人。
03. 公开密钥加密算法
公开密钥加密算法,也被称为非对称加密算法。
该算法的加密过程需要两个密钥,一个用作加密,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文。由于加密和解密需要两个不同的密钥,故被称为非对称加密。
虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个。
其中一个可以公开,称为公钥,任意向外发布;不公开的密钥为私钥,必须由用户自行严格保管,不能向向任何人提供,也不需要透露给要通信的另一方。
公开密钥加密算法的关键在于公钥私钥生成,因此通常都根据数学难题设计公钥私钥。常用的三个难题为:质数分解,离散对数和椭圆曲线问题。
例如被广泛使用的 RSA 算法就是基于极大整数因数分解难题设计的。

下面演示一下简化版的 RSA 加密解密流程:
Alice 随意选择两个素数(实际使用中会使用足够长的素数)p = 11 和 q = 13。
p 和 q 的模数为 n = p * q = 143,其欧拉函数值为 r = (p-1)*(q-1) = 120。
接下来是公钥私钥生成。公钥是从小于 r 且与 r 互质的数中选择一个数字,例如 e = 7。私钥则是 e 关于 r 的模反元素。
根据扩展欧几里得算法可以计算出私钥 d = 103,可以验证 e * d = 7 * 103 = 721,721 与 1 关于 120 同余。
此时对于 Alice 来说,其公钥为(n, e),私钥为(n, d)。
当 Bob 要向 Alice 传递信息时,那么 Bob 首先要获取 Alice 的公钥,然后 Bob 开始加密信息。
假设发送信息为 m = 9(实际中双方按照约定格式将信息转为一个小于 n 且与 n 互质的整数形式)。
则加密后的密文为 c = m^e mod n = 9^7 mod 143 = 48。
Alice 收到密文后用自己的私钥解密。 c^d mod n = 48^103 mod 143 = 9。
当攻击者获得 Alice 的公钥(n, e) 以及密文 c 时,他无法直接获取到私钥(n, d)。获得 d 的最简单方法是将 n 分解为 p 和 q。只要人类无法改进对极大整数进行因数分解的算法,那么用足够长(4096位或以上) RSA 公钥加密的信息就可以被认为是无法破解的。
当然,实际使用要比理论上复杂得多。例如,非对称加密通常要比对称加密算法计算复杂、性能差,一般会先用对称加密算法生成密文,再由非对称加密算法来加密对称密钥。
另外,为了防止中间人攻击,公开密钥加密算法需要由可靠的第三方机构签发数字证书,用来证明公开密钥拥有者的身份。。
除了用于加密,公开密钥加密算法还有一个重要的应用:数字签名。
04. 数字签名
经过以上密码学知识的铺垫,我们初步了解了常见的加密算法。
下面可以思考一个场景,假如你发送一个信息给你的朋友,你该如何证明你是信息发送者,又该如何保证信息在途中没有被第三方修改呢?
这个问题中本聪设计区块链网络时也遇到过:每个节点产生的交易都要发送给其他节点。那么接收节点如何判断这个交易信息是由交易中记录的发送节点发来的?
这种情况下,可以利用公开密钥加密算法来生成发送信息的数字签名,接收方可以通过数字签名判断信息是否可信。
将公开密钥加密算法用于数字签名的步骤与加密解密步骤稍有不同。

假设 Alice 要给 Bob 发送消息。Alice 生成公钥私钥密码对,然后公布该公钥,再将消息哈希值用私钥加密后与消息一同发送给 Bob。
Bob 接收到消息后,就可以用 Alice 公布的公钥来解密得到消息哈希值,这能够表明信息发送方为 Alice。
然后将解密出的哈希值与接收到的哈希值比对,能够检验消息在中途是否被第三方篡改。
数字签名是用于鉴别数字信息所有权的技术,同时还能够提供数字信息完整性的验证。
05. 比特币系统中的数字签名
比特币中使用的公开密钥加密算法是椭圆曲线加密算法(ECDSA)。
当比特币钱包生成新的比特币地址时,它实际上使用椭圆曲线加密算法生成了一对公钥私钥。
公钥私钥对就保存在生成的钱包文件中。生成地址时通常会要求你设置钱包密码,并尽量备份保管好钱包。
比特币系统就像一个巨大的收支账本。它没有记录每个地址里有多少钱,它记录的是每个地址中每次转账记录。
因此,如果你想知道自己一个地址中有多少个比特币,就需要遍历整个区块链,找出所有和这个地址有关的转账记录再计算余额。

当创建一次转账记录时,你需要给其他节点发送转账信息,其中包括用私钥对转账记录签名后的结果和未哈希的公钥。
其他节点接收到你的转账信息后,会从中解析出你的公钥验证数字签名是否有效。
只有当验证过数字签名有效后,接收节点才会将这个转账记录添加到区块的默克尔树上,并执行工作量证明过程。
因此,拥有一个地址对应的私钥,就完全拥有了该地址对应比特币的所有权。保管好自己的私钥至关重要,任何时候都不应该在网络上发送自己的私钥。
文章原标题:密码学、数字签名与比特币 原作者: gitbear
导读:“ 让我们创造一片新的国土,将那些物质的控制者阻拦在外;为了跟随我们,进入我们的领地,他们将耗尽无尽的资源。”
从零学习数字签名,了解它的三大作用
签名的作用
现实生活中,有很多场景需要我们签名,刷卡消费、签订协议、书信往来,等等。这些签名是为了证明我是我,信息真实发生,签名者同意,不可抵赖。在网络通信中,如果发送方在发送某个消息之后突然反悔,不承认发送过该消息,而网络中又无法确认信息发送者的身份,就会比较麻烦,因此现实生活中的身份确认在网络通信中同样需要,只不过这时候不是手写的签名,而是一种物理签名——数字签名。
数字签名

首先我们需要清楚什么是私匙和公匙。
公匙和私匙
用户注册的时候会得到一个账户,包括一对公匙和私匙。公匙是公开的,私匙是只有自己知道的。通过公匙加密的信息只有对应的私匙可以解密,通过私匙加密的信息只有对应的公匙可以解密。
他人通过使用我们的公匙加密向我们传递信息,我们可以用私匙解密。
私匙是我们自己用来签名确认的,私匙加密的信息上传到网络,他人可以通过公匙解密确认我们的身份。
签名的生成
签名的生成是具有特殊性的,取决于传递的信息,因此每次签名的字符串都是不一样的。
1、将消息进行哈希计算,得到相应的哈希值,也成摘要;
2、将得到的哈希值用发送者的私匙进行加密 ,生成签名;
3、将签名和消息一起发送,就像写信一样,信纸上是传递的信息,签名要写在信封上一起发送。
签名的验证
1、接收者提取信息中的签名;
2、用发送者的公匙可以解密,得到信息的哈希值;
3、用自己的私匙解密原文信息,在进行哈希计算,得到另一个哈希值;
4、对比两个哈希值,如果一致则验证成功。
信息传递中的流程
为了保护信息的安全和身份确认,网络中信息发送和接收过程中同时平行进行双重处理:1、发送方将需要传递的信息通过接收方的公匙加密,接受方用自己的私匙解密;2、发送方将信息摘要用自己的私匙加密,接收方用接收方的公匙解密。这两个信息(原文密文和签名)一起发送。

按照图上的流程,如果A想要给B发送信息“hello kitty”,
发送:首先A需要对“hello kitty”进行双重处理,首先将“hello kitty”用B的公匙加密,得到原密文,然后对“hello kitty”极性哈希计算得到相应的哈希值,再用A自己的私匙对该哈希值加密,得到A的数字签名,最后将签名后得到的原文密文和A的签名一起发送给B。
接收:B接收到A打包发送的信息后,通过A的公匙解开A的签名,可以得到“hello kitty”的哈希值,再通过B自己的私匙解开原文密文,在进行哈希计算,得到摘要,将两个摘要进行对比就可以判断A的身份和信息是否准确,如果一致,则接受完成。
数字签名的作用
-
确认身份,通过公匙解密,数字签名可以指定接收者确认发送者的身份;
-
信息完整、不被篡改,通过对信息进行不对称加密,加大了网络中恶意篡改的难度,通过私匙解密,可以判断信息是否受损;
-
不可抵赖,由于接收方手中有发送方的签名为证,证明信息源,所以不容抵赖。
导读:现实生活中的身份确认在网络通信中同样需要,只不过这时候不是手写的签名,而是一种物理签名——数字签名。
3. 产业动态
区块链能解决你的文档和数字签名难题吗?
购物订单看起来是合法的,但它是否全部获得了正式批准呢?许多律师审阅了这份合同草案,那么这是最后的版本了吗?在签字之前,我们是否可以证明这份重要文件未被篡改过?我们是否能证明该文件的两个版本是完全相同的呢?
区块链或许能够解决这类关于文档的日常信任问题,特别是对PDF这种使用可移植文档格式创建的数据文件。区块链技术以其确保金融交易而闻名,包括支持比特币等新型金融工具。但区块链提高信任的能力可能会成为解决普遍的非财务信息交换的企业用例,就像这些文件中使用的那样。
比利时根特iText Software公司的软件工程师和PDF专家Joris Schellekens最近在Oracle Code Los Angele上发表了他关于区块链支持的文档的想法。
Oracle Code是在世界各地举办的一系列免费活动,旨在将开发者聚集起来,共享新的想法并合作完成它们。
PDF的能力和限制
PDF文件格式是Adobe Systems(Adobe系统)在20世纪90年代初创建的,作为共享格式丰富的文档的方式,无论是软件创建或者阅览还是打印的情况下,其视觉布局、文字和图像看起来都是一样的。PDF格式在2008年成为国际标准。
早期,Adobe和其他公司将安全性能应用到PDF文件中,包括密码保护、加密和数字签名。理论上来说,数字签名需要能够证明该文件的创建者,或者至少是加密者。
Schellekens表示,不过,根据所用的哈希算法,要破坏这些保护并不难,例如更改数据/时间戳,甚至文档内容。他的公司iText Software推出了一款用于创建和操作PDFs的软件开发工具包和API接口。
他说:“PDF格式包含了ID元组的概念,或者是不可变的数据序列。这一ID元组包含了文件创建和修改的时间戳。不过,PDF格式对于创建时如何使用这些工具比较模糊。”
即使在未经修改的PDF文件中,保护也会应用于整个文件而不是其中多个部分。想象一下文件必须得到多方签名的情况。由于并非全部认证中心都以同等规格保存他们的密钥,你可能对真正修改(签名)文件的人、时间、序列缺乏信任。或者说,你可能不相信签名之前并未有人进行过修改。
一个相关挑战:在数字文档上签名通常必须是一次一个;PDF规格不允许几个人同时签署一份文件(这在合同审阅和签名中很常见)然后再进行合并。
区块链有潜力解决这类文档以及其他问题。例如,安特卫普港口正在测试接收船运集装箱和集在有权访问这些集装箱的数字化文档和工作流程的PDF文件。其记录存储在区块链上,如果货物被盗,港口可以确定最近访问集装箱记录对应的人。
这类用例及、依赖于企业级的量产区块链基础设施——特别是帮助客户快速试验用例以及部署生产的云系统。Oracle正在计划发布一个云平台,名为Oracle区块链云服务,通过区块链服务企业和公共部门组织。
区块链:不可变记录
区块链是一种相对较新的系统,可以将一组名为“块(blocks)”的记录连接到相链接的加密且防篡改的链中。区块链的功能中最重要的是已有数十年历史的哈希概念,一个用于代表大型、复杂数据(例如已签名的PDF合约)内容的经过计算的数字。
哈希可以用于比较两份数据是否相同——即使你知道了哈希结果,你也不会拥有数据本身。因此,如果你创建两个合约PDF版本的哈希,而哈希结果并不匹配,说明这两份PDF文件并不相同。如果哈希结果匹配,则它们是完全相同的。(有极小的可能存在两份不同的PDF文件拥有相同的哈希结果。)
区块链如何实现这一点?计算PDF合约原始版本的哈希并将其哈希值存储在区块链的一个区块中。授权的相关方可以自己进行验证,通过比较其版本的哈希与存储在区块链中的哈希值,确定PDF合约的副本是否合法。当存在多个副本时,例如拥有不同签名,相关方可以使用区块链来评估它们的有效性,并通过每个文件元数据的相关时间戳来确定其顺序。
这里的优势在于,区块链存储了文件哈希值的其他信息,例如准确的数据/时间戳,或者存储哈希的人的身份。这使得确认文件是否是最新版,或者存储多个包含相同修改时间的文件版本变得更简单。这样,PDF格式的限制得以克服,更确切地说,是通过使用区块链而非PDF元数据克服了验证文件的障碍。
具体来说,区块链强化了与文件验证核心相关的现有解决方案,Schellekens表示:
完整性:确保文件副本与原始文件拥有完全相同的内容。
可鉴定:证明文件的创建者和修改者,而PDF无法做到这一点。
不可否认性:一旦每次迭代存储在区块链上,不允许创建者或修改者否认其行为。
此外,由于文件验证是在区块链中而非如PDF的内置安全措施一样由文件本身进行,任何人都很难篡改文件并避免被发现。
最优异之处
当PDF文档的内置安全措施与那些区块链合并后,会产生扬长避短的效果。
无论访问文件的计算机、进行创建或阅读的软件或者将其打印为文本的打印机是什么,PDF行业标准规格都能确保其一致性。PDF规格同样提供加密等安全性,用以添加保护层。
PDF还具有可扩展性。它不仅可以容纳元数据,还可以容纳用Javascript编写的程序代码。这让PDF文档足以容纳可视化布局、文本、图形以及程序逻辑、动画以及可以由合适的程序运行的嵌入数据。
区块链提供了对外的安全性能、时间戳、文件创建者(或者至少验证检查文档的人)的鉴定、不可否认性以及确认文档并未经过篡改。
Schellekens表示:“其中优势在于,你除了可以在PDF中进行的数字签名外,还可以在其中添加额外功能,例如时间戳,以及确认是否有人修改了文件。”
区块链是否适用于每一种PDF文件的鉴定呢?现在还不行。这一技术仍处于萌芽期,没有与区块链服务商合作经验的机构可能不知道如何实施或使用区块链。不过,Schellekens坚信它在鉴定数据记录方面的价值,因为区块链并不依赖于任何外部权威,例如由第三方认证机构发行的数字证书。
区块链的信任风险也很容易计算,而其他安全措施可能无法做到。
Schellekens说:“区块链有多值得信任?这是区块链最迷人之处:你可以从数学角度证明,一个人要解密你的密钥或声称一个完全匹配你的PDF的哈希值有多难。通过其他安全措施,你不知道你的安全程度——直到你发现一位员工用USB盗走了密钥。”
文章原标题:区块链能解决你的文档和数字签名难题吗? 原作者:Alan Zeichick
导读:区块链技术以其确保金融交易而闻名,它提高信任的能力可能会成为解决普遍的非财务信息交换的企业用例。
比特币算法进化简史:Schnorr 签名算法与聚合签名

当我们研究比特币 ECDSA 椭圆曲线签名算法时,就会发现多重签名交易验证过程非常繁琐,有没有设想过把一笔交易中的所有签名和公钥通通合并成单个签名和公钥,无法追溯并且简单快速?

*图片来源自网络
20世纪80年代,德国密码学家 Claus-Peter Schnorr 给出了答案。以他命名的 Schnorr 签名算法可以构建更高效和隐私性更强的区块链系统,一直备受区块链开发者们的关注。 2018 年 7 月,比特币开发者 Pieter Wuille 撰写了 bip-schnorr[2] 提出了将 bitcoin 的签名算法更改为 schnorr 方案。Schnorr 与 ECDSA 虽然同为使用 secp236k1[3] 曲线的椭圆曲线加密算法,但相比 Schnorr 来说,ECDSA 有一些不足之处:
-
证明安全性:在随机预言模型中很容易证明 Schnorr 签名的安全性,而 ECDSA 不存在这样的证明。
-
不可延展性:ECDSA 签名具有可塑性,不知晓私钥的第三方可以将给定公钥和消息的现有有效签名更改为对同一私钥和消息的另一个有效签名,这一问题直到 SegWit 激活后才得以修复。BIP62[4] 和 BIP66[5] 中讨论了此问题。而如果使用 Schnorr 签名则可以避免类似的情况出现[6]。
-
线性:Schnorr 签名是线性的,这一点非常重要。使用 Schnorr 签名的各方可以生成对其各自密钥的签名聚合。以这一特性作为基础,可以构建更高效和隐私性更强的区块链系统。
schnorr 签名算法相比 ECDSA 来讲,对于上述的优点,除了尚未标准化之外几乎没有缺点。而且由于两种算法都基于同一个椭圆曲线,整个关于签名的升级成本也是很低的。
什么是 Schnorr 签名?
在密码学中,Schnorr 签名是由 Schnorr 签名算法产生的数字签名。它是一种数字签名方案,以其简单高效著称,其安全性基于某些离散对数问题的难处理性。[7] Schnorr 的原理描述如下:
下面用小写字母表示数字,比如:a = 42。同时我们将使用一些椭圆曲线(elliptic curve)上的点。这些点是一些满足椭圆曲线方程的大数对。我们将用大写字母来表示这些点,比如:A = (4, 68)。椭圆曲线上的点可进行一些代数运算。其上两个点可以相加可以得到近似随机的第三个点,表示为:C = A + B。某个点可以与自身相加多次:D = C + C + C。当我们讲一个点与自身相加多次时,我们称其为“乘以一个数”:D = 3 * C。显而易见的,如果将一个点 A 与自身相加很多次(或者说将其乘以一个很大的数)然后得到一个点 B ,如果我们只是知道原始点 A 和结果点 B ,计算出与 A 相乘的这个大数是相当困难的。这里的“困难”意思是,如果要计算出这个“大数”,我们不能简单的用 B 除以 A ,只能不断的猜测一个值 x ,计算是否 x * A等于 B 。所以如果这个 x 的值非常大,甚至大于宇宙中所有原子数目的和,猜测这个 x 的值将花费一个难以接受的时间。同时如果某人持有正确的 x ,计算 x * A 是非常迅速的。这种非对称性将作为我们讨论的前提。
Alice 持有私钥 x ,然后选择一个随机数 r ,以及椭圆曲线上的原点 G ,计算出R := r * G,公钥X := x * G,使用哈希函数获取一个随机的用于验证的数字e := Hash(R, X, message),然后计算 s := e * x + r。
Alice 给 Bob 发送点 R, X, message ,和点数值 s ,Bob 验证 s * G 等于 R + e * X 。事实上,不仅是 Bob,这个世界上的任何人都可以独自对这一证明进行验证。一旦s * G = R + e * X通过了验证,既可以证明 Alice 持有私钥 x,并生成了一个合法的签名:(s, e)。
最终,如果要将签名从这一证明中创造出来,Alice 需要定制一个哈希函数来对她签名的消息的进行哈希计算。这样的话需要确定针对一个消息所计算出的签名,不能被复用给另外一个消息。
这个定制过程可以简单的通过将 R , X 和签名信息进行哈希来做到:
e := Hash(R, X, Message)
一个良好的哈希函数,会在哪怕仅有一个字符有更改的情况下,也会返回完全不同的哈希值,使得计算出 s 的值是不可能的任务
Schnorr 签名协议的简洁描述如下:
Setup:
x := random number (aka private key)
G := common point
X := x * G (aka public key)
Sign:
r := random number (aka nonce)
R := r * G (aka commitment)
e := Hash(R, X, message)(aka challenge)
s := r + e * x (aka response)
return (R, X, s, message) ((s, e) aka signature)
Verify:
receive (R, X, s, message)
e := Hash(R, X, message)
S1 := R + e * X
S2 := s * G
return OK if S1 qeuals S2
基于此,开发者在未来可以添加更复杂的概念,比如聚合签名。聚合签名优势就在于将一笔交易中所有涉及的输入只需要一个合并签名就可以完成,大大减少了数据处理量,使网络速度更快,更加高效。
什么是聚合签名?
聚合签名是使用 Schnorr 签名的各方生成的对各自密钥的签名聚合,它可以把一笔多签交易的各个参与方的公钥和签名合并为一个公钥与签名,整个合并过程是不可见的,无法从合并后的公钥与签名推导出合并前的信息,并且在验证时仅需一次验证即可。目前 ,Mimblewimble 已利用 Schnorr 签名算法实现签名聚合。
在使用 ECDSA 进行多签的情况下,如果共有 N 个私钥进行了签名,则验证时需要对 N 个签名各自进行验证。由于 Schnorr 签名算法的线形特性,在同样的情况下,N 个私钥的签名可以「聚合」成为一个签名,原理如下:
由于椭圆曲线上的点可以满足乘法结合律,因此对于椭圆曲线上的两个点 X,Y 和相应的标量(私钥)x,y 以及原点 G,则:
X + Y = x * G + y * G = (x + y) * G
对于 ECDSA 签名算法,验证 n 个签名,需要进行 n 次取模和 2 * n 次点乘运算。而对于 Schnorr 签名,我们可以将验证方程相加:
S1 = sum(s)(i) = s1 * G + s2 * G + ... + sn * G = (s1 + s2 + ... + sn) * G
S2 = sum(R + e*X)(i) = (R1 + e1 * X1) + (R2 + e2 * X2) + ... + (Rn + en * Xn) = sum(R1, R2, ..., Rn) + (e1 * X1 + e2 * X2 + ... + en * Xn)
此时对 Schnorr 签名算法生成的多签进行验证时,只需要进行 2n 次加法运算和 n + 1 次点乘运算即可。由于加法运算所占用的资源是极低的,两种多签验证方式的资源消耗可以近似的比较为:ECDSA 为一次取模加两次点乘,Schnorr 为一次点乘的资源消耗。显而易见的结论是,使用 Schnorr 签名算法所消耗的资源更少。
对于上述多重签名的情况,使用 Schnorr 签名算法进行聚合签名,可以提供如下额外的好处:
-
性能方面:可以大大减少验证签名的成本。Schonrr 签名算法的优势是显而易见的,对于一笔多签交易,原本需要进行多次的验证,而聚合签名仅需验证一次,从而提升节点对于交易的验证速度
-
交易体积:由于将多个签名聚合为一个签名,可以大大减少多重签名的大小,并且可以显著降低对于网络传输消耗的带宽,以及对于节点存储空间的占用
-
隐私:使用 Schnorr 聚合签名可以提高链上数据的隐私性。对于验证者来讲,聚合签名看起来和普通的 Schnorr 签名并无区别,无法分辨这一笔交易是普通的交易还是一笔多签交易,而参与交易的用户的公钥和签名都不会暴露出来
在创建一个基于 Schnorr 聚合签名的多签方案时,为保证多签的签名看起来像单密钥签名,并且使传统的验证方法有效并且保证整个过程只需要线性次签名聚合,该方案需要满足如下的特性:
-
在普通的公钥模型中被证明是安全的
-
满足 Schnorr 方程,从而可以将得到的签名写成公钥组合的函数
-
允许签名者需要合作的交互式聚合签名(IAS)
-
允许非交互式聚合签名(NAS),其中聚合可以由任何人完成
-
允许每个签名者签署相同的消息
-
允许每个签名者签署自己的消息
基于 Schnorr 的聚合签名方案目前有多种实现,最终 Blockstream 给出的方案是 MuSig,各个实现方式的区别以及 MuSig 的具体原理可以参照引用[8][9]。
聚合签名的使用
7月10日,Qtum量子链基金会宣布实现QTUM-BEAM原子交换(Atomic Swap),原子交换(Atomic Swap)允许两个独立链上进行原子性的跨链交易。(链接:Qtum量子链实现QTUM-BEAM原子交换,支持隐私跨链交易|附实验步骤详解)
而通过聚合签名,可以安全又简单的实现原子交换。聚合签名本质是一个签名的偏移量,一旦与真实的签名进行组合,即可计算出签名所用的私钥。聚合签名的可信度可以进行验证,同时又无需暴露任何信息。聚合签名可以保证原子交换的原子性,又可以保证交易双方的安全。
通过聚合签名进行一笔原子交换的简洁过程如下[10]:
-
Alice 和 Bob 将加密货币分别存入两个各自签名的地址之中
-
Alice 所用的私钥会是一次性的,因为她需要将这个私钥发送给 Bob
-
Alice 向 Bob 提供一个聚合签名,这个签名需要经过 Bob 的确认
-
当 Alice 广播她的签名来证明她持有的加密货币时,Bob 可以获得足够的信息计算出 Alice 的私钥并获得她持有的加密货币
-
Bob 签署一笔交易发送加密货币给 Alice
-
Alice 使用另一半私钥对接收加密货币的交易进行签名并将其广播
-
Bob 获知全部的私钥并收到 Alice 持有的加密货币,同时 Alice 也将获得 Bob 的货币
引入 Schnorr 和聚合签名的影响
优势:
-
节省数据:签名聚合可在区块链上提供数据压缩
-
隐私:除交易结算外,关于无脚本智能合约的任何东西都不会记录在区块链上(签名聚合过程发生在链下)
-
多重性:可在单个交易结算中在双方之间转移多种资产(跨链原子交换)
-
隐式可伸缩性:区块链的可伸缩性是通过将多个交易压缩到单个结算事务中实现的。只有满足所有先决条件后,交易才会被广播
-
结合聚合签名的 scriptless script 相比标准智能合约具有更好的扩展性。因其合约执行是发生在链下的,通过将此执行结果推送给关心它的人,公共计算资源可以减轻存储合约数据和执行条件的负担。非公开的合约也可以提供更好的隐私性。合约的详情只有参与者可以知晓,对于其他人来说,该笔交易与普通的交易并没有什么区别
劣势:
Maxwell 等人的工作指出[11],满足密钥聚合的 Schnorr 多重签名的简单实现并不是安全的。在普通的公钥模型中,如使用 BN Schnorr 的签名方案,需要通过放弃密钥聚合的属性来获得安全性。他们提出了一个新的基于 Schnorr 的多签模型,叫做 MuSig,以在普通的公钥模型中可使用密钥聚合,并具备应有的安全性。其与标准的 Schnorr 签名具有相同的密钥和签名大小。对于单个「聚合」公钥可以通过与标准 Schnorr 签名相同的方式进行验证(通过签名者各自的公钥进行计算得出证明)。
相关参考资料见公众号原文
导读:在密码学中,Schnorr 签名是由 Schnorr 签名算法产生的数字签名。
美国银行申请新专利:在分布式系统上调整多个数字签名

文 | Max Yakubowski
根据美国专利商标局(USPTO)9月18日发布的文件,美国第二大银行美国银行(BofA)已经提交了一项新的专利,用于在分布式网络中调整多个数字签名。
新专利提出了一种用于管理来自互联网连接设备的数据通信的系统。专利文件强调:“本发明提供了哪些设备与哪些第三方实体进行通信的自动确定,并且在一些实施例子中,提供了与这些第三方实体进行通信的数据类型。”
美国银行提议的系统解决了物联网(IoT)环境中的设备,描述了每个互联网连接设备如何“持续”地相互通信数据,而系统将允许用户“选择禁止(即阻止)或限制将哪些数据传达给第三方实体”。
同样在9月,IBM在基于区块链的物联网系统中获得了自主自助服务设备的专利。而在8月,韩国跨国集团LG公司的子公司LG
CNS宣布了一项计划,旨在加强其包括区块链和物联网在内的七个平台的企业产品,以推动“第四次工业革命”。
据报道,美国银行是区块链相关专利的最大持有者之一,上个月在一个基于区块链的系统中提交了一项记录和存储加密货币相关交易的专利,继续进行区块链勘探。
早在7月份,美国银行也为一个允许基于分布式账本技术进行外部数据验证的系统申请了专利。
导读:美国第二大银行美国银行(BofA)已经提交了一项新的专利,新专利提出了一种用于管理来自互联网连接设备的数据通信的系统。
来源:学习区块链
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

币网讯



