- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ GIT地址:https://github.com/warm3snow 。
在《门罗币隐私保护之隐形地址》文章中,我们重点介绍了门罗币Monero的隐形地址技术,门罗币通过隐形地址保证了交易的不可链接性,并实现了用户的隐私保护和监管需求.
本文将继续介绍门罗币的另一个核心技术——环签名技术,Monero通过环签名技术,实现了交易的不可追踪性.
注:incoming和outgoing交易分别表示用户的收款和支出交易.
环签名(Ring Signature)是一种数字签名方案,允许一组用户中的任何一个用户为某个消息生成签名,而不需要透露具体是哪个用户生成的签名。环签名的主要特点是它提供了签名的匿名性和可验证性,确保签名者的身份在签名过程中保持隐私.
环签名的基本概念 。
环的大小是环签名方案的一个重要参数,环越大,签名者的身份越难以确定,签名的匿名性越高。但是环的大小也会影响签名的计算和验证性能,因此需要在匿名性和性能之间进行权衡.
环签名构造和验证流程 。
环签名方案涉及一个三元组\((KeyGen, Sign, Verify)\),其中:
回顾在《门罗币隐私保护之隐形地址》介绍的交易模型,Bob作为收款方,能够验证每一笔相关交易的有效性.
进一步说明:
值得注意的是,\((P, x)\)是一次性密钥,当Bob花费这笔收入时,会使用该密钥参与环签名,之后可以丢弃.
门罗币使用环签名技术,实现了交易的不可追踪性。门罗币的环签名方案基于CryptoNote协议。在CryptoNode协议中,环签名交易模型如下:
门罗币环签名方案涉及一个四元组\((KeyGen, Sign, Verify, Link)\),其中:
门罗币的KeyGen算法与一般的环签名方案类似,目的都是生成公私钥对\((P_s, x_s)\),其中\(P_s\)是签名者的公钥,\(x_s\)是签名者的私钥。 不同的是:
在门罗币中,由于签名公私钥对\((P_s, x_s)\)是由隐形地址技术生成的,并且仅用于一次性签名,因此门罗币环签名我们也称为一次性环签名.
门罗币的Sign算法如下:
初始化:
计算环签名(类似零知识承诺:承诺-挑战-响应,可以参考之前的文章《零知识证明之承诺方案》 。
计算承诺,承诺由两个集合组成\(L\)和\(R\),集合元素计算如下:
计算挑战(实际上是前面已有知识的哈希值) 。
其中,\(m\)是待签名的消息,在这里表示交易信息(签名除外,因为签名还未生成) 。
计算响应 。
其中,\(\sigma\)就是环签名的签名值,\(\sigma\) 。
区块链矿工在收到交易后,会对交易进行签名验证。矿工已知\(R = {P_1, P_2, ..., P_n}\),以及环签名\(\sigma = (I, c_1, ..., c_n, r_1, ..., r_n)\), 签名验证Verify算法如下:
如果上述等式成立,则签名有效,否则签名无效,交易被拒绝.
正确性验证 。
在上述推导中,由于\(P_s = x_s \cdot G\),所以:\(-c_s \cdot x_s \cdot G + c_s \cdot P_s = -c_s \cdot P_s + c_s \cdot P_s = 0\) 。
在上述推导中,由于\(I = x_s \cdot H_p(P_s)\),所以:\(-c_s \cdot x_s \cdot H_p(P_s) + c_s \cdot I = -c_s \cdot I + c_s \cdot I = 0\) 。
由于\(L^{'} = L\)且\(R^{'} = R\),所以:
因此,签名验证等式成立,签名有效.
,密钥镜像和密钥对之间的关系如下:
密钥镜像\(I\)的计算方式,反映了用户密钥和密钥镜像之间存在一一对应关系,而用户密钥(x, P)基于隐形地址技术,只使用一次,且与交易绑定。 矿工会记录所有交易的密钥镜像列表,在收到新交易时,会检查交易中的\(I\)是否已存在于列表中,如果存在,则说明该交易的(x, P)已经被使用过,是一笔双花交易,交易被拒绝.
环签名是门罗币的另一个核心技术,通过环签名技术,实现了交易的不可追踪性。本文简单介绍了环签名的基本概念,并详细介绍了门罗币的环签名方案,包括密钥生成、签名、验证和双花验证等算法。希望通过本文的介绍,读者对隐私币的匿名技术有更进一步的了解.
门罗币隐私保护使用了多种技术,包括隐形地址、环签名、机密交易等,这些技术共同构成了门罗币的隐私保护体系。在接下来的文章中,我们将继续介绍门罗币的其他隐私保护技术.
最后此篇关于门罗币隐私保护之环签名的文章就讲到这里了,如果你想了解更多关于门罗币隐私保护之环签名的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我得到了这个printHashKey函数,它运行良好。 fun printHashKey() { try { val info : PackageInfo = packageM
如何使用正确的签名 key 为我的 Android 应用包签名? 最佳答案 我尝试在此处和 this question 中使用多个答案, 但不知何故我收到了这个错误,因为我的 android/app/
我的 gradle 文件中有这个: android { signingConfigs { mySigningConfig { keyAlias 'the
请至少选择一个签名版本以在 Android Studio 2.3 中使用 现在在 Android Studio 中生成一个签名的 APK 时,它显示了两个选项(复选框),即 1. V1(Jar 签名)
我想表示一些标量值(例如整数或字符串)通过它的实际值或一些 NA 值,然后存储它们在集合中(例如列表)。目的是处理缺失值。 为此,我实现了一个签名 module type Scalar = sig
为什么这不完全有效? sum :: (Num a, Num b) => a -> b -> c sum a b = a + b 当然,错误消息与签名有关,但我仍然不明白原因。 Couldn't mat
谢谢帮助,我的问题是关于从下面的代码中收到的 ax 值? mov al,22h mov cl,0fdh imul cl 真机结果:ff9a 我的预期:00:9a(通过二进制相乘) 第一个数字是 22h
我有一个注释: import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.
我从对物体的思考中得出了一个术语。当我们扩展一个类时,扩展类将具有与父类相同的签名,因此术语 IS-A 来自...示例 class Foo{ } class Foo2 extends Foo{ } c
我需要在有符号整数和它们作为字节序列的内部表示之间进行转换。在 C 中,我使用的函数如下: unsigned char hibyte(unsigned short i) {return i>>8;}
我正在尝试使用给定的 RSA 参数对一些数据进行签名。 我给出了模数、指数、D、DP、DQ、P、Q 和 InverseQ。什么库或方法最容易使用来计算此签名。在 C# 中,一旦您提供参数,它们就会有一
这些签名之间有什么区别? T * f(T & identifier); T & f(T & identifier); T f(T & identifier); void f(T * identifie
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Where and why do I have to put the “template” and “typ
我有一个签名,我需要在签名旁边添加图片。但我不确定 css 的确切程度和内容。目前它显示在文字下方,我应该把图片放在哪里?在相同的 tr 或 td 中?
查看 LinkedHashMap 的 JDK 源代码,我注意到这个类被声明为: public class LinkedHashMap extends HashMap im
背景:我继承了一个基于 linux 的嵌入式系统,其中包含一个 SMTP 代理和一些我不得不忍受的古怪限制。它位于 SMTP 客户端和服务器之间。当 SMTP 客户端连接时,代理会打开与服务器的连接,
这是 C++17 形式的规则 ([basic.lval]/8),但它在其他标准中看起来很相似(在 C++98 中是“lvalue”而不是“glvalue”): 8 If a program attem
我有一个注释: import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.
我即将开展一个项目,希望使用电子签名板使用 C# 捕获客户的签名、在设备上显示文本等。 现在,在我开始做进一步的研究之前,我想向你们征求一些意见/建议,我应该使用哪些设备.. 我现在的要求非常笼统:我
呢喃自己在心中开始扩张地盘,仿佛制式地广播了三次。 漾起的涟绮,用谈不上精腻的手段。 拒绝天亮,却又贪恋着贪恋多情的日光。 川流不息的画面是他们,而我的落幕停在右脚,它渴望着下台,而我只剩自言
我是一名优秀的程序员,十分优秀!