Appearance
Intro to Ring Signature
基于RSA的方案描述
1. 核心数学构件
在 RSA 环签名方案中,我们需要定义三个关键的数学组件:
A. 陷门单向置换
对于环中的每个用户
其逆运算(只有拥有私钥
注意:为了统一不同用户的模数
B. 带密钥的组合函数
这是环签名的灵魂。我们需要一个函数
- 环状结构: 输入是环中每个成员的输出值
。 - 可逆性: 给定密钥
、初始值 和除 以外的所有 ,可以高效地解出 。
Rivest 提出的构造是基于对称加密(如 AES 或 SHACAL)的加密链:
其中:
是密钥(通常由消息 的哈希生成,即 )。 是随机初始向量(IV)。(这里可以联想到分组密码的CBC模式) 是对称加密算法。 是异或运算。
C. 环方程
签名的目标是找到一组值
2. 签名算法
假设签名者是环中的第
步骤 1:生成密钥与随机数
- 计算对称密钥
。 - 随机选择一个初始值(胶水值)
。
步骤 2:填充诱饵 对于环中除自己以外的所有成员
- 随机选择
。 - 计算
。 - 此时,我们有了所有的
,唯独缺少 。
步骤 3:逆向求解
令
同时,我们可以利用目标值
(注:这里简化了索引,实际是从
最终,我们会得到两个中间状态值,使得:
其中
于是,我们可以直接解出
步骤 4:计算陷门逆 现在我们有了
步骤 5:输出签名 签名为元组:
3. 验证算法
验证者收到消息
- 恢复密钥: 计算
。 - 计算
: 对于所有 ,使用公钥计算 。 - 验证环方程: 计算
。 - 判定: 如果计算结果等于
,则签名有效;否则无效。
4. 数学证明与安全性分析
A. 正确性证明
命题: 如果签名是按照上述步骤生成的,那么验证算法一定输出 True。
证明: 验证者计算的是:
在签名生成过程中,我们构造
B. 无条件匿名性证明
命题: 即使攻击者拥有无限算力,甚至拥有环中所有成员的私钥,他猜中真实签名者的概率也是
证明思路: 我们需要证明签名
的分布: 是均匀随机选择的。 的分布: 是均匀随机选择的。 的分布: 由于 是置换, 也是均匀分布的。 的分布: 由于 是伪随机置换,且 和其他 都是随机的,中间值 和 对于观察者来说看起来也是随机的。因此 在 上也是均匀分布的。 的分布: 。由于 是置换, 也是均匀分布的。
结论: 对于任何观察者来说,签名中的每一个分量
基于椭圆曲线的方案
其实从上面的描述中不难看出,本质上就是一个公钥方案的变形,故而很自然地就能得出在EC上的方案描述
1. 密钥生成
- 选择椭圆曲线参数:选定一条标准的椭圆曲线,并确定其基点(生成元)
和阶 。 - 生成密钥对:对于环中的
个成员,每个成员独立生成自己的密钥对: ( , = )
所有成员的公钥集合
2. 签名
假设签名者在环中的位置为
选择随机起点:
- 随机选择
,并计算临时承诺 。 - 令挑战从
的下一个位置开始(按模 计算):
- 随机选择
沿环生成(除签名者外):
- 按环索引遍历
(即所有 ): - 随机选择
; - 计算
- 再计算下一项挑战
- 随机选择
- 按环索引遍历
计算签名者响应并闭环:
- 当链回到
时,已知 ,计算 - 则
- 因而
闭环成立。
- 当链回到
生成签名:
- 签名输出为
- 其中
是挑战链绕环后的第一项,不是独立预设的随机值。
- 签名输出为
3. 验签
任何验证者已知:消息
重新计算:
- 从签名给出的
开始,对 依次计算:
- 从签名给出的
检查闭环:
- 计算最后一步得到的闭环挑战:
- 检查是否满足:
- 计算最后一步得到的闭环挑战:
如果成立,则验证通过。这证明了签名确实由环中某个持有对应私钥的成员生成,但无法确定具体身份,从而实现匿名性。
本质上,我们是让