ECDSA安全性证明


本文主要对2021年CCS的论文《Efficient Online-friendly Two-Party ECDSA Signature》这篇论文方案进行简述,并对椭圆曲线数字签名进行了安全性证明


前言

由于双方ECDSA签名在加密货币中广泛部署,因此受到了广泛关注。根据是否需要消息,我们可以将双方签名分为两个不同的阶段,即离线和在线。理想情况下,在线阶段应该尽可能地轻量级。同时,离线阶段的成本应该保持与正常签名生成的成本相似。然而,现有的ECDSA双向协议并不是最优的:它们的在线阶段需要对密文进行解密,或者离线阶段需要至少执行两次乘法到加法的转换,这在总体复杂度上占主导地位。本文提出了一种在线友好的两方ECDSA,该ECDSA具有轻量级的在线阶段和单一的乘加函数的离线阶段。

它是由密钥的再共享和nonce的线性共享的新颖设计构成的。该方案显著改进了以往基于无关传输和同态加密的协议。

背景知识

椭圆曲线密码学
私钥为d,其中d是集合{1,2,…,n-1}中的一个元素,其中n是子群的阶
公钥是一个点H=dG,其中G是子群的一个基点
根据d和G求H很容易,根据H和G求解d很困难(根据离散对数难解问题
ECDH
首先,有两个实体Alice和Bob
Alice持有私钥 d A d_A dA和公钥 H A = d A G H_A=d_AG HA=dAG
Bob持有私钥 d B d_B dB和公钥 H B = d B G H_B=d_BG HB=dBG
此时Alice和Bob通过非安全信道交换公钥 H A H_A HA H B H_B HB

Alice Bob A的公钥HA B的公钥HB 都计算出dadbG Alice Bob

用ECDSA进行签名

要传递的信息m的截断哈希值z,
Alice:
选取一个随机数k,k是{1,2,…,n-1}中的一个元素
然后计算出点P=kG,
计算r= x p x_p xpmod n;
然后计算s= k − 1 ( z + r d A ) k^{-1}(z+rd_A) k1(z+rdA) mod n
把(r,s)发送给Bob
Bob:
计算u1= s − 1 r s^{-1}r s1r mod n
计算u2= s − 1 z s^{-1}z s1z mod n
计算P= u 1 G u_1G u1G+ u 2 u_2 u2 H A H_A HA
验证r= x p x_p xp mod n是否成立,若成立则Alice签名有效

MtA

根据k和x的分量计算k的逆和k的逆乘x代价很高。所以利用k和x的乘法份额和加法同态加密方案Paillier,由此产生的签名程序只涉及同态操作和解密操作,可以降低通信代价。本篇论文引入了MtA函数,将乘法转化为加法共享运算。
但是MtA函数的证明需要使用零知识证明的知识。
调用两次MTA根据k的加法分量计算 k − 1 k^{-1} k1的分量,再调用两次MTA根据 k − 1 k^{-1} k1的分量和x的分量计算 k − 1 x k^{-1}x k1x的分量

离线和在线签名

MPC可以分为在线和离线阶段,其中
离线阶段:计算和用户输入无关的消息,(预计算),减少在线阶段的计算量,提高通信效率
在线阶段:计算和用户消息相关的部分
如果在线阶段是非交互式的,并且其成本与单一签名验证相同,阈值签名的在线阶段是最佳的。如果该方案的在线阶段是最优的,则被称为在线友好方案
有些方案采用乘法共享以及加法同构特性,在线阶段需要解密密文,在线阶段不是最优。以前的协议要么需要相对缓慢的在线计算,要么在离线阶段需要调用2到4次MtA,而在线阶段是最佳的;但是这样总体方案的代价不是最佳,所以我们的目标:尽可能最少次数调用MtA,而且获得最优的在线性能

本文简介

提出了一个在线友好的双方ECDSA,即2ECDSA,这样它的在线计算几乎是最优的,而且它的离线阶段只需要调用一次MtA。

具体贡献

1.在线阶段最优
在线阶段是非交互式的,并且只需要传输一个单独的元素,所以在线阶段最优;
离线阶段只需要调用一次MtA
提出了两种新的分享方案:
①k=k1(r1+k2)
②x=x1’k2+x2’
2.具体实例化
在Rust中提供了我们的两方2ECDSA协议的实现,并对Paillier加密、CL加密和遗忘传输中的MtA功能进行了实例化
3.门限秘密共享
提出的两方ECDSA可以和门限秘密共享进行结合,从而实现2-n的ECDSA方案。

技术概述

出发点:使用简单的乘法共享和加法共享来实现双方ECDSA

第一次尝试

使用x的秘密重分享
具体来说,离线阶段:引入k2前, 原始状态:x=x1+x2
引入k2后,现在状态:x=x1’k2+x2’(调用一次MTA)
在线阶段:P2计算S2,P1根据s2,k1,x1’计算s在线阶段计算
更具体,在离线阶段:
P1选择x1’,P1和P2 调用MTA,分别输入x1’和k2, 输出结果为tA+tB=x1’*k2;
这之后,P1持有tA和x1,x1’; P2持有tB,x2
然后进行交互,P1向P2发送cc=tA-x1; 然后P2计算x2’=-tB-cc+x2;
这样就完成了x的重分享
安全分析:在这种情况下,x1=x1’k2-tB-cc,P2只需设置K2=0就可以得知x1,此时是不安全的

第二次尝试

主要思想:增加一个x1的掩码r1,在P2选择k2之后,P1选择一个随机数r1,从而满足x=x1’(k2+r1)+x2’,这样就可以排除k2=0对x1泄露的可能性

方案中双方交互流程


之后再对论文具体方案进行补充


原始ECDSA方案安全性证明

下面主要对原始ECDSA方案的安全性进行规约证明
首先,要证明一个加密或者签名算法的安全性,最常见的做法是将其规约到一个数学困难问题上,又因为数学问题是难解的,所以说这个加密或者签名方案就是难以攻破的,从而证明其安全性。
对于ECDSA椭圆曲线签名方案来说,它是基于ECDLP问题的,即
私钥为d,其中d是集合{1,2,…,n-1}中的一个元素,其中n是子群的阶
公钥是一个点H=dG,其中G是子群的一个基点
根据d和G求H很容易,根据H和G求解d很困难
签名算法持有公钥和私钥,但是私钥是保密的,公钥是公开的;
下面介绍攻击模型,该模型包括一个敌手 A和算法 B,他们之间进行交互式游戏。算法B接收一个随机的 ECDLP问题实例 Y = xG,他的目标是计算出 x 。算法 B把敌手 A作为子程序,算法 B扮演敌手 A的挑战者。如果最后A能根据伪造的消息和签名求出k,那么说明解决了ECDLP问题

具体证明流程
(1)设置阶段:算法B将一些系统公共参数发送给A,然后算法B维护一张 L h L_h Lh列表(存放一些(消息,哈希值)对),并初始化该列表为空,
(2)查询阶段:(敌手A可以向算法B查询消息m对应的哈希值和签名)
哈希查询
敌手A可以向B发送消息m以查询其对应的哈希值,最初 L h L_h Lh列表为空,此时B对 L h L_h Lh列表进行查询, L h L_h Lh列表不存在(m,e),所以此时算法B随机选择一个e∈{0,1} n ^{n} n,返回给敌手A,并将对应(m,e)存入 L h L_h Lh列表中;
后续进行查询时也是相同逻辑,算法 B首先检查消息 m是否已经出现在列表 LH中。若已存在,算法 B直接将 e返回给敌手 A;否则,算法 B从 {0,1} n中任意选择 e,并将(m,e)存储进 L h L_h Lh列表中,然后将 e返回给敌手 A
特别地,在 q h q_h qh次查询中,不能全都返回给敌手A随机数,要随机选择一个消息记为 m ∗ m^{*} m,对于该消息 算法B通过查询随机预言机返回给敌手A消息 m ∗ m^{*} m真正的哈希值 H ( m ∗ ) H(m^{*}) H(m)
签名查询:(在该阶段,敌手A可以向算法B查询一些消息的对应签名)
签名查询。敌手 A向算法 B提交消息 m ,算法 B任意选择随机数 k ∈ [1,n - 1],然后计算 R =kG = (x1,y1) ,提取 r = x1 mod n 。算法 B在 L h L_h Lh列表中
搜索(m,e) ,若列表 L中不存在(m,e)(说明敌手A并没有进行过哈希查询,如果此时返回签名则会被A察觉到不是真实执行) ,则返回符号“⊥”,查询终止;
否则,算法 B计算 s = k − 1 ( H ( m ) + x r ) k^{-1}(H(m)+xr) k1(H(m)+xr)mod n;然后,将签名结果(r,s)返回给敌手 A
(3)伪造阶段:(在此阶段,敌手A有效地伪造出消息 m ∗ m^{*} m对应的签名( r ∗ r^{*} r, s ∗ s^{*} s))
若算法 B在查询阶段没有终止退出,那么敌手 A将以至少为 ε的优势输出伪造消息
m* 和有效伪造签名(e* ,s* ) 。由于敌手 A执行哈希查询的次数大于 1/ q H q_H qH ,所以敌手 A至少以ε’ > ε / q H q_H qH的优势计算出 k = ( s ∗ ) − 1 (s^{*})^{-1} (s)1 ( H(m)+xr ) ,从而 ECDLP问题被解决.
又因为ECDLP是困难问题,暂时没有多项式时间算法可以以不可忽略的优势ε来解决ECDLP问题,所以不存在能够在 t时间内以不可忽略的优势 ε攻破改进方案的敌手。因此,方案是安全的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值