Kelsey Merrill, Zachary Newman, Santiago Torres-Arias, and Karen R. Sollins. 2023. Speranza: Usable, privacy-friendly software signing. In Proceedings of the 2023 ACM SIGSAC Conference on Computer and Communications Security (CCS ’23), November 26–30, 2023, Copenhagen, Denmark. ACM, New York, NY, USA, 15 pages. https://doi.org/10.1145/3576915.3623200

本文解决的问题

对于软件仓库(PyPI等),终端用户可能会下载到未经认证的用户上传的恶意软件,此类现象可能由于多种因素导致,包括软件维护者的凭证泄露或软件仓库本身遭到攻击。

数字软件签名(digital software signing)提供了解决思路,但是随之而来的密钥管理、密钥撤销也带来了问题。

Speranza将软件(代码库)隐私性与认证性结合

  • 身份共同承诺(identity co-commitments):在软件包签名中使用第三方身份提供商的隐私友好技术
  • 集成身份共同承诺的匿名证书,仅签名者、CA和软件仓库知道签名者的身份。
  • 高效管理匿名授权记录

系统目标

  • 正确性(correctness):系统发出恶意行为信号没有误报,当诚实方使用系统时,用户可以成功下载软件。
  • 真实性(authenticity):对于用户来说,用户使用系统下载软件,他们相信,根据该软件的合法维护者,该软件是有效的。
  • 隐私性(privacy):对于签名者来说(维护人员),只有签名者、CA和存储平台可以知道签名者的身份,验证者和其他签名者不知道给定签名者的身份、哪些软件被同一签名者签名,也没有能力去证实或否认签名者身份的猜测。但是外界可能会知道签名者对同一个软件多次签名

密码学背景知识

密码学承诺cryptographic commitments

本文使用pedersen commitents[1]。假设有一个阶为qq的群G\mathbb{G}qq是一个大素数,gghhG\mathbb{G}的生成元,logghlog_gh必须保密,G\mathbb{G}gghh的选择必须在可信的建立阶段。

对消息mZqm\in\mathbb{Z}_q做承诺,首先随机选取rZqr\leftarrow\mathbb{Z}_q,计算得承诺

c=gmhrc=g^mh^r

rr是随机数,hrh^r就类似一次性“护具”,隐藏gmg^m

零知识证明承诺相等

验证者(verifier)通过零知识证明证明两个承诺共同对一个消息承诺;证明者(prover)知道消息是什么。形式化表示如下

Com.GenerateEq(λ)ppnizkCom.ProveEq(pp,ppnizk,m,c1,r1,c2,r2)πCom.VerifyEq(pp,ppnizk,c1,c2,π)yes/no\begin{aligned} &\mathsf{Com.GenerateEq}(\lambda)\to\mathsf{pp}_{\mathsf{nizk}} \\ &\mathsf{Com}.\mathsf{ProveEq}(\mathsf{pp},\mathsf{pp}_{\mathsf{nizk}},m,c_1,r_1,c_2,r_2)\to\pi\\ &\mathsf{Com}.\mathsf{VerifyEq}(\mathsf{pp},\mathsf{pp}_{\mathsf{nizk}},\mathsf{c}_1,\mathsf{c}_2,\pi)\to\mathrm{yes/no} \end{aligned}

本文使用Chaum-Pedersen方案[2]。该方案要求证明者知道两个承诺共承诺的消息与两个承诺的随机数,设两个承诺为

c1=gmhr1c2=gmhr2c_1=g^mh^{r_1}\\ c_2=g^mh^{r_2}

其中,c1c_1c2c_2公开,mmr1r_1r2r_2保密,验证者和证明者交换消息:

image-20240313092644623

身份共承诺identity co-commitments

image-20240313143708602

系统架构

注册

image-20240124152626967

签名上传

image-20240126104040758

验证

  • 验证者(数据请求者)从软件库检索软件、证书、软件的签名、等价证明
  • 从授权记录检索承诺
  • 验证证书、验证签名
  • 验证身份共承诺
image-20240126140955206

一点思考

本文针对传统软件发布场景:软件开发人员与软件库认证,上传软件,但是可能出现软件开发人员被盗号、软件仓库被腐化(被敌手任意上传代码)、通信信道被注入恶意代码的情况,损害下载人下载软件的“真实性”,现行方案是给软件附加一个证书(对软件开发人员身份签名),下载人验证签名就行,但是这样就会泄露开发人员身份。

其实我觉得本方案并没有那么显而易见的好处,相同时保证真实性和隐私性,只要守好开发人员和软件仓库认证这关,保证上传的软件都是真实有效无毒无害的,保证隐私性,上传个匿名凭证,是不是我太肤浅了。。。


  1. 1.Torben Pryds Pedersen. 1991. Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing. In Advances in Cryptology — CRYPTO ’91. Springer Berlin Heidelberg, Berlin, Heidelberg, 129–140.
  2. 2.David Chaum and Torben Pryds Pedersen. 1992. Wallet Databases with Observers: Extended Abstract. In Advances in Cryptology — CRYPTO’ 92. Springer Berlin Heidelberg, Berlin, Heidelberg, 89–105