数字签名

学习笔记

签名属性

  • 信息鉴定(接收者可以验证消息的来源)
  • 完整性(接收方可以验证消息自签名以来未被修改)
  • 不可否认性(发送方不能错误地声称它们没有签署消息)

https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E7%AD%BE%E5%90%8D%E7%AE%97%E6%B3%95

DSA

- 依赖加法同态性 g^x mod p
- 依赖hash绑定特性,即不可碰撞
- 依赖离散对数难问题
- 签名是两个数字(r,s)
- 签名验证:包含求指数模,模逆元等。

https://en.wikipedia.org/wiki/Digital_Signature_Algorithm
https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm
http://www.528btc.com/blocknews/37685.html
https://medium.com/cryptoadvance/how-schnorr-signatures-may-improve-bitcoin-91655bcb4744
https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716

Schnorr

- 依赖加法同态性 
- 依赖hash绑定特性,即不可碰撞
- 依赖离散对数难问题
- 预言机模型模型算法

- 签名是一个数字一个点(R,s)
- 签名验证:两个倍乘和一个加法
	○ 比ECDSA高效
	
- 高级特性
	○ 支持批量验证,多个签名验证等于一个复杂的签名验证
		§ 可以将多个签名的s减小为1个,多个签名的R不变
			□ (R1,s1), (R2,s2) --> (s, R1,R2,..)
	○ 支持秘钥聚合 P=P1+P2 = k1G + k2G, (R,s)=(R1+R2, s1+s2)
		§ 问题
			□ 需要多轮交互,先计算出公共的R=r1G+r2G..
			□ 恶意秘钥攻击
			□ 重复随机数会导致秘钥泄露
	○ 支持Musig: P=hash(L,P1)×P1+…+hash(L,Pn)×Pn
		§ 解决恶意秘钥攻击
	○ 支持ring signature: 支持 1 out of n 或者 k out of n
	○ 支持merkle Musig: 支持k out of n. 构造一个聚合公钥merkle tree

- 优点
	○ 单次验证高效,且支持批量验证
	○ 聚合秘钥以支持多重签名,无法区分是否使用了多重签名
	○ 支持ring signature
- 缺点
	○ 多重签名在签名时,需要需要多轮交互,依赖随机数生成器(不能重复使用随机数),支持k out of n的merkle musig中的merkle tree可能会很大
	○ 不能任意聚合区块链中的签名为一个签名

BLS签名

- 优点
	○ 不存在schnorr的缺点,可以任意组合区块链签名为一个签名
		§ 聚合签名可以减小签名大小到32bytes,但仍所有的公钥需要保存,所有的公钥,且仍需要计算n+1次pairing函数
			□ Size: n*32 -> 32bytes
			□ Time: 2*n -> n+1次pairing函数
	○ 更小的签名只是一个点S
	○ 上面这两个特性,可以减小区块链中签名数据的存储
- 缺点
	○ 执行效率低
	○ 引入了pairing安全假设

- 签名G * (k*Point(m)) = kG * Point(m) 
- 依赖加法同态性 
- 依赖hash绑定特性,即不可碰撞
- 依赖离散对数难问题
- 依赖pairing安全假设
- 不依赖随机性,没有随机性

- 验证签名:pairing check
	○ 验证签名效率低
- 高级特性
	○ 支持任意签名的聚合
	○ 支持秘钥聚合: P=P1+P2+P3, S=S1+S2+S3
	○ 支持multi-sign: n out of n
	○ 支持threshold sign: k out of n

其它

Ring signature

  • schnorr

Multi-signature

  • Schnorr
  • BLS

Thread signature

  • Schnorr
  • BLS

Blind signature

  • Blind RSA signatures
    Dangers of RSA blind signing: Due to this multiplicative property of RSA, the same key should never be used for both encryption and signing purposes.
    https://blog.csdn.net/win_in_action/article/details/39156579
    https://en.wikipedia.org/wiki/Blind_signature

RSA blinding used in Coinshuffle

上一篇:JWT


下一篇:微信应用开发-个人订阅号开发模式接入