前言:
成方金科新技术实验室与隐语团队合作,构建了“基于国密的分布式门限代理重加密算法TPRE”,为用户提供了一种安全、高效、自主可控的数据共享和授权管理方案。在数据隐私保护和数据安全共享方面具有广泛的应用前景。注:该算法由成方金科密码学研究员张曙光(知乎:六三)基于隐语的密码库yacl实现,其提供了易于开发的密码工具接口,TPRE算法目前已经贡献至yacl中。https://github.com/secretflow/yacl/tree/main/yacl/crypto/primitives/tpre
TPRE算法具有以下优势:
- 数据密钥隐含在TPRE的密文中,无需对数据密钥进行管理,降低密钥管理的复杂度;
- 实现了数据的动态授权和访问控制;
- 适应于区块链中的分布式计算和数据安全共享场景,可以适配于未来价值网络Web 3.0;
- 使用国密算法SM2 、SM3和SM4对国际密码算法进行替换,实现自主可控。
1、背景知识
1.1.代理重加密代理重加密是一种公钥密码方案,它允许代理将一个公钥相关密文转换到另一个公钥相关密文,而代理不能了解关于原始消息的任何信息;要做到这一点,代理必须拥有一个重加密密钥。一个代理重加密算法通常包含三种角色,即数据拥有者Alice、数据接收者Bob和代理计算Proxy。假设,数据m已经被Alice使用自己公钥加密为密文c,并存储在Proxy,具体算法具体步骤如下:(1)Alice作为数据拥有者,想要将数据授权给Bob使用,则为Proxy生成重加密密钥rk。(2)Proxy在接收到rk后,对密文c重加密,得到新密文 c‘。并将 c‘发送至Bob。(3)Bob使用自己的私钥 c‘对解密,即可得到明文数据m。
1.2. 分布式门限代理重加密
代理重加密适合在云计算场景中使用,即代理节点为计算性能较强的单节点。这与现有隐私计算体系架构不符,因为现在隐私计算架构通常是分布式架构。因此,需要对传统代理重加密方案进行改造,使之能够适应分布式计算环境。分布式代理重加密是指,将传统代理重加密中的单Proxy节点,拆分为多个Proxy节点。因而,在对数据重加密时,需要多个Proxy节点参与合作计算。考虑到选取参与计算的Proxy节点的灵活性,需要将分布式代理重加密重新设计为基于门限的分布式代理重加密。
1.3. Shamir Secret Sharing
Shamir Secret Sharing是一种加密技术,可以将秘密信息分散成多个部分,并分配给不同的人,只有所有部分被汇集在一起才能重构出原来的秘密信息。它是由以色列密码学家Adi Shamir在1979年发明的,被广泛应用于保护机密信息,例如在密码学、数字签名、多方计算等领域。其基本思想是通过多项式插值来实现信息的分散和重构,具有高度的安全性和可靠性。具体来说,假设有一个秘密信息,例如一个密码或者一个私钥,需要将这个秘密信息分配给两个人,可以使用Shamir Secret Sharing算法来实现。首先,选择一个大的质数p,并选择一个阈值k,使得只有k个或更多的部分才能恢复原始秘密信息。然后,随机生成一个多项式f(x),其中f(0)等于秘密信息,其余系数都是随机数,并将多项式的系数分配给两个人。每个人得到一个点(x,f(x)),其中x是一个随机数,并且只有两个点都被收集到了,才能恢复原始秘密信息。如果只有一个点,那么无法恢复原始秘密信息。例如,假设秘密信息是密码“123456”,需要将它分配给两个人。选择一个质数p=17,并选择阈值k=2。随机生成一个多项式,其中=123456。将多项式的系数分别分配给两个人,例如第一个人得到(1,12),第二个人得到(2,11)。如果两个人都收集到了这两个点,那么可以使用拉格朗日插值法恢复原始的多项式f(x),进而得到秘密信息“123456”。
1.4. 椭圆曲线
图1是我国商用密码SM2选定的素数域椭圆曲线"sm2p256v1"的参数选择
1.5.密码哈希函数
使用哈希算法构造如下,其中n是椭圆曲线的阶,x是函数的输入:h_x= 1 + Bignum(SM3(x)||SM3(SM3(x))) mod n-1
1.6.混合加密体制
由于公钥密码是运行在代数计算上的密码算法,其计算效率远低于对称密码,因此,在待加密数据量较大时,使用公钥密码直接对数据加密不是一个良好选择。在该场景中,可使用混合加密体制KEM/DEM:
- KEM是指密钥封装机制(Key-Encapsulation Mechanism);
- DEM是指数据封装机制(Data-Encapsulation Mechanism)。
这两个机制联合使用,可以提供数据的加解密效率,在密文需要传输时,也可降低通信开销。具体而言,DEM机制是用作保护原始数据,即使用对称加密算法,对原始数据进行加密保护;KEM是用作保护加密原始数据时所使用的对称密钥,使用公钥加密算法对对称密钥进行加密保护。
2.算法简介
TPRELib共包含6个算法,分别为密钥对生成算法,重加密密钥生成,加密,解密算法,重加密算法,解密重加密密文算法:
- :输入安全参数,生成公私钥对。
- :输入数据持有方的私钥,接收方公钥,所有代理节点数量和门限,输出重加密密钥集合。这里的是指代理节点的。
- :输入公钥和明文,输出密文,这里并不是直接使用加密明文,因为会导致性能过低问题,在底层加密时,使用的是对称加密算法,在本库中对称加密算法由SM4实现,其对称密钥是在加密过程中随机产生,对称加密密钥由公钥加密保护。生成对称加密时,需要用到密码哈希函数构建KDF(Key derivation function)函数,本库使用SM3代替SHA-2等国际算法,实现该KDF函数。
- :输入私钥和密文,输出明文。这里是和加密算法是逆过程。:代理节点输入重加密密钥和密文,输出新密文。这里是指代理节点的。:输入的是门限个数的新密文集合和接收方的私钥,输出明文。
图2 门限代理重加密算法执行流程
3.算法详述
现假设Alice为数据所有方,Bob为数据需求方
3.1.设置和公共参数
- 设置算法首先根据安全参数确定一个素数的循环群 。让是生成元。让, 和 表示密码哈希函数(假设把它们当做随机预言机)。让 是一个同样作为随机预言机的密钥衍生函数,其中 是安全参数 。全局公共参数由以下元组表示:
为了简单起见,我们将省略其余函数中的公共参数。
3.2.密钥生成算法
- : 在中均匀地随机选择,即,计算并输出密钥对 。
- : 输入Alice的私钥 , Bob的公钥 ,片段数和阈值时,重加密密钥生成算法计算出和之间的重加密密钥的个片段,如下所示:
- 随机选取;
- 计算和;
- 计算 ;
- 计算;
- 定义一个重加密密钥片段)
- 。
- 随机抽样 并计算;
- 计算 。请注意,是的密钥对与临时密钥对的非交互式Diffie-Hellman密钥交换的结果。我们将使用这个共享的密钥来使该方案的重加密密钥生成变为非交互式;
- 在中随机抽取个元素,其中,并计算;
- 在 阶的 中构造一个多项式 ,使得 ;
- 计算;
- 初始化集合,重复次:
- 最后,输出重加密密钥片段 。
3.3.封装算法和解封算法
- : 在输入公钥时,封装算法首先选择随机数 ,并计算和。接下来,它计算出值。派生密钥被计算为。该元组被称为胶囊,可以再次推导出(即 "解封装")对称密钥。最后,输出。
- 在输入一个时,该算法通过检查以下方程是否成立来检查该胶囊的有效性。
- 在输入密钥和原始胶囊时,解封装算法首先用检查胶囊的有效性,如果检查失败,则输出。否则,它计算。最后,它输出。
3.4. 重封装和片段解封装
- : 在输入一个重加密的密钥片段),和一个时,重封装算法首先用检查的有效性,如果检查失败则输出 。否则,它计算和,并输出胶囊片段
- : 在输入密钥,原始公钥,和一组个胶囊片段,每个片段都是,片段解封装算法做如下处理。
- 计算
- 让 对于
对于所有,计算 - 计算数值
- 计算: 回顾一下,是的密钥对和临时密钥对 之间非交互式Diffie-Hellman密钥交换的结果。还需要注意的是,对于所有的来说,其值是相同的,这些是通过使用重加密密钥片段集中的产生的。
- 最后,输出对称密钥 。
3.5.数据加密
- :在输入公钥和信息时,加密算法首先计算 。 是用密钥对应用AEAD的结果,是相关数据。最后,它输出密文。
3.6. 数据解密
- :在输入秘密密钥和密文时,解密算法计算出密钥,并使用AEAD的解密函数对密码文本进行解密,如果解密正确,则得到消息,否则得到 。最后,它输出消息(如果解密无效则输出 )。
3.7. 数据密文重加密
- : 在输入一个重加密的密钥片段和一个密文时,重加密算法对应用以获得,并输出重加密的密文。
3.2.2.2 数据重加密密文解密
- 。在输入时,一组个重加密的密文,片段解密算法首先用对进行解密,产生密钥。并使用AEAD的解密函数对密码文本进行解密,密钥K和胶囊作为相关数据,如果解密正确,则得到消息,否则得到。最后,它输出消息(如果解密无效,则输出 )。请注意,对称密文对于所有的都是相同的密文的重加密。
4.安全性
4.1 椭圆曲线安全性
本算法可以选择任意素数域椭圆曲线,例如Secp256k1和sm2p256v1,其中sm2p256v1是我国国产密码学算法SM2使用的椭圆曲线[1]。
4.2 数据密钥的安全性
- 数据密钥随机性:数据密钥的随机性由随机数决定,其中;
- 数据密钥的保密性:数据密钥由公钥密码保护,公钥密码建立在椭圆曲线离散对数困难问题之上。
- 整个算法中使用的密码哈希函数、密钥派生函数来源于我国商用密码SM3
- 整个算法中使用的对称加密算法来源于我国商用密码SM4
5.总结
为了适应数据要素化背景下数据流通需求场景,提出了基于国密的分布式门限代理重加密算法TPRE,该算法是由成方金科新技术实验室密码学研究员张曙光基于隐语社区的基础密码学库yacl实现。与传统的访问控制和权限管理方法相比,TPRE算法具有以下优点:
- 高强度加密:使用门限代理重加密技术对数据进行高强度加密,保护数据的机密性和隐私性。
- 分布式架构:采用分布式架构实现对分布式数据的访问控制和授权管理,解决了传统方法在分布式场景下的难题。
- 自主可控:基于国密算法设计,保证了数据的自主可控性,可以有效地避免数据泄露和信息安全风险。
- 高效性能:算法实现简单、计算量小,可在现有的计算资源下高效地进行数据安全共享和授权管理。
总之,基于国密的分布式门限代理重加密算法TPRE在数据隐私保护和数据安全共享方面具有广泛的应用前景和重要意义,为用户提供了一种安全、高效、自主可控的数据共享和授权管理方案。
参考文献
[1] 国家密码局. SM2椭圆曲线公钥密码算法. http://www.sca.gov.cn/sca/xwdt/2010-12/17/1002386/files/b791a9f908bb4803875ab6aeeb7b4e03.pdf。