白盒椭圆曲线密码学实现

文档序号:144798 发布日期:2021-10-22 浏览:18次 >En<

阅读说明:本技术 白盒椭圆曲线密码学实现 (White-box elliptic curve cryptography implementation ) 是由 M.博克斯 于 2020-03-17 设计创作,主要内容包括:本发明提供了一种微处理器装置,包括被构造用于处理参数并产生输出的密码操作的实现,其中,至少一些参数被混淆,使得密码操作处理被混淆的参数,其特征在于,被混淆的参数是通过它们按照加性同态密码系统被加密而被混淆的。(The present invention provides a microprocessor apparatus comprising an implementation of a cryptographic operation configured to process parameters and produce an output, wherein at least some of the parameters are obfuscated such that the cryptographic operation processes the obfuscated parameters, characterised in that the obfuscated parameters are obfuscated by virtue of them being encrypted according to an additive homomorphic cryptographic system.)

白盒椭圆曲线密码学实现

技术领域

本发明涉及密码学(cryptography),更确切地说,涉及白盒密码学WBC,尤其涉及椭圆曲线EC(椭圆曲线密码学ECC)上的白盒密码学(White Box Cryptography,WBC),又称为EC-WBC或WBC-ECC。更确切地说,本发明涉及一种实现密码操作的微处理器装置。

背景技术

实现密码(cryptographic)操作的微处理器装置或环境通常分为黑盒、灰盒或白盒。在黑盒环境中,由于使用全密封的硬件模块等原因,攻击者无法访问操作,因此通过密码操作处理的秘密信息得到保护,不会受到攻击。在白盒环境中,攻击者能够完全访问实现密码操作的装置或环境。攻击者能够随着该实现正在运行而检查、停止、单步遍历和修改该实现。因此,必须实施适当的对策来保护在密码操作中处理的机密信息。

如在本申请中的理解该实现一样,密码操作的实现通常可以是软件或硬件形式的,或者是硬件和软件的混合形式。

1.可如下描述椭圆曲线。

·p、a、b:由魏尔斯特拉斯(Weierstrass)方程给出的椭圆曲线E的参数

y2=x3+a*x+b mod p

·G=(G.x,G.y):循环子群的生成点

·q=ord(G)=点G的阶数

·h:G的辅因子,即,q*h=ord(E)

已知的椭圆曲线上的密码操作包括例如:ECDSA密钥生成;ECDSA签名生成;ECDSA签名验证;ECDH密钥生成;ECDH密钥交换;EC-Schnorr密钥生成;EC-Schnorr签名生成;EC-Schnorr签名验证。在下文中将利用与本发明的说明结合使用的符号来解释椭圆曲线上的已知密码操作的所列出的例子。

2.1标准ECDSA密钥生成

输入:-

输出:私钥d、公钥P

过程:

·密码地产生{1,2,...,q-1}内的安全随机数d

·P=d*G

·输出d、P

2.2标准ECDSA签名生成

输入:私钥d、消息m的hash(m)值(m的哈希值)

输出:签名参数r、s

过程:

·密码地产生{1,2,...,q-1}内的安全随机数u(临时密钥)

·计算Q=u*G

·r=Q.x mod q。若r==0,则重新开始。

·s=(hash(m)+r*d)/u mod q。若s==0,则重新开始。

·输出r、s

2.3标准ECDSA签名验证

输入:公钥P、消息m的hash(m)、待验证的签名(r、s)

输出:若签名有效则为真(TRUE),否则为假(FALSE)

过程:

·在{1,2,...,q-1}中查找r、s。若未找到,则输出假并终止。

·u=hash(m)/s mod q、v=r/s mod q

·Q=u*G+v*P。若Q是无穷远点,则输出假并终止。

·r′=Q.x mod q

·若r==r′,则输出真,否则输出假

2.4标准ECDH密钥生成

这与第2.1节相同。

2.5标准ECDH密钥交换

输入:私钥d、另一方的公钥P

输出:公共秘密点R

过程:

·输出R=d*P

2.6标准EC-Schnorr密钥生成

这与第2.1节相同。

2.7标准EC-Schnorr签名生成

输入:私钥d、消息m

输出:签名参数r、s

过程:

·密码地产生{1,2,...,q-1}范围内的安全随机数u(临时密钥)

·计算Q=u*G

·r=hash(m||Q.x)(||=concatenation)(即,||=级联)。若r mod q==0,则重新开始。

·s=k+r*d mod q。若s==0,则重新开始。

·输出r、s

2.8标准EC-Schnorr签名验证

输入:公钥P、消息m、待验证的签名(r、s)

输出:若签名有效则为真,否则为假

过程:

·检查r是否在哈希函数的正确范围内,并且s是否在{1,2,...,q-1}范围内。若不是,则输出假并终止。

·Q=s*G-r*P。若Q是无穷远点,则输出假并终止。

·r′=hash(m||Q.x)(||=concatenation)

·若r==r′,则输出TRUE,否则输出假

现有技术

保护在白盒环境中运行的(密码)操作的典型对策是混淆(obfuscate)该操作所处理的关键参数,例如秘密密钥。

爱迪德(Irdeto)的现有技术文献[1]EP2553866A1公开了一种按照DSA或ECDSA标准来验证数字签名的方法,所述签名S由一个输出对S=(r、s)组成,其中r是利用生成器函数(generator)G导出的,s是利用消息M的哈希函数H(M)、私钥d和r导出的。根据EP2553866A1,签名S=(r、s)是用变换后的参数计算的。使用f-1对生成器函数G进行变换并因此将其混淆,使用f对秘密密钥d进行变换并因此对其混淆,其中,对于G和d,f是相同的秘密数(secret number)。用于计算r和S的操作被隐藏,但是与相应的非隐藏操作相比,用于计算r和S的操作为S=(r、s)提供相同的结果,因为混淆因子f在内部抵消了。

飞利浦(Philips)的现有技术文献[2]EP3376705A1公开了一种电子点乘装置,该装置用于计算乘数k与椭圆曲线E上的基点G之间的椭圆曲线上的点乘,用在密码协议(例如ECDSA签名计算)中。根据EP3376705A1的方案,(i)从基点G导出多个预先计算的辅助点Gi,并且(ii)从消息M的哈希值h导出多个导出的哈希值hi,并从这些数据导出多个盲基乘数(blineded base multiplier)。原始基点G和原始乘数k的点乘k*G是通过计算以下各项的点加来计算的:(i)多个盲基乘数与原始基点G的点乘;以及(ii)盲辅助乘数和辅助点Gi的多个点乘,其中,(i)中的多个盲基乘数和(ii)中的盲辅助乘数的盲化(blinding)可以是相互校正的加权和(权利要求9),以获得正确的总结果k*G。

NXP的现有技术文献[3]EP3249520A1公开了一种用于在非安全处理器中在椭圆曲线上的标量K与基点G之间的椭圆曲线标量(scalar)乘法的系统和方法。在此,在安全处理器中进行预备计算,其中标量K被分成m2个随机值ki,选择掩码值,并且利用掩码值,计算与掩码值相同数量的椭圆曲线点Gi。仍然在安全处理器中,执行标量乘法,其中部分地去除了先前应用的掩码值。在非安全处理器中,将预先计算的标量K的各个分值(split-off)ki的导数和预先计算的椭圆曲线点Gi组合成m1个乘得的椭圆曲线点Pi,并将乘得的椭圆曲线点Pi送回安全处理器。

NXP的现有技术文献[4]EP3125145A1公开了一种混淆实现椭圆曲线密码ECC点乘函数的软件代码的方法,其中,将作为乘数d的ECC参数变换成具有-1、0和+1值的数组,同时保持相同的d值;使用变换的乘数产生ECC点乘函数,其中所产生的ECC点乘函数运算是分离的变量运算。

[5]Paillier(帕耶)密码系统最初是在德国柏林(berlin)、海德堡(heidelberg)的施普林格(springer)于1999年出版的由Stern J.的《密码学进展——EUROCRYPT′99计算机科学论文集》第1592卷中的Pascal Paillier的论文″基于复合度剩余类的公钥密码系统″(Pascal Paillier,″Public-Key Cryptosystems Based on Composite DegreeResiduosity Classes″,in Stern J.(eds)Advances in Cryptology-EUROCRYPT′99.Lecture Notes in Computer Science,Vol 1592,Springer,Berlin,Heidelberg,1999))中提出的。有描述概率非对称公钥密码系统的两种方法(方案1和方案3)。

在[6]耶胡达·林德尔(Yehuda Lindell)的论文《快速安全的双方ECDSA签名》(IACR预印论文服务器2017/552)(“Fast Secure Two-Party ECDSA signing”(IACRpreprint server 2017/552))中,使用Paillier密码系统构建了一种用于由双方产生ECDSA签名的密码协议。每一方都共享一个ECDSA私钥并且不能独立进行签名操作,但是双方可共同产生一个ECDSA签名。

文献[1]-[4]分别公开了一种用于在不安全的环境中、即在白盒环境中执行变换、掩蔽、盲化或混淆的密码操作的方法。方案[1]和[2]之中的每一种都遵循相互协调地变换、掩蔽或盲化不同参数、使得变换、掩蔽或盲化在总结果中抵消的原理。在[3]中,使用了安全环境中的部分解掩蔽(demask),以保证正确的总结果。

根据用于界定本发明的文献[1]EP2553866A1的方案,签名S=(r、s)是用被混淆(在文献[1]中称为:变换)的参数计算的。在此,需要对参数进行繁复且相互一致的变换。在[3]中,需要进行繁复的部分解掩蔽。

发明目的

需要一种系统或方案,来能够类似于使用未隐蔽、盲化、加密、变换或以其它方式混淆的明文参数计算的,使用隐蔽、盲化、加密、变换或以其它方式混淆的参数(尤其是秘密密钥d)来计算密码操作。

例如,考虑按照规则s=k+r*d mod q进行EC-Schnorr签名成分s的计算的情况。若密钥d被混淆为d#,则在该计算中就不能直接用d#。因此,其挑战在于计算参数s而不暴露明文密钥d(以及临时密钥k)。这意味着要对所有涉及的参数进行复杂的变换,并使用变换后的参数进行计算。在计算的某些时候,重新变换是必要的,例如在返回原始参数s时的最后阶段。优选很少进行这种重新变换,并且大部分计算是使用变换后的参数完成的,这些变换后的参数不会显露明文参数的真实明文值。

本发明的目的是提供一种用于使用被混淆的参数计算密码操作的方法和系统,该方法和系统提供与使用未被混淆的参数进行的密码操作类似的结果,而不需要采取个案补偿措施。

发明内容

本发明的目的通过具有如下文所列和如权利要求1所述的特征的系统实现的。本发明的实施例将在下文和从属权利要求中进一步说明。

本发明提供了一种包括用于处理参数并产生输出的密码操作的实现的微处理器装置。在此,由密码操作处理的参数之中的至少一些参数被混淆,更确切地说是被混淆为使得密码操作能处理混淆的参数(而不是像原始密码操作情况中的明文参数)。该密码操作可以是算法(密码操作的详细示例和实施例将在下文中进一步说明),并且可包括加密步骤。参数的混淆也可以是(但不一定必须是)加密,并且是将该实现变成白盒实现的一种措施。混淆不是密码操作的过程或算法的一部分,而是单独的附加措施。

本发明的特征在于,被混淆的参数是以它们按照加性同态密码系统被加密的方式而被混淆的。

在上述的EC-Schnorr签名成分s=k+r*d mod q的示例中,假设k#和d#分别是使用加性同态密码系统对k和(resp.)d进行加密。那么,通过计算s#=(k#)*(d#)r,然后按照同态密码系统对s#进行解密,最后对q进行约减求模(reduction modulo q),就可得到结果s。在计算s#时,使用同态特性:明文参数的相加与被加密的参数的特定群组运算(在此是乘法)对应。因此,s的计算可在不显露明文参数k和d的情况下完成。

使用同态密码系统的优点是:

1)参数是用强密码系统进行数学加密的,而不仅是用在数学上不强大的技术来模糊的(obscured),

2)它提供了用被加密的参数进行几乎所有计算的可能性(而不泄露明文秘密参数),

3)它提供了在被加密的参数中引入进一步随机盲化值的简单可能性,

4)仅在计算的很少部分中需要解密操作,并且可使用固定的安全密钥完成解密操作。

因此,本发明的解决方案实现了使用被掩蔽、盲化、加密、变换或以其它方式混淆的参数来计算密码操作,而不需要像现有技术的已知方案中所要求的那样在不同参数之间进行繁复的个案对齐或解掩蔽。

根据本发明的一个实施例,加性同态密码系统包括加密函数Enc和解密函数Dec,该加密函数Enc和解密函数Dec符合规则Dec(EnC(m))=m,并且,由于是加性同态性的,因此还符合规则Dec(EnC(m1)*Enc(m2))=m1+m2

结合本发明,被加密意味着由加密函数Enc处理,而被解密意味着由解密函数Dec处理。

根据本发明的一个实施例,加性同态密码系统实施为Paillier密码系统。具有加性同态特性的其它密码系统通常也适用于本发明。但是,与某些其它适合的密码系统相比,Paillier密码系统具有较低复杂性。这种较低复杂性有助于产生密码操作的混淆实现。这一点尤其在不是密码操作的一个参数被混淆而是多个参数甚至所有参数都被混淆的情况下成立。

在此要强调的是,微处理器系统包括两个不同的被交织的密码系统,即,第一个密码系统是实现密码操作(例如密钥生成、签名生成、密钥交换)的操作性密码系统,第二个密码系统是混淆密码系统(加性同态密码系统,例如Paillier密码系统)。因此,使用加性同态密码系统(例如Paillier或类似的适当密码系统)导致操作性密码系统的白盒安全实现。

根据本发明的实施例,Paillier密码系统包括:(1)由一对{n、g}组成的加密公钥和(2)由一对{λ、μ}或{α、μ}组成的解密私钥。在本文中,Paillier密码系统可按方案1实施,采用由一对{λ、μ}组成的解密私钥;或者可按方案3实施,采用由一对{α、μ}组成的解密私钥。

根据本发明的实施例,根据密码操作的类型(例如密钥生成、密钥交换或签名生成),由密码操作处理的参数或输出至少包括秘密密钥,例如在下文中进一步阐述的密钥d或密钥d1。在此,例如在密钥生成、密钥交换和签名生成中,至少该秘密密钥是以该秘密密钥按照加性同态密码系统(由加密函数)被加密的方式被混淆的。除了秘密密钥之外或者替换该秘密密钥,从秘密密钥导出的值也以从秘密密钥导出的值按照加性同态密码系统(由加密函数)加密的方式被混淆。从秘密密钥导出的这种导出值的例子是如下文所进一步阐述的签名生成的值v1和v2。下面将进一步说明通过密钥生成、签名生成和密钥交换实施的被混淆的(白盒)操作的被混淆的参数的详细例子。

根据本发明的实施例,操作性密码系统包括在密码操作中处理的至少一个预先计算的参数,并且其中至少一个预先计算的参数是以随机数或/和从预先计算的参数导出的值按照加性同态密码系统被加密的方式被混淆的。在密钥生成过程或密钥交换过程中,预先计算的参数的例子是如下文所进一步阐述的参数ci和m1。在签名生成过程中,预先计算的参数的例子是如下文所进一步阐述的参数fj和m2。在签名生成过程中,从预先计算的值导出的导出参数的例子是参数v1。某些导出参数可从秘密密钥和预先计算的参数导出。

根据本发明的实施例,操作性密码系统是基于椭圆曲线EC的系统或基于非椭圆曲线的系统,尤其是以下系统之一:ECDSA;EC-Schnorr;EC Diffie Hellman ECDH;EdDSA、ECGDSA、KCDSA、SM2;DSA;Schnorr签名方案;ElGamal签名方案;Diffie Hellman DH密钥交换。下面进一步给出上文所列的多种示例性操作性密码系统的详细实施例。

根据本发明的一些实施例,密码操作是按照操作性密码系统(例如ECDSA、ECDH、EC-Schnorr)进行的密钥生成操作,其输出是密码密钥(cryptographic key)(例如d; d1),并且至少输出的密码密钥按照加性同态密码系统被加密。或者或另外,如上文所述,从这种密码密钥导出的一个或多个参数、一个或多个预先计算的参数、或者从预先计算的参数导出的一个或多个值是通过使用加性同态密码系统加密而被混淆的。

根据本发明的另一些实施例,密码操作是按照操作性密码系统(例如ECDSA、EC-Schnorr)进行的密码签名生成操作,操作性密码系统被构造用于基于秘密密钥(secretkey)(例如d;d1)产生密码签名(例如在下文的示例中是{r、s}),其输出是密码签名{r、s},并且至少秘密密钥或/和从秘密密钥导出的值(例如在签名生成中是v1、v2)是按照加性同态密码系统加密的。或者或另外,如上文所述,从这种密码密钥导出的一个或多个参数、一个或多个预先计算的参数、或者从预先计算的参数导出的一个或多个值是通过使用加性同态密码系统加密而混淆的。

根据本发明的另一些实施例,密码操作是按照操作性密码系统(例如ECDH)进行的至少两方或更多不同方之间的密钥交换操作,其输出是不同方之间共享的共有秘密密钥(R),并且是基于自己的秘密密钥(d;d1)和另一方的公钥(P)计算的,并且每一方的至少秘密密钥(d;d1)是按照加性同态密码加密的。或者或另外,如上文所述,从这种密码密钥导出的一个或多个参数、一个或多个预先计算的参数、或者从预先计算的参数导出的一个或多个值是通过使用加性同态密码系统加密而混淆的。

根据一些实施例,微处理器装置除了彼此结合之外,还可包括如上所述的多种密码操作。

根据一些实施例,微处理器装置可包括密钥生成操作和密钥交换操作。例如,在密码操作是按照操作性密码系统EC-Diffie-Hellman ECDH进行的情况下,这是优选的组合。

根据一些实施例,微处理器装置可包括密钥生成操作、签名生成操作和签名验证操作的全部。例如,在密码操作是按照操作性密码系统ECDSA或EC-Schnorr进行的情况下,这是优选的组合。在此,优选地,签名验证操作仅使用公钥参数。因此,不需要对操作的参数进行额外的加密来混淆它们。因此,密钥生成操作和签名生成操作的被混淆的参数就足够了。

本发明还提供了一种用于在微处理器装置中实现被构造用于处理被混淆的参数并产生输出的被混淆的密码操作的方法,该方法包括以下步骤:

-为微处理器装置提供缺少至少一些参数的密码操作的部分实现,

-在微处理器装置外的处理装置(例如PC、计算机、服务器或硬件安全模块HSM)中混淆所缺少的至少一些参数,并将被混淆的参数从处理装置传送至微处理器装置,

-在该部分实现中实现缺少的被混淆的参数,以产生被混淆的密码操作。

该方法的特征在于,被混淆的参数是通过按照加性同态密码系统加密而被混淆的,该加性同态密码系统例如是Paillier密码系统或另一种适当的加性同态密码系统。

在该方法中,根据一些实施例,加性同态密码系统包括加密函数Enc和解密函数Dec,其中,加性同态密码系统中的至少一些或全部加密函数Enc是在微处理器装置之外计算的,例如是在个人计算机PC、计算机或服务器或硬件安全模块HSM中计算的。

在微处理器装置中实现了被混淆的密码操作之后,可操作该微处理器装置,以执行密码操作并产生输出。在此,密码操作利用按照加性同态密码系统混淆的外部预先计算的被混淆的参数进行计算。关于被定义为足够关键的参数(例如秘密密钥或/和预先计算的值或从其导出的值),微处理器装置不使用这些参数的明文版本进行计算,而是仅使用通过按照加性同态密码系统加密而混淆的被混淆的参数。因此减少或防止了微处理器装置在操作时产生的可能的旁道(side channel)信息。

根据本发明的实施例,在微处理器装置中执行的密码操作是密钥生成、密钥交换或签名生成。

Paillier密码系统

在下文中,将说明Paillier密码系统。Paillier密码系统提供特别适合于本发明的两种不同方案,即,方案1和方案3。下面将全面说明方案1。将在方案1的说明的基础上说明方案3,以突出方案1与方案3之间的差异。然后将说明本发明在不同密码系统中的实施例。

3.1Paillier密码系统设置(方案1)

·选择两个不同的质数p1和p2,使得它们的乘积n=p1*p2与Φ(n)=(p1-1)*(p2-1)互质(coprime),并且n大到足以阻止因子分解(factoring)。所有被加密的值都是的乘法子群中的元素,该乘法子群的阶数为ord(Γ)=n*Φ(n)。

·应注意,第n个单位根(root of unity)构成具有ord(U)=n的子群 并且包括所有元素(1+n)x mod n2=(1+x*n)mod n2、0≤x<n。对于U中的任何元素u,定义函数L(u)=(u-1)/n。

·在Γ中选择具有阶数ord(g)=α*n的随机元素,α>0。

·令λ=lcm(p1-1、p1-1),其中1cm=最小公倍数。则gλmod n2是第n个单位根,并且μ=L(gλmod n2)与n互质。

·加密公钥是(n、g)对。

·解密私钥是(λ、μ)对。

3.2Paillier加密(方案1)

输入:加密公钥(n、g)、消息0≤m<n

输出:c=Paillier-Enc(m)∈Γ

过程:

·选择与n互质的一个随机数0≤t<n。

·计算c=gm*tn mod n2

·输出c

3.3Paillier解密(方案1)

输入:解密私钥(λ、μ)、公共模数n、被加密的密文c∈Γ

输出:明文消息m=Paillier-Dec(c)

过程:

·输出m=L(cλmod n2)/μ mod n

3.4Paillier密码系统的特性

本节说明由G+D白盒ECC实现所使用的Paillier密码系统的所有特性。

·(3.4.1)Paillier-Dec(Paillier-Enc(m1)*Paillier-Enc(m2)mod n2)=m1+m2mod n,

即,两个密文的乘积会解密为它们的对应明文的和。

若n被选择为使得m1+m2<n,则可省略等式右手侧的模约减。

·(3.4.2)Paillier-Dec(Paillier-Enc(m1)k mod n2)=k*m1 mod n,

即,带有数字的密文的幂会解密为相应明文与该数字的积。

若n被选择为使得k*m1<n,则可省略等式右手侧的模约减。

·(3.4.3)L(Paillier-Enc(m/μ mod n)λmod n2)=m mod n,

即,解密Paillier-Enc(m/μ mod n)包括使用秘密指数λ求幂,减1,最后乘以公共参数1/n mod 2bitlen(n)

因此,ECC实现中的相加和多次相乘可以用具有相应的被加密的参数的模乘和幂运算来代替。

Paillier密码系统的方案3提供了一个更快的解密函数。在下文中将简要说明它们的差异:

·此方案在由阶ord(g)=α*n,α|λ的元素g产生的子群中工作,而不是在整个群中工作。

·私钥是(α、μ)对,其中μ=L(gα mod n2)

·加密:c=gm+t*n mod n2,其中随机数0≤t<n。

·解密:m=L(cα mod n2)/μ mod n

秘密密钥参数α需要足够大,以防止常见的密码分析攻击,但是它可被选择为远小于λ。

公式(3.4.1)、(3.4.2)和(3.4.3)也适用于方案3,其中,在(3.4.3)中,λ必须被替换为α。

本发明适用于不同的密码系统,例如ECDSA、ECDH和EC-Schnorr密码系统。本发明特别适用于椭圆曲线上的密码操作,例如包括:ECDSA密钥生成;ECDSA签名生成;ECDSA签名验证;ECDH密钥生成;ECDH密钥交换;EC-Schnorr密钥生成;EC-Schnorr签名生成;EC-Schnorr签名验证。下面将详细说明在上文所列的已知的椭圆曲线上的密码操作的例子中实施的本发明。在下文中示例性地说明的本发明的主要思想也可用于其它基于ECC的密码系统的白盒和密钥协商协议来实现,其它基于ECC的密码系统例如基于EdDSA、ECGDSA、KCDSA、SM2、EC的加密系统。本发明还可应用于密码操作的其它例子,并且在此可采用或不采用椭圆曲线环境。

具体实施方式

图1示出了根据本发明的一个实施例的白盒(=被混淆的)ECDSA密钥生成过程,作为密码操作的一个例子。未参考附图示出了密码操作(例如密钥协商和签名生成)的另一些例子。此外,公开了与签名生成过程对应的签名验证操作。

下面将说明如何使用Paillier加密来构建本发明的实施例的白盒ECC实现。

·所有的Paillier加密都是在装置外部完成的。在初始设置阶段中,被加密的参数被传送至装置。

·此外,优选向装置传送公共模数(modulu)n和一些其它有用的值(例如1/n mod2bitlen(n))。不需要传送生成器函数g,因为在装置上进行计算时不需要它。

·装置使用Paillier加密的参数分别进行模乘和模幂运算。这与未加密的参数的相加和(respectively)相乘对应。仔细地选择Paillier模数n的大小,使得这些相加和(resp.)相乘的结果总是小于n。

·在实现中的某些点处,需要盲值(blinded value)的Paillier解密Dec,例如用于产生要输出的最终结果。该Paillier解密例如可实现为在装置上进行的具有固定的秘密λ和α的白盒安全幂运算。这种幂运算例如可由白盒安全RSA实现提供。例如,在需要退出(或离开)Paillier加密方案的情况下,例如在计算密码操作的最终结果时,或者在对于某些中间结果的某些情况下,需要用秘密幂λ(lambda)或α(alpha)的白盒安全幂运算来例如退出(或离开)Paillier加密方案。

·若必须在装置上解密被加密的参数Paillier-Enc(m/μ mod n),则不需要参数μ(参见(3.4.3))。若在装置上进行的所有Paillier解密均不需要μ,则不需要向装置传送该参数。否则需要在装置上执行与1/μ mod n的白盒安全相乘。

·还向装置传送白盒安全秘密幂λ和α(可选地还有白盒安全参数1/μ mod n)。例如,在需要退出(或离开)Paillier加密方案的情况下,例如在计算密码操作的最终结果时,或者对于某些中间结果,需要具有秘密幂λ或d的白盒安全幂运算来退出(或离开)Paillier加密方案。

·在下文中将介绍ECDSA、ECDH和EC-Schnorr密码系统的可能实现。本说明的主要思想也可用于其它基于ECC的密码系统或者其它密码系统的白盒来实现,其中,其它基于ECC的密码系统是例如基于EdDSA、ECGDSA、KCDSA、SM2、EC的加密方案和密钥协商协议,其它密码系统是例如DSA、ElGamal签名方案、Schnorr签名方案、Diffie Hellman密钥交换。此外,与所述的使用Paillier密码系统的同态特性的方式相比,可对所给出的说明进行修改。

2.1白盒ECDSA密钥生成

(4.1.设置)装置外部的设置

·按照第3节所述产生Paillier加密参数n1、λ1和α1、μ1

·产生随机数0<m1<q。

·产生随机数0≤ci<q的大表。

·计算曲线点Ki=ci*G。

·ci/m1 mod q的Paillier加密:

产生随机化的ki∈Γ1,其中Paillier-Dec(ki)mod q=ci/m1 mod q。

·1的Paillier加密:

产生随机化的l1∈Γ1,其中Paillier-Dec(l1)mod q=1。

(4.1.传送)向装置传送

·公共Paillier参数n1

·白盒安全秘密Paillier参数λ1和α1(以及可选的1/μ1 mod n1)

·曲线点Ki和Paillier加密的参数ki

·l1=Paillier加密的1

·被混淆的参数m1

(4.1.计算)装置上的计算

输入:

·(4.1.传送)的参数n1、Ki、ki

过程:

·产生随机数rand[i]

·计算曲线点P=∑i rand[i]*Ki。若P是无穷远点,则重新开始。

·计算d1=Πi ki rand[i]mod n1 2

输出:

·加密的秘密密钥d1和公钥P

备注:

·生成的秘密秘钥d是(∑i rand[i]*ci)mod q

·Paillier-Dec(d1)mod q=d/m1 mod q

2.2白盒ECDSA签名生成

(4.2.设置)装置外部的设置

以下参数用于计算在ECDSA签名生成中的临时密钥。

·按第3节所述产生Paillier加密参数n2、λ2和α2、μ2

·产生随机数0<m2<q。

·产生随机数0≤fj<q的大表。

·计算曲线点Ej=fj*G.

·fj*m2 mod q的Paillier加密:产生随机化的ej∈Γ2,其中Paillier-Dec(ej)mod q=fj*m2 mod q。

(4.2.传送)向装置传送

·公共Paillier参数n2

·白盒安全秘密Paillier参数λ2和α2(以及可选的1/μ2 mod n2)

·曲线点Ej和Paillier加密的参数ej

·被混淆的参数m2

(4.2.计算)装置上的计算

输入:

·(4.1.传送)的参数n1、λ1和α1,可选地1/μ1 mod n1、l1、m1

·(4.1.计算)中产生的加密的秘密密钥d1

·(4.2.传送)的所有参数

·消息m的hash(m)

过程:

·产生随机数rand[j]

·计算曲线点Q=∑j rand[j]*Ej。若Q是无穷远点,则重新开始。

·计算被加密的临时密钥u2=Πj ej rand[j]mod n2 2

·计算第一个签名参数r=Q.x mod q。若r==0,则重新开始。

·产生两个随机数z1和z2,并计算z=z1*z2 mod q。若z==0,则重复z1和z2的生成。

·使用幂z的模幂运算:计算v2=u2 z mod n2 2

·计算Paillier-Dec(v2)

·w2=Paillier-Dec(v2)mod q

·计算h1=(hash(m)*z1)*m2 mod q

·计算r1=((r*z1)*m1)*m2 mod q

·计算v1=(l1)h1*(d1)r1mod n1 2

·计算Paillier-Dec(v1)

·w1=Paillier-Dec(v1)mod q

·计算第二个签名参数s=(w1/w2)*z2 mod q。若s==0,则重新开始。

输出:

·签名参数r、s

备注:

·所用的临时密钥u是(∑j rand[j]*fj)mod q

·Paillier-Dec(u2)mod q=u*m2 mod q.

·w2=Paillier-Dec(v2)mod q=u*m2*z1*z2 mod q

·w1=Paillier-Dec(v1)mod q=(h+r*d)*m2*z1 mod q

(4.2.计算)说明了使用在装置上产生的密钥的过程。当然,也可使用在装置外部产生的密钥d。在此情况下,使用以下设置用于d的加密。

(4.2.设置密钥)装置外部的设置用于外部产生的密钥d

·按第3节所述产生Paillier加密参数n3、λ3和α3、μ3

·产生随机数0<m3<q。

·d/m3 mod q的Paillier加密:

产生随机化的d3∈Γ3,其中Paillier-Dec(d3)mod q=d/m3 mod q。

·1的Paillier加密:

产生随机化的l3∈Γ3,其中Paillier-Dec(l3)mod q=1。

然后使用(4.2.设置密钥)的所有参数作为用于(4.2.计算)输入参数,而不是(4.1.传送)和(4.1.计算)的参数。

2.3ECDSA签名验证

此功能仅使用公钥参数。因此不需要对这些参数进行额外的加密。

2.4白盒ECDH密钥生成

(4.4.设置)装置外部的设置

此过程与(41.设置)类似,但是有一个不同之处:在计算中还包含辅因子(cofactor)h。

·按第3节所述产生Paillier加密参数n1、λ1和α1、μ1

·产生随机数0<m1<q。

·产生随机数0≤ci<q的大表。

·计算曲线点Ki=ci*G。

·ci/(h*m1)mod q的Paillier加密:产生随机化的ki∈Γ1,其中

Paillier-Dec(ki)mod q=ci/(h*m1)mod q。

·1的Paillier加密:

产生随机化的l1∈Γ1,其中Paillier-Dec(l1)mod q=1。

(4.4.传送)向装置传送

·公共Paillier参数n1

·白盒安全秘密Paillier参数λ1和α1(以及可选的1/μ1 mod n1)

·曲线点Ki和Paillier加密的参数ki

·l1=Paillier加密的1

·被混淆的参数m1

(4.4.计算)装置上的计算

输入:

·(4.4.传送)的参数n1、Ki、ki

过程:

·产生随机数rand[i]

·计算曲线点P=∑i rand[i]*Ki。若P是无穷远点,则重新开始。

·计算d1=Πi ki rand[i]mod n1 2

输出:

·被加密的秘密密钥d1和公钥P

备注:

·产生的秘密密钥d是(∑i rand[i]*ci)mod q

·Paillier-Dec(d1)mod q=d/(h*m1)mod q

2.5白盒ECDH密钥交换

(4.5.计算)装置上的计算

输入:

·(4.4.传送)的参数n1、λ1和α1,可选的1/μ1 mod n1、l1、m1

·(4.4.计算)中产生的被加密的秘密密钥d1

·另一方的公钥P

过程:

·计算曲线点Q=h*P

·产生随机数z并计算z1=z*m1 mod q

·计算曲线点Q1=z1*Q

·计算v1=(l1)z*d1 mod n1 2

·计算Paillier-Dec(V1)

·计算w1=Paillier-Dec(v1)mod q和x1=w1*m1 mod q

·计算R=χ1*Q-Q1

输出:

·公共秘密点R

备注:

·w1=Paillier-Dec(v1)mod q=z+d/(h*m1)mod q

·x1=z1+d/h mod q

(4.5.计算)说明了使用在装置上产生的密钥的过程。当然,也可使用在装置外部产生的密钥d。在此情况下,要为d的加密进行以下设置。

(4.5.设置密钥)用于外部产生的秘密密钥d的装置外部的设置

·按第3节所述产生Paillier加密参数n3、λ3和α3、μ3

·产生随机数0<m3<q。

·d/(h*m3)mod q的Paillier加密:产生随机化的d3∈Γ3,其中Paillier-Dec(d3)mod q=d/(h*m3)mod q。

·1的Paillier加密:

产生随机化的l3∈Γ3,其中Paillier-Dec(l3)mod q=1。

然后使用(4.5.设置密钥)的所有参数作为(4.5.计算)的输入参数,而不是(4.4.传送)和(4.4.计算)的参数。

2.6白盒EC-Schnorr密钥生成

(4.6.设置)装置外部的设置

与(4.1.设置)相同,但是一个例外是:不需要l1

(4.6.传送)向装置传送

与(4.1.传送)相同,但是一个例外是:不需要l1

(4.6.计算)装置上的计算

与(4.1.计算)相同。

2.7白盒EC-Schnorr签名生成

(4.7.设置)装置外部的设置

以下参数用于计算在EC-Schnorr签名生成中的临时密钥。此功能与(4.2.设置)类似,但有一个例外:使用(1/m2 mod q)而不是m2用于Paillier加密。

·按第3节所述产生Paillier加密参数n2、λ2和α2、μ2

·产生随机数0<m2<q。

·产生随机数0≤fj<q的大表。

·计算曲线点Ej=fj*G。

·fj/m2 mod q的Paillier加密:产生随机化的ej∈Γ2,其中Paillier-Dec(ej)modq=fj/m2 mod q。

(4.7.传送)向装置传送

·公共Paillier参数n2

·白盒安全秘密Paillier参数λ2和α2(以及可选的1/μ2 mod n2)

·曲线点Ejand Paillier加密参数ej

·被混淆的参数m2

(4.7.计算)装置上的计算

输入:

·(4.6.传送)的参数n1、λ1和α1,可选的1/μ1 mod n1、m1

·(4.6.计算)中产生的被加密的秘密密钥d1

·(4.7.传送)的所有参数

·消息m

过程:

·产生随机数rand[j]

·计算曲线点Q=∑j rand[j]*Ej。若Q是无穷远点,则重新开始。

·计算被加密的临时密钥u2=Πj ej rand[j]mod n2 2

·计算第一个签名参数r=hash(m||Q.x)。若r mod q==0,则重新开始。

·产生与q互质的随机数z。

·计算z2=z*m2 mod q。

·使用指数z2的模幂运算:计算v2=u2z2 mod n2 2

·计算Paillier-Dec(v2)

·w2=Paillier-Dec(v2)mod q

·计算r1=(r*z)*m1 mod q

·使用指数r1的模幂运算:计算v1=d1 r1 mod n1 2

·计算Paillier-Dec(v1)

·w1=Paillier-Dec(v1)mod q

·计算第二个签名参数s=(w1+w2)/z mod q。若s==0,则重新开始。

输出:

·签名参数r、s

备注:

·所使用的临时密钥u是(∑j rand[j]*fj)mod q

·Paillier-Dec(u2)mod q=u/m2 mod q。

·w2=Paillier-Dec(v2)mod q=u*z mod q

·w1=Paillier-Dec(v1)mod q=r*d*z mod q

(4.7.计算)说明了使用在装置上产生的密钥的过程。当然,也可使用在装置外部产生的密钥d。在此情况下,要为d的加密使用以下设置。

(4.7.设置密钥)用于外部产生的密钥d的装置外部的设置

·按第3节所述产生Paillier加密参数n3、λ3和α3、μ3

·产生随机数0<m3<q。

·d/m3 mod q的Paillier加密:

产生随机化的d3∈Γ3,其中Paillier-Dec(d3)mod q=d/m3 mod q。

然后使用(4.7.设置密钥)的所有参数作为(4.7.计算)的输入参数,而不是(4.6.传送)和(4.6.计算)的参数。

若秘密密钥的Paillier参数(n1、λ1和α1、...)与临时密钥的参数(n2、λ2和α2、...)相同,则可以用仅需要一次Paillier解密的以下过程代替(4.7.计算)。

(4.7.计算′)在(n1、λ1和α1、...)=(n2、λ2和α2、...)情况下的装置上的计算

输入:

·(4.6.传送)的参数n1、λ1和α1,可选的1/μ1mod n1、m1

·(4.6.计算)中产生的被加密的秘密密钥d1

·(4.7.传送)的所有参数

·消息m

过程:

·产生随机数rand[j]

·计算曲线点Q=∑j rand[j]*Ej。若Q是无穷远点,则重新开始。

·计算被加密的临时密钥u1=Πj ej rand[j]mod n1 2

·计算第一个签名参数r=hash(m||Q.x)。若r mod q==0,则重新开始。

·计算v1=u1*(d1)r mod n1 2

·产生与q互质的随机数z。

·计算z1=z*m1 mod q。

·使用指数z1的模幂运算:计算x1=u1 z1 mod n1 2

·计算Paillier-Dec(x1)

·计算第二个签名参数s=Paillier-Dec(x1)/z mod q。若s==0,则重新开始。

输出:

·签名参数r、s

备注:

·所使用的临时密钥u是(∑j rand[j]*fj)mod q

·Paillier-Dec(u1)mod q=u/m1 mod q

·Paillier-Dec(v1)mod q=(u+r*d)/m1 mod q

·Paillier-Dec(w1)mod q=(u+r*d)*z mod q

2.8EC-Schnorr签名验证

此功能仅使用公钥参数。因此不需要对这些参数进行额外的加密。

引用的现有技术

[1]EP2553866A1

[2]EP3376705A1

[3]EP3249520A1

[4]EP3125145A1

[5]Paillier密码系统:德国柏林和海德堡市的施普林格出版社于1999年出版的由Stern J.主编的《密码学进展--EUROCRYPT′99计算机科学论文集》第1592卷中的PascalPaillier的论文“基于复合度剩余类的公钥密码系统(Public-Key Cryptosystems Basedon Composite Degree Residuosity Classes)”(Paillier cryptosystem:PascalPaillier,“Public-Key Cryptosystems Based on Composite Degree ResiduosityClasses”,in Stern J.(eds)Advances in Cryp-tology-EUROCRYPT′99.Lecture Notesin Computer Science,Vol 1592,Springer,Berlin,Heidelberg,1999)(http:// www.cs.tau.ac.il/~fiat/crypt07/papers/Pai99pai.pdf)

[6]耶胡达·林德尔的《快速安全的双方ECDSA签名(Fast Secure Two-PartyECDSA signing)》(IACR预印本服务器2017/552)(Yehuda Lindell′s,“Fast Secure Two-Party ECDSA signing”(IACR preprint server 2017/552))

19页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一次性密码本加密集线器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!