区块链加密技术之环签名(2)
隐私问题无疑是用户最为关注的重点议题之一;在区块链领域中与隐私保护相关的技术种类繁多;值得注意的是,在最近举办的 PPIO Code Talks 中李星老师向我们介绍了‘零知识证明 zk-SNARKs’这一技术要点;他将这一技术作为隐私保护领域的经典案例进行了详细阐述;今天我们将深入探讨另一种用于实现隐私保护功能的技术方案——环签名(Ring Signature)。
Zero knowledge proofs address the challenge that a prover possesses a specific secret information, aiming to demonstrate this fact to a verifier without revealing any details about the secret itself. Ring signatures tackle the issue that when a message is sent by a member of a group, others only know that someone within the group sent it, but not who exactly. Essentially, this mechanism allows an individual to remain anonymous within a larger group context. By embedding the public key of the actual signer into a set of public keys, ring signatures effectively conceal the identity of the message sender while maintaining authenticity.
该方案由Rivest、Shamir以及Tauman三位密码学家于2001年首次提出,并成为现代密码学的重要里程碑之一
去除了群组管理者,并无需群内成员间的协作即可实现操作。通过使用自己的私钥以及集合中其他成员的公钥信息……能够独立完成对文件的签名。但可能会误以为自己属于该群体(但其实并不属于)。这种方案的优势在于既能保证签署者的绝对匿名性(即他人无法追踪其真实身份),又能防止任何人伪造真实的签署行为(即无法冒充实际签署人)。外部攻击者即使获得了某个有效环状结构下的数字签字记录……也无法伪造出一个真实的、可被验证的有效签字
为此目的, 那么环签名又是如何实现这一目标的呢? 在介绍具体的实现机制之前, 我们先回顾一下椭圆曲线的相关知识.
环签名生成过程
设某个签名者的私钥为sk、对应的公钥为pk(其中pk是由基点g通过标量乘法得到的结果)。在这里我们采用的是标量乘法而非普通的整数相乘操作;即此处的"·"实际上代表的是将基点g连续相加sk次这一过程所得到的结果即:pk等于将基点g反复相加sk次所得的新的点。其具体含义可理解为其在椭圆曲线上执行了sk次群运算从而得到了对应的pk值这一过程被称为椭圆曲线加密系统中的生成过程详细信息可参考PPIO系列文章《深入解析椭圆曲线加密机制》
在本研究中, 为定义一个哈希函数, 我们将该哈希函数的输入设为待签名的消息m以及椭圆曲线上的一点A, 即Hash(m, A)。与椭圆曲线具有相同性质的该哈希函数构成了此签名体系的基础。
此 hash 函数的一个典型实现方案是:将 m 和 A 的字节数组连接起来,并使用经典的 hash 算法(如 keccak256)进行计算。随后会对所得结果进行取模运算(其中 N 表示椭圆曲线上有限群的阶数)。
随后 ,签名者意图对消息 m 发出一个签名;然而 ,他并不希望在公开显示其签名的同时暴露自己的确切身份;于是 ,签名者决定采用群签名机制将自身融入群体之中;为此 ,他计划从系统中选取n−1个其他用户的公钥(这些公钥最好是之前已有记录的);并编好序号后将其公钥随机插入队列中(这样的做法能有效避免被误认);从而形成一个包含n个公钥的新集合;不妨假设这 n 个公钥为
pk0, pk1, pk2, …, pki-1, pki, pki+1, …, pkn-1
其中 pki 为签名方的公钥。
随后,生成方随机产生 n−1 个随机数 s₀, s₁, …, s_{i−1}, s_{i+1}, …, s_{n−1} ,这些数值一一对应于除 p_ki 外的 n−1 个公钥。
注意:这一步无需随机生成 si,因为 si 会在后面通过计算得到。
· 接着,签名方随机生成 k, 并计算 k·g, 这里我们先假设
k·g = si·g+ci·pki (等式①)
就目前而言,在此等式中(等式①)的应用尚不十分明了。暂且无需过分关注它。然而基于等式①我们可以推断出:若拥有一个pki体系中的私钥ski(即公钥基础设施中的私钥),并且已知ci与k的值,则即可逆推出si的值。
注意:这里的 ci 是根据上一个公钥 pki-1 和消息 m 计算出的 hash 值
· 接下来引入第2个式子,
cx = Hash(m, sx-1·g+cx-1·pkx-1) (等式②)
等式②构成一个递推关系,并且其中Hash函数的第二个参数在形式上与等式①的右侧相同。该递推关系表明,在已知第x−1个公钥及其对应的sx−1和cx−1的情况下(即方程组中的变量),能够计算出第x个公钥对应的cx值。特别地,在x=0时的情形中,默认上一个索引为n−1(mod n)。
· 由于在 等式① 中我们定义了 k·g = si·g+ci·pki 所以 ci+1 可直接由计算得到
ci+1 = Hash(m, si·g+ci·pki) = Hash(m, k·g)
请注意:在计算ci+1的过程中目前我们尚不清楚si和ci的具体值;然而在后续计算得出ci后则可以通过kci+1以及ci来确定si的值
紧接着,依次计算 ci+2, … , cn-1, c0, …, ci-1, ci: (如图 1)
ci+2 = Hash(m, si+1·g+ci+1·pki+1)
...
cn-1 = Hash(m, sn-2·g+cn-2·pkn-2)
c0 = Hash(m, sn-1·g+cn-1·pkn-1)
c1 = Hash(m, s0·g+c0·pk0)
…
ci = Hash(m, si-1·g+ci-1·pki-1)
图 1 涉及计算 ci+1 到 cn-1 以及 c0 到 ci-1 和 ci 的过程 · 回溯等式①时发现,在基于 pki 所拥有的私钥信息下
pki = ski·g
因此 等式① 可写成
k·g = si·g+ci*ski·g
两边约去 g,变为
k = si + ci*ski
从而根据 k,ci,ski 可以求出 si (如图 2)即
si = k - ci*ski
注意:私钥 ski 在这里发挥了作用,如果没有 ski,si也无法求出。
图 2 描述了基于密钥 ski, k, ci 的 si 计算过程 · 当 si 值计算获得后,则会形成环签名的完整环路结构;此时 k 值的任务已全部承担完毕并可被移除不再使用
另一种说法是:由于我们拥有私钥 ski,在生成一组随机选择的s₀到sₙ₋₁(其中i≠j),我们可以生成一个sᵢ,并将其与该组值结合使用。
c0 = Hash(m, sn-1·g+cn-1·pkn-1)
c1 = Hash(m, s0·g+c0·pk0)
…
cn-1 = Hash(m, sn-2·g+cn-2·pkn-2)
反之,在这n个公钥中没有任何一把私钥持有者存在的情况下,则该方程组将无法计算出相应的si值以构成一个循环结构
因此,在上述 n 个方程式得以实现的情况下,则意味着生产这些方程式的个体必须至少掌握一组 n 个公钥中的一个私钥组合中的一个钥匙。
· 最后消息 m 的环签名数据为:
Signature = {c0, pk0, …. pkn-1, s0, …., sn-1}
签名验证过程
基于给定的参数 c_0, p_k^0, \dots, p_k^{n-1}, s_0, \dots, s_{n-1}以及消息 m 和等式②的信息进行处理后
c0 ?= c’0
如果相等则签名有效,如果不等则签名无效。
应用场景
现在采用了环签名机制的项目包括门罗币(Moreno)、布尔币(Boolberry)、StealthCoin以及XCurrency等,在Ethereum平台中增添了一类CryptoNote环签名方案。
Monero以其独特的环签名技术著称,在加密货币领域堪称私密性强且难以追踪的经典案例。通过独特的环签名机制,在区块链系统中无法确定交易的具体来源。当其它节点验证交易时,在区块链系统中无关节点无法追查交易的发送方。
否决方案场景:例如,在某个组织中存在否决票制度的情形下,则规定一旦有任何一名成员投出反对此项提案,则提案将被否决掉。然而,在这种情况下实施反制措施的同时性人选择隐藏自身立场的行为,则可以通过采用环签名机制的方式得以实现其目的。具体而言,在这种情况下采取反制措施的同时性人会利用其私钥以及组织内其他成员所拥有的公钥来对自身投出的反对此项提案进行签名确认;经过如此操作后,则可以让组织内所有成员清楚地了解到该组织内至少存在一人对该项提案持反对意见的事实;但遗憾的是这种情况下无法确定到底是谁提出了这一反对意见
总结
回顾整个签名流程,在其巧妙之处在于:若已知密钥 ski,则可推导出 si 使得 c1, c2, …, cn-1 构成一个环;仿佛签名者找到了一根铁丝,在数学保证下只有持有私钥的人才能将铁丝两端连接起来形成一个环;而一旦形成铁丝环后接合处无明显痕迹,则让验证者无法确定接合的具体位置。
尽管存在一定程度的匿名性,
但真实签名者的曝光不可避免。
同样,在当前主流公有链市场环境中,
零知识证明依然是最佳隐私保护方案之一。
然而,
当隐私要求不高,
并且签名方计算能力有限时,
采用环签名方案仍可获得不错的效果。
