在前文介绍了Monero的一次性地址方案。从方案看来,Monero中的UTXO只有一次性地址,用户地址是产生一次性地址的基础,用户对UTXO的所有权并不能显现地看出来。发送人在每次交易时创建一次性地址来接收UTXO,并将一次性地址的相关私密信息(一次性私钥)秘密地传递给接收人,用以保护接收人隐私。这样,每个UTXO都具有不同的一次性地址,同一用户的不同笔UTXO“收入”都看上去没有联系。但是如果仅仅使用一次性地址,那么只要UTXO被花费出去,那么同一交易连接的输入输出的UTXO之间也可以产生联系,也就是说资金的链路还是没有被打断或者混淆,资金的走向还是清晰可见。

从观察者角度来看,每个UTXO可以看成与不同的用户对应。如果发送人在发送交易的时候引入多个UTXO,并且将真正的UTXO混淆与引入的UTXO集合之中,这样观察者追踪资金链路的难度将会加大。多次交易之后资金的追踪将会是实际上不可行。那么问题出现了,如何将多个UTXO涉及的一次性地址“捆绑”在一起呢?这里需要使用到环(群)签名方案。

1. 环签名概念介绍

将真正签名人隐藏于多个“助攻”签名人集合之中这一想法最早起源于群签名,在群签名之中存在分发中心,分发中心不仅负责分发产生与分发密钥,并且有机制可以恢复出真正的签名人。但是在环签名中,分发中心被彻底取消。用户密钥不需要分发,只要用户自己生成,也无法恢复出真正的签名人身份。

具体来说,环签名具有如下几个性质:

  1. 签名人混淆性质:旁观者只能确定签名出自于群体中的某一成员,仅此而已,具体何人,无从得知,

  2. 可链接性:如果同一私钥对不同的消息进行签名,那么有算法可以判定这两个签名出自于同一私钥只手。这种可链接性可与群体有关系,也可与群体无关系。与群体有关系是指,两个环签名所选的混淆群体不同,那么可能无法获知两个环签名是否出自于同一私钥。与群体无关系,就是说无论两个环签名算选的混淆群体是否相同,那么只要这两个环签名出自于同一私钥,就可以链接起来。

  3. 不可伪造性:没有私钥不能伪造一个合法的环签名。

虽然环签名概念本身与Monero并无关系,但是这里依然用Monero的场景来举例说明某几个环签名方案。

2. Version-1: 绑定群体的可链接性

2.1 方案

以3个UTXO作为混淆输入为例。假设发送人Alice拥有某一UTXO,其一次性地址为,其对应的一次性私钥是。并且假设交易发送给Bob且是单输出(此处多输出并无不同)。Alice同时选择3个一次性地址(不需要拥有其对应的私钥),组成环,接下来Alice如下步骤操作来签名交易信息:

  1. 利用自己掌握的私钥作:;// 是椭圆曲线上的点

  2. 产生随机数与;// 不产生

  3. 计算“签名环”的“接头点”

  4. 逐步“编织”签名环:


    //其中是数域上的标量

  5. “焊接”首尾成为签名环:

输出结果签名,密钥像(实际上是对真正签名人信息和用于混淆的所有公钥信息的承诺),以及成员集合

2.2 验签

验签过程实际上就是从起点(并不一定是签名人的“起始点”)开始,依次验证签名环中相邻的两个节点之间是否满足“编织”的映射关系,并最终是否能回到起始点。

形式化地描述,对于签名、密钥像、消息、公钥集合,令依次验证:


2.3 解释


将以上的方案图式化如上图。签名环从接头点——第三个节点着手,开始编织签名环。从上一个节点到下一个节点通过3个映射关系连接起来。结合随机数,计算这个三个映射关系,得到下一个签名环节点。按此方式编织下去,得到一个“签名带”,需要将签名带的首尾焊接起来,获得一个完整的环状结构。如果在没有部分私密信息的情况下,签名带只能一直向下编织,而不能回头与起始点衔接,因为从例子可以看出,从映射出来的(为了与起点的区别,记作)不能与起点的相同,所以首尾连接失败。但是幸亏在起始点上拥有“陷门”信息——私钥。具体的做法:

起始点:

结尾点:

如果要让,需要让

在产生随机数时刻意没有产生随机的,取而代之的是,这让签名环的收尾衔接有了可能。要让以上两等式成立,只需可以巧妙拼凑来达到目的。这里令即可。


这种预先埋陷门的方式,让带状结构首尾衔接成了完整的环状结构,并且从签名环看来,无法看出签名的起点(起点即是真正的签名人)。

2.4 问题

如上所说,环签名需要有可链接性,即当同一私钥对不同消息分别作出两个不同的签名和时,这两个签名就是链接起来的。在Monero中,如果发现同一UTXO的私钥作了两个不同的签名,说明该UTXO有被双花的恶意。有一笔交易将被判定为非法。上述方案的可链接性需要用于混淆两个签名的参与者集合也相同才可以(实际使用中,通过判定密钥像是否曾经出现过来判断UTXO是否双花),但是恶意的发送中用不同的签名者集合就会逃过这一检查。本方案对于用户量少且固定的场景较为合适,因为这样可以将所有的用户公钥都作为混淆个体。当用户不固定时将不具有可链接性。Monero中每个UTXO对应一个(一次性)公钥,所以以上方案对于Monero并不适用。

3. Version-2: 独立于群体的可链接性

为了让发送者在选择不同的群体时也不能发动双花交易,需要让环签名方案拥有的独立于群体的可链接性,即无论签名者在两次签名所使用的混淆集合是否相同,只要真正签名人相同,那么着两个签名就可以判定为是同一个签名人所为。为此,可以将Version-1的方案中的密钥像替换成只与签名人有关的信息(Version-1中包含的是真正签名人信息和用于混淆的所有公钥信息)——作为密钥像。其他细节与Version-1几乎相同,也是从起始点“编织”签名带,再利用真正的私钥作为陷门将签名带的结尾与起始点巧妙焊接。

3.1 方案

同样以Version-1的场景为例描述方案。

  1. 利用自己掌握的私钥作:

  2. 产生随机数与;// 不产生

  3. 计算“签名环”的“接头点”

  4. 逐步“编织”签名环:


    //其中没有在像Version-1中把环成员和密钥像纳入其中。

  5. “焊接”首尾成为签名环:

输出结果签名,密钥像,以及成员集合

验签过程与Version-1几乎相同。

4. Version-3: 简单的多UTXO输入版本

以上的两个方案都都是要发送单个UTXO。发送人都是以私钥为,公钥为的UTXO为输入来组织交易的环签名的。但是实际中发送人需要组织多个UTXO的环签名。

例如发送人拥有2个UTXO,对应的公私钥对分别是。可以对每个UTXO,运用

Version-2的方案构建独立的环签名放入到交易中。但是这样的问题是,环签名的数量与输入的UTXO数量成线性增长,这使得交易数据的空间复杂度与签名、验签的时间复杂度都成线性增长,有优化的空间。

总之,真正的签名人,“编织”签名带,并且最终,运用自己所具有的私钥作为“焊接”器,讲编织带的收尾完美地焊接起来。使之成为一个外观完美的环。

环签名的作用不仅仅可以用来混淆发送者,还可以用来作资金数额的区间证明,这个将在后续文章介绍。


本文作者:victorsun

作者主页:

https://learnblockchain.cn/people/625


群签名和环签名的区别_Monero技术详解(三):核心技术—环签名(1)相关推荐

  1. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  2. 玉米社:外链、反链、内链、友链的区别与联系详解

    外链.反链.内链.友链的区别与联系详解 1.外链 外链指从站外链向本站点某页面的链接,主要强调站外.我们常说的发外链,即在外部博客.论坛.自媒体等平台发布的带有自身网站链接的软文或者视频内容,但凡是从 ...

  3. c语言中%s的作用,C语言中%c与%s的区别与划分详解

    %c格式对应的是单个字符,%s格式对应的是字符串. 例: char a; char b[20]; scanf("%c",&a); //只能输入一个字符. scanf(&qu ...

  4. iOS APP反重签名技术详解

    转载请注明出处,作者:秦伟 什么是签名? 简单的说,签名(signature)是苹果公司的一种安全机制,APP的签名有效才被iOS系统允许执行. 签名包含了开发者证书的信息等,如下图所示: 在Xcod ...

  5. http 与 https 的区别以及加密详解

    一.http与https的区别: http和https是两种通信方式 http默认采用80作为通讯端口,对于传输采用不加密的方式,https默认采用443,对于传输的数据进行加密传输. https协议 ...

  6. 详解 | SLAM回环检测问题

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文经知乎作者fishmarch授权转载,二次转载请联系作者 原文 ...

  7. 梦幻西游手游经验任务链计算机,梦幻西游手游任务链任务详解 秒杀300环

    跑环.打传说这些词,玩过梦幻的都不陌生,在梦幻西游手游中同样有任务链玩法,不过相交端游有一些改动,下面4399挽歌就为大家具体来了解下玩家 心醉丶迷的分享梦幻西游手游任务链任务解析~ 4399梦幻西游 ...

  8. 运维企业专题(10)RHCS集群工具——FENCE搭建、高可用服务配置详解

    前言:FENCE工具的原理及作用 FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的"脑裂"现象,FENCE设备的出现,就 ...

  9. Linux IO复用区别与epoll详解

    转载:http://blog.csdn.net/hacker00011000/article/details/52160590 一.select.poll.epoll之间的区别总结[整理]  sele ...

最新文章

  1. 深度学习常用数据集资源(计算机视觉领域)
  2. javascript 之 push
  3. Master 横扫围棋各路高手,是时候全面研究通用人工智能了!
  4. 轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)
  5. Android数据存储——内部存储
  6. python 归纳 (十八)_队列Queue在多线程中使用(二)
  7. A 1049 Counting Ones (30分)
  8. Atitit.java图片图像处理attilax总结
  9. Laravel操作数据库的三种方式总结归纳
  10. 华为手机word插件加载失败_word加载项启动失败
  11. java常用设计模式11—适配器模式
  12. 金蝶osf接口开发_调用OSF接口取待办任务总数报错!急
  13. python期权价格计算器_GitHub - QSCTech-Sange/Options-Calculator: 期权价格计算器——金融工程第二次展示...
  14. 应用程序未安装:已安装了存在签名冲突的同名数据包。
  15. matlab--求极限和级数
  16. 3S基础知识:MapInfo点符号的制作方法
  17. 2019年地理信息产业大会(珠海)信息解读
  18. 读书不能落下,《自卑与超越》 读后感
  19. FLASH学习资料整理
  20. jQuery基本介绍

热门文章

  1. eclipse创建maven项目的创建
  2. c语言encoder作业字符数组,C语言练习题库----数组
  3. spring连接mysql出现问题_spring+hibernate连接mysql问题啊
  4. 组装高性能服务器配置,高性能计算服务器参考配置需求.doc
  5. .Net魔法堂:开启IIS的WebGarden、WebFarm和StateServer之旅
  6. 各式各样的极品程序员 你属于哪一种
  7. I will have to learn more skills now , now
  8. 微软复合文档二进制格式实例分析
  9. 关于IIS不能浏览ASP网页 和不能浏览后台(转)
  10. java quartz实例_Java任务调度框架Quartz教程实例