Scalar-multiplication算法集

1. 引言

Scalar-multiplication广泛用于多种密码学场景中:

  • 基于ECDLP的密钥生成
  • EC Diffie-Hellman密钥交换
  • Schnorr签名

这些场景中都需要计算 k P kP kP
进一步观察可发现:

  • 密钥生成时,点 P P P在编译时是固定的。
  • Diffie-Hellman密钥交换时,联合密钥计算时的点是在运行时收到的。
  • Schnorr签名验签时,需要double-scalar multiplication k 1 P 1 + k 2 P 2 k_1P_1+k_2P_2 k1P1+k2P2。Schnorr签名验签时的scalar值 k 1 , k 2 k_1,k_2 k1,k2是public的。

以上场景中,存在secret scalar和public scalar的差异:

  • 无论 k k k是secret scalar还是public scalar值,计算 k P kP kP的结果应完全相同。

不过在scalar multiplication中需考虑Timing信息问题:

  • 某些快速scalar-multiplication算法其运行时长与 k k k值相关。
  • 攻击者可测量时长来推断 k k k的信息。
  • 如Brumley, Tuveri, 2011:数分钟即可窃取网络中TLS服务的私钥。

因此,当 k k k为secret scalar时,相应的scalar multiplication算法应为constant-time的。

1.1 基于ECDLP的密钥生成

所谓ECDLP(基于椭圆曲线的DLP)为:
已知椭圆曲线上2个点 P 和 Q P和Q PQ Q ∈ < P > Q\in <P> Q<P>,找到某整数 k k k,使得 k P = Q kP=Q kP=Q成立。

密码学系统的经典设定为:

  • P P P为某固定的系统参数
  • k k k为私钥
  • Q Q Q为公钥

已知 k 和 P k和P kP,密钥生成实际是计算 Q = k P Q=kP Q=kP

1.2 EC Diffie-Hellman密钥交换

EC Diffie-Hellman密钥交换针对的场景为:

  • 用户Alice和Bob分别具有密钥对 ( k A , Q A ) 和 ( k B , Q B ) (k_A,Q_A)和(k_B,Q_B) (kA,QA)(kB,QB)
  • Alice将其公钥 Q A Q_A QA发送给Bob
  • Bob将其公钥 Q B Q_B QB发送给Alice
  • Alice计算联合密钥 K = k A Q B K=k_AQ_B K=kAQB
  • Bob计算联合密钥 K = k B Q A K=k_BQ_A K=kBQA

1.3 Schnorr签名

Schnorr签名的场景为:

  • Alice的密钥对为 ( k A , Q A ) (k_A, Q_A) (kA,QA)
  • 基点 < P > <P> <P>的order为 l l l
  • 采用的密码学哈希函数为 H H H

Schnorr签名过程为:

  • Alice(签名者)生成密码随机值 r ∈ { 1 , ⋯   , l } r\in\{1,\cdots,l\} r{ 1,,l},对于消息 m m m进行如下计算获得签名 ( R , s ) (R,s) (R,s)
    • 计算 R = r P R=rP R=rP
    • 计算 s = ( r − H ( R , m , Q A ) k A ) m o d    l s=(r-H(R,m,Q_A)k_A)\mod l s=(rH(R,m,QA)kA)modl

任何具有Alice公钥 Q A Q_A QA的人,都可对消息 m m m的签名 ( R , s ) (R,s) (R,s)进行验签,验签过程为:

  • 验证 R = s P + H ( R , m , Q A ) Q A R=sP+H(R,m,Q_A)Q_A R=sP+H(R,m,QA)QA成立,即验签通过。

参考资料

[1] Scalar-multiplication algorithms

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/125341394
今日推荐