1. 引言
stealth addresses为用于cryptocurrency交易中的隐私加强技术,用户可在 不将其public地址暴露在public ledger的情况下,完成cryptocurrency收发。
典型的cryptocurrency交易中,sender必须将其public地址暴露给接收方,同时,也暴露给了任何监听链的人。这将泄露用户隐私和安全性,因为其他人可关联其交易并跟踪其资金。
借助stealth addresses,sender可为每笔交易生成唯一的、一次性的公钥地址,该地址不会关联到其链上的permanent public地址。接收方会将资金存入其permanent public地址中,但接收方仅可关联到发送方的stealth address,并获得相应的资金。
stealth addresses为cryptocurrency交易提供了额外的隐私和安全层,使得第三方更难跟踪和监控链上用户行为。详细也可参看Vitalik 2023年1月博客:An incomplete guide to stealth addresses。
本文探索基于Commutative Supersingular isogenies (CSIDH) 构建Post Quantum版本的stealth addresses。【本解决方案不受 SIDH的新的破坏性攻击 的影响。因为这些攻击主要依赖于 CSIDH的解决方案中不存在的扭点(torsion point)信息。】
关于椭圆曲线密码学的知识可参看:
- Silverman的书本The Arithmetic of Elliptic Curves
关于Isogeny密码学的知识可参看:
- De Feo的2017年论文The Arithmetic of Elliptic Curves
1.1 Commutative Supersingular isogenies (CSIDH)
CSIDH发表于Asiacrypt 2018,其基于某efficient commutative group action,为基于isogeny的post quantum 密钥交换。基于isogenies的group actions以1997年Couveignes的Hard Homogeneous Spaces 论文而闻名。大约10年后,Rostovtsev 和 Stolbunov 重新发现了该思想 PUBLIC-KEY CRYPTOSYSTEM BASED ON ISOGENIES。
Couveignes在其开创性工作中引入了Very Hard Homogeneous Spaces(VHHS)的概念。VHHS是循环群的推广,其computational Diffie-Hellman难题和decisional Diffie-Hellman 难题均是hard的。群中的幂运算(或标量乘法,若使用加法表示法)被集合上的group action所取代。基于isogenies的底层group action的主要hardness假设是,很难颠倒group action:
- Group Action Inverse Problem(GAIP):已知某曲线 E E E,具有 E n d ( E ) = O End(E)=O End(E)=O,找到某ideal a ⊂ O a\subset O a⊂O,使得 E = [ a ] E 0 E=[a]E_0 E=[a]E0。
GAIP(也称为矢量化vectorization)可能有点类似于离散对数问题,在本文中,利用这种类比将stealth addresses转换为CSIDH setting。
2. 基于椭圆曲线密码学的stealth addresses
Vitalik 2023年1月博客:An incomplete guide to stealth addresses 中提出了基于椭圆曲线密码学的stealth addresses方案:
- Bob生成某密钥 m m m,计算 M = m G M=mG M=mG,其中 G G G为某椭圆曲线的generator point。stealth meta-address为 M M M的编码。
- Alice生成一次性密钥 r r r,并发布相应的一次性公钥 R = r G R=rG R=rG。
- Alice计算某共享秘密 S = r M S=rM S=rM,Bob计算相同的共享秘密 S = m R S=mR S=mR。
- 为计算stealth address公钥,Alice或Bob可计算 P = M + h a s h ( S ) G P=M+hash(S)G P=M+hash(S)G。
- 为计算该stealth address的私钥,Bob(仅Bob)可计算 p = m + h a s h ( S ) p=m+hash(S) p=m+hash(S)。
相应的sage脚本为:
#Alice
#private
r = ZZ.random_element(n)
#publish
R = r*G
Sa = r * M
s = ''
s+=str(R[0])
s+=str(R[1])
s+=str(Sa[0])
s+=str(Sa[1])
h.update(s.encode())
hashS = (int(h.hexdigest(), 16)) % n
Pa = M + hashS*G
#Bob
Sb = m*R
Pb = M + hashS*G
p = m+hashS
assert Sa == Sb
assert Pa == Pb == p*G
3. 基于CSIDH的stealth addreses
本文几乎1:1地将stealth addresses由DLOG setting 转换为 VHHS setting:
- Bob生成某密钥 m m m,计算 E m = [ m ] E 0 E_m=[m]E_0 Em=[m]E0,其中 E 0 E_0 E0为某starting椭圆曲线。stealth meta-address为 M M M的编码。
- Alice生成一次性密钥 r r r,并发布相应的一次性公钥 E r = [ r ] E 0 E_r=[r]E_0 Er=[r]E0。
- Alice计算某共享秘密 E S = [ r ] E m E_S=[r]E_m ES=[r]Em,Bob计算相同的共享秘密 E S = [ m ] E r E_S=[m]E_r ES=[m]Er。
- 为计算stealth address公钥,Alice或Bob可计算 P = [ h a s h ( E S ) ] E m P=[hash(E_S)]E_m P=[hash(ES)]Em。
- 为计算该stealth address的私钥,Bob(仅Bob)可计算 p = [ m + h a s h ( S ) ] p=[m+hash(S)] p=[m+hash(S)]。
相应的sage脚本为:
#Bob
#private
m = private()
#public
M = action(base, m)
#private
r =private()
#publish
R = action(base, r)
Sa = action(M, r)
s = ''
s += str(R)
s += str(Sa)
h.update(s.encode())
hashS = (int(h.hexdigest(), 16)) % class_number
hashS_reduced = reduce(hashS,A,B)
P = action(M,hashS_reduced)
#Bob
Sb = action(R, m)
pv = []
for i,_ in enumerate(m):
pv.append(m[i]+hashS_reduced[i])
assert Sa == Sb
assert P == action(base,pv)
参考资料
[1] 2023年4月 以太坊research Towards practical post quantum stealth addresses