SM9

Setup(系统建立)

  • KGC 选择双线性群 ($BP = (G_1, G_2, G_T, e, N))$,生成元 $(P_1 \in G_1, P_2 \in G_2)$
  • 选主私钥 ($\alpha \in [1, N-1]$),计算主公钥 ($P_{pub}$ =$ \alpha P_2 \in G_2$)
  • 计算 (g = e($P_1$, $P_{pub}$) $\in$ $G_T$)
  • 输出:主公钥 (mpk = ($BP, P_1, P_2, P_{pub}, g, H_1, H_2, hid$)),主私钥 (msk =$ \alpha$)

KeyGen(用户私钥生成)

  • 给定用户标识 ($ID$),KGC 计算:
    • ($t_1 = H_1(ID \parallel hid, N) + \alpha \pmod N$)
    • ($t_2 = \alpha \cdot t_1^{-1} \pmod N$)
    • ($sk_{ID}$ = $t_2 $$\cdot $$P_1$)(群 ($G_1$) 中的元素)
  • 关键设计:私钥 ($sk_{ID} = \frac{\alpha}{H_1(ID)+\alpha} \cdot P_1$),把身份标识”嵌入”到了私钥中

补充:需要一个公开锚点和检验量构造,需要一个独立生成元$H\in G_1$

委托密钥融合

构造$sk_p$

前置思路:

image-20260806221933942

这是IBS代理签名密钥sk的设计思路结合该方案设计出SM9代理签名对应的私钥

那么代理私钥的形式应该是这样的:

$sk_p=S_\omega+sk_{ID_P}$

但是这样看似没问题的公式却在运用双线性验证时存在问题、

解决思路:

image-20260808160959559

添加一个辅助验证点:

image-20260808170522841

KGC通过安全信道把$(t_p,T_p)$发给$P$

推导

image-20260808161046300

ok,有了私钥之后问题就变得简单起来了

代理签名与验证

Sign($P$用$sk_p$作为私钥使用标准SM9签名)

  • 选随机数 (r),计算 ($w = g^r$)(把 (g) 作为”一次性基底”)
  • 计算哈希 ($h = H_2(M \parallel w, N$))
  • 计算 ($\ell = r - h \pmod N$),若 ($\ell = 0$) 则重新选 (r)
  • $S=\ell \cdot sk_p$
  • 签名 $\sigma = (h, S)$

Verify(验证)

  • 计算 ($t’ = g^{h’}$),
  • 计算 $u = e(S’, T_p)$,
  • $w’ = u \cdot t’$
  • $ h_2=H_2(M’ \parallel w’, N)$检查$h_2=h’$

NAPS机制

NAPS定义;

image-20260807214110326

$sk_p=t_p\cdot P_1$满足NAPS那篇文章内$class\ c$的要求

class C:

image-20260806225843494

所以NAPS直接套用在$t_{dpk}$上

$pk_p=t_p\cdot H$

P收到$t_p$后生成NAPS密钥:

参考DAPS基础设计进行构造

image-20260807221758768

  • ElGamal加密密钥对:$x_E\in [1,N-1]$(random),$PK_E=x_E\cdot H$

  • 对每个地址$\tau\in [1,n]$,随机系数$\rho_{\tau,j}$,$j\in[1,N-1]$

  • $r_{\tau}$(random)

ElGamal加密

$C_{\tau,1}=r_{\tau}\cdot H$

$C_{\tau,2}=r_{\tau}\cdot PK_E+\Sigma_j\rho_{\tau,j}\cdot H$

  • $crs$(只需要$G_1$上DDH困难就行)

代理公钥(和$m_\omega$一起公开):($pk_p,PK_E,(C_\tau)_{\tau\in[n]},crs$)

构造份额多项式

image-20260808172212214

单次代理签名(第i次操作,地址$\tau$)

标准SM9 Sign部分

→($h,S$)

NAPS分享部分

$p=H_3(\tau||M)\pmod N$

$z=f_\tau(p)=t_p+\Sigma_j\rho_{\tau,j}p^j\pmod N$

验证:

image-20260808173544403

一致性证明

image-20260808174040984

image-20260808174349357

输出签名($m_\omega,h_\omega,S_\omega,T_p,\tau,h,S,z,\pi$)

Verify:

Verify(验证)

  • 计算 ($t = g^{h}$),
  • 计算 ($h_1$ = $H_1(ID \parallel hid, N)$),($P = h_1 P_2 + P_{pub} = (h_1 + \alpha)P_2$)
  • 计算 ($u = e(S, P)$),($w’ = u \cdot t$)
  • 检查 ($H_2(M \parallel w’, N) = h$)

把原来的验证点$P = h_1 P_2 + P_{pub} = (h_1 + \alpha)P_2$换成$T_p$

  • $u=e(S,T_p)$
  • $\omega’=u\cdot g^h$
  • 检查$H_2(M \parallel w’, N) = h$

验证$\pi,z$:

image-20260808175630404

双签(N次)

同一个$\tau$下出现$N$个不同payload的合法签名,Lagrange插值

image-20260808174945783

辅助提取出$t_p$之后可以考虑加重代理者P的惩罚,以达到让它不敢越权的效果

押金锁定:$P$在申请委托,拿到($t_p,T_p$)前,先把一笔押金锁定导一个由$pk_p$控制的账户,

只有持有$t_p$,能提供$S=l\cdot sk_p$有效签名才能转出。