一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

自适应抗攻击分布式对称加密的制作方法

2022-11-13 13:24:47 来源:中国专利 TAG:

自适应抗攻击分布式对称加密
1.相关申请的交叉引用
2.本技术是国际专利申请,其要求2020年4月28日提交的美国专利申请第16/861,138号和2020年5月4日提交的美国申请第63/019,938号的申请日的权益,所述美国专利申请和所述美国申请的全部内容出于所有目的通过引用结合于此。


背景技术:

[0003]“密码术即服务”可以指一个实体代表另一个实体执行密码操作的过程。例如,服务器计算机可代表客户端计算机加密数据(诸如敏感医疗记录或其他私人文件)。稍后,当客户端计算机想要检取加密数据时,客户端计算机可与服务器计算机通信以便解密所述加密数据。替代地或另外,客户端计算机可将加密数据传输到另一客户端计算机。此另一客户端计算机可与服务器计算机通信,以便解密加密数据。因此,密码术即服务可用于跨时间或跨空间保护数据。密码术作为一种服务可能是可取的,因为服务器可能比客户端计算机更好地配备以存储敏感的密码信息,诸如秘密密码密钥。
[0004]
一些密码操作可以分类为对称或非对称。对于对称密码术,可使用相同密码密钥来加密和解密数据。对于非对称密码术,使用两个密码密钥。使用一个密码密钥加密的数据必须使用另一密码密钥解密,反之亦然。非对称密码术通常比对称密码术慢得多,在一些情况下,慢三个到五个数量级之多。因此,对称密码术通常优选用于高速或高吞吐量密码术即服务应用。
[0005]
使用共享秘密的分布式密码术是可用于实施密码术即服务的一种技术。密码设备(例如,服务器计算机)的分布式网络可共同为客户端计算机执行密码术,而不是单个服务器计算机为客户端计算机执行密码术。密码材料,诸如秘密密钥或共享秘密,可被划分成秘密份额并在密码设备当中分发。那些密码设备和客户端计算机可以使用它们各自的秘密份额共同执行加密或解密。与常规密码术相比,分布式密码术可提供安全性益处,因为攻击者更难以获取共享秘密。攻击者必须获取多个秘密份额以重建秘密密钥或共享秘密,或以其他方式破坏密码系统。
[0006]
尽管分布式对称密码系统通常比类似的非分布式系统更安全,但是它们仍然容易受到攻击。黑客可能试图破坏分布式对称密码系统中的一个或多个密码设备,以便获取它们的秘密份额和/或破坏系统。密码攻击有时分类为不同的攻击模型。有些攻击是“静态攻击”,而其他攻击是“动态攻击”或“自适应攻击”。许多传统的分布式对称密码术系统容易受到动态攻击和自适应攻击。
[0007]
因此,需要对分布式对称加密进行改进,以应对动态攻击。
[0008]
此外,当涉及大量数据时,分布式密码术可能遭受等待时间问题。这可能是因为客户端计算机正在与密码设备中的每个密码设备通信,以获得客户端计算机想要加密的每个数据元素。这种等待时间问题的一些现有解决方案会暴露密码密钥或其他密码材料,增加了加密数据被暴露的风险。
[0009]
因此,存在对分布式对称加密进行改进以解决等待时间或其他性能问题的附加需
求,尤其是在数据量较大的情况下。


技术实现要素:

[0010]
各种实施方案针对分布式对称密码术的改进。示例性改进可以包括保护分布式对称密码术系统免受自适应密码攻击。这种改进的系统可以包括“自适应抗攻击分布式对称加密”或“adapdise”系统。实施方案还提供了对分布式对称密码术的速度和效率的改进,特别是通过使得客户端计算机能够批量生成对称密码密钥。这种改进的系统可以包括“摊销分布式对称加密”或“amortise”系统。
[0011]
在实施方案中,客户端计算机和来自密码设备网络的多个密码设备可以一起工作来生成对称密码密钥。在adapdise系统中,客户端计算机可以使用这个密钥来加密或解密消息(例如,敏感医疗记录)。在amortise系统中,客户端计算机可以使用这个密码密钥或“批量密钥”,以使用基于配对的密码术和双线性配对来导出一个或多个消息密钥。客户端计算机可以使用这些消息密钥来加密一组消息。例如,客户端计算机可以加密对应于不同患者的多个医疗记录,每个医疗记录使用从相同批量密钥导出的不同消息密钥加密。
[0012]
得到的一个或多个密文可以由客户端计算机本地存储,或者存储在存储服务器(例如,云服务器)上。稍后,客户端计算机和密码设备可以解密密文以产生消息。在另一个用例中,客户端计算机可以向另一个客户端计算机发送一个或多个密文,或者允许另一个客户端计算机经由存储服务器访问密文。然后,其他客户端计算机和密码设备可以解密密文并检取消息,从而使消息能够通过不安全网络(诸如因特网)在客户端计算机之间安全地传达。
[0013]
更详细地,在加密或解密过程期间,密码设备可以向客户端计算机提供部分计算。这些部分计算可以从每个密码设备存储的秘密份额导出。客户端计算机可以组合这些部分计算以产生对称加密密钥。客户端计算机可以使用对称密钥来加密消息或解密密文,或者导出用于加密一组消息的一个或多个消息密钥。
[0014]
在adapdise系统中,每个密码设备可以拥有从不同的秘密值导出的多个秘密份额。在一些实施方案中,每个密码设备可以拥有从第一秘密值导出的第一秘密份额和从第二秘密值导出的第二秘密份额。每个密码设备可以生成从每个秘密份额导出的部分计算(例如,从第一秘密份额生成的第一部分计算和从第二秘密份额生成的第二部分计算)。这些部分计算可以被组合并提供给客户端计算机,所述客户端计算机然后可以使用所述部分计算来产生密码密钥。
[0015]
使用多个秘密份额和多个秘密值的好处在于,用于生成密码密钥的分布式计算不绑定到秘密值或秘密份额的任何特定集合(或“元组”)。相反,存在指数地大量的秘密值和秘密份额,所述秘密值和秘密份额同样可能已经被用于产生密码密钥。因此,即使攻击者拥有无限的计算资源,所述攻击者也不可能确定确切的秘密值或秘密份额。因此,即使在执行自适应攻击时,攻击者也不能确定秘密份额。相比之下,在非自适应分布式密码术系统中,分布式计算可能被绑定到特定的秘密,从而允许攻击者使用可能利用不同部分计算之间的相关性的自适应攻击。结果,攻击者可能能够获得敏感的密码材料,或者以其他方式破坏非自适应密码系统。
[0016]
一些实施方案提供了附加安全特征,诸如使用验证签名来验证分布式密码系统的
合法使用,使用日志文件来记录或跟踪分布式系统的使用,以及使用诚实验证者零知识(hvzk)证明来验证部分计算。
[0017]
作为示例,在adapdise加密期间,客户端计算机和密码设备可以生成部分签名,所述部分签名可以组合成验证签名。在解密期间,客户端计算机可以向密码设备提供验证签名。密码设备可以使用验证密钥来验证验证签名。如果验证签名是合法的,则密码设备可以确定客户端计算机正在执行合法的解密操作。验证签名的存在或不存在可以分别向密码设备指示客户端计算机正在解密或加密消息。然而,客户端计算机也可以向密码设备传输指示符,指示客户端计算机是在加密还是解密数据。密码设备可以将指示符或验证签名记录在日志文件中,作为指示客户端计算机加密或解密消息的记录。
[0018]
此外,客户端计算机可以使用hvzk证明来验证密码设备传输的部分计算。客户端计算机可以从可信服务器或其自己的内存中检取校验值。这些校验值对应于对应于每个部分计算的秘密份额。使用这些校验值,客户端计算机可以验证部分计算是合法的。客户端计算机不能从校验值或部分计算中确定秘密份额。这样,秘密份额甚至被保护以防止恶意客户端计算机的攻击。
[0019]
一个实施方案涉及一种方法,所述方法包括由计算机系统执行:使用消息和第一散列函数生成第一承诺;使用所述消息和第二散列函数生成第二承诺;将包括所述第一承诺和所述第二承诺的请求传输到多个密码设备中的每个密码设备,所述多个密码设备存储从第一秘密值生成的第一多个秘密份额和从第二秘密值生成的第二多个秘密份额;从所述多个密码设备接收多个部分计算,其中所述多个部分计算中的每个部分计算是由所述多个密码设备中的相应一个密码设备使用相应的第一部分计算和相应的第二部分计算来生成的,其中所述相应的第一部分计算是使用相应的第一秘密份额和所述第一承诺生成的,并且其中所述相应的第二部分计算是使用相应的第二秘密份额和所述第二承诺生成的;基于所述多个部分计算生成密码密钥;通过使用所述密码密钥加密所述消息来生成密文;和生成包括所述密文、所述第一承诺和所述第二承诺的有效载荷。
[0020]
另一个实施方案涉及一种方法,所述方法包括由计算机系统执行:接收包括密文、第一承诺和第二承诺的有效载荷;将包括所述第一承诺和所述第二承诺的请求传输到多个密码设备中的每个密码设备,所述多个密码设备存储从第一秘密值生成的第一多个秘密份额和从第二秘密值生成的第二多个秘密份额;从所述多个密码设备接收多个部分计算,其中所述多个部分计算中的每个部分计算是由所述多个密码设备中的相应一个密码设备使用相应的第一部分计算和相应的第二部分计算来生成的,其中所述相应的第一部分计算是使用相应的第一秘密份额和所述第一承诺生成的,并且其中所述相应的第二部分计算是使用相应的第二秘密份额和所述第二承诺生成的;基于所述多个部分计算生成密码密钥;和使用所述密码密钥解密所述密文以产生消息。
[0021]
另一实施方案针对一种方法,所述方法包括由密码设备执行:从客户端计算机接收请求,所述请求包括使用消息和第一散列函数生成的第一承诺,以及使用所述消息和第二散列函数生成的第二承诺;基于第一秘密份额和所述第一承诺生成第一部分计算;基于第二秘密份额和所述第二承诺生成第二部分计算;通过组合所述第一部分计算和所述第二部分计算来生成部分计算;和将所述部分计算传输到所述客户端计算机,从而使得所述客户端计算机能够:(1)使用所述部分计算生成密码密钥、(2)使用所述密码密钥加密所述消
息,从而生成密文,以及(3)生成包括所述密文、所述第一承诺和所述第二承诺的有效载荷。
[0022]
另一实施方案针对一种方法,所述方法包括由加密设备执行:将包括输入值的请求传输到多个密码设备中的每个密码设备,所述多个密码设备存储从秘密值生成的多个秘密份额,其中所述输入值包括对应于所述加密设备的标识符或对应于所述加密设备的所述标识符的散列;从所述多个密码设备接收多个部分计算,其中所述多个部分计算是由所述多个密码设备使用所述多个秘密份额和所述输入值生成的;基于所述多个部分计算生成批量密钥;和对于一组消息中的每个消息:使用所述消息和随机值生成承诺;使用所述承诺和第二散列函数生成所述承诺的散列;在所述批量密钥与所述承诺的所述散列之间执行双线性配对以获得消息密钥;通过使用所述消息密钥加密所述消息和所述随机值来生成密文;并且生成包括所述密文、对应于所述加密设备的标识符、和所述承诺的有效载荷,从而为所述一组消息生成一组有效载荷。
[0023]
另一个实施方案涉及一种方法,所述方法包括由解密设备执行:接收有效载荷,所述有效载荷包括对应于消息的密文、承诺和对应于加密设备的标识符;将包括一个或多个输入值的请求传输到多个密码设备,所述多个密码设备分别存储从秘密值生成的多个秘密份额;从所述多个密码设备接收多个部分计算,其中所述多个部分计算是由所述多个密码设备使用所述多个秘密份额和所述一个或多个输入值或者所述一个或多个输入值之间的双线性配对的所述结果生成的;基于所述多个部分计算生成消息密钥;和解密所述密文以获得所述消息。
[0024]
另一实施方案涉及一种方法,所述方法包括由密码设备执行:从加密设备接收包括输入值的请求,其中所述输入值包括对应于所述加密设备的标识符或者对应于所述加密设备的所述标识符的散列;基于从秘密值和所述输入值生成的秘密份额生成部分计算;和将所述部分计算传输到所述加密设备,从而使得所述加密设备能够:(1)使用所述部分计算生成批量密钥、(2)对于一组消息中的每个消息,使用所述批量密钥与从所述消息和随机值生成的承诺的散列之间的双线性配对的结果来生成消息密钥、(3)对于一组消息中的每个消息,通过使用所述消息密钥加密所述消息和所述随机值来生成密文,以及(4)对于所述一组消息中的每个消息,生成包括所述密文、对应于所述加密设备的所述标识符以及从所述消息和所述随机值生成的所述承诺的有效载荷,从而为所述一组消息生成一组有效载荷。
[0025]
下文详细描述本公开的这些和其他实施方案。例如,其他实施方案涉及与本文描述的方法相关联的系统、设备和计算机可读介质。
[0026]
在论述本发明的具体实施方案之前,可详细描述一些术语。
[0027]
术语
[0028]“服务器计算机”可以包括功能强大的计算机或计算机集群。例如,服务器计算机可包括大型主机、小型计算机集群或作为一个单元运作的一组服务器。在一个示例中,服务器计算机可以包括耦合到网络服务器的数据库服务器。服务器计算机可以包括一个或多个计算装置,并且可使用多种计算结构、布置和编译中的任一种计算结构、布置和编译来服务来自一个或多个客户端计算机的请求。
[0029]“存储器”可以是可以存储电子数据的任何合适的一个或多个设备。合适的存储器可以包括存储可由处理器执行以实施期望方法的指令的非瞬态计算机可读介质。存储器的示例可以包括一个或多个存储器芯片、磁盘驱动器等。此类存储器可使用任何合适的电、光
和/或磁操作模式来操作。
[0030]“处理器”可指任何合适的一个或多个数据计算设备。处理器可包括一起工作以实现期望功能的一个或多个微处理器。处理器可以包括cpu,所述cpu包括至少一个高速数据处理器,所述高速数据处理器足以执行用于执行用户和/或系统生成的请求的程序组件。所述cpu可以是微处理器,诸如amd的速龙(athlon)、钻龙(duron)和/或皓龙(opteron);ibm和/或摩托罗拉(motorola)的powerpc;ibm和索尼(sony)的cell处理器;英特尔(intel)的赛扬(celeron)、安腾(itanium)、奔腾(pentium)、至强(xeon)和/或xscale;和/或类似处理器。
[0031]
术语“密码密钥”可以包括在加密或解密中使用的数据。例如,密码密钥可以指两个大素数的乘积。密码密钥可用在诸如rsa(rivest、shamir、adleman)或aes(高级加密标准)的密码系统中,并且可用于加密明文并产生密文输出,或解密密文并产生明文输出。密码密钥可以是对称的,在这种情况下,同一密钥用于加密和解密,或密码密钥可以是不对称的,在这种情况下,不同密钥用于加密和解密。
[0032]
术语“批量密钥”可以包括在加密或解密中使用的数据。批量密钥可用于生成一个或多个“消息密钥”,所述消息密钥可对应于可用于加密或解密对应于那些消息密钥的消息的密码密钥。
[0033]
术语“明文”可指未加密或呈明文形式的文本。例如,这可指在无需任何处理的情况下可由人或计算机解读的文本,诸如短语“你好,近来如何?”数字或其他符号也可适合作为明文。
[0034]
术语“密文”可指呈加密形式的文本。例如,这可指必须予以解密后才可由人或计算机解读的文本。可以使用任何密码算法或密码系统(诸如rsa或aes)来生成密文。
[0035]“客户端计算机”可指使用例如服务器计算机的其他计算机或设备的服务的计算机。客户端计算机可通过诸如互联网的网络连接到这些其他计算机或设备。作为示例,客户端计算机可包括笔记本电脑,所述笔记本电脑连接到图像托管服务器以便查看存储在所述图像托管服务器上的图像。
[0036]“密码设备”可指可执行包括加密和解密的密码操作的任何设备。密码设备可参与分布式或多方密码术。密码设备的示例包括服务器计算机、硬件安全模块、台式计算机、笔记本电脑、智能手机、智能手表或其他便携式电子设备。密码设备可拥有“秘密”或“秘密份额”。
[0037]“代理设备”可指充当代理的设备。代理设备可代表其他设备执行操作。例如,代理设备可代表其他设备接收和传输消息或其他数据。用以在设备网络中的其他设备之间路由通信的代理设备可称作“集线器设备”。
[0038]
术语“多方计算”可指由多方执行的计算。每一方,诸如计算机、服务器或密码设备,可具有一些计算输入。各方可使用输入共同计算出计算的输出。
[0039]
术语“安全多方计算”可指安全的多方计算。在一些情况下,“安全多方计算”是指其中各方彼此并不共享信息或其他输入的多方计算。示例是姚氏百万富翁问题(yao’s millionaires’problem),其中两个百万富翁想要在不向彼此透露其财富的情况下确定哪一个更富有。
[0040]“秘密值”或“秘密”可指作为密码过程的部分而隐藏的值或事物。密码过程的安全
性可能依赖于保持秘密的秘密值。秘密可包括密码密钥或“秘密份额”。秘密的暴露可能允许既定方以外的各方对消息进行加密或解密。
[0041]“共享秘密”可指多方之间共享的秘密值或事物。例如,共享秘密可以是密码密钥,所述密码密钥被分割以使得多方各自拥有所述密码密钥的一部分。作为示例,双方可各自拥有包括128位密码密钥的共享秘密中的64位。
[0042]“秘密份额”可指从共享秘密导出的值。作为示例,秘密份额可以包括128位秘密值的前64位。秘密份额还可包括与数字或其他数据组合的秘密值。在一些情况下,多个秘密份额可组合以再现共享秘密。
[0043]“散列函数”可以指可用于将任意长度或大小的数据映射到固定长度或大小的数据的任何函数。散列函数还可用于通过将数据用其对应的“散列值”替换来模糊数据。散列函数可用于生成可用于评估已加密数据的完整性的“承诺”或“承诺消息”数据。
[0044]“承诺”或“承诺消息”可指可用于验证动作过程已被承诺的数据。在密码术的上下文中,承诺可指可用于验证加密消息未被篡改的消息。在消息被加密之前,可基于所述消息例如经由散列函数来产生承诺。此承诺可与加密消息一起发送。一旦消息被解密,接收方就可使用相同散列函数生成自己的承诺消息。可将接收到的承诺消息与生成的承诺消息进行比较以验证加密消息的完整性。
[0045]“伪随机函数”可指产生看似随机的输出的确定性函数。伪随机函数可包括抗冲突散列函数以及椭圆曲线群。伪随机函数可接近于随机预言,其为将输入映射到其输出域的随机输出的理想密码原语。伪随机函数可由伪随机数字生成器构造。
[0046]“随机数”或“密码随机数”可以指可以在密码过程中使用的值(例如,数字),优选地是有限次数。随机数可以全部或部分地从诸如散列值或承诺的其他数据导出。“随机随机数”可以包括已经随机或伪随机生成的数字,并且可以与密码散列函数结合使用。使用随机随机数可以防止某些形式的密码攻击,诸如“重放攻击”。
[0047]
术语“双线性配对”可以指将来自两个数学群的输入映射到第三个数学群的函数。双线性配对e是双线性的(即)、非退化的,并且可以以有效的方式计算。weil配对和tate配对是双线性配对的示例。
[0048]“诚实验证者知识的零知识证明”(也称为hvzk证明)可以指由诚实验证实体执行的知识的零知识证明。诚实验证实体是非恶意地(例如,不改变其输入或输出)并根据协议规则参与密码协议的实体(例如,客户端计算机)。hvzk证明可用于验证信息(诸如秘密份额)的合法性,而无需了解有关所述信息的任何其他信息。
[0049]“验证值”可指用于验证计算、事实或知识的数据。验证值的示例是如上文所论述的知识的非交互式零知识证明。验证值的另一示例是密码密钥。作为示例,私用密码密钥可用于通过使用所述私用密码密钥对数据进行签名或加密来验证拥有所述密码密钥的人员或计算机的身份。包括密码密钥的验证值可称作“验证密钥”。
[0050]“验证份额”可指验证值的部分,或从验证值导出的数据。多个验证份额可以某一方式组合以产生对应验证值。例如,验证份额的集合的乘积可能等于对应验证值。
[0051]“签名”、“数字签名”或“验证签名”可指用于使用密码术验证数据真实性的数据。计算机可通过使用只有所述计算机知晓的密码密钥(即,私钥)加密数据来对所述数据进行数字签名。其他计算机可通过使用对应于所述计算机的公开已知密码密钥(即,公钥)解密
所述数据来验证签名。验证签名可用于验证签名数据的来源或签名数据的真实性。
[0052]“部分签名”可指数字签名的一部分。部分签名在与其他部分签名组合时可再现数字签名。例如,多个部分签名的异或可以用于再现数字签名。
[0053]“部分计算”可指计算的一部分。可组合多个部分计算以产生计算的输出。例如,多个固体的体积可包括那些固体的总体积的部分计算,并且可通过相加来组合那些部分计算。部分计算可由参与多方计算的多方或密码设备生成。
[0054]“消息”可以指可在两个实体之间传输的任何数据。消息可包括明文数据或密文数据。消息可以包括字母数字序列(例如,“hello123”)或任何其他数据(例如,图像或视频文件)。消息可在计算机或其他实体之间传输。
[0055]“有效载荷”可指传输的消息中的信息。有效载荷可排除自动生成的元数据。有效载荷可包括多个数据元素。例如,对应于人类生命统计数据的有效载荷可包括对应于人的体重、身高和年龄的三个数据值。
[0056]“密钥生成种子”可指用于生成密码密钥的值或其他数据。例如,密钥生成种子可以是数字,诸如“12034024”。密钥生成种子可用作随机或伪随机函数的输入以生成密码密钥。密钥生成函数可以是一致的,也就是说,相同密钥生成种子生成相同的密码密钥。
[0057]“日志文件”可以包括存储信息记录的数据文件。例如,日志文件可以包括特定服务(诸如分布式密码术)的使用记录。日志文件可以包括附加信息,诸如与服务的使用相关联的时间、与使用服务的客户端相关联的标识符、服务的使用的性质(例如,客户端是加密还是解密数据)等。
附图说明
[0058]
图1示出了根据一些实施方案的示例性分布式对称密码术系统的系统框图。
[0059]
图2示出了根据一些实施方案的示例性客户端计算机的系统框图。
[0060]
图3示出了根据一些实施方案的示例性密码设备的系统框图。
[0061]
图4示出了根据一些实施方案的示例性秘密份额和验证份额提供系统的系统框图。
[0062]
图5示出了根据一些实施方案的示例性秘密份额和验证份额提供过程的序列图。
[0063]
图6a示出了根据一些实施方案的自适应抗攻击分布式对称加密的示例性方法的第一部分的混合序列图。
[0064]
图6b示出了根据一些实施方案的自适应抗攻击分布式对称加密的示例性方法的第二部分的混合序列图。
[0065]
图7a示出了根据一些实施方案的自适应抗攻击分布式对称解密的示例性方法的第一部分的混合序列图。
[0066]
图7b示出了根据一些实施方案的自适应抗攻击分布式对称解密的示例性方法的第二部分的混合序列图。
[0067]
图8a示出了根据一些实施方案的摊销分布式对称加密的示例性方法的第一部分的混合序列图。
[0068]
图8b示出了根据一些实施方案的摊销分布式对称加密的示例性方法的第二部分的混合序列图。
[0069]
图9a示出了根据一些实施方案的摊销分布式对称解密的示例性方法的第一部分的混合序列图。
[0070]
图9b示出了根据一些实施方案的摊销分布式对称解密的示例性方法的第二部分的混合序列图。
[0071]
图10示出了用于更新amortise系统中的秘密份额的方法的混合序列图。
[0072]
图11示出了根据一些实施方案的示例性计算机系统。
具体实施方式
[0073]
i.引言
[0074]
一些实施方案涉及分布式对称密码术的改进,包括分布式对称加密即服务和分布式对称解密即服务。一些实施方案与“adapdise”系统相关,所述系统可以使用多个不同秘密值和从那些秘密值导出的多个不同秘密份额。如下文进一步解释的,多个秘密份额的使用可以使分布式对称密码系统抵抗自适应攻击。
[0075]
一些实施方案与“amortise”系统相关,所述系统可以使用双线性配对和从批量密钥导出的消息密钥。在分布式对称密码术中,为了加密或解密消息,从分布式伪随机函数(在第ii节中更详细地描述)生成密钥。当客户端计算机拥有大量要加密的消息时,例如当客户端具有大量数据集或试图加密数据流时,这可能是低效的,因为客户端计算机和密码设备必须对客户端计算机希望加密的每个消息执行分布式伪随机函数协议。当客户端计算机和密码设备彼此远离时,这个问题变得更加严重,导致大的累积等待时间延迟。为了解决这个问题,客户端计算机和密码设备可以执行分布式伪随机函数协议的单个实例来生成批量密钥。然后,客户端计算机可以基于批量密钥独立地生成任意数目的消息密钥。结果,减少了与密码设备的通信次数,提高了加密过程的速度和效率。
[0076]
在一些实施方案中,客户端计算机和密码设备网络中的多个密码设备可以一起工作来加密消息或解密密文。并非密码设备网络中的所有密码设备都必须参与,而是仅阈值数目的密码设备需要参与。例如,在具有十个密码设备的网络中,可能只需要七个密码设备参与。这个属性可以被称为“n中取t”(例如,10中取7)阈值认证加密。客户端计算机和多个密码设备可以执行对应于分布式伪随机函数的协议,以便产生输出值。客户端计算机可以使用这个输出值来生成用于加密消息或解密密文的密码密钥。然而,分布式伪随机函数协议和密钥生成过程可以在adapdise和amortise系统中变化。这两个可以组合的系统将在下文更详细地描述。
[0077]
a.adapdise
[0078]
在分布式对称加密期间,客户端计算机可以使用第一散列函数、第二散列函数、消息以及可选的随机值来生成第一承诺和第二承诺。第一承诺可以包括使用第一散列函数产生的消息(或消息和随机值)的散列。第二承诺可以包括使用第二散列函数产生的消息(或消息和随机值)的散列。客户端计算机可以在生成第一和第二承诺之前例如使用随机选择过程从多个散列函数中选择这些散列函数。客户端计算机可以选择多个密码设备来参与分布式对称加密操作,并且可以将承诺传输到这些参与的密码设备。
[0079]
每个密码设备可以存储在分布式对称密码术中使用的多个秘密份额。可选地,密码设备也可以存储验证份额。在一些实施方案中,每个密码设备可以存储第一秘密份额和
第二秘密份额。第一秘密份额可以从第一秘密值导出,并且第二秘密份额可以从第二秘密值导出。每个参与的密码设备可以使用第一承诺和相应的第一秘密份额来生成相应的第一部分计算。同样,每个参与的密码设备可以使用第二承诺和相应的第二秘密份额来生成相应的第二部分计算。参与的密码设备可以各自通过组合它们各自的第一部分计算和第二部分计算(例如,通过计算第一部分计算和第二部分计算的乘积)来产生部分计算。
[0080]
可选地,密码设备可以使用第一承诺和/或第二承诺以及它们各自的验证份额来生成多个部分签名。这些验证份额可以对应于验证值或者从验证值导出。客户端计算机可以组合部分签名以产生验证签名。稍后(例如,在解密操作期间),客户端计算机可以向密码设备提供验证签名。密码设备可以使用验证签名来验证客户端计算机请求的合法性。
[0081]
在生成多个部分计算之后,参与的密码设备可以将多个部分计算(以及可选地,多个部分签名)传输到客户端计算机。客户端计算机可以组合或以其他方式使用多个部分计算来生成密码密钥,并且组合多个部分签名来生成验证签名。客户端计算机可以使用密码密钥来加密消息以产生密文,然后产生包括密文和其他信息(例如,第一和第二承诺、用于生成第一和第二承诺的随机值、验证签名、散列标识符等)的有效载荷。散列标识符可用于标识分别用于生成第一和第二承诺的第一和第二散列函数。
[0082]
客户端计算机可以在解密过程期间执行附加步骤,诸如验证从密码设备接收到的部分计算。客户端计算机可以使用对应于用于生成部分计算的秘密份额的校验值来验证这些部分计算。这种验证可以使用hvzk证明来执行。
[0083]
为了解密密文,客户端计算机(其可以是加密消息的同一客户端计算机或不同的客户端计算机)可以将第一承诺和第二承诺(以及可选地,验证签名)传输到附加多个密码设备。此附加多个密码设备还可以包括阈值数目的密码设备。附加密码设备中没有一个附加密码设备、一些附加密码设备或所有附加密码设备可以与参与加密的多个密码设备相同。附加多个密码设备中的每个密码设备可以拥有第一秘密份额和第二秘密份额、验证份额和验证密钥。验证密钥可以包括对应于包括私钥的验证值的公钥。
[0084]
可选地,附加多个密码设备可以使用验证密钥来验证验证签名。如果验证签名合法,则附加多个密码设备可生成附加多个部分计算并将所述附加多个部分计算传输到客户端计算机。客户端计算机可以使用附加多个部分计算来生成密码密钥,然后使用所述密码密钥来解密密文并产生消息。以这些方式,客户端计算机和密码设备可以执行分布式对称解密。
[0085]
b.amortise
[0086]
在amortise系统中,在分布式对称加密期间,客户端计算机可能拥有客户端计算机(或客户端计算机的操作员)想要加密的一组消息。客户端计算机可以使用第一散列函数和对应于客户端计算机的标识符来生成输入值(即,散列)。客户端计算机可以选择多个密码设备来参与分布式对称加密操作,并且可以将输入值传输到参与的密码设备。
[0087]
每个密码设备都可以存储在分布式对称密码术中使用的秘密份额。每个参与的密码设备可以使用输入值和它们各自的秘密份额来生成部分计算,从而生成多个部分计算。参与的密码设备可以将多个部分计算传输到客户端计算机。客户端计算机可以组合或以其他方式使用多个部分计算来生成批量密钥。
[0088]
客户端计算机可以为所述客户端计算机想要加密的消息集中的每条消息生成承
诺。然后,对于每条消息,客户端计算机可以使用双线性配对,使用批量密钥和承诺来生成消息密钥。客户端计算机可以使用这些消息密钥中的每个消息密钥来加密它们各自的消息,生成一组密文。客户端计算机可以生成对应于包括密文、对应于客户端计算机的标识符和承诺的每个密文的有效载荷,从而生成一组有效载荷。这些有效载荷可以存储在本地,传输到存储服务器进行存储,或者传输到另一台客户端计算机。
[0089]
为了解密密文,客户端计算机(其可以是加密相应消息的同一客户端计算机或者不同的客户端计算机)可以首先检取对应于密文的有效载荷。客户端计算机可以使用双线性配对、标识符和承诺来生成随机数。这个随机数可以被传输到附加多个密码设备(例如,包括阈值数目的密码设备)。附加密码设备中没有一个附加密码设备、一些附加密码设备或所有附加密码设备可以与参与加密的多个密码设备相同。附加多个密码设备中的每个密码设备可以拥有秘密份额。
[0090]
附加多个密码设备可以使用随机数和它们各自的秘密份额来生成多个附加部分计算。此附加多个部分计算可以被传输到客户端计算机。客户端计算机可以组合附加多个部分计算来生成消息密钥,然后使用所述消息密钥来解密密文,从而产生消息。
[0091]
c.密码攻击
[0092]
在更详细地描述实施方案之前,简要概述静态、动态和自适应攻击可能是有帮助的。在静态攻击中,攻击者试图或可能成功地在单个时刻同时(或几乎同时)破坏一个或多个密码设备。然而,攻击者通常会在一段时间内多次试图破坏设备。
[0093]
相比之下,在动态攻击中,攻击者可能在一段时间内试图或成功破坏一个或多个密码设备。攻击者可能破坏单个密码设备,使用所述密码设备参与密码操作,然后破坏另一个密码设备,等等。自适应攻击是动态攻击的一种变体,在这种攻击中,攻击者在一段时间内调整或修改他们的攻击行为。例如,攻击者可以使用在密码操作期间收集的信息来修改他们的攻击行为。
[0094]
例如,在包括四个密码设备“a”、“b”、“c”和“d”的分布式密码系统中,攻击者可以首先攻击并破坏密码设备“a”。被破坏的密码设备“a”可以参与分布式密码操作(而不暴露其被破坏的本质)。稍后,攻击者可以根据这些密码操作的结果选择攻击设备“b”、“c”或“d”。
[0095]
通常,在自适应攻击中,攻击者比在静态攻击中具有更大的灵活性。与静态攻击者相比,这使得自适应攻击者处于相对优势。因此,自适应攻击比静态攻击更有可能成功突破分布式对称密码术系统。此外,虽然一些分布式对称密码术系统被证明可以安全抵御静态攻击,但是它们不能被证明可以安全抵御动态攻击。这个潜在的漏洞可能允许攻击者或其他恶意实体获取和解密敏感的加密信息(例如,医疗记录或财务信息)。
[0096]
然而,如上所述,adapdise系统使用存储在密码设备上的多个不同的秘密份额来执行分布式对称密码术。多个秘密份额的使用是对传统的分布式对称密码系统的安全改进,因为它保护分布式对称密码术系统免受自适应攻击。通过使用多个独立的秘密份额生成和组合多个部分计算,密码设备保护那些秘密份额,以防止它们被自适应攻击者确定。在分布式密码系统中可能不是这种情况,在分布式密码系统中,每个密码设备仅拥有单个秘密份额。当仅使用单个秘密份额来生成部分计算时,自适应攻击者可能能够从部分计算中识别出相关性,因为只有一个秘密可以产生所述部分计算。相比之下,当使用多个秘密份额
来生成部分计算时,可能有指数数目的第一秘密份额和第二秘密份额对可以产生相同的部分计算。作为类比,等式x 2=7只有一个解(x=5),而等式x y 2=7对于(x,y)对有无限多个解,因为它是欠定系统(即,系统中的等式比变量少)。第一个等式类似于每个密码设备仅拥有单个秘密份额的情况,而第二个等式类似于每个密码设备拥有两个秘密份额的情况。
[0097]
下文参考各图更详细地描述一些实施方案。诸如秘密共享、分布式伪随机函数和双线性配对的概念将在第ii节中介绍。参考图1在第iii节中描述了示例性分布式密码网络。参考图2在第iii节中描述了示例性客户端计算机。参考图3在第iii节中描述了示例性密码设备。参考图4和图5在第iv节中描述了用于秘密份额分发的示例性系统和方法。参考图6a、图6b、图7a和图7b在第v节中描述了自适应抗攻击分布式对称密码术的方法。参考图8a、图8b、图9a和图9b在第v节中描述了摊销分布式对称密码术的方法。参考图10在第vi节中描述了用于更新摊销分布式对称密码术的秘密份额的方法和系统。参考图11在第vii节中描述了计算机系统。
[0098]
ii.分布式对称密码术概述
[0099]
adapdise和amortise系统都使用各种分布式伪随机函数实施分布式对称密码术。如上所述,每个密码设备可以拥有一个或多个秘密份额,以及验证份额。这些秘密份额和验证份额可以分别从秘密值和验证值导出。在分布式伪随机函数的执行期间,密码设备使用它们各自的秘密份额和由客户端计算机提供的一个或多个输入值(例如,承诺或承诺的散列)来生成发送到客户端计算机的部分计算。客户端计算机组合这些部分计算来计算伪随机函数的输出。这个输出可用于导出用于加密消息的密码密钥(在adapdise中)或批量密钥,所述批量密钥可用于使用双线性配对导出消息密钥(amortise)。这些消息密钥可用于加密一组消息。以下小节更详细地描述了用于实施adapdise和amortise的一些概念。
[0100]
a.秘密份额和验证份额
[0101]
如上所述,秘密份额可以从共享秘密(也称为秘密值)导出。秘密份额可用于执行密码操作。例如,秘密份额可用于生成密码密钥。秘密份额可以某种方式组合,以便再现从中导出那些秘密份额的共享秘密。在某些密码应用中,使用秘密份额可能比使用单个秘密值更可取,因为恶意用户必须窃取多个秘密份额才能复制和获得共享秘密。相比之下,在非分布式密码系统中,恶意用户只需要窃取一个秘密值即可获得共享秘密。
[0102]
验证份额可类似于秘密份额。验证份额可以对应于验证值,类似于秘密份额如何对应于秘密值。验证份额可以某种方式组合以再现验证值。在一些实施方案中,用于生成、分发或组合验证份额的方法也可用于生成、分发或组合验证份额。
[0103]
验证份额可用于产生验证签名,所述验证签名可用于验证分布式对称密码操作。作为示例,在一些实施方案中,密码设备在分布式对称解密期间验证验证签名。验证签名的存在向密码设备指示客户端计算机正在执行解密操作。
[0104]
秘密份额和验证份额可拥有一些有用的可选属性。一个此类属性是“n中取t”属性。这个属性指示总共n个秘密份额或验证份额中的t个秘密份额或验证份额足以再现秘密值或验证值。使用哪些秘密份额来再现秘密值可能并不重要,只需要至少t个秘密份额。
[0105]
有许多技术可用于实施秘密共享,特别是n中取t秘密共享。shamir秘密共享方案是下文论述的一个非限制性示例。然而,其他适当的秘密共享技术同样适用(例如,blakley方案、中国剩余定理(the chinese remainder theorem)等)。
[0106]
通常,shamir秘密共享涉及将秘密值(或替代地,验证值)编码到多项式p(x)=a0 a1x a2x2

akxk的系数中。秘密份额或验证份额可包括多项式上的不同点(配对x、p(x)值)。可通过使用秘密份额或验证份额对多项式进行插值而从秘密份额或验证份额获得共享秘密或验证值。拉格朗日插值(lagrange interpolation)是一种可使用的方法。
[0107]
k次多项式p(x)可以包括k 1个系数a0、a1…ak
。虽然秘密值或验证值可以被编码成任何系数,但是有时优选将秘密值或验证值编码到零阶系数a0中。可以通过使用秘密值或验证值作为多项式p(x)中的系数a0来将秘密值或验证值编码到零阶系数a0中。可以以任何适当的方式(例如,随机地)选择其他系数a1、a2…ak
的值。如果秘密值s被编码到零阶系数a0中,则在x=0处估算的多项式p(x)等于共享秘密,即p(0)=a0=s。
[0108]
shamir秘密共享使用需要k 1个唯一点来唯一地定义k次多项式p(x)的事实。一旦p(x)被唯一地定义,就可以在x的特定值(例如,x=0)处估算p(x),以便确定秘密值。因此,k 1是对多项式进行插值并确定秘密值或验证值所需的最小或阈值点数t。当秘密份额被分发给多个密码设备时,为了达到阈值数目的秘密份额,至少阈值数目t的那些密码设备必须参与。
[0109]
此外,因为秘密值(或验证份额)包括多项式上的点(有无限个),所以shamir的秘密共享可以为任何给定阈值提供任意大量的秘密份额。这意味着对于任何给定阈值,密码设备网络都可拥有任意大量的密码设备。
[0110]
如上所述,在一些实施方案中,密码设备可以拥有分别从第一秘密值和第二秘密值导出的第一秘密份额和第二秘密份额。这可以通过以下操作实现:将第一秘密值编码到第一多项式p1(x)中并且将第二秘密值编码到第二多项式p2(x)中(如上所述),然后对p1(x)进行采样以产生包括第一秘密份额的点,并且对p2(x)进行采样以产生包括第二秘密份额的点。多项式可以在x的任何值(x=0除外)处采样,并且前提是没有两个密码设备接收到对应于x的相同值的秘密份额。
[0111]
可以使用的一种技术是使用对应于特定密码设备的唯一序列号或设备标识符作为x的值。序列号为“18723”的密码设备可以接收包括(18723,p(18723))的秘密份额(x,p(x)),而序列号为“99123”的密码设备可以接收包括(99123,p(99123))的秘密份额。因为序列号或设备标识符是唯一的,所以保证两个密码设备拥有不同的秘密份额。
[0112]
b.拉格朗日插值
[0113]
拉格朗日插值是一种插值技术,可用于基于采样值确定多项式。多项式p(x)以及因此秘密值(或验证值)s可以使用拉格朗日插值来确定,所述拉格朗日插值可以用于使包括配对(xj,p(xj))值的秘密份额或验证份额与多项式p(x)相关。所述对(xj,p(xj))对应于第j秘密份额。多项式的拉格朗日形式由以下公式给出:
[0114][0115]
其中lj(x)是第j拉格朗日基多项式(即,对应于第j秘密份额)。拉格朗日基多项式lj(x)由以下公式定义:
[0116][0117]
其中xj是对应于第j秘密份额(或验证值)的x值,并且x
p
是第p秘密份额(或验证值)
的x值。
[0118]
因为p(0)等于零阶系数a0,所以如果秘密值或验证值s被编码到a0中,则可以通过代入x=0来简化前述公式:
[0119][0120][0121]
shamir秘密共享可用于将秘密份额或验证值分发到数个密码设备。这些秘密份额或验证份额可以包括作为配对值(xj,p(xj))给出的唯一点。使用阈值数目的这些秘密份额或验证值,可以计算拉格朗日系数lj并将其与值p(xj)一起使用以确定秘密值(或验证值)s,如上所示。
[0122]
值得注意的是,拉格朗日系数lj仅取决于对应于密码设备的x值。如上所述,x的这些值可以包括对应于每个密码设备的唯一序列号或标识号,因此可以在生成任何多项式之前已知。因此,可以预先计算对应于每个密码设备的拉格朗日系数lj。
[0123]
此外,因为拉格朗日系数lj独立于任何多项式p(x),所以单个拉格朗日系数可以用于多个不同的多项式p1(x)和p2(x)。结果,单个拉格朗日系数lj可以对应于拥有从任何数目的不同秘密值导出的任何数目的秘密份额的密码设备。
[0124]
使用shamir秘密共享,无论使用哪个秘密份额或验证份额,都可以重建秘密值或验证值。因此,不同的密码设备每次都可参与分布式密码操作,并且仍会产生相同的共享秘密或验证值。然而,为了保护或模糊秘密值或验证值,有时最好从共享秘密值或验证值中产生一个值,而不是秘密值或验证值本身。这可使用分布式伪随机函数来实现,如下文所述。
[0125]
c.伪随机和分布式伪随机函数
[0126]
伪随机函数是产生输出的函数,其中输入与输出之间的关系看起来是随机的。使用伪随机函数的优点在于,在给定输出的情况下难以确定输入,并且因此伪随机函数可用于模糊输入。
[0127]
在假设的密码应用中,秘密值s可以包括密码密钥。当并且如果秘密值s是从其组成秘密份额s0、s1…st
重建的,则所述秘密值可以用于加密或解密数据。然而,这可能是不可取的,因为共享秘密在被重建后可能被恶意参与者窃取和使用。相反,最好使用共享秘密作为伪随机函数的输入,然后使用伪随机函数的输出来生成密码密钥。这样,秘密值s不会暴露给攻击者或其他恶意用户。
[0128]
分布式伪随机函数可指可以分布式方式计算的伪随机函数。作为示例,多个密码设备可计算多个部分计算。可组合这些部分计算以产生伪随机函数的输出。那些部分组合的组合可以等同于对应的非分布式伪随机函数的输出(例如,其中单个密码设备直接产生伪随机函数的输出的函数)。
[0129]
任何看似随机并且一致的伪随机函数都可用作分布式伪随机函数的基础。伪随机函数的显著示例是散列函数、高级加密标准(aes)密码系统和椭圆曲线密码系统。将在下文出于说明一些实施方案的目的描述椭圆曲线密码术,然而应理解,可用任何适当的伪随机函数实践实施方案。
[0130]
椭圆曲线是满足等式y2=x3 ax b的任何曲线。椭圆曲线密码术通常使用有限域上
的椭圆曲线执行。有限域的示例是整数mod p,其中p是质数。整数mod p包括从0到p-1的每个整数。椭圆曲线群可由其阶数q定义,所述阶数是所述组内的元素的数目。决策性diffie-hellman假设在这些椭圆曲线群下成立。
[0131]
与许多其他密码系统一样,椭圆曲线密码系统依赖于具有计算上不可行解的数学问题。对于椭圆曲线密码术,目前还不存在高效的解决方案来解决“椭圆曲线离散对数问题”。给定椭圆曲线上的原点a和椭圆曲线上的乘积点c,确定被乘数点b以使得点乘法a*b=c成立是非常困难的。实际的结果是,只要b被保密,消息就可以被转换成点a并且与点b进行点乘,以便产生乘积点c。
[0132]
决策性diffie-hellman假设规定,在具有生成元g的素数阶p的乘法群g中,对于随机且独立的a和b,值ga、gb和g
ab
都看起来是从群g中选择的随机元素。换句话说,难以确定ga、gb和g
ab
之间的乘法关系(即,g
ab
等于ga和gb的乘积)。
[0133]
实际上,椭圆曲线上的两个点可相乘以产生第三点,并且所述两个点与第三点之间的关系看起来是随机的。因此,如果某个值可表示一点,则所述值可点乘另一值以产生第三值,并且这三个值之间的关系看起来是随机的。因此,椭圆曲线可用作分布式伪随机函数的伪随机函数基础。
[0134]
d.双线性配对
[0135]
对应于摊销分布式对称加密的一些实施方案可以使用基于配对的密码术,特别是双线性配对,来生成用于加密消息或解密对应密文的消息密钥。在使用分布式伪随机函数导出批量密钥之后,客户端计算机可以使用批量密钥使用双线性配对来导出消息密钥。然后,这个消息密钥可用于加密消息。同样,在解密期间,客户端计算机可以使用双线性配对来生成随机数,所述随机数可以用作分布式伪随机函数的输入来生成消息密钥。这个消息密钥可用于解密对应密文。
[0136]
双线性配对将来自两个群g0和g1的输入映射到第三群g
t
。在实施方案中,这些群可以包括其中决策性diffie-hellman假设成立素数阶p的乘法循环群。这个双线性配对e可以是有效可计算的并且非退化的。
[0137]
对于双线性配对e,并且对于g0中的任何p和g1中的q:(ap,bq)=e(p,q)
ab
。这个属性允许从批量密钥(从分布式伪随机函数生成)或直接通过分布式伪随机函数生成一致的消息密钥。这样,客户端计算机可以在多个消息的加密期间导出多个消息密钥,并且在密文的解密期间导出单个消息密钥。
[0138]
作为示例,客户端计算机可以使用分布式伪随机函数导出批量密钥bk,其中客户端标识符的散列h0(id)作为输入,其中h0是将输入映射到g0的散列函数。然后批量密钥bk=h0(id)s,其中s是用于导出秘密份额s0...sn的秘密值。客户端计算机可以使用批量密钥bk和消息的承诺的散列的双线性配对以及随机值hi=com(mi||ri),即h1(hi)(其中h1是将输入映射到g1的散列函数),来计算与消息mi对应的消息密钥mk。然后mk=e(h0(id)s,h1(hi))=e(h0(id),h1(hi))s(通过上文的双线性属性)。然后,消息密钥mk可以用于加密消息mi以产生密文ci。这个密文ci可以存储在例如存储服务器中,用于以后解密。
[0139]
随后,客户端计算机可以检取密文ci并与密码设备通信,以对密文ci执行分布式伪随机解密。客户端计算机可以将包括客户端标识符的散列h0(id)和承诺的散列h1(hi)的双线性映射的随机数μ传输到密码设备,而不是将客户端标识符h0(id)的散列传输到密码设
备,即:μ=e(h0(id),h1(hi)),那么分布式伪随机函数的结果是μs=e(h0(id),h1(hi))s=e(h0(id)s,h1(hi))=mk。消息密钥mk然后可以用于解密密文ci以产生消息mi。这样,双线性配对可用于导出一致的对称消息密钥,用于加密消息和解密密文。
[0140]
e.应用
[0141]
在一些实施方案中,可以以分布式方式使用椭圆曲线密码术来加密值,这些加密值随后可以用作密码密钥,或者替代地用于生成密码密钥。这些值可以包括密码承诺,所述密码承诺又可以包括散列数据。在一些实施方案中,对应于自适应抗攻击加密,客户端计算机和密码设备可以使用分布式椭圆曲线密码术来使用多个秘密份额加密第一承诺h1(m)和第二承诺h2(m)(即,对应于输入消息m的散列值)。这些加密承诺可称作部分计算。如下所示,可以组合部分计算以产生与使用第一秘密值s1加密的第一承诺h1(m)等效的一个值,以及与使用第二秘密值s2加密的第二承诺h2(m)等效的第二值,证明椭圆曲线密码术可以用作分布式伪随机函数。
[0142]
在对应于摊销分布式对称加密的一些实施方案中,客户端计算机和密码设备可以替代地加密客户端标识符id的承诺(即,h(id)),而不是加密输入消息的承诺h(m)。这个加密承诺可用于生成消息密钥,所述消息密钥可用于使用例如下文进一步描述的双线性配对加密各个消息m1...mn。
[0143]
项hn(m)
sn
可以用于表示使用椭圆曲线密码术使用第n秘密值sn加密的第n承诺hn(m)(例如,使用第一秘密值加密的第一承诺或使用第二秘密值加密的第二承诺)。所述项可以用于表示部分计算,所述部分计算包括使用与第n承诺s
n,i
,对应的第i秘密份额加密的第n承诺hn(m)。在椭圆曲线密码术中,hn(m)
sn
等同于将第n承诺hn(m)与自身点乘sn次,并且部分计算等同于将第n承诺hn(m)与自身点乘s
n,i
次。每个散列函数hn可以将输入映射到不同组的输出值,诸如不同的加法或乘法循环群。例如,第一散列函数h0可以将输入映射到乘法循环群g0,即h0:{0,1}
*

g0,第二散列函数h1可以将输入映射到乘法循环群g1,即h1:{0,1}
*

g1,等等。
[0144]
h(m)
sn
与之间的关系可以使用公式(4)示出:之间的关系可以使用公式(4)示出:
[0145]
其中s
n,i
是对应于第n秘密值的第i秘密份额,并且λi是对应于第i密码设备的第i拉格朗日系数(参见公式(3))。因此,使用第n秘密值sn加密的第n承诺(即,hn(m)
sn
)等于使用秘密份额加密并使用拉格朗日系数取幂的第n承诺的乘积。这示出shamir秘密共享和椭圆曲线密码术可一起用来实施分布式伪随机函数的一种方式。
[0146]
此外,因为一组拉格朗日系数可以用于任何数目的多项式,所以在计算分布式伪随机函数之前,可以组合对应于不同承诺和秘密份额的部分计算。例如,第一部分计算和第二部分计算可以通过计算两个部分计算的乘积来组合:
[0147][0148]
其中是使用对应于第i密码设备的第一秘密份额加密的第一承诺,并且是使用对应于第i密码设备的第二秘密份额加密的第二承诺。
[0149]
用这个组合代替等式(5)中的部分计算产生:
[0150][0151][0152][0153]
因此,具有相乘的部分组合输入的分布式伪随机函数的输出(例如,如等式(6)中)等同于部分组合输出的乘积。此外,第一秘密值s1和第二秘密值s2被这个乘积模糊。知道第一承诺、第二承诺和乘积的值并不足以确定第一秘密值s1或第二秘密值s2,因为在给定第一承诺和第二承诺的情况下,存在可以产生乘积的无限数目的s1,s2对。以这种方式,秘密值和秘密份额甚至被保护免受自适应攻击者的攻击。
[0154]
在一些实施方案中,客户端计算机可以使用分布式伪随机函数的输出来生成可用于加密和解密的密码密钥。假设将一致的承诺用于加密和解密,则可以生成相同的密码密钥,并将其用于加密消息和解密对应密文。
[0155]
总而言之,在一些实施方案的上下文中,每个密码设备可以拥有对应于不同秘密值的一个或多个秘密份额。在摊销分布式对称密码术中,每个密码设备可以拥有一个秘密份额。在自适应抗攻击分布式对称密码术中,每个密码设备可以拥有对应于两个不同秘密值的两个秘密份额s
1,i
和s
2,i
。阈值数目的密码设备可参与多方密码操作。客户端计算机可以拥有所述客户端计算机想要加密的一个或多个消息m1...mn。客户端计算机可以生成消息m或客户端标识符id的承诺,并将其传输给密码设备。密码设备随后可以生成对应于这个承诺的部分计算,并将它们传输回客户端计算机。客户端计算机可以组合这些部分计算来产生分布式伪随机函数的输出。分布式伪随机函数的输出可用于导出一个或多个密钥。
[0156]
在自适应抗攻击分布式对称密码术中,客户端计算机可以拥有单个消息m。客户端计算机可以使用两个不同的散列函数h1(m)和h2(m)生成消息m的两个承诺,并将所述承诺传输到参与的密码设备。参与的密码设备可以各自使用其对应的秘密份额s
1,i
和s
2,i
来加密承诺h1(m)和h2(m),每个密码设备在所述过程中产生第一部分计算和第二部分计算。密码设备可以组合它们各自的第一和第二部分计算(例如,通过计算乘积)以产生各自的部分计算。
[0157]
随后,参与的密码设备可以将多个部分计算传输到客户端计算机。客户端计算机可确定对应于多个部分计算计算机。客户端计算机可确定对应于多个部分计算的拉格朗日系数λi。所述客户端计算机可用其对应的拉格朗日系数λi对多个部分计算取幂,以产生多个中间计算。客户端计算机可通过计算其乘积来组合中间计算。中间计算的乘积可以等同于分别使用第一秘密值和第二秘密值加密的第一承诺h1(m)和第二承诺h2(m)的乘积(即,)。中间计算的乘积可用作密钥生成种子,以便生成密码密钥。所述密码密钥可用于加密客户端计算机的消息并产生密文。当密文要被解密时,可发生相同的过程,并且可产生相同的密码密钥。可用密码密钥解密密文,从而生成消息m。
[0158]
在一些实施方案中,可使用类似方法产生验证签名。客户端计算机可以将消息m的承诺hn(m)(或多个承诺)传输到多个密码设备,所述多个密码设备可以使用椭圆曲线密码术来使用它们各自的验证份额中的每个验证份额加密承诺hn(m),以产生多个部分签名。所述多个密码设备可将所述多个部分签名传输到客户端计算机。客户端计算机可确定对应于所述多个部分签名的多个拉格朗日系数λi,然后使用其对应的拉格朗日系数对每个部分签
名取幂以产生多个中间签名。客户端计算机可生成验证签名作为所述多个中间签名的乘积。验证签名可以等同于使用验证值加密的承诺hn(m)。在一些实施方案中,可以仅用单个承诺,诸如第一承诺或第二承诺来产生部分签名。在其他情况下,类似于上述部分计算的生成,可以使用第一承诺和第二承诺来产生部分签名。
[0159]
验证值和验证密钥可包括非对称密码密钥对。也就是说,验证值可包括秘密或私用密码密钥,而验证密钥可包括公共密码密钥,或反之亦然。为了验证验证签名,密码设备可以使用验证密钥来解密验证签名,以产生第一承诺、第二承诺或它们的组合。如果得到的承诺与从客户端计算机接收到的承诺相匹配,则验证签名是合法的。
[0160]
前述示例旨在作为根据一些实施方案的共享秘密和分布式伪随机函数可如何用于执行分布式对称密码术的一个非限制性示例。实施方案可使用任何适当的伪随机函数(诸如aes、散列函数等)以及任何适当的秘密共享技术(例如blakley方案、中国剩余定理等)。
[0161]
iii.分布式密码网络
[0162]
a.系统框图
[0163]
图1示出了根据一些实施方案的示例性分布式密码网络100的系统框图。示例性分布式加密网络可以包括密码设备102-108、客户端计算机110和112、不安全网络114、可信外部服务器116以及可选的代理设备118。另外,密码设备网络可以包括存储服务器120。
[0164]
尽管仅示出四个密码设备102到108,但实施方案可用任何数目的密码设备来实践。同样地,虽然仅示出两个客户端计算机110和112,但实施方案可用任何数目的客户端计算机来实践。
[0165]
图1的计算机和设备可通过通信网络彼此通信,所述通信网络可采用任何合适的形式,并且可包括以下中的任一者和/或组合:直接互连;互联网;局域网(lan);城域网(man);作为互联网上节点的运行任务(omni);安全自定义连接;广域网(wan);无线网络(例如,采用诸如但不限于无线应用协议(wap)、i-模式等协议)等。计算机与设备之间的消息可使用安全通信协议来传输,所述安全通信协议诸如但不限于:文件传输协议(ftp);超文本传输协议(http);安全超文本传输协议(https)、安全套接层(ssl)、iso(例如,iso 8583)等。
[0166]
分布式密码网络可使客户端计算机110和112能够使用由密码设备102-108安全地存储的密码材料(秘密份额)来加密消息或解密密文。客户端计算机110和112可以经由网络(诸如因特网或不安全网络114)或者经由可选的代理设备118直接与密码设备102-108通信。客户端计算机110-112可拥有要加密的消息(“明文消息”或“明文”)或要解密的消息(“密文消息”或“密文”),以及使客户端计算机110-112能够参与分布式对称密码过程的硬件、软件、代码或指令。
[0167]
每个密码设备102-108可以拥有一个或多个秘密份额(例如,秘密份额,或者第一秘密份额和第二秘密份额),并且可以可选地拥有验证份额。秘密份额和验证份额可以从一个或多个秘密值(例如,秘密值,或者第一秘密值和第二秘密值)和验证值导出。秘密值和验证值可以在密码设备102-108之间共享,例如,秘密份额和验证份额可以从秘密值和验证值导出。验证值可以对应于验证密钥,密码设备102-108可以使用所述验证密钥来验证使用验证份额产生的验证签名。阈值数目的秘密份额可以允许秘密值的重建,并且阈值数目的验
证份额可以允许验证值的重建。所述阈值数目可小于密码设备102-108的总数目。例如,如果存在二十个密码设备102-108,则阈值数目可以是14个密码设备,或任何其他适当数目的密码设备。
[0168]
密码设备102-108可组织成密码设备网络。这个密码设备网络可包括连接到诸如互联网或不安全网络114的较大计算机网络的局域网。密码设备网络与外部计算机(例如,客户端计算机110和112)之间的通信可以由代理设备118调解,所述代理设备可以包括经由任何适当的装置(例如,应用编程接口api)与客户端计算机110和112通信的网络服务器。
[0169]
密码设备网络可组织成任何适当的联网结构。例如,密码设备网络可包括“链”结构,由此将密码设备组织成密码设备的线性序列。从客户端计算机110到一个密码设备(例如,密码设备108)的通信可以在到达预期接收方(例如,密码设备108)之前通过所有前面的密码设备(例如,密码设备102-106)和代理设备118。或者,密码设备网络可包括“树”结构,其中不同分支包括密码设备的不同集合(例如,一个分支可包括密码设备102和104,而另一分支可包括密码设备106和108)。密码设备网络可以包括任何数目的代理设备118,所述代理设备可以充当密码设备或其他代理设备118的代理。
[0170]
不安全网络114可包括计算机网络,客户端计算机110和112通过所述计算机网络彼此通信。不安全网络114可包括诸如互联网的网络。诸如客户端计算机110的客户端计算机可与密码设备102-108通信,以便加密消息,使得加密消息可经由不安全网络114安全地传输到客户端计算机112。然后,客户端计算机112可与密码设备102-108通信,以便解密消息。
[0171]
作为示例,客户端计算机110和112可包括不同医院中的医疗记录系统。这些医院可能不具备自行加密医疗记录的能力。这样,为了遵守患者保密规则,这些医院可以在将医疗记录存储在医疗记录数据库(例如,存储服务器120)中之前,使用所述医院各自的客户端计算机110或112以及密码设备102-108来加密医疗记录。当需要解密医疗记录时(即,在医生和对应于所述医疗记录的患者见面之前),客户端计算机110或112可与密码设备102-108通信以便解密所述医疗记录。作为另一示例,如果患者正从第一医院转移到第二医院,则对应于第一医院的客户端计算机(例如,客户端计算机110)可将加密的医疗记录传输到对应于第二医院的客户端计算机(例如,客户端计算机112)。对应于第二医院的客户端计算机可使用通过与密码设备102-108通信或使用相同的主密钥提供的不同的一组密码设备来解密医疗记录。
[0172]
可信外部服务器116可以向密码设备102-108提供或以其他方式提供秘密份额和验证份额。可信外部服务器116可以另外发布校验值,客户端计算机110和112可以使用所述校验值来验证从密码设备102-108中的任何密码设备接收到的部分计算。可信外部服务器116可以经由代理设备118或经由不安全网络114直接与密码设备102-108通信。同样,客户端计算机110和112可以直接地、经由代理设备118或者经由不安全网络114从可信外部服务器116检取发布的校验值。
[0173]
b.使用多个秘密
[0174]
如上所述,一些实施方案使用多个秘密值(例如,共享秘密)和多个秘密份额,以便保护分布式对称密码系统免受自适应攻击。每个密码设备(例如,图1中的密码设备102-108)可以拥有多个秘密份额。例如,密码设备i可以拥有两个秘密份额:s
1,i
和s
2,i
,分别从独
立采样的秘密值s1和s2导出。
[0175]
密码设备可以使用这些秘密份额以及客户端计算机提供的承诺来生成部分计算。这些部分计算可以作为分布式伪随机函数的一部分生成。如上文第ii节所述,分布式伪随机函数可以包括能够以分布式方式计算并且产生看起来随机的输出的函数。一些密码系统,诸如椭圆曲线密码术系统是伪随机函数的示例。所述函数是分布式的,因为由每个密码设备生成的部分计算可以被组合以产生单个输出。
[0176]
例如,客户端计算机可以将第一承诺h1和第二承诺h2传输到多个密码设备。每个密码设备可以使用这些承诺及其相应的秘密份额s
1,i
和s
2,i
生成两个部分计算y
1,i
和y
2,i
,其中y
n,i
是对应于第i密码设备的第n部分计算。密码设备可以使用执行评估函数(例如,描述为dprf.eval)的分布式伪随机函数来生成这些部分计算。在一些实施方案中,部分计算可以通过使用椭圆曲线密码术使用相应的秘密份额加密每个承诺来生成。在数学上,这可以表示为
[0177]
每个密码设备然后可以组合它生成的部分计算以产生单个部分计算。例如,如果密码设备i生成了两个部分计算和则它可以组合这两个部分计算来产生单个部分计算yi。密码设备可以为此目的使用dprf.combine函数。在一些实施方案中,组合部分计算可以包括计算部分计算的乘积,即
[0178]
每个密码设备可以将其组合的部分计算发送到客户端计算机,所述客户端计算机随后可以组合所有那些部分计算,并使用结果来生成密码密钥。此外,秘密份额s
n,i
被密码设备执行的部分计算的组合隐藏,防止恶意客户端计算机或窃听者确定用于生成那些部分计算的秘密份额。
[0179]
在接收到部分计算之后,客户端计算机可以通过使用其自己的dprf.combine函数组合部分计算yi来生成密码密钥或密码密钥种子。客户端计算机使用的dprf.combine函数可以与密码设备使用的dprf.combine函数不同。客户端计算机可以通过首先用其对应的拉格朗日系数λi对每个部分计算取幂来组合部分计算,即所述项可以被称为中间计算。客户端计算机可能先前已经从可信外部服务器(例如,来自图1的可信外部服务器116)接收了这些拉格朗日系数。客户端计算机然后可以通过计算乘积来组合中间计算:组合中间计算:所得值y可以用作密码密钥或密钥生成算法的种子。所述算法又可以用于生成密码密钥。
[0180]
存储服务器120可以包括能够存储有效载荷的服务器计算机或其他数据库。这些有效载荷可以包括信息集合,所述信息集合包括密文。客户端计算机110和112可以与存储服务器120通信,以便将有效载荷存储在存储服务器120中或者从存储服务器120检取有效载荷。
[0181]
c.客户端计算机
[0182]
如上所述,客户端计算机可包括计算机系统,所述计算机系统与分布式对称密码术系统(例如,密码设备网络)通信以便加密消息或解密密文。客户端计算机可包括个人计算机或与用户相关联的通信设备。这些设备可包括例如笔记本电脑、台式计算机、智能手机、平板电脑、智能手表、pda等。客户端计算机还可包括与组织(例如,企业)相关联的服务
器计算机或主机计算机。
[0183]
图2示出了示例性客户端计算机200。客户端计算机200可包括处理器202、通信接口204和计算机可读介质206。
[0184]
1.处理、传达和存储
[0185]
处理器202可包括任何合适的一个或多个数据计算设备。处理器202能够解译代码并执行存储在计算机可读介质206上的指令。处理器202可包括在精简指令集上操作的中央处理单元(cpu),并且可包括单核或多核处理器。处理器202可包括算术逻辑单元(alu)和高速缓冲存储器,这些组件可由处理器202用于执行代码或其他功能。
[0186]
通信接口204可包括客户端计算机200可借以与其他计算机或设备通信的任何接口。通信接口的示例包括有线接口,诸如usb、以太网或firewire。示例还包括用于无线通信的接口,诸如蓝牙或wi-fi接收器。客户端计算机200可拥有多个通信接口204。作为示例,包括智能手机的客户端计算机200可通过微型usb端口、蜂窝接收器、蓝牙接收器和wi-fi接收器进行通信。
[0187]
客户端计算机200可使用通信接口204经由一个或多个安全并经认证的点对点信道与其他设备或计算机通信。这些信道可使用标准公钥基础设施。例如,客户端计算机200和密码设备可经由其通信接口交换对称密钥和/或密钥份额。此密钥交换可包括diffie-hellman密钥交换。在交换密码密钥之后,客户端计算机200和密码设备可通过公共信道(诸如不安全网络)使用标准认证加密方案进行通信,以用密码密钥加密任何消息。还可使用其他认证方法,例如数字签名。
[0188]
计算机可读介质206可包括硬件,所述硬件可拥有可由处理器202解译的代码、数据或指令。计算机可读介质206可以存储或以其他方式包括多个软件模块,包括通信模块208、随机数字生成模块210、承诺模块212、选择模块214、部分计算模块216、密码术模块218和验证模块220。
[0189]
2.通信模块
[0190]
通信模块208可以包括或包含代码、指令、例程、子例程等,所述代码、指令、例程、子例程可以由处理器202使用,以便使客户端计算机200能够使用任何适当的通信协议与包括其他客户端计算机、密码设备和可信外部服务器的其他计算机或设备通信。通信模块208可以包括可由处理器202执行以用于发送、接收、格式化和解译请求、消息、有效载荷和其他数据的代码或指令。
[0191]
例如,通信模块208可以包括使客户端计算机200能够向多个客户端计算机传输对密码服务(例如,加密或解密)的请求的代码。这些请求可以包括承诺(包括第一承诺和第二承诺)、验证签名、随机值、标识符散列等。
[0192]
作为另一个示例,通信模块208可以包括使得客户端计算机200能够格式化有效载荷的代码,所述有效载荷包括密文、第一承诺、第二承诺以及可选的随机值、验证签名和散列指示符。作为替代,通信模块208可以包括使得客户端计算机200能够格式化有效载荷的代码,所述有效载荷包括密文、承诺和对应于客户端计算机200的标识符。此外,通信模块208可以包括使客户端计算机200能够将有效载荷传输到另一个客户端计算机或其他接收方(诸如存储服务器)的代码。同样,通信模块208可以包括使客户端计算机200能够接收包括密文、第一承诺、第二承诺以及可选的随机值、验证签名和散列指示符的有效载荷或者可
选地包括密文、承诺和对应于加密设备的标识符的有效载荷的代码。此外,通信模块208可以包括使客户端计算机200能够解译消息、请求或有效载荷的元素(例如,确定有效载荷中的哪个元素是密文,哪个元素是第一承诺等)的代码。
[0193]
3.随机数字生成模块
[0194]
随机数字生成模块210可以包括或包含可以由处理器202用来生成随机或伪随机数字的代码、指令、例程、子例程等。这些随机数字可包括密码上安全的伪随机数字,并且代码可包括满足密码安全要求的一个或多个伪随机数字生成算法。这些要求可包括例如通过“下一位测试”和通过“状态妥协扩展测试”。密码上安全的随机数字生成器的示例包括yarrow、chacha20和fortuna算法等。
[0195]
随机数字生成模块210可以与客户端计算机200中的其他模块或硬件通信,以用于生成随机或伪随机数字。作为示例,随机数字生成模块210可以检取系统时间(例如,当前年、月、日、小时等)以便播种伪随机数字生成算法。
[0196]
随机或伪随机数字可出于加密或生成承诺的目的而用于“盲化”(即,模糊)消息。消息可以某种方式与随机或伪随机数字组合,以便使消息模糊。作为示例,消息“hello”可与随机数字12345级联以产生盲化消息“hello12345”。或者,逐位异或函数(xor)可用于使用随机数字来盲化消息。通过用随机数字来盲化消息,客户端计算机200可保护自身免受一些密码攻击,包括重放攻击。因此,客户端计算机200可以基于消息和随机值(例如,h(m|r))生成承诺,而不是仅基于消息m生成第一承诺或第二承诺h(m)。另外,代替加密消息m,客户端计算机200可以加密消息m和随机值r。
[0197]
4.承诺模块
[0198]
承诺模块212可以包括由处理器202用于选择散列函数、使用散列函数生成承诺(例如,第一承诺和第二承诺)以及基于散列指示符识别或确定散列函数的代码或指令。
[0199]
承诺模块212可以包括可用于生成承诺的不同散列函数(例如,sha-256、sha3、blake2等)的列表或储存库。承诺模块212可以包括使处理器202能够从这个列表或储存库中选择任何数目(例如两个)的散列函数的代码。在一些实施方案中,承诺模块212可以包括允许随机选择散列函数的代码。在其他情况下,承诺模块212可以包括允许根据任何适当的标准(例如,基于用户偏好、安全分数等)选择散列函数的代码。
[0200]
承诺模块212可以包括使得处理器能够使用消息和随机值作为输入来执行所选择的散列函数的代码。客户端计算机可以将得到的散列值用作承诺。承诺模块212可以另外包括使得客户端计算机200能够使用承诺来验证解密消息的正确性的代码。如果使用解密的密文产生的承诺与使用对应的明文产生的承诺相匹配,则客户端计算机可以确定消息在加密期间未被修改。
[0201]
此外,承诺模块212可以包括使得处理器202能够基于散列指示符来识别或确定散列函数的代码。散列指示符可以包括唯一标识特定散列函数的标识符。例如,散列函数的名称(例如,“blake2”)可用于标识对应的散列函数。客户端计算机200可以使用承诺模块212来识别用于生成使用明文消息生成的一个或多个承诺的散列函数,以便稍后使用解密的密文来验证那些承诺。
[0202]
5.选择模块
[0203]
可选的选择模块214可以包括由处理器202用于从密码设备网络中的密码设备中
选择阈值数目的密码设备的代码或指令。阈值数目的密码设备可以包括从存储在那些密码设备上的秘密份额和验证份额中再现秘密值和/或验证值所必需的数目的密码设备。在一些实施方案中,客户端计算机200可能不会从密码设备网络中的密码设备中选择密码设备。或者,客户端计算机200可与代理设备通信,并且代理设备可执行选择过程。或者,参与的密码设备可以是预先选择的或静态的,并且客户端计算机200可能不需要选择参与的密码设备。这样,选择模块214可以是可选的。
[0204]
作为示例,选择模块214可以包括实施随机选择算法的代码。选择模块214可以包括密码设备网络中的密码设备列表。选择模块214可以在不替换的情况下从列表中进行选择,直到选择了阈值数目的密码设备。或者,选择模块214可以包括能够实现基于规则的密码设备选择的代码。例如,选择模块214可以确定与每个密码设备相关联的威胁分数。威胁分数可对应于给定密码设备已被黑客或恶意用户破坏的可能性。选择模块214可以选择阈值数目的具有最低威胁分数的密码设备,或者从具有低于特定值的威胁分数的密码设备中随机选择。
[0205]
作为另一个替代方案,选择模块214可以包括允许基于计算负载选择密码设备的代码。密码设备网络中的一些密码设备可能已经代表其他客户端计算机执行分布式对称密码术,并且因此可能具有更高的计算负载。客户端计算机200可以使用选择模块214来选择阈值数目的具有较低计算负荷的密码设备,以提高分布式对称密码术系统的吞吐量。
[0206]
6.部分计算模块
[0207]
部分计算模块216可以包括使处理器202能够操纵或处理部分计算和中间计算以便执行分布式对称密码术的代码或指令。这可以包括基于部分计算生成中间计算,以及组合部分计算以生成密码密钥或密钥生成种子。另外,部分计算模块216可以包括使处理器202能够基于部分签名生成验证签名的代码。
[0208]
部分计算模块216可以包括允许使用任何适当的方法、函数或算法来组合部分计算和部分签名的代码。作为示例,可以通过计算部分计算的和或乘积(或任何其他组合)来组合部分计算。部分计算模块216还可以包括实现多项式插值(诸如拉格朗日系数的计算)的代码。这些拉格朗日系数可对应于部分计算。另外,部分计算模块216可以包括能够实现幂运算和模幂运算的代码。例如,客户端计算机200可以使用部分计算模块216来计算对应于多个部分计算的多个拉格朗日系数。客户端计算机200然后可以使用部分计算模块216来使用多个拉格朗日系数对那些部分计算取幂,以便生成多个中间计算。例如,部分计算模块216可以用于使用拉格朗日系数λi和部分计算yi来计算中间计算随后,客户端计算机200可以通过计算那些中间计算y的乘积(即,)来组合部分计算。中间计算y的乘积可以用作密码密钥,或者用作密钥生成种子。客户端计算机200可以使用密码模块218将这个密钥生成种子输入到密钥生成算法中,以便产生可以用于加密或解密消息的密码密钥。
[0209]
同样,承诺模块212可以包括使得客户端计算机200能够使用与如上所述用于从部分计算生成密钥生成种子的技术类似的技术(例如,使用拉格朗日多项式的插值等)从部分签名生成验证签名的代码。
[0210]
7.密码术模块
[0211]
密码术模块218可以包括使处理器202能够生成密码密钥并执行其他密码操作的代码或指令,包括使用密码密钥加密消息和解密密文。这些密码密钥可由密钥生成种子生成。密钥生成取决于用于执行密码术的特定密码系统。例如,对于“aes-128-cbc”密码系统(在密码分组链接模式下操作的具有128位密钥的aes分组密码),密钥生成算法可接受口令或密钥生成种子作为输入,并产生128位密钥以用于aes分组密码。
[0212]
客户端计算机200可以使用密码模块218来生成用于加密消息或解密密文的密码密钥。密码模块218使用的密钥生成种子可以全部或部分地从从密码设备接收到的部分计算导出。密钥生成种子可以包括通过使用其对应的拉格朗日系数对部分计算取幂而生成的中间计算的乘积。这些部分计算可由密码设备使用从客户端计算机200接收到的第一承诺、从客户端计算机200接收到的第二承诺以及第一秘密份额和第二秘密份额来生成,如上文在第i节中所述。因此,密钥生成种子和密码密钥可从秘密份额间接导出,因为秘密份额用于生成部分计算,所述部分计算用于生成中间计算,所述中间计算又可被组合并用作密钥生成种子。
[0213]
另外,客户端计算机200可以使用密码模块218来执行与基于配对的密码相关联的功能,包括双线性配对的评估。客户端计算机200可以使用双线性配对,以便将批量密钥映射到用于加密或解密消息的单独消息密钥。
[0214]
8.验证模块
[0215]
验证模块220可以包括可由处理器202执行以用于使用校验值来验证部分计算的代码或指令。这些校验值可能已经由可信外部服务器(例如,来自图1的可信外部服务器116)发布。每个校验值可以对应于由密码设备网络中的密码设备存储的秘密份额。客户端计算机200可以使用存储在验证模块220中的代码或指令来执行诚实验证者零知识(hvzk)证明,以便验证部分计算的合法性。验证模块220可以包括能够实现hvzk证明(包括schnorr协议和fiat-shamir)的任何适当实施方式的代码或指令。
[0216]
d.密码设备
[0217]
图3显示了根据一些实施方案的示例性密码设备300。密码设备300可包括密码设备网络中的计算机或另一设备。在一些实施方案中,密码设备300可包括服务器计算机。密码设备300可以存储从一个或多个秘密值和验证值导出的一个或多个秘密份额和验证份额。另外,密码设备300可存储用于验证验证签名的验证密钥。密码设备可以使用秘密份额和验证份额来使用分布式伪随机函数生成部分计算和部分签名。部分计算可由客户端计算机用以生成密码密钥。密码密钥可由客户端计算机用以加密或解密消息。密码设备300可包括处理器302、通信接口304和计算机可读介质306。
[0218]
1.处理、传达和存储
[0219]
处理器302可包括任何合适的一个或多个数据计算设备。处理器302能够解译代码并执行存储在计算机可读介质306上的指令。处理器302可包括在精简指令集上操作的中央处理单元(cpu),并且可包括单核或多核处理器。处理器302可包括算术逻辑单元(alu)和高速缓冲存储器。这些组件可由处理器302用于执行代码或其他功能。
[0220]
通信接口304可包括密码设备300可借以与其他计算机或设备通信的任何接口。通信接口的示例包括有线接口,诸如usb、以太网或firewire。示例还包括用于无线通信的接口,诸如蓝牙或wi-fi接收器。密码设备300可拥有多个通信接口304,诸如微型usb端口、以
太网端口、蜂窝接收器、蓝牙接收器等。
[0221]
密码设备300可使用通信接口304经由一个或多个安全并经认证的点对点信道与其他设备或计算机通信。这些信道可使用标准公钥基础设施。例如,密码设备300和客户端计算机可通过其通信接口交换对称密钥。此密钥交换可包括diffie-hellman密钥交换。在交换密码密钥之后,密码设备300和客户端计算机可通过公共信道(例如不安全网络)使用标准认证加密方案进行通信,以用密码密钥加密任何消息。还可使用其他认证方法,例如数字签名。通过执行此密钥交换,密码设备300与客户端计算机客户端计算机之间的通信(例如,承诺、部分计算、部分签名、验证签名等)可被加密,从而允许密码设备300和客户端计算机通过不安全网络安全地通信。
[0222]
计算机可读介质306可包括硬件,所述硬件可拥有或存储可由处理器302解译的代码、数据或指令。计算机可读介质306可以存储或以其他方式包括多个软件模块,包括通信模块308、分布式伪随机函数模块310、验证模块312和安全存储器314。安全存储器元件可以存储秘密份额316、验证份额318和验证密钥320。
[0223]
2.通信模块
[0224]
通信模块308可以包括或包含代码或指令,所述代码或指令可以由处理器302使用以使得密码设备300能够使用任何适当的通信协议与其他计算机或设备(包括客户端计算机、代理设备和可信外部服务器)通信。通信模块308可以包括可由处理器302执行以用于从客户端计算机接收对密码服务的请求(例如,执行加密或解密的请求)、从客户端计算机接收承诺和验证签名以及向客户端计算机传输部分计算和部分签名的代码或指令。
[0225]
此外,通信模块308可以包括使密码设备300能够与可信外部服务器通信并从可信外部服务器接收秘密份额和验证份额的代码。通信模块308可以在分布式对称加密或解密之前执行的秘密份额提供阶段期间实现这种通信。
[0226]
3.分布式伪随机函数模块
[0227]
分布式伪随机函数模块310可包括用于评估伪随机函数(prf)或分布式伪随机函数(dprf)的代码。例如,这可包括执行与椭圆曲线密码术、诸如aes的分组密码或诸如sha-2的散列函数相关联的密码操作。
[0228]
作为示例,分布式伪随机函数模块310可包括可由处理器302使用的代码,以便在决策性diffie-hellman假设下实施椭圆曲线密码术。椭圆曲线密码术可用于基于承诺(例如,第一承诺和第二承诺)和秘密份额316生成部分计算。这些部分计算可以被组合成单个部分计算,并被传输到客户端计算机。客户端计算机可以使用这个部分计算以及从其他密码设备接收到的其他部分计算来产生密码密钥,所述密码密钥可以用于加密消息或解密密文,例如,如上文第i节所述。
[0229]
因此,处理器302可以使用分布式伪随机函数模块310,以便使用消息m的第一承诺h1(m)和所述消息的第二承诺h2(m)作为输入来执行椭圆曲线密码术。或者,处理器302可以使用分布式伪随机函数模块310使用消息m和两个独立随机值r1和r2作为输入来生成第一承诺h1(m,r1)和第二承诺h2(m,r2)。这些承诺可以被转换成椭圆曲线群中的点,每个点可以乘以相应的秘密被乘数(例如,秘密份额316的第一秘密份额和第二秘密份额)以产生乘积点。乘积点可以包括部分计算,所述部分计算可以被组合成单个部分计算(例如,通过计算乘积)并被传输到客户端计算机。给定相同的承诺输入和相同的秘密份额316,得到的部分计
science,第1592卷.springer,berlin,heidelberg。
[0236]
5.安全存储器
[0237]
安全存储器314可以包括计算机可读介质306的存储器区域或者独立的存储器元件。安全存储器314可以以这样的方式存储敏感的密码材料,使得它们难以被未授权的外人(例如,黑客)检取。作为示例,存储在安全存储器314中的数据可以以加密形式存储。安全存储器314可以存储从一个或多个秘密值(例如,第一秘密值和第二秘密值)导出的一个或多个秘密份额316。另外,安全存储器314可以存储从验证值导出的验证份额318,以及对应于所述验证值的验证密钥320。密码设备300可以使用秘密份额316来生成用于生成密码密钥的部分计算。同样,密码设备300可以使用验证份额318来导出用于生成验证签名的部分签名。密码设备300可以使用验证密钥320来验证从多个部分签名生成的验证签名。
[0238]
iv.生成和分发秘密份额和验证值
[0239]
在描述用于自适应抗攻击和摊销对称密码术的方法之前,描述可用于向密码设备网络中的密码设备分发秘密份额和验证份额的方法可能是有帮助的。
[0240]
出于说明的目的,下文参考图4和图5描述秘密份额和验证份额的生成和分发的非限制性示例。然而,应理解,任何适当方法均可用于生成秘密份额和验证份额并将其分发到密码设备。
[0241]
图4示出了包括可信外部服务器402、通信网络404和密码设备网络412的秘密和验证份额分发系统400。密码设备网络412可包括可选的代理设备406和密码设备408-410。值得注意的是,虽然仅示出两个密码设备408和410,但密码设备网络412可包括任何数目的密码设备。
[0242]
可信外部服务器402可包括能够生成和分发秘密份额、验证份额和验证密钥的服务器计算机。可信外部服务器402能够通过通信网络404与密码设备408-410或代理设备406通信。可信外部服务器402可以拥有处理器和计算机可读介质,并且能够根据任何适当的秘密共享方案(例如,使用shamir的秘密共享,如上所述)执行生成秘密值、秘密份额、验证值或验证份额所必需的任何操作。作为示例,可信外部服务器402可以生成对应于第一多项式p1(x)和第二多项式p2(x)的系数的随机数字。这些随机数字中的两个随机数字(例如,与多项式p1(x)和p2(x)的零阶系数相关联的随机数字)可以分别被解译为第一秘密值和第二秘密值。为了产生秘密份额,可信外部服务器402可以在x的不同值处评估多项式。例如,通过在对应于密码设备408-410的序列号或唯一标识符的x值处评估多项式。可以经由通信网络404向密码设备408-410分发秘密份额,所述秘密份额包括在其各自的x值处评估的多项式。
[0243]
通信网络404可包括诸如互联网或蜂窝通信网络的网络,设备、计算机和服务器可通过所述网络彼此通信。通信网络404可以是安全的或是不安全的。可信外部服务器402可经由通信网络404与密码设备网络412通信,例如,可信外部服务器402可经由通信网络404将秘密份额、验证份额和验证密钥传输到密码设备网络。
[0244]
密码设备网络412可包括密码设备408和410,以及代理设备406。代理设备406可充当网关,其调解密码设备408和410与密码设备网络412外部的计算机、设备或服务器(例如,可信外部服务器402)之间的通信。秘密份额或验证份额可由可信外部服务器402经由通信网络404传输到代理设备406。代理设备406可以将秘密份额分发给它们各自的密码设备408-410。
[0245]
密码设备408-410可以基本上类似于上文参考图1和图3描述的密码设备。所述密码设备可拥有处理器、通信接口和计算机可读介质。计算机可读介质可拥有或包括由密码设备408和410用于执行分布式对称密码术的数个软件模块。密码设备408和410可以另外包括安全存储器元件。密码设备408和410可将从可信外部服务器402接收到的秘密份额、验证份额和验证密钥存储在所述密码设备相应的安全存储器元件中。
[0246]
图5示出了详述一种示例性方法500的序列图,通过所述方法可以生成和分发秘密份额、验证值和验证密钥。应理解,可通过用于生成和分发秘密份额、验证份额和验证密钥的任何适当方法实践实施方案,并且因此图5的示例性方法旨在是非限制性的。尽管图4中的通信网络404未明确示出,但密码设备网络502与可信外部服务器504之间的通信可以穿过通信网络。同样,尽管图4中的代理设备406未示出,但是到密码设备网络502的通信可以由代表密码设备网络502的代理设备接收。
[0247]
步骤506和508是密码设备网络502与可信外部服务器504之间握手过程的两个步骤。一些通信协议,诸如传输控制协议(tcp),使用握手过程来建立参与的计算机之间的未来通信的规则或特性。作为示例,如果密码设备网络502与可信外部服务器504之间的通信被加密,则步骤506和508可涉及密码设备网络502与可信外部服务器504之间的加密密钥交换。
[0248]
例如,密码设备网络502(或代理设备)可拥有可用来加密和解密密码设备网络502与可信外部服务器504之间发送的消息的对称密码密钥。可信外部服务器504可拥有公私密钥对中的私钥。密码设备网络502可使用公私密钥对中的公钥来加密对称密码密钥,然后将对称密码密钥传输到可信外部服务器504。使用私钥,可信外部服务器504可解密对称密码密钥。此时,密码设备网络502和可信外部服务器504都拥有对称密码密钥。密码设备网络502和可信外部服务器504可使用对称密码密钥来加密和解密它们之间的任何未来通信。
[0249]
在步骤510,密码设备网络502可传输完成秘密份额和验证份额生成和分发过程所必需的信息。这可以包括诸如密码设备网络中的设备的数目、密码设备网络的设备的阈值数目、地址信息、每个设备请求的秘密份额的数目(例如,一个或两个)以及任何请求的采样值(诸如密码设备网络502中的密码设备的序列号或唯一标识符)的信息。地址信息可以包括与密码设备网络502中的每个密码设备相关联的数字地址,诸如ip地址或mac地址。所请求的样本值可以对应于用于对多项式pn(x)进行采样以便生成秘密份额或验证值的x的特定值。例如,样本值可以是5,并且与所述样本值相对应的秘密份额可以包括(5,p1(5))和(5,p2(5))。
[0250]
作为示例,在步骤510,密码设备网络502可传输一系列分组,每个分组含有所请求的样本值以及对应于所请求的样本值的每个密码设备的地址,诸如ip地址或mac地址。另外,所述分组可包括诸如tcp或udp端口的信息,在所述端口上与密码设备网络502中的密码设备通信。
[0251]
在步骤512,可信外部服务器504可以生成一个或多个秘密值(例如,秘密值或第一秘密值和第二秘密值)、验证值和验证密钥。可信外部服务器504生成秘密值的方法取决于所使用的秘密共享方法,以及在分布式对称密码术期间使用的分布式伪随机函数。同样,生成验证值和验证密钥所依据的方法取决于用以使用验证密钥验证验证签名的特定方法。在一些实施方案中,一个或多个秘密值可以包括随机数字,并且可信外部服务器504可以使用
密码上安全的随机数字生成器来生成秘密值。在一些实施方案中,验证值和验证密钥可包括非对称密钥对,并且验证值和验证密钥可使用根据任何适当的密码系统(例如,rsa)生成非对称密钥对的任何适当方式来生成。
[0252]
在步骤514,可信外部服务器504可以生成对应于一个或多个秘密值的一个或多个多项式(例如,对应于第一秘密值的多项式或第一多项式以及对应于第二秘密值的第二多项式)以及对应于验证值的多项式。可信外部服务器可以将秘密值编码到它们各自多项式的系数中的一个系数中,并将验证值编码到验证值多项式的系数中的一个系数中。在一些实施方案中,秘密值和验证值可以被编码到它们各自多项式的零阶系数中。可信外部服务器504可以使用任何适当的技术来生成多项式的其他系数(例如,一阶到n阶系数)。例如,其他系数可包括随机或伪随机数字。
[0253]
多项式的特性(例如,可如何包括系数)可完全或部分基于可信外部服务器504在步骤510中接收到的信息(例如,秘密份额和验证份额的数目)。如上所述,需要k 1个唯一点来唯一地定义k次多项式。因此,第一多项式和第二多项式中的系数的数目可以等于在步骤510请求的秘密份额的阈值数目。同样,验证值多项式中的系数的数目可以等于在步骤510请求的验证份额的阈值数目。
[0254]
在步骤516,可信外部服务器504可基于对应的多项式生成秘密份额和验证份额。可信外部服务器504可以在x的唯一值处对一个或多个秘密值多项式和验证份额多项式进行采样,以便产生对应的p(x)值。这些成对(x,p(x))值可包括秘密份额。x值可以包括在步骤510提供给可信外部服务器504的优选采样值(例如,与密码设备网络502中的密码设备相关联的序列号或设备标识符)。
[0255]
在步骤518,可信外部服务器504可以发布对应于秘密份额的校验值。客户端计算机可以使用这些校验值来验证从密码设备网络502中的密码设备接收到的部分计算。客户端计算机可以使用这些校验值来执行诚实验证者零知识(hvzk)证明,以便验证部分计算,而无需了解关于秘密份额的任何信息。校验值可以包括使用对应于每个密码设备ui、vi的秘密份额的生成元g的模幂,其中g是用于实施分布式伪随机函数的椭圆曲线群g的生成元,ui是对应于第i密码设备的第一秘密份额,并且vi是对应于第i密码设备的第二秘密份额。也就是说,对应于第i密码设备的校验值可以包括对g
ui
,g
vi
。可信外部服务器可以为密码设备网络502中的每个密码设备发布这些校验值。发布这些校验值可以包括使这些校验值容易被客户端计算机获得,例如,通过将校验值传输到客户端计算机,或者通过使校验值在公共网络服务器上可获得。
[0256]
在步骤520,可信外部服务器504可以使用在步骤510中提供的路由或地址信息将秘密份额、验证份额和验证密钥传输到密码设备网络502中的密码设备。以此方式,密码设备网络502中的每个密码设备可接收其相应秘密份额和验证份额,以及所有密码设备共同的验证密钥。
[0257]
图5的示例性方法是秘密份额生成和分发过程的一个非限制性示例。存在对于本领域的技术人员来说可能显而易见的许多变型。作为另一示例,密码设备可经由诸如不经意传输的密码方法接收其相应秘密份额。作为另一示例,密码设备网络502可使用诸如安全多方计算的方法在完全没有可信外部服务器504辅助的情况下生成秘密份额。
[0258]
v.分布式对称密码术
[0259]
下文参考图6至图7描述自适应抗攻击的分布式对称密码方法。图6a至图6b示出了用于执行自适应抗攻击分布式对称加密的示例性方法的序列图,而图7a至图7b示出了用于执行自适应抗攻击分布式对称解密的示例性方法的序列图。同样,下文参考图8至图9描述摊销分布式对称加密方法。图8a至图8b示出了用于执行摊销分布式对称加密的示例性方法的序列图,而图9a至图9b示出了用于执行摊销分布式对称解密的示例性方法的序列图。
[0260]
如上所述,实施方案通过生成对应于多个秘密份额(从多个各自的秘密值生成)的多个部分计算来实现自适应抗攻击。在一些实施方案中,每个密码设备使用两个秘密值和两个秘密份额,然而,可以用任何多个秘密值和秘密份额来实施实施方案。由密码设备生成的部分计算(例如,第一部分计算和第二部分计算)可以由那些密码设备组合(例如,通过计算部分计算的乘积),然后将得到的单个部分计算传输到客户端计算机。即使客户端计算机(或恶意窃听者)知道用于生成相应部分计算和所得组合的承诺,客户端计算机或恶意窃听者也不能从这个已知信息确定秘密份额,因为存在可以产生所得组合的潜在秘密份额的指数地大量的组合。以这种方式,秘密份额免受攻击者,甚至使用复杂的自适应攻击的攻击者的攻击。
[0261]
a.自适应抗攻击加密
[0262]
图6a示出了根据一些实施方案的自适应抗攻击分布式对称加密的示例性方法的第一部分。图6a示出了客户端计算机602,以及三个密码设备604-608,以及与所述示例性方法相关联的多个步骤610-616。尽管没有示出代理设备和通信网络,但是在一些实施方案中,客户端计算机602与密码设备604-608之间的通信可以经由代理设备和/或通信网络来调解或传输。
[0263]
在步骤610,客户端计算机602可以选择第一散列函数h1和第二散列函数h2。客户端计算机602稍后可以使用这些散列函数来生成第一承诺和第二承诺。客户端计算机602可以从多个散列函数中选择这些散列函数。客户端计算机602可以在存储器中(例如,在承诺模块中)存储散列函数的列表、数据库或其他储存库。客户端计算机602可以使用任何适当的方法(例如,基于与客户端计算机相关联的客户端的偏好、信任分数等)来选择这些散列函数。在一些实施方案中,可以随机选择这些散列函数。随机选择散列函数可能是有利的,因为它使得攻击者很难或不可能从它们的所得承诺中确定散列函数。
[0264]
在步骤612,客户端计算机602可以使用第一散列函数h1和第二散列函数h2生成第一承诺h1和第二承诺h2。第一承诺和第二承诺可以通过分别提供消息m作为第一散列函数和第二散列函数的输入来生成。在一些实施方案中,可以另外使用一个或多个随机值r来生成承诺。除了随机值之外,客户端计算机602还可以散列消息,而不是单独散列消息(例如,通过级联消息和随机值)。随机值可以模糊或隐藏消息,保护其免受某些形式的密码攻击(例如,重放攻击)。
[0265]
在步骤614,客户端计算机602可以选择多个密码设备(例如,预定阈值数目的参与的密码设备)。这个阈值数目的密码设备可以包括执行分布式对称加密所需的最小数目的参与的密码设备,或者可以是被提供有秘密份额的所有密码设备。在图6a中,客户端计算机602选择密码设备604和606。客户端计算机602可以通过任何适当的手段或选择标准来选择参与的密码设备。例如,客户端计算机602可以随机地或者根据信任或安全分数来选择参与的密码设备。信任或安全分数可以涉及特定密码设备已经被黑客或所述密码设备的硬件的
相对安全性破坏的可能性(例如,信任分数可以取决于密码设备是否拥有安全存储器或可信平台模块)。客户端计算机602可以使用代理设备(未示出)来选择参与的密码设备。客户端计算机602可以向代理设备传输请求,请求阈值数目的参与的密码设备。代理设备然后可以代表客户端计算机602选择参与的密码设备。
[0266]
在步骤616,客户端计算机602可以向多个参与的密码设备(即,密码设备604和密码设备606)传输包括第一承诺h1和第二承诺h2的加密请求。客户端计算机602可以经由代理设备传输请求,使得客户端计算机向代理设备传输第一承诺和第二承诺,并且代理设备向多个参与的密码设备传输第一承诺和第二承诺。
[0267]
图6b示出了根据一些实施方案的分布式对称加密的示例性方法的第二部分。在步骤618,参与的密码设备(即,密码设备604和606)可以各自生成第一部分计算y
n,1
和第二部分计算y
n,2
。参与的密码设备然后可以组合它们各自的第一和第二部分计算以产生部分计算yn。
[0268]
每个参与的密码设备可以使用各自的第一秘密份额un和第一承诺h1来生成它们的第一部分计算y
n,1
。参与的密码设备可以使用dprf.eval函数来生成这些第一部分计算,所述函数使用第一承诺和第一秘密份额作为参数来评估分布式伪随机函数。在一些实施方案中,分布式伪随机函数可以包括实施椭圆曲线密码术的椭圆曲线密码函数。也就是说,密码设备可以使用dprf.eval函数使用它们各自的第一秘密份额作为密钥来加密第一承诺。这样,每个密码设备604和606可以产生第一部分计算。
[0269]
可以以类似的方式使用相应的第二秘密份额vn和第二承诺h2来生成第二部分计算y
n,2
。作为示例,密码设备604和606可以使用dprf.eval函数(诸如椭圆曲线密码术函数)使用第二秘密份额作为密钥来加密第二承诺,从而产生第二部分计算。
[0270]
如上所述,在一些实施方案中,第一部分计算y
n,1
和第二部分计算y
n,2
可以通过评估诸如椭圆曲线密码术函数的分布式伪随机函数来生成。这可以包括密码设备604和606使用第一秘密份额s
n,1
和第二秘密份额s
n,2
加密第一承诺h1和第二承诺h2,以分别产生第一部分计算和第二部分计算。在椭圆曲线密码系统中,这可以包括将第一承诺和第二承诺转换成椭圆曲线群中的点,然后使用第一秘密份额和第二秘密份额对那些点取幂,即,和
[0271]
密码设备604和606可各自组合其各自的第一部分计算y
n,1
和第二部分计算y
n,2
以产生部分计算yn。客户端计算机602可以使用这些部分计算在以后生成密钥。密码设备604和606可以使用dprf.combine(y
n,1
,y
n,2
)函数将相应的第一部分计算和第二部分计算组合作为输入,以产生输出部分计算。在一些实施方案中,dprf.combine函数可以包括计算两个部分计算的乘积的乘积函数。例如,密码设备604和606可以使用以下公式产生它们各自的部分计算yn:
[0272]
可选地,在步骤620,密码设备604和606可以各自使用第一承诺h1和/或第二承诺h2以及验证份额sk’n
来生成相应的部分签名zn。密码设备可以使用阈值认证部分签名函数(ta.partsign)来生成每个部分签名。所述ta.partsign可以将第一承诺和/或第二承诺以及验证份额作为输入,并产生部分签名作为输出。在一些实施方案中,ta.partsign函数可以包括分布式伪随机函数。作为示例,ta.partsign函数可以包括椭圆曲线密码术函数。这
个函数可以使用验证份额来加密第一承诺和/或第二承诺,以产生部分签名。
[0273]
在步骤622,密码设备604和606可以将它们各自的部分计算yn以及可选地它们各自的部分签名zn传输到客户端计算机602。在一些实施方案中,客户端计算机602可以从代理设备接收此多个部分计算和多个部分签名,其中所述代理设备从参与的密码设备604和606接收多个部分计算和多个部分签名。
[0274]
在步骤624,客户端计算机602可以检取多个校验值g
un
和g
vn
,并使用多个校验值来验证部分计算yn。如上参考图5所述,产生秘密值和秘密份额的可信外部服务器可以发布校验值。客户端计算机可以例如经由网络请求从可信外部服务器检取这些发布的校验值。客户端计算机602可以执行诚实验证者零知识(hvzk)证明,以便验证这些部分计算。客户端计算机602可以使用校验函数来执行hvzk证明。校验函数可以根据任何适当的协议(例如,schnorr协议、fiat-shamir等)来执行hvzk证明。客户端计算机602可以为每个校验值并行调用hvzk证明过程(例如,为g
un
调用一个hvzk证明过程,并且为g
vn
调用另一个hvzk证明过程)。关于hvzk证明和执行hvzk证明的技术的更多细节可见于[4]faust等人“on the non-malleability of the fiat-shamir transform”,出自cryptology eprint archive,report 2012/704,2012,以及[5]agrawal,mohassel,mukherjee和rindal“dise:distributed symmetric-key encryption”,出自cryptology eprint archive,report 2018/727,2018。基于本公开和这些参考文献中的描述,技术人员将理解如何在本内容中实施hvzk证明。
[0275]
在步骤626,客户端计算机602可以组合多个部分计算以产生密码密钥y。客户端计算机602可以使用这个密码密钥来加密消息m。客户端计算机602可以使用dprf.combine(y1,y2)函数来组合部分计算,所述函数可以将多个部分计算作为输入,并产生对称密码密钥或可用于生成对称密码密钥的密钥生成种子。由客户端计算机602执行的dprf.combine函数可以类似于由密码设备604和606执行的dprf.combine函数,因为它用于将多个部分计算组合成单个输出。在一些实施方案中,两个函数通过计算部分计算的乘积来组合部分计算。然而,由客户端计算机602执行的dprf.combine函数可以首先通过用每个部分计算yn的对应的拉格朗日系数λn对其取幂(即,)来生成中间计算,然后计算那些中间计算的乘积。在一些实施方案中,可以使用公式计算的乘积。在一些实施方案中,可以使用公式来计算dprf.combine函数的输出y。
[0276]
在一些实施方案中,客户端计算机602可以使用拉格朗日插值来生成中间计算。这些中间计算然后可以被组合以产生密码密钥或密钥生成种子。客户端计算机602可使用如上文第ii节中所述的相应拉格朗日系数λn对多个部分计算中的每个部分计算yn取幂(即,),以便产生多个中间计算。这些拉格朗日系数λn可以对应于产生多个部分计算的密码设备604和606。拉格朗日系数可能已经由可信外部服务器在秘密份额提供过程期间生成(以上参考图5描述)。在分布式对称加密过程之前,客户端计算机602可能已经从可信外部服务器接收了这些拉格朗日系数。
[0277]
如上所述,可以通过计算多个中间计算的乘积来组合多个中间计算。此多个中间计算可以等同于分别使用第一秘密值s1和第二秘密值s2加密的第一承诺h1和第二承诺h2的乘积。在一些实施方案中,中间计算的组合可以用作对称密码密钥。在其他实施方案中,中
间计算的组合可以用作密钥生成种子。密钥生成种子可以被输入到密钥生成函数以产生密码密钥y。
[0278]
在步骤628,客户端计算机602可以基于多个部分签名zn生成验证签名z。客户端计算机可以使用使用部分签名作为输入的ta.combinesig函数。在一些实施方案中,组合部分签名以生成验证签名可以类似于组合部分计算以生成密码密钥。在一些实施方案中,生成验证签名可以涉及计算部分签名的乘积。
[0279]
在步骤630,客户端计算机602可以通过使用密码密钥y加密消息m来生成密文e。客户端计算机可以使用任何适当的对称密码系统(诸如aes)来执行这个加密。可选地,客户端计算机可以通过使用密钥加密消息m和随机值r来生成密文。这在使用随机值生成第一承诺h1和第二承诺h2中的一者或两者的情况下可能是有用的。
[0280]
在步骤632,客户端计算机602可以生成包括密文e、第一承诺h1和第二承诺h2的有效载荷。可选地,有效载荷可以另外包括验证签名z、随机值r和散列指示符。有效载荷可以包括密文和解密密文所需的所有数据(例如,第一承诺和第二承诺)。它还可以包括验证分布式密码系统的合法使用所需的数据(验证签名)和验证或以其他方式验证承诺所需的数据(随机值和散列指示符)。散列指示符可以包括指示哪些散列函数被用来生成第一承诺和第二承诺的标识符。例如,散列指示符可以包括字符串“sha-256,blake2”,指示第一承诺是使用sha-256散列算法生成的,而第二承诺是使用blake2散列算法生成的。
[0281]
客户端计算机602可以存储有效载荷(本地或存储在存储服务器中)并在以后对其进行解密。例如,客户端计算机602可以包括医院计算机系统,并且消息可以包括敏感医疗记录。客户端计算机602可以加密医疗记录并生成有效载荷,以便将敏感医疗记录安全地存储在医疗数据库中。稍后(例如,在患者就诊期间),客户端计算机602可以检取有效载荷,以便解密密文并检取医疗记录。
[0282]
或者,客户端计算机602可以将有效载荷传输到另一个客户端计算机,所述另一个客户端计算机可以使用有效载荷中的信息来解密密文并检取消息。例如,当消息包括敏感的支付信息时,这可能是有用的。客户端计算机602可以包括与商家相关联的支付终端。当客户使用客户端计算机602进行支付时,客户端计算机可以加密客户的支付信息并生成有效载荷,然后将有效载荷发送到对应于所述客户的银行计算机(例如,代表所述客户维护账户的银行)。银行计算机可以使用有效载荷中的信息来解密客户的支付信息,并在商家与客户之间进行支付。
[0283]
b.自适应抗攻击解密
[0284]
图7a示出了根据一些实施方案的自适应抗攻击分布式对称解密的示例性方法的第一部分。图7a示出了客户端计算机702以及三个密码设备704、706和708。客户端计算机702可以是来自图6a和图6b的相同的客户端计算机602或者不同的客户端计算机。同样,密码设备704-708可以与来自图6a和图6b的密码设备604-608相同,或者是不同的密码设备。尽管没有示出代理设备和通信网络,但是在一些实施方案中,客户端计算机702与密码设备704-708之间的通信可以经由代理设备和/或通信网络来调解或传输。
[0285]
在步骤710,客户端计算机702可以接收包括密文e、第一承诺h1和第二承诺h2的有效载荷。可能已经使用消息m和第一散列函数h1生成了第一承诺h1(如参考图6a所述)。同样,可能已经使用所述消息和第二散列函数h2生成了第二承诺h2。有效载荷可以另外包括验证
签名z、随机值r和散列指示符。客户端计算机702可以从另一个客户端计算机(例如,来自图6a和图6b的客户端计算机602)接收这个有效载荷。或者,客户端计算机702可能最初已经生成了有效载荷,并且可以通过从存储器中检取有效载荷来接收所述有效载荷。
[0286]
在步骤712,客户端计算机702可以选择预定阈值数目的参与的密码设备。阈值数目的密码设备可以包括执行分布式对称解密所需的最小数目的参与的密码设备。在图7a中,客户端计算机702选择密码设备704和708。值得注意的是,用于产生密文的相同密码设备(例如,密码设备604和606)不需要参与解密密文。
[0287]
客户端计算机702可以通过任何适当的手段或选择标准来选择参与的密码设备。例如,客户端计算机702可以随机地或者根据信任分数或安全分数来选择参与的密码设备。例如,信任或安全分数可以涉及特定密码设备已经被黑客或者所述密码设备的硬件的相对安全性破坏的可能性(例如,信任分数可以取决于密码设备是否拥有安全存储器或可信平台模块)。客户端计算机702可以使用代理设备(未示出)来选择参与的密码设备。客户端计算机702可以向代理设备传输请求,请求阈值数目的参与的密码设备。代理设备然后可以代表客户端计算机702选择参与的密码设备。
[0288]
在步骤714,客户端计算机可以向多个密码设备(即,参与的密码设备704和708)中的每个密码设备传输包括第一承诺h1和第二承诺h2的解密请求。解密请求可以另外包括验证签名z。客户端计算机702可以经由代理设备传输请求,使得客户端计算机向代理设备传输第一承诺和第二承诺,并且代理设备向多个参与的密码设备传输第一承诺和第二承诺。
[0289]
图7b示出了根据一些实施方案的分布式对称解密的示例性方法的第二部分。在步骤716,可选地,参与的密码设备(即,密码设备704和密码设备708)可以使用验证密钥vk和第一承诺h1和/或第二承诺h2来验证验证签名z。参与的密码设备可以使用versig函数来验证验证签名,所述函数将验证签名、验证密钥以及第一承诺和/或第二承诺作为输入。如果验证签名是合法的,则versig函数可以产生输出1或“true”,而如果验证签名是非法的,则所述函数可以产生输出0或“false”。
[0290]
在一些实施方案中,签名验证过程可以包括使用验证密钥解密验证签名,以产生附加承诺ha。参与的密码设备然后可以将附加承诺ha与第一承诺h1、第二承诺h2和/或它们的组合(例如,第一承诺h1和第二承诺h2的乘积)进行比较。签名验证过程可以取决于用于生成验证签名的过程。例如,如果验证签名仅基于第一承诺h1生成,则签名验证过程可以包括将第一承诺h1与附加承诺ha进行比较。
[0291]
在一些实施方案中,验证签名可以包括使用验证值加密的承诺(例如,第一承诺或第二承诺)。验证密钥可以对应于验证值。例如,验证密钥可以包括对应于私钥验证值的公钥。参与的密码设备可以通过使用验证密钥解密验证签名,然后将输出与第一承诺或第二承诺进行比较,来验证验证签名。如果输出与第一承诺或第二承诺匹配,则验证签名是合法的。
[0292]
在步骤718,参与的密码设备可以各自生成第一部分计算y
n,1
和第二部分计算y
n,2
。参与的密码设备然后可以组合它们各自的第一和第二部分计算以产生部分计算yn。
[0293]
如参考图6b所述,每个参与的密码设备可以使用各自的第一秘密份额un和第一承诺h1来生成它们的第一部分计算y
n,1
。参与的密码设备可以使用dprf.eval函数来生成这些第一部分计算,所述函数使用第一承诺和第一秘密份额作为参数来评估分布式伪随机函
数。在一些实施方案中,分布式伪随机函数可以包括实施椭圆曲线密码术的椭圆曲线密码函数。也就是说,密码设备可以使用dprf.eval函数使用它们各自的第一秘密份额作为密钥来加密第一承诺。这样,每个密码设备604和606可以产生第一部分计算。
[0294]
可以以类似的方式使用相应的第二秘密份额vn和第二承诺h2来生成第二部分计算y
n,2
。作为示例,密码设备704和708可以使用dprf.eval函数(诸如椭圆曲线密码术函数)使用第二秘密份额作为密钥来加密第二承诺,从而产生第二部分计算。
[0295]
如上所述,在一些实施方案中,第一部分计算y
n,1
和第二部分计算y
n,2
可以通过评估诸如椭圆曲线密码术函数的分布式伪随机函数来生成。这可以包括密码设备704和708使用第一秘密份额s
n,1
和第二秘密份额s
n,2
加密第一承诺h1和第二承诺h2,以分别产生第一部分计算和第二部分计算。在椭圆曲线密码系统中,这可以包括将第一承诺和第二承诺转换成椭圆曲线群中的点,然后使用第一秘密份额和第二秘密份额对那些点取幂,即,和。
[0296]
密码设备704和708可各自组合其各自的第一部分计算y
n,1
和第二部分计算y
n,2
以产生部分计算yn。客户端计算机702可以使用这些部分计算在以后生成密钥。密码设备704和708可以使用dprf.combine(y
n,1
,y
n,2
)函数将相应的第一部分计算和第二部分计算组合作为输入,以产生输出部分计算。在一些实施方案中,dprf.combine函数可以包括计算两个部分计算的乘积的乘积函数。例如,密码设备704和708可以使用以下公式产生它们各自的部分计算yn:。
[0297]
在步骤720,密码设备704和708可以可选地在日志文件中记录客户端计算机702想要解密消息m。密码设备704和708可以基于验证签名z的存在来确定客户端计算机702想要解密消息,因为执行加密可能不需要验证签名。在日志文件中记录客户端计算机的行为有助于防止滥用分布式密码系统,并且可能对安全审计有用。
[0298]
在步骤722,密码设备704和708可以将它们各自的部分计算yn传输到客户端计算机702。在一些实施方案中,客户端计算机702可以从代理设备接收此多个部分计算,其中代理设备从参与的密码设备704和708接收此多个部分计算。
[0299]
在一些实施方案中,客户端计算机702在步骤722接收到的部分计算可以被称为“附加部分计算”,例如,因为它们是除了在分布式加密过程中使用的部分计算(例如,在图6b中的步骤622由客户端计算机602接收到的部分计算)之外接收的。当客户端计算机702正在使用密码设备网络来解密它先前加密的数据(例如,存储在硬盘驱动器上的敏感文件)时,可能是这种情况。在这种情况下,术语附加部分计算区分加密和解密中使用的部分计算,然而,应当理解,一个或多个附加部分计算可以与加密中使用的一个或多个部分计算相同(例如,如果相同的密码设备参与加密和解密操作)。
[0300]
在步骤724,客户端计算机702可以检取多个校验值g
un
和g
vn
,并使用多个校验值来验证部分计算yn。如上参考图5所述,产生秘密值和秘密份额的可信外部服务器可以发布校验值。客户端计算机可以例如经由网络请求从可信外部服务器检取这些发布的校验值。客户端计算机702可以执行诚实验证者零知识(hvzk)证明,以便验证这些部分计算。客户端计算机702可以使用校验函数来执行hvzk证明。客户端计算机702可以为每个校验值并行调用hvzk证明过程(例如,为g
un
调用一个hvzk证明过程,并且为g
vn
调用另一个hvzk证明过程)。校验函数可以根据上文参考图6描述的任何适当的协议(例如,schnorr协议、fiat-shamir等)来执行hvzk证明。
[0301]
在步骤726,客户端计算机702可以组合多个部分计算以产生密码密钥y。客户端计算机702可以使用所述密码密钥来解密密文e,以便产生消息m。客户端计算机702可以使用dprf.combine(y1,y3)函数来组合部分计算,所述函数可以将多个部分计算作为输入,并产生对称密码密钥或可用于生成对称密码密钥的密钥生成种子。由客户端计算机702执行的dprf.combine函数可以类似于由密码设备704和708执行的dprf.combine函数,因为它用于将多个部分计算组合成单个输出。在一些实施方案中,两个函数通过计算部分计算的乘积来组合部分计算。然而,由客户端计算机702执行的dprf.combine函数可以首先通过用每个部分计算yn的对应的拉格朗日系数λn对其取幂(即,)来生成中间计算,然后计算那些中间计算的乘积。在一些实施方案中,可以使用公式来计算dprf.combine函数的输出y。
[0302]
这些中间计算然后可以被组合以产生密码密钥或密钥生成种子。客户端计算机702可使用如上文第i节中所述的相应拉格朗日系数λn对多个部分计算中的每个部分计算yn取幂(即,),以便产生多个中间计算。这些拉格朗日系数λn可以对应于产生多个部分计算的密码设备704和708。拉格朗日系数可能已经由可信外部服务器在秘密份额提供过程期间生成(以上参考图5描述)。在分布式对称加密过程之前,客户端计算机702可能已经从可信外部服务器接收了这些拉格朗日系数。
[0303]
如上所述,可以通过计算多个中间计算的乘积来组合多个中间计算。此多个中间计算可以等同于分别使用第一秘密值s1和第二秘密值s2加密的第一承诺h1和第二承诺h2的乘积。在一些实施方案中,中间计算的组合可以用作对称密码密钥。在其他实施方案中,中间计算的组合可以用作密钥生成种子。密钥生成种子可以被输入到密钥生成函数以产生密码密钥y。
[0304]
在步骤728,客户端计算机702可以使用密码密钥y解密密文e以产生消息m。客户端计算机可以使用任何适当的对称密码系统(诸如aes)来执行这个加密。可选地,客户端计算机可以通过解密密文来产生消息和随机值r。所述随机值可以在稍后的步骤中用于验证第一承诺h1和第二承诺h2。
[0305]
在可选步骤730,客户端计算机702可以使用散列指示符来确定用于生成第一承诺h1的第一散列函数h1和用于生成第二承诺h2的第二散列函数h2。散列指示符可以唯一地标识第一散列函数和第二散列函数。例如,散列指示符可以包括诸如“blake2,sha-256”的字符串,指示第一散列函数是blake2散列函数,而第二散列函数是sha-256散列函数。
[0306]
在可选步骤732,客户端计算机702可以验证第一承诺h1和第二承诺h2与消息m一致。客户端计算机702可以通过生成第三承诺h3和第四承诺h4来执行这个验证。可以使用消息和第一散列函数(在可选步骤730中识别)以及可选的随机值r来生成第三承诺。可以使用消息和第二散列函数(在可选步骤730中识别)以及可选的随机值来生成第四承诺。因为第一承诺和第三承诺是使用相同的散列函数、相同的消息和可选的相同随机值生成的,所以它们应该相等。同样,因为第二承诺和第四承诺是使用相同的散列函数、相同的消息和可选的相同随机值生成的,所以它们应该相等。因此,客户端计算机702可以通过将第一承诺与第三承诺进行比较并且将第二承诺与第四承诺进行比较来验证消息。如果承诺不匹配,则可能表明消息已被篡改。
[0307]
c.摊销加密
[0308]
图8a示出了根据一些实施方案的摊销分布式对称加密的示例性方法的第一部分。
这个第一部分可以涉及建立后续加密步骤所需的值的初步步骤,并且包括对密码设备的初始请求。图8b示出了根据一些实施方案的摊销分布式对称加密的示例性方法的第二部分。第二部分可以涉及分布式计算和使用部分计算来生成批量密钥和消息密钥,用于加密有效载荷。
[0309]
图8a示出了加密设备802(例如,客户端计算机)以及三个密码设备804-808。图8a另外示出了与示例性方法相关联的步骤810-816。尽管没有示出代理设备和通信网络,但是加密设备802与密码设备804-808之间的通信可以经由代理设备和/或通信网络来调解或传输。
[0310]
在步骤810,加密设备802可以可选地生成输入值(有时表示为τ)。这个输入值可以包括对应于加密设备802的标识符的散列。加密设备802可以使用第一散列函数h0和标识符id来生成这个输入值。散列函数h0可以将标识符映射到第一乘法循环群g0。此散列步骤可以替代地由密码设备执行。这样,步骤810可以是可选的,并且输入值可以替代地包括对应于加密设备802的标识符。
[0311]
在步骤812,加密设备802可以选择多个密码设备(例如,预定阈值数目的参与的密码设备)。这个阈值数目的密码设备可以包括执行分布式对称加密所需的最小数目的参与的密码设备,或者可以包括被提供有秘密份额的所有密码设备。在图8a中,加密设备802选择密码设备804和806。加密设备802可以通过任何适当的手段或选择标准来选择参与的密码设备。例如,加密设备802可以随机地或者根据“信任分数”或“安全分数”来选择参与的密码设备。例如,信任分数或安全分数可以涉及特定密码设备已经被黑客或者所述密码设备的硬件的相对安全性破坏的可能性(例如,信任分数可以取决于密码设备是否拥有安全存储器或可信平台模块)。加密设备802可以使用代理设备(未示出)来选择参与的密码设备,例如,通过向代理设备传输请求阈值数目的参与的密码设备的请求。代理设备然后可以代表加密设备802选择参与的密码设备。
[0312]
在步骤814,加密设备802可以向多个参与的密码设备(即,密码设备804和806)中的每个密码设备传输包括输入值的加密请求。如上所述,输入值可以包括使用第一散列函数h0散列的对应于加密设备802的标识符的散列,或者对应于加密设备802的标识符。加密设备802可以经由代理设备传输请求,使得加密设备802将输入值传输到代理设备,并且代理设备将输入值传输到多个参与的密码设备。
[0313]
在步骤816,参与的密码设备可选地使用输入值和第一散列函数h0生成标识符的散列。如果加密设备802没有执行步骤810,并且如果输入值包括对应于加密设备802的标识符而不是所述标识符的散列,则可以执行步骤816。在生成标识符的散列之前,参与的密码设备可以验证或评估输入值是否属于预定的乘法循环群,例如g0。如果输入值确实属于预定的乘法循环群,则这可以指示输入值包括标识符的散列。如果输入值不属于预定的乘法循环群,则这可以指示输入值仅包括标识符。如果必要的话,密码设备然后可以继续生成标识符的散列。
[0314]
图8b示出了根据一些实施方案的摊销分布式对称加密的示例性方法的第二部分。
[0315]
在步骤818,参与的密码设备(即,密码设备804和806)可以各自生成部分计算hi。每个参与的密码设备可以使用它们各自的秘密份额ski和标识符h0(id)的散列来生成它们各自的部分计算hi。参与的密码设备可以使用dprf.eval函数来生成这些部分计算,所述函
数使用秘密份额和标识符的散列作为参数来评估分布式伪随机函数。在一些实施方案中,分布式伪随机函数可以包括实施椭圆曲线密码术的椭圆曲线密码函数。也就是说,密码设备可以使用dprf.eval函数使用它们各自的秘密份额作为密码密钥来加密标识符的散列。这样,每个密码设备804和806可以产生部分计算。
[0316]
在步骤820,密码设备804和806可以将它们各自的部分计算hi传输到加密设备802。在一些实施方案中,加密设备802可以从代理设备接收多个部分计算,其中代理设备从参与的密码设备804和806接收多个部分计算。
[0317]
在步骤822,加密设备802可以基于多个部分计算生成批量密钥bk。加密设备802可以通过组合多个部分计算来生成批量密钥,例如使用dprf.combine(h1,h2)函数,所述函数可以将多个部分计算作为输入并产生批量密钥,所述批量密钥可以包括对称密码密钥或可以用于生成对称密码密钥的密钥生成种子。在一些实施方案中,dprf.combine函数可以通过计算部分计算的乘积来组合部分计算。或者,dprf.combine函数可以首先通过用每个部分计算hi的对应的拉格朗日系数λi对其取幂(即,)来生成中间计算,然后计算那些中间计算的乘积。在一些实施方案中,可以使用公式来计算批量密钥。
[0318]
如上所述,在一些实施方案中,加密设备802可以使用拉格朗日插值来生成中间计算,如第ii节中所述。拉格朗日系数可以对应于用于产生多个部分计算的密码设备804和806。拉格朗日系数可能已经由可信外部服务器在秘密份额提供过程期间生成(以上参考图5描述)。在分布式对称加密过程之前,加密设备802可能已经从可信外部服务器接收了这些拉格朗日系数。
[0319]
步骤824-832是针对加密设备802想要加密的一组消息中的每个消息mi执行的一系列步骤。在步骤824,加密设备802可以使用任何适当的装置生成随机值ri,包括例如密码上安全的随机数字生成器。然后,加密设备802可以使用消息mi和随机值ri来生成承诺αi,即,αi=com(mi||ri)。这个承诺αi随后可以用于生成消息mi的消息密钥mki。
[0320]
在步骤826,加密设备802可以首先使用承诺αi和第二散列函数h1生成承诺的散列h1(αi)。第二散列函数可以将承诺映射到乘法循环群g1。然后,加密设备802可以通过在批量密钥bk与承诺的散列h1(αi)之间执行双线性配对e来导出对应于消息mi的消息密钥mki,即,mki=e(bk,h1(αi))。如上文第ii节所述,双线性配对的使用允许分布式对称密码术系统在加密和解密操作期间生成一致的消息密钥。
[0321]
在步骤828,加密设备802可以通过使用消息密钥mki加密消息mi和随机值ri来生成密文ci。在一些实施方案中,加密设备802可以使用伪随机生成器prg()和异或函数

来生成密文ci。加密设备802可以使用伪随机生成器prg()和消息密钥mki来生成第一值,即,prg(mki)。加密设备802可以生成包括消息mi和随机值ri的级联的第二值,即,(mi||ri)。加密设备802然后可以通过计算第一值和第二值的异或来生成密文ci,即,ci=prg(mki)

(mi||ri)。
[0322]
在步骤830,加密设备802可以生成包括密文ci、对应于加密设备“id”的标识符以及承诺αi的有效载荷pi。有效载荷pi然后可以包括包括这三个值的数据分组或元组,即,pi=(id,αi,ci)。当针对所述一组消息中的每个消息mi执行步骤824-830时,加密设备802可以由此生成所述一组消息的一组有效载荷。这些有效载荷可以包括可以在摊销分布式对称解
密操作期间用来解密其对应密文的信息,如下文参考图9a和图9b所述。
[0323]
在步骤832,加密设备802可以可选地将所述一组有效载荷传输到存储设备,诸如存储服务器834。存储服务器834可以包括云数据库或其他适当的数据存储服务器。将有效载荷存储在存储服务器834中允许加密设备802或另一设备804稍后检取和解密有效载荷,而不必将有效载荷存储在本地。这可能是有利的,因为它可以减少加密设备802对于某些应用的合规负担,诸如当密文对应于支付信息时的pci合规负担。
[0324]
然而,在一些实施方案中,如果对加密设备802的所有者或操作者来说是优选的,则加密设备802可以在本地存储有效载荷。作为另一个替代方案,加密设备802可以将有效载荷传输到解密设备(例如,另一个客户端计算机)。解密设备可以使用有效载荷中的信息来解密密文并检取消息。当消息包括敏感的支付信息时,这可能是有用的。作为示例,加密设备可以包括与商家相关联的支付终端。当客户使用加密设备802进行支付时,加密设备802可以加密客户的支付信息并生成有效载荷,然后将有效载荷发送到对应于那些客户的银行计算机(例如,代表那些客户维护账户的银行)。银行计算机可以使用有效载荷中的信息来解密客户的支付信息,并在商家与客户之间进行支付。
[0325]
d.摊销解密
[0326]
图9a示出了根据一些实施方案的摊销分布式对称解密的示例性方法的第一部分。这个第一部分可以涉及建立后面的解密步骤所需的值的初步步骤,并且包括向密码设备发送输入值。图9b示出了根据一些实施方案的摊销分布式对称解密的示例性方法的第二部分。第二部分可以涉及分布式计算和使用部分计算来生成用于解密有效载荷的消息密钥。
[0327]
图9a示出了解密设备902(例如,客户端计算机)以及三个密码设备904-908和存储服务器910。图9a另外示出了与示例性方法相关联的步骤912-920。尽管没有示出代理设备和通信网络,但是解密设备902与密码设备904-908之间的通信可以经由代理设备和/或通信网络来调解或传输。
[0328]
在步骤912,解密设备902可以接收包括对应于消息m的密文c的有效载荷p。有效载荷可以另外包括承诺α和对应于加密设备“id”的标识符。在一些实施方案中,解密设备902可以向存储服务器910传输请求有效载荷的请求消息。随后,存储服务器910可以将有效载荷传输到解密设备902。请求消息可以包括允许存储服务器910查询数据库或其他适当的数据结构以识别有效载荷的信息。例如,解密设备902可以向存储服务器提供标识符和时间戳,使得存储服务器910能够向数据库查询对应于所述标识符和所述时间戳的有效载荷。作为替代方案,解密设备902可以直接从诸如加密设备的另一个客户端计算机接收有效载荷,或者解密设备902可以已经在本地存储了有效载荷,并且从其自己的存储器元件中检取有效载荷(例如,如果解密设备902先前已经加密了有效载荷)。
[0329]
在可选步骤914,解密设备902可以生成输入值(有时表示为τ),所述输入值可以用作用于生成消息密钥的分布式伪随机函数的输入。这个输入值可以包括随机数μ。或者,可以有两个输入值,包括标识符id和承诺α,或者标识符的散列h0(id)和承诺的散列h1(α)。如果是密码设备而不是解密设备生成随机数μ(例如,在可选步骤920),则可能是这种情况。
[0330]
解密设备可以通过计算标识符的散列h0(id)与承诺的散列h1(α)之间的双线性配对e的结果来生成随机数μc,即,μ=e(h0(id),h1(α)。标识符的散列h0(id)可以用第一散列函数h0()和对应于加密设备id的标识符来生成。第一散列函数h0()可以将其输入映射到第
一乘法循环群g0。可以用第二散列函数h1()和承诺α来生成承诺的散列h1(α)。第二散列函数h1()可以将其输入映射到第二乘法循环群g1。
[0331]
在步骤916,解密设备902可以选择多个密码设备(例如,预定阈值数目的参与的密码设备)。这个阈值数目的密码设备可以包括执行分布式对称加密所需的最小数目的参与的密码设备,或者可以包括被提供有秘密份额的所有密码设备。在图9a中,解密设备902选择密码设备904和908。值得注意的是,所选择的密码设备904和908不需要参与用于生成有效载荷p的加密过程。解密设备902可以通过任何适当的手段或选择标准来选择参与的密码设备。例如,解密设备902可以随机地或者根据“信任分数”或“安全分数”来选择参与的密码设备。例如,信任分数或安全分数可以涉及特定密码设备已经被黑客或者所述密码设备的硬件的相对安全性破坏的可能性(例如,信任分数可以取决于密码设备是否拥有安全存储器或可信平台模块)。解密设备902可以使用代理设备(未示出)来选择参与的密码设备,例如,通过向代理设备传输请求阈值数目的参与的密码设备的请求。代理设备然后可以代表解密设备902选择参与的密码设备。
[0332]
在步骤918,解密设备902可以向多个参与的密码设备(即,密码设备904和908)中的每个密码设备传输包括一个或多个输入值的解密请求。这个请求也可以被称为“附加请求”,以便与在加密过程中传输的请求区分开。这个输入值可以包括随机数μ,或者标识符id和承诺α。一个或多个输入值可以取决于解密设备902是否在可选步骤914生成随机数μ,或者解密设备902是否依赖于密码设备来生成随机数μ。解密设备902可以经由代理设备传输请求,使得解密设备将一个或多个输入值传输到代理设备,并且代理设备将一个或多个输入值传输到多个参与的密码设备。
[0333]
在可选步骤920,参与的密码设备可以生成随机数μ。如果解密设备902不执行步骤914,则这个步骤可以由参与的密码设备来执行。如在步骤914中,随机数μ可以包括标识符的散列h0(id)(使用第一散列函数h0())生成)与承诺的散列h1(α)(使用第二散列函数生成)之间的双线性配对e的结果,即,μ=e(h0(id),h1(α)。
[0334]
图9b示出了根据一些实施方案的摊销分布式对称解密的示例性方法的第二部分。
[0335]
在步骤922,参与的密码设备(即密码设备904和908)可以各自使用它们各自的秘密份额和随机数μ生成部分计算hi(图9b中示出了对应于密码设备904的h1和对应于密码设备908的h2)。多个参与的密码设备可以基于从秘密值和在步骤918接收到的一个或多个输入值生成的多个秘密份额ski(sk1和sk3)来生成部分计算。部分计算直接用一个或多个输入值生成(即,一个或多个输入值包括随机数μ),或者间接地生成,因为密码设备可以首先使用一个或多个输入值生成随机数μ(即,在可选步骤920中)。
[0336]
参与的密码设备可以使用dprf.eval函数来生成这些部分计算,所述函数使用秘密份额和随机数μ作为自变量来评估分布式伪随机函数。在一些实施方案中,分布式伪随机函数可以包括实施椭圆曲线密码术的椭圆曲线密码函数。也就是说,密码设备可以使用dprf.eval函数使用它们各自的秘密份额ski作为密码密钥来加密随机数μ。这样,每个密码设备904和908可以分别产生部分计算h1和h3。
[0337]
在步骤924,密码设备904和908可以将它们各自的部分计算hi传输到解密设备902。在一些实施方案中,解密设备902可以从代理设备接收多个部分计算,其中代理设备从参与的密码设备904和908接收多个部分计算。
[0338]
在步骤926,解密设备可以基于多个部分计算生成消息密钥mk。这个消息密钥可被称为附加消息密钥,以将其与在加密过程中生成的消息密钥区分开。解密设备902可以通过例如使用dprf.combine(h1,h3)函数组合多个部分计算来生成消息密钥,所述函数可以将多个部分计算作为输入,并产生消息密钥。在一些实施方案中,dprf.combine函数可以通过计算部分计算的乘积来组合部分计算。或者,dprf.combine函数可以首先通过用每个部分计算hi的对应的拉格朗日系数λi对其取幂(即,来生成中间计算,然后计算那些中间计算的乘积。在一些实施方案中,可以使用公式来计算消息密钥。
[0339]
如上所述,在一些实施方案中,解密设备902可以使用拉格朗日插值来生成中间计算,如第ii节中所述。拉格朗日系数可以对应于用于产生多个部分计算的密码设备904和908。拉格朗日系数可能已经由可信外部服务器在秘密份额提供过程期间生成(以上参考图5描述)。解密设备902可能在分布式对称加密过程之前已经从可信外部服务器接收了这些拉格朗日系数。
[0340]
在步骤928,解密设备902可以解密密文c(有时称为“附加密文”),以便使用消息密钥mk获得消息m和随机值r。在一些实施方案中,解密设备902可以使用伪随机生成器prg()和异或函数

来解密密文c,例如,使用公式(m||r)=prg(mk)

c。
[0341]
在解密消息m之后,解密设备902可以验证在步骤930和932中正确执行了解密过程。
[0342]
在步骤930,解密设备902可以使用消息m和随机值r生成第二承诺α’,即,α’=com(m||r)。如果消息和随机值被正确解密,则由解密设备902生成的承诺应该等于原始承诺α。
[0343]
在步骤932,解密设备902可以通过比较承诺α与第二承诺α’来验证消息m被成功解密。
[0344]
vi.摊销秘密份额更新过程
[0345]
在amortise系统中,定期更新秘密值和秘密份额可能是有利的。这个更新过程可以通过降低攻击者能够恢复秘密值并解密密文的概率来提高系统的安全性。
[0346]
如同秘密份额提供过程(上文参考图4在第iv节中所述),可信外部服务器可以生成新的秘密值(有时称为“附加秘密值”),然后从附加秘密值导出附加秘密份额(例如,使用shamir秘密共享),并将附加秘密份额分发给密码设备网络中的密码设备。密码设备然后可以在未来的加密和解密操作中使用附加秘密份额。
[0347]
此外,为了能够解密先前加密的密文,可信外部服务器可以生成更新令牌。这个更新令牌可以被传输到存储对应于先前加密的密文的有效载荷的存储服务器。存储服务器可以使用这个更新令牌来更新对应于使用旧秘密份额加密的密文的有效载荷。具体地,存储服务器可以使用更新令牌通过使用更新令牌对那些承诺执行群取幂来更新对应于有效载荷的承诺。
[0348]
为了生成更新令牌,可信外部服务器可以首先从参与的密码设备收集旧的秘密份额。使用旧的秘密份额,可信外部服务器可以使用例如拉格朗日插值来生成用于导出这些秘密份额的秘密值。之后,可信外部服务器可以基于秘密值和附加秘密值生成更新令牌。更新令牌可以包括例如秘密值和附加秘密值的比率。
[0349]
图10示出了详细描述根据一些实施方案的秘密份额更新过程的混合序列图。图10
示出了秘密份额分发系统1000,所述秘密份额分发系统包括可信外部服务器1002、通信网络1004和密码设备网络1012,所述密码设备网络包括可选的代理设备1006和多个密码设备,包括密码设备1008到1010。另外,秘密共享分发系统1000包括存储服务器1014。
[0350]
在步骤1016,可信外部服务器1002可以经由通信网络1004(例如,互联网)并经由可选的代理设备1006向密码设备网络1012传输更新秘密值的请求。所述请求可以是对秘密份额的请求,可信外部服务器1002可以使用所述秘密份额来生成秘密值和更新令牌。所述请求可以被数字签名或者包括可信外部服务器凭证。这个数字签名或凭证可以证明所述请求源自可信外部服务器1002,而不是黑客或其他恶意行为者。所述请求可以另外被加密。
[0351]
在步骤1018,密码设备网络1012中的密码设备,包括密码设备1008和1010,可以经由通信网络1004向可信外部服务器1002传输它们各自的秘密份额。在传输它们各自的秘密份额之前,密码设备网络1012中的密码设备可以验证更新秘密值的请求是合法的,例如,通过验证包括在请求中的数字签名或凭证。密码设备可以加密它们各自的秘密份额,以便通过通信网络1004安全地传输所述秘密份额。可选地,密码设备可以替代地将它们各自的秘密份额传输到代理设备1006,并且代理设备1006可以经由通信网络1004将秘密份额传输到可信外部服务器1002。在一些实施方案中,可信外部服务器1002可能已经拥有用于生成秘密份额的秘密值的副本。在这些实施方案中,步骤1018是可选的。
[0352]
在步骤1020,可信外部服务器1002可以使用从密码设备网络1012中的密码设备接收到的秘密份额来生成秘密值。取决于所使用的秘密共享方案,可以使用不同的技术来生成秘密值。例如,如果shamir秘密共享方案被用于生成秘密份额,则可信外部服务器1002可以使用多项式插值技术(诸如拉格朗日插值)来生成秘密值,如上文第ii节所述。在一些实施方案中,可信外部服务器1002可能已经拥有用于生成秘密份额的秘密值的副本。在这些实施方案中,步骤1020是可选的。
[0353]
在步骤1022,可信外部服务器1002可以生成附加秘密值并且基于所述附加秘密值生成多个附加秘密份额。可信外部服务器1002可以使用任何适当的技术来生成附加秘密值,诸如使用密码上安全的随机数字生成器。可信外部服务器1002可以使用诸如shamir秘密共享的技术基于附加秘密值来生成附加秘密份额。例如,可信外部服务器可以将附加秘密值编码到多项式中,然后在多个不同的输入值处对多项式进行采样,然后使用所得点(即,输入值输出值对)作为附加秘密份额。
[0354]
在步骤1024,可信外部服务器1002可以基于秘密值和附加秘密值生成更新令牌。在一些实施方案中,更新令牌δ等于秘密值s与附加秘密值s’的比率,即δ=s/s’。
[0355]
在步骤1026,可信外部服务器1002可以经由通信网络1004向存储服务器1014传输更新令牌。可信外部服务器1002还可以传输指示更新令牌源自可信外部服务器1002的数字签名或凭证。可信外部服务器1002可以另外传输标识符,存储服务器1014可以使用所述标识符来识别更新令牌可以用来更新的所述一组有效载荷。
[0356]
在步骤1028,存储服务器1014可以使用更新令牌来更新对应于一个或多个有效载荷的一个或多个承诺。存储服务器1014可以使用与更新令牌一起包括的任何信息来识别这些承诺和有效载荷。例如,存储服务器1014可以接收存储服务器1014可以用来查询数据库以识别相关有效载荷的标识符。存储服务器1014可以通过使用更新令牌对承诺执行群取幂来更新承诺。也就是说,对于包括承诺α
id
的有效载荷c
id
,以及对于更新令牌δ,存储服务器
可以使用δ:α

id
=α
idδ
对α
id
执行群取幂,然后用有效载荷c
id
中的承诺α

id
替换承诺α
id
,从而更新一个或多个承诺。
[0357]
在步骤1030,可信外部服务器1002可以经由通信网络1004和可选的代理设备1006向密码设备网络1012中的密码设备传输附加秘密份额。附加秘密份额可以被加密,以便经由这些中介安全地传输所述附加秘密份额。
[0358]
在步骤1032,密码设备网络1012中的密码设备,包括密码设备1008和1010,可以将附加秘密份额存储在它们各自的安全存储器元件(例如,来自图3的安全存储器元件314)中。密码设备可以选择性地从它们的安全存储器元件中删除旧的秘密份额,以完成更新过程。
[0359]
vii.计算机系统
[0360]
本文中提及的任何计算机系统都可利用任何合适数目的子系统。这样的子系统的示例在图11中在计算机系统1100中示出。在一些实施方案中,计算机系统包括单个计算机装置,其中子系统可以是计算机装置的组件。在其他实施方案中,计算机系统可以包括具有内部组件的多个计算机装置,每个计算机装置是子系统。计算机系统可以包括台式计算机和膝上型计算机、平板计算机、移动电话和其他移动设备。
[0361]
图11中所示的子系统经由系统总线1112互连。示出了附加子系统,诸如打印机1108、键盘1118、存储设备1120、耦合到显示适配器1114的监视器1124(例如,显示屏,诸如led)等。耦合到i/o控制器1102的外围设备和输入/输出(i/o)设备可以通过本领域中已知的各种装置(诸如输入/输出(i/o)端口1116(例如usb、))连接到计算机系统。例如,i/o端口1116或外部接口1122(例如以太网、wi-fi等)可用于将计算机系统700连接到广域网(诸如因特网)、鼠标输入设备或扫描仪。经由系统总线1112的互连允许中央处理器1106与每个子系统进行通信,并控制来自系统存储器1104或存储设备1120(例如,诸如硬盘驱动器或光盘的固定盘)的多个指令的执行,以及子系统之间的信息交换。系统存储器1104和/或存储设备1120可以体现为计算机可读介质。另一个子系统是数据收集设备1110,诸如照相机、麦克风、加速度计等。在本文中提及的任何数据都可从一个组件输出到另一组件并且可输出到用户。
[0362]
计算机系统可以包括多个相同的组件或子系统,例如通过外部接口1122、内部接口或经由可从一个组件连接到另一个组件并从中移除的可移动存储设备连接在一起。在一些实施方案中,计算机系统、子系统或装置可通过网络通信。在此类情况下,一个计算机可以被视为客户端且另一个计算机可以被视为服务器,其中每个计算机都可以是同一计算机系统的一部分。客户端和服务器可各自包括多个系统、子系统或组件。
[0363]
实施方案的各个方面可以使用硬件电路(例如,专用集成电路或现场可编程门阵列)和/或以模块化或集成方式借助大体上可编程处理器使用计算机软件以控制逻辑的形式实施。如本文所使用,处理器可以包括单核处理器、在同一集成芯片上的多核处理器,或在单个电路板上或联网的多个处理单元,以及专用硬件。基于本文提供的公开内容和教导,本领域普通技术人员将知道并了解使用硬件以及硬件和软件的组合来实施本公开的实施方案的其他方式和/或方法。
[0364]
本技术中描述的任何软件组件或功能可实施为使用例如java、c、c 、c#、objective-c、swift等任何合适的计算机语言或诸如perl或python的脚本语言使用例如常
规的或面向对象的技术的由处理器执行的软件代码。软件代码可作为一系列指令或命令存储在计算机可读介质上以供存储和/或传输,合适的介质包括随机存取存储器(ram)、只读存储器(rom)、磁性介质(诸如硬盘驱动器或软盘),或光学介质(诸如光盘(cd)或dvd(数字通用盘))、闪存存储器等。计算机可读介质可以是此类存储或传输设备的任何组合。
[0365]
此类程序还可以使用适合于经由包括互联网在内的符合多种协议的有线网络、光学网络和/或无线网络进行传输的载波信号来编码和传输。因此,根据本发明的实施方案的计算机可读介质可以使用以此类程序编码的数据信号来创建。以程序代码编码的计算机可读介质可以与兼容设备一起封装或者与其他设备分开提供(例如,经由互联网下载)。任何此类计算机可读介质都可以驻留于单个计算机产品(例如,硬盘驱动器、cd或整个计算机系统)上或内,且可存在于系统或网络内的不同计算机产品上或内。计算机系统可包括用于将本文中所提及的任何结果提供给用户的监视器、打印机或其他合适的显示器。
[0366]
本文所述的任何方法可以完全地或部分地用包括可被配置为执行这些步骤的一个或多个处理器的计算机系统执行。因此,实施方案可涉及被配置为执行本文所述的任何方法的步骤、可能具有执行相应步骤或相应步骤群组的不同组件的计算机系统。尽管呈现为编号步骤,但本文中的方法的步骤可以同时或以不同顺序被执行。另外,这些步骤的部分可与来自其他方法的其他步骤的部分一起使用。同样,一个步骤的全部或部分可以是可选的。另外,任何方法的任何步骤可以用模块、电路或用于执行这些步骤的其他装置来执行。
[0367]
在不偏离本发明的实施方案的精神和范围的情况下,具体实施方案的特定细节可以任何合适方式组合。然而,本发明的其他实施方案可涉及与每个单独的方面相关的特定实施方案,或者这些单独的方面的特定组合。上文对本发明的示例性实施方案的描述已经出于说明和描述的目的呈现。不旨在是详尽的,或将本发明局限到描述的精确形式,根据上文的教导许多修改和变形是可能的。选择和描述这些实施方案是为了最好地解释本发明的原理及其实际应用,从而使本领域的技术人员能够在各种实施方案中最好地利用本发明,并且进行适合于预期的特定用途的各种修改。
[0368]
以上描述是说明性的而不是限制性的。在所属领域的技术人员阅读了本公开后,本发明的许多变化将变得显而易见。因此,本发明的范围不应参考以上描述来确定,而是应参考未决的权利要求以及其完整范围或等效物来确定。
[0369]
在不脱离本发明的范围的情况下,任何实施方案的一个或多个特征可与任何其他实施方案的一个或多个特征组合。
[0370]
除非明确指示有相反的意思,否则叙述“一个/种”或“所述”旨在表示“一个/种或多个/种”。除非明确指示为相反情况,否则“或”的使用旨在表示“包括性的或”,而不是“排除性的或”。
[0371]
本文中提及的所有专利、专利申请、公开和描述出于所有目的以引用方式全部并入本文。不承认它们是现有技术。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献