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

具有增加的安全性的公钥/私钥系统的制作方法

2022-08-13 07:53:06 来源:中国专利 TAG:


1.本发明涉及第二密码设备、第一密码设备、公钥加密方法、私钥加密方法和计算机可读介质。


背景技术:

2.解决关于密钥分配的问题的一种方式是使用所谓的非对称密码学。在非对称密码学中,使用了密钥对,其包括公钥和私钥。出于该原因,非对称密码学也称为公钥密码学。
3.公钥可能被广泛传播,但是私钥通常仅少数方知道,例如仅其所有者知道。公钥可以被用于加密仅可以利用私钥解密的消息。在公钥加密系统中,任何人可以使用接收者的公钥对消息进行加密。加密的消息仅可以利用接收者的私钥解密。从其对应的公钥中找到私钥在计算上是不切实际的。公钥和私钥被称为密钥对。
4.已知的公钥加密系统依赖于基于数学问题的密码算法,该数学问题目前尚无有效的解。例如,rsa公钥加密系统依赖于整数分解的难度。基于椭圆曲线的公钥加密依赖于离散对数的难度。
5.量子计算机对现代密码学构成重大威胁。两种最广泛采用的公钥密码系统,即rsa和椭圆曲线密码学(ecc),将被通用量子计算机破解。基于格点的密码学可以用作抗量子计算机的备选方案。已经提出了许多基于格点的密码系统。
6.例如,一个这样的基于格点的系统称为round5。round5是nist后量子密码学的第二轮的提交。round5的描述可以在nist页面上找到:https://csrc.nist.gov/projects/post-quantum-cryptography/round-2-submissions。描述文档的标题为“round5:kem and pke based on(ring)learning with rounding”,日期为2019年3月28日星期四。round5的描述也可以在cryptology eprint档案中找到:报告2018/725,例如,版本:20190126:102712。这些文档通过引用包括在本文中。前者将被称为“round5”。其他基于格点的密码学文档是frodokem,“frodo-kem:learning with errors key encapsulation”,日期为2019年3月30日;ntru,“ntru”,日期为2019年3月30日;saber,”saber:mod-lwr based kem(round2 submission)”;newhope“new hope”,版本1.02,日期为2019年3月15日;以及crystals-kyber“crystals-kyber(版本2.0),日期为2019年3月30日,可以在上文所提到的nist页面处找到其描述作为第二轮nist候选。在本文中从nist第二轮候选提议中也包括了对这些的描述。
7.例如,第二密码设备可以被配置为使用第一密码设备的公钥来导出原始密钥。原始密钥可以被用于封装密钥种子或预密钥,其继而可以被用于保护第一和第二密码设备之间的通信。可以设置基于格点的系统,使得两个设备可以导出相同的原始密钥,或者至少是如此接近的原始密钥,以致于它们仍然可以被用于封装和恢复相同的密钥种子。


技术实现要素:

8.发明人发现这些基于格点的系统存在弱密钥问题。例如,如果在第二密码设备处
获得的第一公钥是弱的,那么密钥种子没有针对机密性受到足够的保护。因此,使用该密钥种子保护的所有通信都可能受到损害。例如,旨在用于第一密码设备的第二密码设备的敏感通信可能被窃听者读取。例如,第一公钥可能由于意外(例如,编程错误、传输问题或出于恶意,例如为了建立合理的否认,或为第二密码设备制造问题等)而变弱。
9.类似的问题可能发生在第一密码设备的一侧。第一密码设备将使用第二密码设备的第二公钥来恢复封装密钥种子。第二公钥的恶意选择可能允许第一密码设备的第一私钥的一些信息被泄露。这可能不被注意到,因为第二公钥可能是短暂的,因此预期许多不同的第二公钥。因此,可能未注意到许多第二公钥试图泄露第一私钥的部分。例如,攻击者可能注意到第一密码设备是否能够导出共享密钥,或者共享密钥是否从先前的共享密钥改变。
10.这些和其他问题由本文所描述的实施例解决。提供了第二密码设备和第一密码设备。使用第二密码设备,可以将密钥种子传送到第一密码设备。密钥种子可以被用于加密消息。因此,对公钥的访问允许对消息进行加密,但是对所述加密消息的解密要求对私钥的访问。
11.例如,第二密码设备可以获得与第一密码设备相关联的第一公钥,生成第二私钥,并且根据第二私钥计算第二公钥。例如,从私钥计算公钥可能包括将私钥与共享对象相乘的噪声。
12.第一公钥可以被用于计算第二原始共享密钥,其继而可以被用于封装密钥种子。因为第一密码设备可以获得相同或几乎相同的原始密钥,所以它可以解封装该数据,并且因此获得密钥种子。然而,如果第一公钥是弱的,则封装不足以掩蔽密钥种子,使得其不适合于以后的密码使用。例如,计算原始密钥可以包括第一公钥与第二私钥之间的噪声相乘;如果第一公钥小于此值,则为原始密钥。
13.例如,第一密码设备可以从第二密码设备接收第二公钥和封装数据,从第二公钥和第一私钥计算第一原始共享密钥,并使用其使用第一原始共享密钥的至少部分来解封装封装数据。恶意的第二密码设备可能发送特制的第二公钥而不是真实的公钥,例如,已经从随机生成的第二私钥获得的第二公钥。第二设备可能这样做,以希望这将揭示关于第一私钥的信息。例如,攻击者可能使用密钥不匹配攻击。在密钥不匹配攻击中,通过比较两个参与者之间的共享密钥是否匹配,可以为重复使用其公钥的参与者恢复私钥。
14.因此,第一密码设备和第二密码设备两者有兴趣避免使用为另一方获得的公钥,该公钥不对应于人们可能从公钥预期的简档。在第二密码设备的情况下,允许弱的第一公钥可能导致密钥种子和取决于它的任何通信的较低机密性保护。在第一密码设备的情况下,允许弱的第二公钥可能导致无意中泄露第一私钥的部分,例如,通过检测密钥不匹配的存在或不存在。通常,第二密码设备将使用短暂的第二私钥和第二公钥,使得揭示关于第二私钥的信息的问题不那么紧迫。然而,如果期望避免泄露关于所述第二私钥的信息,例如因为该密钥可能具有更长期的使用,那么可以执行所述第一公钥的验证。
15.在实施例中,所述第二密码设备和/或所述第一密码设备被配置为将验证流程应用于所获得的公钥。可能但不要求的是,双方对获得的公钥执行验证,因为其取决于解决了哪个威胁。
16.在第二密码设备的情况下,可以确定公钥对于对密钥种子的封装是否安全。如果获得的公钥不适合,例如因为使用其以用于封装将泄露太多的密钥种子,那么所述第二密
码设备可以采取适当的动作。例如,可以在封装之前或期间执行所述验证流程,并且如果所述验证流程不成功,则可以不执行或中止封装。例如,可以在封装之后或期间执行所述验证流程,并且封装结果可以不使用,例如,如果所述验证流程不成功,则不传送给所述第一密码方。
17.在第一密码设备的情况下,可以确定公钥对于对密钥种子的解封装是否安全。如果获得的公钥不适合,例如因为使用它以用于解封装将泄露太多的第一私钥,那么所述第一密码设备可以采取适当的动作。例如,可以在解封装之前或期间执行所述验证流程,并且如果所述验证流程不成功,则可以不执行或中止解封装。例如,可以在解封装之后或期间执行所述验证流程,并且可以不使用解封装结果,例如,可以丢弃所得的密钥种子,例如,可以发出警告,可以阻止所述第二密码设备等。
18.如果密钥泄露是目标,则用于拒绝密钥的条可能设置得相对高,但是人们可能保持关于使用可疑密钥的设备的信息,例如,用于拒绝的条附近的密钥。例如,第一密码设备可以计算特定的第二密码设备使用可疑密钥的频率,例如,对于该密钥,统计量度落在可能范围之外但不在极不可能范围之外。如果常常使用不太可能的密钥,例如2次或更多、4次或更多等,则可能拒绝来自该第二密码设备的另外的密钥。
19.弱密钥问题在许多基于格点的密码方案中很常见,尤其是当在基于所谓的噪声相乘中时。
20.例如,共享对象、第一公钥、第一私钥、第二公钥和第二私钥可以是有限域或环上的矩阵。噪声相乘可以是矩阵相乘,例如,在有限域或环中。矩阵元素可以是整数,例如对模取模,或对模取模的多项式和约简多项式。所述噪声相乘可能向所述结果加上噪声,例如,通过按比例缩小所得矩阵元素,或生成噪声并将所述噪声加上到所得矩阵元素。
21.例如,共享对象、第一公钥、第一私钥、第二公钥和第二私钥可以是有限域或环上的多项式。噪声相乘可以是多项式相乘,例如,对约简多项式取模。所述噪声相乘可能向所述结果加上噪声,例如,通过按比例缩小所得多项式系数,或生成噪声并将所述噪声加上到所得多项式系数。
22.缩放系数或元素可以包括与缩放因子相乘、添加缩放系数以及底板、舍入或天花板运算。
23.在实施例中,密钥种子是随机的、和/或短暂的和/或对称的和/或独立于第一公钥。
24.在正常使用中,生成公钥作为随机过程的部分。尽管可以对私钥施加各种限制,但是取决于特定的基于格点的密码方案,其通常讲是随机选择的,例如,受限于设计约束随机选择的。例如,可以随机选择私钥,使其经受平衡,具有其值的有限(绝对)幅度,例如三元值,和/或对其权重的限制等。所述公钥可以作为所述公钥与所述共享对象之间的噪声相乘获得。
25.因此,在统计上看起来不是这样的随机过程的结果的公钥可能是错误的结果,例如编程错误、传输错误等,或者可能是攻击的结果。第一设备和第二设备可以被配置为预先检查它们生成的公钥是否将通过由另一设备进行的测试。然而,这在实践中将不太可能变化太多,因为真正生成的公钥将以非常高的概率通过测试。
26.所述验证流程可以计算用于公钥的统计量度,并且如果所述统计度量在所述统计
度量的预期范围之外,则拒绝所述公钥。
27.如果公钥比预期的小得多,则出现一个特定问题。例如,所述验证流程可以包括确定所获得的公钥的幅度是否低于阈值。例如,人们可以数学计算幅度的预期范围,例如,预期公钥以某种高概率存在的范围。例如,所述概率可以设置为1-10-6
或更高或更低,这取决于应用。
28.另一方面,如果所得的原始密钥被用于封装,则人们可以计算预期的信息量。后一种方法可能是优选的,但是可能更难以执行。但是,通过拒绝异常小的密钥,可以获得类似的效应。
29.例如,验证流程可以包括确定值的数目是否低于所获得的公钥中的第一阈值,并且如果所确定的数目小于第二阈值,则拒绝所述密钥。低于阈值可以以绝对值解释。如果公钥具有对p取模的值,则所述验证流程可能要求p正下方的元素的数目很小;或者甚至[0,t1)∪[p-t2)中的元素的数目很小,例如,低于阈值t3。
[0030]
特别地,验证流程可以包括确定所获得的公钥是全零还是几乎全零。例如,是否非零元素的数目低于阈值。具有许多零的公钥可能导致封装密钥种子的低机密性。
[0031]
在一些密码方案中,可以在变换域中获得公钥,例如在频域中。例如,所述变换可以是傅里叶变换,例如离散傅里叶变换(dft)。在这种情况下,所述验证可以包括确定所述变换域中的公钥的范数是否低于阈值。该测试给出原始域中的条目的平方和很小的指示。备选地或者额外地,人们可以计算所述变换域中的元素的线性组合并验证其是否低于阈值。该测试给出原始域中的条目的总和很小的指示。例如,这可以被用于由例如crystals-kyber和newhope所使用的ntt。可以随机选择元素的线性组合,例如,以避免攻击者能够为测试做准备。
[0032]
所述验证流程可以包括确定彼此相等的公钥的值的数目是否超过阈值。许多相等的值可能指示弱密钥。特别是在私钥是平衡的加密方案中,例如,具有固定的权重,这可能是一个问题。例如,如果使用三元秘密密钥,则可能发生该问题。例如,在具有固定权重秘密的平衡私钥中,例如相同的数字1和-1值,上述类型的密钥可能接近于零。
[0033]
在实施例中,所述验证流程是在公钥上而不是直接在原始密钥上执行的。这具有以下优点:所述测试不能揭示关于所述私钥的信息,因为所述私钥不需要参与所述检查。备选地,人们可以验证所述原始密钥是否很小,但是如果接受/拒绝决定可见,则这可能给出关于所述私钥的信息。特别是,如果所述私钥是长期密钥,则这是不期望的。在实施例中,用于第二密码设备的验证流程包括确定针对所述原始密钥的幅度、小值的数目等。
[0034]
使用更复杂的统计量度对所述公钥进行更复杂的评价是可能的。例如,所述验证流程可以包括:计算所获得的公钥中的值的直方图,并且将所计算的直方图与预期的直方图进行比较。所述预期的直方图可以数学计算,但是也可以经验建立。
[0035]
不关联于特定的弱点(诸如小或具有许多小值)的更严格的统计测试具有以下优点:其也可能有助于对抗未来的弱点。例如,如果将来发现对公钥的特别聪明的选择,例如,首先选择或不选择私钥可能导致问题,例如,弱封装或可能揭示关于私钥的信息。
[0036]
例如,所述验证流程可以包括:
[0037]-确定所计算的直方图的分箱是否小于阈值,和/或
[0038]-确定所计算的直方图的分箱是否大于阈值,和/或
[0039]-计算所计算的直方图与预期的直方图之间的距离并且确定所述距离是否高于阈值。
[0040]
在计算所述直方图之前,所述公钥中的值可以向上或向下移动,例如,半个分箱大小。这具有绝对值接近0的值被计入所述直方图的相同分箱的效果。
[0041]
在所获得的公钥中确定的直方图与预期的直方图之间存在各种距离量度,例如,如数学或经验建立的。例如,距离量度可以是平方距离,例如,对应分箱的大小的差异的平方和。例如,可以使用的其他量度包括卡方检验和ks检验。
[0042]
第二密码设备和第一密码设备可以是电子设备。例如,它们可以是计算机或服务器等。它们可以是移动电子设备,例如,移动电话、智能卡。第二密码设备和第一密码设备可以是消费电子器件,例如机顶盒、电视。公钥加密设备可以是传感器。
[0043]
根据实施例的设备和方法可以被广泛应用于实际应用中。这样的实际应用包括许多密码协议。这样的实际应用包括消息传递应用、传感器网络、数据通信、金融应用等。
[0044]
该方法的实施例可以作为计算机实施的方法在计算机上实施,或者在专用硬件中实施,或者在这两者的组合中实施。用于方法的实施例的可执行代码可以被存储在计算机程序产品上。计算机程序产品的示例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。优选地,计算机程序产品包括被存储在计算机可读介质上的非瞬态程序代码,该非瞬态程序代码用于当所述程序产品在计算机上被执行时执行该方法的实施例。
[0045]
在实施例中,计算机程序包括计算机程序代码,该计算机程序代码适于当计算机程序在计算机上运行时执行该方法的实施例的全部或部分步骤。优选地,计算机程序被体现在计算机可读介质上。
[0046]
本发明的另一方面提供了一种使计算机程序可用于下载的方法。当计算机程序被上传到例如apple的app商店、google的play商店或microsoft的windows商店并且可从此类商店下载该计算机程序时,将使用这方面。
附图说明
[0047]
将参考附图仅通过示例描述本发明的另外的细节、方面和实施例。附图中的元件是为了简单和清楚而图示的,并且不一定按比例绘制。在附图中,对应于已经描述的元件的元件可以具有相同的附图标记。在附图中,
[0048]
图1a示意性示出了第一密码设备100的实施例的示例;
[0049]
图1b示意性示出了第二密码设备200的实施例的示例;
[0050]
图1c示意性地示出了密码系统101的实施例的示例;
[0051]
图2a示意性地示出了公钥加密和私钥解密的示例;
[0052]
图2b示意性地示出了公钥加密和私钥解密的示例;
[0053]
图3示意性地示出了公钥加密和私钥解密的示例;
[0054]
图4示意性地示出了公钥加密和私钥解密的示例;
[0055]
图5示意性地示出了根据实施例的密码系统的示例;
[0056]
图6a示意性地示出了根据实施例的公钥加密方法的示例;
[0057]
图6b示意性地示出了根据实施例的私钥解密方法的示例;
[0058]
图7a示意性地示出了根据实施例的具有包括计算机程序的可写部分的计算机可
读介质;并且
[0059]
图7b示意性地示出了根据实施例的处理器系统的表示。
[0060]
附图标记列表1a-5、7a-7b:
[0061]
10 第一密码设备
[0062]
20 第二密码设备
[0063]
31 注册阶段
[0064]
32 加密阶段
[0065]
33 解密阶段
[0066]
11、12 消息
[0067]
100 第一密码设备
[0068]
130 通信接口
[0069]
191 计算机网络
[0070]
192 存储接口
[0071]
194 处理器
[0072]
196 存储器
[0073]
200 第二密码设备
[0074]
230 通信接口
[0075]
292 存储接口
[0076]
294 处理器
[0077]
296 存储器
[0078]
300 第一密码设备
[0079]
301 密码系统
[0080]
302 公钥存储库
[0081]
305 通信接口
[0082]
315 公钥/私钥生成器
[0083]
320 纠错器
[0084]
325 diffie-hellman单元
[0085]
335 对帐单元
[0086]
340 解封装单元
[0087]
350 第二密码设备
[0088]
355 通信接口
[0089]
360 公钥获得者
[0090]
365 公钥/私钥生成器
[0091]
370 码字生成器
[0092]
375 diffie-hellman单元
[0093]
380 可靠位生成器
[0094]
385 对帐数据生成器
[0095]
390 封装单元
[0096]
1000 计算机可读介质
[0097]
1010 可写部分
[0098]
1020 计算机程序
[0099]
1110 (一个或多个)集成电路
[0100]
1120 处理单元
[0101]
1122 存储器
[0102]
1124 专用集成电路
[0103]
1126 通信元件
[0104]
1130 互连
[0105]
1140 处理器系统
具体实施方式
[0106]
尽管本发明可以有许多不同形式的实施例,但是在附图中示出且将在本文中详细描述一个或多个特定实施例,应当理解,本公开内容被认为是本发明原理的示例,并非旨在将本发明限于所示和所述的特定实施例。
[0107]
在下文中,为了便于理解,在操作中描述了实施例的元件。然而,很明显,各个元件被布置为执行由它们执行的所述功能。
[0108]
另外,本发明不限于这些实施例,并且本发明在于本文描述的或在互不相同的从属权利要求中记载的每个新颖特征或特征组合。
[0109]
一些实施例涉及第二密码设备和第一密码设备。第一和第二密码设备可以被配置为传送密钥种子。密钥种子可以使用来自一方的公钥和来自另一方的私钥来保护。例如,可以通过噪声相乘从私钥获得公钥。第一和第二密码设备中的至少一个可以验证获得的公钥,例如,以避免密钥种子或私钥的泄露。
[0110]
图1a示意性示出了第一密码设备100的实施例的示例。图1b示意性示出了第二密码设备200的实施例的示例。第一密码设备也可以称为第一设备或第一密码设备。第二密码设备也可以称为第二设备或第二密码设备。图1c示意性地示出了包括第一密码设备100和第二密码设备200的密码系统101的实施例的示例。第一密码设备100和第二密码设备200可以分别包括存储接口192、292、处理器194、294和存储器196、296中的一个或多个。第一密码设备100被配置为生成公钥/私钥对。公钥和私钥可以分别包括公钥矩阵和私钥矩阵。公钥和私钥可以分别包括公钥多项式和私钥多项式。第二密码设备200被配置为使用公钥并使用它来使得密钥种子能够被传送到第一密码设备。例如,密钥种子可以直接用作密钥,通常用作对称密钥,以加密和稍后解密要从第二密码设备传送到第一密码设备的消息。
[0111]
第一密码设备可以被配置为使用其私钥来获得相同的密钥种子。例如,密钥种子也可以被用于从中导出通信密钥。例如,可以对密钥种子进行散列,可能与其他信息一起以获得通信密钥。例如,其他信息可以包括在第一和第二密码设备之间交换的初始和/或回复协议消息。
[0112]
密钥种子可以用作针对另外的密钥协商的输入,例如,密钥种子可以与一个或多个另外的密钥输入组合,以例如导出最终密钥,例如,使用获取密钥种子的密钥导出函数和另外的密钥输入来实现上述操作。另外的密钥输入可以包括从其中第二密码设备和第一密码设备改变位置的协议导出的另外的密钥种子,从而在本文所描述的各种协议中扮演相反
的角色。
[0113]
第一密码设备100和第二密码设备200(例如,系统101的各种设备)可以通过计算机网络191相互通信。计算机网络可以是互联网、内联网、lan、wlan等。计算机网络191可以是互联网。该计算机网络可以是全部或部分有线的和/或全部或部分无线的。例如,计算机网络可以包括以太网连接。例如,计算机网络可以包括无线连接,例如,wi-fi、zigbee等。这些设备包括连接接口,该连接接口被布置为根据需要与系统101的其他设备通信。例如,连接接口可以包括连接器,例如,有线连接器(例如,以太网连接器)或无线连接器(例如,天线,例如,wi-fi、4g或5g天线)。例如,第一密码设备100和第二密码设备200可以分别包括通信接口130、230。计算机网络191可以包括额外的元件,例如,路由器、集线器等。
[0114]
可以在处理器(例如处理器电路)中实施对第一密码设备100和第二密码设备200的执行,在本文中示出了其示例。第一密码设备100(特别是第一密码设备100的处理器)可以实施第一密码设备10的功能,如图2a-2b、图3和图4所示。第二密码设备200(特别是第二密码设备200的处理器)可以实施这些图中的第二密码设备20的功能。例如,这些功能可以全部或部分地以在设备100或200处存储的计算机指令来实施,例如以在设备的电子存储器中存储的计算机指令来实施,并且能由设备的微处理器来执行。在混合式实施例中,功能单元部分地以硬件(例如作为协处理器,例如,密码协处理器)来实施,并且部分地以在设备100或200上存储和执行的软件来实施。
[0115]
设备100和200可以包括用于存储和/或检索消息(可能是加密的消息)的存储接口。例如,存储接口可以在本地实施,例如,作为去往在设备中包括的存储器(例如,分别为存储器196或296)的接口来实施。存储接口还可以与离线的(例如非本地的)存储装置(例如,云存储装置)接口连接,例如与位于另一设备中的诸如存储器或驱动器之类的存储装置接口连接。如果使用云存储装置,则设备也可以包括本地存储装置,例如,存储器。例如,存储器可以用于存储计算机编程指令,临时存储文件等。
[0116]
在设备100和200的各种实施例中,可以从各种替代方案中选择通信接口。例如,该接口可以是去往局域网或广域网(例如,互联网)的网络接口、去往内部或外部数据存储装置的存储接口、应用程序接口(api)等。在实施例中,在同一设备中实施第二密码设备和第一密码设备。这对消息的加密和解密都会有帮助。例如,通信接口可以是存储接口,在这种情况下,该设备可以用于以加密形式存储消息并随后对消息进行检索和解密。
[0117]
设备100和200可以具有用户接口,该用户接口可以包括诸如一个或多个按钮、键盘、显示器、触摸屏等的公知元件。该用户接口可以被布置用于适应用于发起密钥协商协议,响应密钥协商协议,发送利用公钥加密的消息,利用公钥对消息进行解密等的用户交互。
[0118]
存储装置可以被实施为电子存储器(例如,闪速存储器)或磁性存储器(例如,硬盘)等。存储装置可以包括多个分立的存储器,它们一起构成存储装置。存储装置也可以是临时存储器,例如,ram。
[0119]
通常,设备100和200各自包括微处理器,该微处理器执行在设备100和200处存储的适当软件;例如,该软件可能已经被下载和/或被存储在对应的存储器(例如,诸如ram之类的易失性存储器或诸如闪速存储器之类的非易失性存储器)中。替代地,设备100和200可以全部或部分地以可编程逻辑单元来实施,例如被实施为现场可编程门阵列(fpga)。设备
100和200可以全部或部分地被实施为所谓的专用集成电路(asic),例如,针对其特定用途而定制的集成电路(ic)。例如,可以例如使用诸如verilog、vhdl等的硬件描述语言在cmos中实施该电路。
[0120]
在实施例中,设备100和200可以包括一个或多个电路以实施相应设备的一种或多种或所有功能。电路可以实施本文描述的对应功能。电路可以是处理器电路和存储电路,处理器电路执行在存储电路中以电子方式表示的指令。
[0121]
处理器电路可以以分布式方式来实施,例如被实施为多个子处理器电路。存储装置可以被分布在多个分布式子存储装置上。存储器的部分或全部可以是电子存储器、磁性存储器等。例如,存储装置可以具有易失性部分和非易失性部分。存储装置的部分可以是只读的。电路也可以是fpga、asic等。
[0122]
图2a示意性地示出了公钥加密和私钥解密的示例。公钥加密侧由第二密码设备20执行。私钥解密侧由第一密码设备10执行。图2a-4的协议可以由第二密码设备200和/或第一密码设备100执行,例如,如上文所描述的。
[0123]
图2a-4中的符号如下:
[0124]
·
a表示公共对象,例如矩阵,例如具有整数或环、场等中的元素的矩阵,例如多项式,例如具有系数环、场的多项式。元素可以是对模量(例如2的幂)取模的整数。我们将使用“值”或“元素”来指代多项式的系数或矩阵的元素。
[0125]
·
公共对象的元素可以是对模量(例如2的幂)和多项式取模的多项式。矩阵公共对象a通常是方形d
×
d矩阵。对模量取模的矩阵被称为非环配置。具有对多项式和模量取模的多项式条目的矩阵被称为模块配置。
[0126]
·
s和r分别表示第一密码设备和第二密码设备的私钥。与公共对象一样,私钥可以是矩阵。私钥可以是多项式。
[0127]
·
b和u表示第一密码设备和第二密码设备的公钥矩阵,其被图示为a*r或a*s的乘积。与公共对象一样,公钥可以是矩阵。公钥可以是多项式。
[0128]
运算*表示基础问题的单向函数。星号(*)运算会根据两个基础矩阵来导出新的数学对象(例如,新的矩阵),同时会引入一些噪声,例如新多项式,同时引入一些噪声。例如,可以通过加上噪声元素来显式地引入噪声,或者例如通过舍入来隐式地引入噪声。
[0129]
能够在(r)lwe或(r)lwr或它们的模块版本中找到星号运算的示例。例如,a*r可以意指round((a*r(mod q)),p,q),例如如在lwr中。这意味着r乘以对q取模的平方矩阵a的乘积。然后,通过执行p/q(a*r(mod q)来用整数p和q对结果进行舍入,其中,p《q。舍入运算可以是算子在后一个公式中,尖括号指代取模运算,在这种情况下是对b取模。底板舍入操作,在这种情况下是向下底板舍入,但这可以替换为天花板或真实舍入操作。值h可以例如被用于减少偏差。例如,人们可以使用h=a/2b。通常,我们具有b《a。在实施例中,a和b两者是2的幂。
[0130]
·
c表示封装密钥种子k
[0131]
·
encapsulate(k,k)意指用k对密钥种子k进行封装。例如,如果k存在于z_q中,那么也可以在z_q中表示k。如果k存在于z_2中,那么这可能是xor。可以逐元素进行封装,例如将k和k解读为如下矩阵:
[0132]
c=k k*(q/2)(mod q).
[0133]
例如,封装函数可以使用密钥k来掩蔽密钥种子k,使得k中的错误对m具有有限效应,例如线性效应。例如,可以将密钥种子k中的位映射到z_q,例如通过将k中的元素乘以z_q中的元素;如果q是偶数,则q/2是良好的选择。接下来,将密钥k的元素(其也可能是z_q的元素)添加到k的映射元素。k的封装可以被认为是用密钥k对k的加密,但是其中,密钥k中的小错误,例如,少量的位错误,仍然允许从c成功地解密k。注意,在以上示例封装中,并非所有k值需要被使用。例如,如果k是矩阵或多项式,则可以使用其值的子集,或者甚至该值的部分,例如,来自多个值的多个位。
[0134]
·
decapsulate(k,c)意指使用返回位串的密钥k对密文c进行解封装。
[0135]
参考文献:
[0136]
rlwe:vadim lyubashevsky、chris peikert和oded regev的“on ideal lattices and learning with errors over rings”,
[0137]
rlwr:abhishek banerjee、chris peikert和alon rosen的“pseudorandom functions and lattices”,
[0138]
lwe:oded regev的“on lattices,learning with errors,random linear codes,and cryptography”,
[0139]
lwr:abhishek banerjee、chris peikert和alon rosen的“pseudorandom functions and lattices”,
[0140]
hila5:markku-juhani o.saarinen的“hila5:on reliability,reconciliation,and error correction for ring-lwe encryption”。
[0141]
星号运算可以是噪声矩阵相乘,例如,规则矩阵相乘然后加上噪声,例如规则多项式相乘然后加上噪声。加上噪声也可以与相乘集成。在星号运算中加上噪声可以通过多种方式来完成。加上噪声的一个示例是通过加上显式噪声(例如通过生成并加上噪声矩阵或者多项式)。加上显式噪声的优点是,该噪声在密码学家的完全控制下,并且能够进行精细调谐,以例如获得对系统失败率相对于系统安全性的精确控制。此外,加上显式噪声的优点是,所有矩阵或者多项式都可以在同一环或场等上,由此简化了分析。
[0142]
加上噪声的另一示例是缩小比例。例如,矩阵a、r和s可以具有对模量q取模的元素(例如,对q取模的整数或多项式);例如通过与p/q相乘并进行舍入(例如,向上舍入或向下舍入或舍入到最接近的整数等),星号运算可以将矩阵运算的结果从对q取模向下舍入到对p取模。
[0143]
在本技术中,小写字母将被用于矩阵或多项式,应理解,在任何需要之时(例如如由矩阵的维度以及由两侧的原始密钥应该大致相等的要求所要求的)可能需要对矩阵进行转置。通常,有一种以上的方法来做到这一点;例如,通过在实施例中转置所有矩阵,可以获得备选工作实施例。使用多项式具有以下优点:相乘是可交换的,使得不需要转置运算。
[0144]
下面给出一个示例,其中,矩阵对象以大写字母给出,并且其中,包括转置。秘密密钥被定义为矩阵和注意,这样的秘密密钥矩阵实际上分别包含和独立的秘密密钥向量。原始密钥矩阵等于s
tat
r并且在中,除了由噪声相乘引入的错误。从原始密钥的条目中的每个,提取b个最高有效位,使得可以生成长度的总原始密钥。原始密钥被称为“原始”,因为存在在第二密码设备和在第一密码设备处导出的原始密钥不完
全相等的可能性。下面给出示例,使用矩阵:
[0145]
在注册阶段31中:
[0146]
第一密码设备选择公共矩阵对象a和第一私钥矩阵s。
[0147]
针对一些错误矩阵e,第一密码设备计算第一公钥矩阵b=as e。
[0148]
第一密码设备发送:a、b。
[0149]
在加密阶段32中:
[0150]
第二密码设备选择第二公钥矩阵:r
[0151]
第二密码设备计算第二公钥矩阵:u=a
t r e’;针对一些错误矩阵e’[0152]
第二密码设备计算第二原始密钥b
t r,应注意b
t r=s
t a
t r e
t r;
[0153]
第二密码设备生成密钥种子k并将封装密钥种子计算为例如,密钥种子可以具有{0、1、.、2
b-1}中的条目
[0154]
第二密码设备发送:u、c。
[0155]
在加密阶段32中,第二密码设备可以将验证流程应用于接收到的公钥。这可以指代为validate(b)并且可以实施为加密阶段32的部分。validate(b)可以在封装之前或之后或期间执行,但是如果validate(b)流程的结果不成功,例如b未验证,那么封装结果c未传送到第一密码设备。本文给出了验证流程的示例。例如,validate(b)可以验证b不是零。如果b是零,那么结果将是不成功的,例如,没有验证。
[0156]
在解密阶段33中:
[0157]
第一密码设备计算第一原始密钥s
t
u,注意s
t u=s
t a
t r s
t e’。
[0158]
第一密码设备通过计算c-s
t u来解封装,并将结果舍入为的倍数。接下来,可以从舍入中获得密钥种子k,例如,通过除以
[0159]
在解密阶段33中,第一密码设备可以将验证流程应用于接收到的公钥。这可以指代为validate(u)并且可以实施为解密阶段33的部分。validate(u)可以在封装之前或之后或期间执行,但是如果validate(u)流程的结果不成功,例如u未验证,那么封装结果c未解封装,或解封装结果(例如,k)被丢弃。
[0160]
在上面的示例中,矩阵a、b、s、u和r可以在z_p上。指数2b中的值b指示取自原始密钥的用于封装k的最高有效位的数目。在该示例中,其余的较低有效位可以用作对帐数据。例如,可以取b=4个位来用于封装。例如,模量可以被选择为p=2
12
。密钥种子可以被编码为矩阵,其中的条目在z_2^b中,例如,其中的条目选自{0、1、

、2^b-1}。矩阵e和e’可以是其条目是对p取小模的矩阵。例如,它们可以选自以下集合:
[0161]
{0,1,

,w-1}∪p-(w-1),p-(w-1) 1,

,p-1
[0162]
其中具有小的w。w的大小被选择以平衡系统安全性与系统失败率。w的低值会降低系统的失败率。
[0163]
矩阵c可以被计算为对p取模。出于带宽效率的原因,第二密码设备可以在t除以p的情况下计算并发送在恢复k时,私钥解密设备计算在这种情况下,原始密钥的用作对帐数据的位数少于可用位数。通常,较
低有效位对失败概率具有较小影响。
[0164]
代替于使用错误矩阵,可以将示例修改为在星号运算中按比例缩小以加上噪声,而不是加上显式噪声。按比例缩小具有减小带宽的优点。代替于使用矩阵,该示例可以修改为使用多项式。
[0165]
返回到图2a。示出了注册阶段31,其中,第一密码设备10生成其私钥和公钥矩阵,并且使公钥对公钥加密设备20可用。例如,公钥可以被发送到设备20。例如,公钥可以存放在公钥数据库中,设备20可以从该数据库中检索其。例如,设备10和20可以是不同的设备,或者可以是相同的设备。
[0166]
在注册阶段31期间,设备10生成第一私钥矩阵(r),并且根据第一私钥矩阵(r)来计算第一公钥矩阵(b)。例如,设备10可以生成公共矩阵(a),并且将第一公钥矩阵(b)计算为第一私钥矩阵(r)与公共矩阵(a)之间的噪声矩阵相乘。布置第一公钥矩阵(b)从第一密码设备到第二密码设备20的传送。例如,可以在消息11中将第一公钥矩阵(b)从第一密码设备发送到设备20。
[0167]
公共矩阵(a)在第二密码设备与第一密码设备之间共享,第一公钥矩阵(b)与公共矩阵(a)相关联。例如,以与公钥矩阵(b)相同的方式将公共矩阵传送到设备20。通常,将根据种子来伪随机生成矩阵a。能够通过发送种子来共享该矩阵。
[0168]
加密阶段32可以晚于注册阶段31,甚至比其晚得多。在加密阶段32中,设备20生成密钥种子(k),生成第二私钥矩阵(s),并且根据第二私钥矩阵(s)来计算第二公钥矩阵(u)。例如,设备20可以获得与第一公钥矩阵(b)相关联的公共矩阵(a),并且将第二公钥矩阵(u)计算为第二私钥矩阵与公共矩阵(a)之间的噪声矩阵相乘。可以以据其生成公共矩阵的种子的形式获得公共矩阵。在实施例中,公共矩阵是从不同的源获得的。例如,设备10和设备20两者可以从第三方获得公共矩阵。
[0169]
生成密钥种子可以随机进行。
[0170]
设备20被配置为:根据第二私钥矩阵(s)和第一公钥矩阵(b)来计算第二原始共享密钥(k*),计算第二原始共享密钥包括第二私钥矩阵(s)与第一公钥矩阵(b)之间的矩阵相乘;通过应用封装函数,利用第二原始共享密钥的至少部分来封装密钥种子(k),从而获得封装数据(c);并且将第二公钥矩阵(u)和封装数据(c)传送到第一密码设备。例如,可以在消息12中将第二公钥矩阵(u)和封装数据(c)发送到第一密码设备。
[0171]
注意,这允许密钥种子与原始密钥无关。这增强抵御主动攻击的能力。
[0172]
在第一密码设备从第二密码设备接收到第二公钥矩阵(u)和封装数据(c)之后,第一密码设备能够在解密阶段33中继续进行以根据第二公钥矩阵(u)和第一私钥矩阵(r)来计算第一原始共享密钥(k’),计算第一原始共享密钥包括第二公钥矩阵(u)与第一私钥矩阵(r)之间的矩阵相乘,并且使用第一原始共享密钥(k’)的至少部分对封装数据(c)进行解封装以获得密钥种子。
[0173]
有趣的是,在实施例中,第二公钥矩阵(u)具有比第一公钥矩阵(b)少的矩阵元素。如果所有矩阵都是正方形的并且维度相同,则第二公钥矩阵(u)和第一公钥矩阵(b)将具有相同数量的元素,但这是不需要的。这继而将意味着公钥对消息11和12的贡献将是相等的。然而,发送这些消息的环境和发送它们的设备可能会大不相同。通过将第二公钥矩阵(u)的大小选择为小于第一公钥矩阵(b)的大小,消息12的带宽需求会减少,而消息11的带宽需求
会增加。
[0174]
在实施例中,公共矩阵a是维度d
×
d的方形矩阵。第一私钥矩阵r和第一公钥矩阵b具有维度第二私钥矩阵s和第二公钥矩阵u具有维度例如,人们可以使用但这不是需要的。有趣的是,系统的安全性被认为更多地取决于系统维度d和乘积而不是取决于和的个体尺寸。后者指示能够用于导出原始密钥的长度(以位为单位)。前者影响基础格点的大小,并且因此影响基础密码问题的难解度。该方案解密失败的概率部分取决于b的值。较高的b值会加重失败率并对pke方案抵御自适应主动攻击的安全性产生不利影响。通常,b是固定的,例如采取标准化参数集的形式。
[0175]
有趣的是,不需要预定第二公钥矩阵(u)的第二维度其可以独立于对第一私钥和公钥所做的选择进行选择。特别地,其可以独立于维度来选择。在实施例中,第二维度可在第二设备20处配置。在round5中,给出了矩阵或多项式维度的许多示例。例如,人们可以使用:(参见round5,表14,第58页)
[0176][0177]
在上表中:
[0178]
n:指示私有矩阵和/或公共矩阵中多项式的阶数。值n=1指示使用对模量取模的整数。该值n可以被称为“环维度”,例如,所选择的多项式环的阶数。
[0179]
d指示系统维度,例如,公共矩阵a的列数和行数,
[0180]
μ指示用于封装密钥种子的原始密钥矩阵的元素数。这些元素可以是预先确定的(例如是标准化的),或者可以是随机选择的,或者可以是故意的,例如作为可靠的元素等。共享秘密密钥长度因此为μb;在上面的示例中,这是192
×
1=192。
[0181]
在实施例中,可以使用hayo baan等人的“round2:kem and pke based on glwr”中的更加完善的封装函数(例如如算法9)来进一步增强主动安全性。如果是这样,则密文可以包括散列g,该散列g可以由第二密码设备通过对私钥解密设备的公钥进行散列化来计算。该散列可以用于确保最终共享秘密包含来自第一密码设备和第二密码设备这两者的贡献。例如,可以使用fujisaki-okamoto变换。该散列可以例如是共享秘密的大小,在该示例中为256位。
[0182]
如上文所指出的,密钥种子可以被用于加密消息m。例如,第二密码设备可以被配置为利用密钥种子对消息(m)进行加密,并且将所述加密消息传送到第一密码设备。第一密码设备可以从第二密码设备接收加密消息(例如连同第二公钥矩阵和封装日期),并且利用密钥种子来解密加密消息。
[0183]
在实施例中,密钥种子独立于第一公钥矩阵(b)。例如,可以在不使用第一公钥矩阵(b)的情况下生成密钥种子k,例如,可以随机生成密钥种子和/或在设备20处接收到第一公钥矩阵(b)之前生成密钥种子。
[0184]
同样地,密钥种子可以独立于第一公钥矩阵(r)。密钥种子可以在计算上独立于第二私钥矩阵(s)和第二公钥矩阵(u)、封装数据(c)。计算上独立意指在攻击者的计算范围
内,第二私钥矩阵的知识不提供关于密钥种子的信息。
[0185]
密钥种子k通常是临时使用的,例如,其可以是短暂的,例如,仅用于加密单个消息m,或单个会话、协议、握手等。密钥种子k可以是对称密钥,例如,用作分组密码中的密钥。
[0186]
例如,设备20可以被配置为在封装密钥种子之后删除对消息进行加密的密钥种子和/或第二私钥矩阵。例如,可以在将封装数据发送到设备10之前删除密钥种子和/或第二私钥矩阵。同样地,设备10可以在对消息进行解密之后删除密钥种子。
[0187]
在实施例中,第二私钥矩阵是根据密钥种子导出的。例如,密钥种子可以是随机生成的(可以是真的也可以是伪的),并且然后用作针对密钥导出函数(例如,散列函数)的输入以导出种子;也可能有额外的输入,例如,消息、第一公钥矩阵等。然后,将种子用于生成第二私钥矩阵,例如,作为取决于种子的确定性伪随机函数。优选地,密钥导出函数被选择为使得不能根据第二私钥矩阵计算密钥种子。
[0188]
这具有以下效果:在设备10导出密钥种子之后,设备10能够例如通过应用相同的密钥导出函数并根据该密钥导出函数计算第二私钥矩阵来根据密钥种子重建第二私钥矩阵。接下来,设备10能够验证第二公钥和/或封装数据是否被正确计算。这样做的优点是主动攻击更难完成得多。如果设备10发现异常,例如接收到的数据与重新计算的第二公钥和/或重新计算的封装数据之间存在差异,则设备10可以采取适当的动作,例如生成警告信号,中止解密第二消息等。
[0189]
根据密钥种子导出第二私钥矩阵具有将安全性朝向cca安全系统的安全性增加的优点。这是有利的,特别地如果第一公钥矩阵被生成一次并用于许多消息。
[0190]
在实施例中,第二密码设备的处理器被配置为计算帮助者数据以降低在第一密码设备处获得密钥种子的错误率。基于噪声矩阵相乘的公钥加密的本质是,存在在私钥解密密钥的一侧重建密钥种子可能失败的机会。可以以各种方式降低失败概率,其中之一是计算并发送帮助私钥解密设备到达正确密钥种子的帮助者数据。
[0191]
例如,第一密码设备可以被配置为从第二密码设备接收帮助者数据,并应用帮助者数据来降低在第一密码设备处获得密钥种子的错误率。
[0192]
存在可以使用的若干类型的帮助者数据。在上文给出的示例中,使用了一种方法,即所谓的对帐数据。第二原始密钥的部分可以被用于封装密钥种子,并且其部分可以用作对帐数据。
[0193]
例如,在实施例中,第二原始密钥是矩阵,封装密钥种子(k)可以包括:将密钥种子的位添加到第二原始密钥矩阵的元素的至少部分的最高有效部分,并且丢弃第二原始密钥矩阵的元素的至少部分的零个或多个最低有效位。在实施例中,未添加到密钥种子以对其进行封装的所有位可以用作对帐数据。然而,为了减少带宽,可以丢弃最低有效位中的一个或多个。请注意,并非必须使用原始密钥矩阵的所有矩阵元素。未使用的元素能够全部丢弃。在设备10处,对封装数据进行解封装可以包括:丢弃第一原始密钥矩阵的元素的至少部分的零或更多个最低有效位,从封装数据中减去第一原始密钥矩阵的元素的至少部分,并且将减法结果进行舍入。有趣的是,帮助者数据很容易被集成在封装密钥种子中。
[0194]
在实施例中,第二密码设备被配置为执行以下操作中的一项或多项:
[0195]
a)将可靠的位函数应用于第二原始共享密钥(k*),从而选择第二原始共享密钥的部分,获得指示第二原始共享密钥的元素的可靠索引(用于封装的位是根据所指示的元素
导出的);并且将可靠索引传送到第一密码设备,和/或
[0196]
b)生成针对第二原始共享密钥的至少部分的对帐数据(h),该对帐数据包括允许减小在第二密码设备和第一密码设备处导出的第一原始密钥和第二原始密钥之间的差异的信息,并且将对帐数据(h)传送到第一密码设备,和/或
[0197]
c)生成针对密钥种子的奇偶校验位,密钥种子和奇偶校验位根据纠错码形成码字,封装密钥种子包括封装码字。
[0198]
同样,第一密码设备可以被配置为进行以下操作中的一项或多项:
[0199]
a)从第二密码设备接收可靠索引,从而选择由可靠索引指示的第一原始共享密钥的部分,
[0200]
b)接收针对第一原始共享密钥(k’)的至少部分的对帐数据(h),该对帐数据包括允许减少在第二密码设备和第一密码设备处导出的第一原始密钥和第二原始密钥之间的差异的信息,将对帐函数应用于第一原始共享密钥和对帐数据的至少部分,并且
[0201]
c)对封装数据(c)进行解封装以获得近码字,根据纠错码来应用纠错。
[0202]
图2b示意性地示出了公钥加密和私钥解密的示例。公钥加密侧由第二密码设备20执行。私钥解密侧由第一密码设备10执行。参考图2b图示的协议的各种元素可以使用round5中所示的算法和/或公式来实施。
[0203]
注册阶段31可以包括选择,例如种子σ的随机选择,从该种子σ可以导出公共对象,例如矩阵或多项式。同样,第一私钥s可以被生成,例如随机生成。例如,第一私钥s可以具有以绝对值绑定的元素,例如值|x|≤s,例如s=1。s的较大值也是可能的。后者被称为三元秘密。s可以经受其他条件生成,例如,特定权重或权重限制,或平衡等。公钥b是使用噪声相乘从公共对象a和s计算的。例如,可以计算相乘as,如果需要,该相乘as可以对减小多项式和/或模进行取模减小。接下来,相乘结果可能被噪声化,例如,通过应用缩放算子注册阶段31可以包括来自round5的算法1。
[0204]
加密阶段32可以包括验证b,如下文进一步解释的。例如,可以使用与用于第一私钥s相同或类似的过程来生成第二私钥r。第二公钥也可以以类似的方式计算。但是,如果使用矩阵,则可以使用公共矩阵a的转置。相乘结果可能被噪声化,例如,通过应用缩放算子
[0205]
密钥种子m可以被选择,例如随机选择。
[0206]
可以根据第二私钥r和第一公钥b计算原始密钥,例如,使用噪声相乘。并且此处,可能需要添加转置,例如,到b。加上噪声可以在相乘之后直接完成,但也可以与封装操作的剩余部分集成。密钥种子m可以利用原始密钥封装。
[0207]
例如,该相乘可以根据需要对多项式或整数模取模来减少。根据结果,可以采用多个位用于封装。例如,可以选择一个或多个或所有值,从其可以使用位中的一个或多个。密钥种子m可以利用从原始密钥取得的位进行封装。
[0208]
在添加原始密钥(或其部分)之前,可以对密钥种子m应用纠错算法,例如xef_计算算法。封装的一种方式是通过乘以因子来按比例放大密钥种子或码字,例如,该因子可以是q/2或q/4等。最后,可以通过应用缩放算子来添加噪声。加密阶段32可以包括round5的算法2。第二公钥和封装值v被传送到第一密码设备。
[0209]
可以通过对密钥种子应用散列根据密钥种子来计算通信密钥或另外的密钥或传
输密钥k。散列可以包括另外的信息,例如,第二公钥、封装密钥种子等。通信密钥k可以被用于另外的通信,未在图2b中示出,例如,作为对称密钥,例如用于分组密码、mac算子等。加密阶段32可以包括round5的算法2,例如算法5或8。
[0210]
解密阶段33可以包括将验证流程应用于第二公钥u。从第二公钥u和第一私钥s计算第二原始密钥,例如通过相乘,可能跟随有对整数和/或多项式模的模运算。注意,此处不需要添加噪声。第二原始密钥被用于对密钥种子m进行解封装。如果s是矩阵,那么可能需要转置。注意,计算原始密钥可以与轮常数组合,例如作为s
t
(u h4j)。如果密钥种子被封装为码字,则可以应用纠错算法,例如xef_解码。解密阶段33可以包括round5的算法3。最后,可以以与第二密码设备所做相同的方式获得通信密钥k。例如,解密阶段33可以包括算法6或9。
[0211]
许多变型对于关于图2a和图2b所示的算法是可能的;可以包括各种额外的步骤,或者可以省略所示的步骤中的一些。例如,可靠位是更可能在两侧均等地计算的位。例如,原始密钥矩阵的一些元素可以被确定为可靠,而其他不可靠的元素可以被丢弃。对于所选择的矩阵元素,可以获得对帐数据。最后,可以计算奇偶校验位以计算其他错误。这三种类型的帮助者数据是独立的,因为可以使用每一种或每两种或全部三种帮助者数据来降低私钥解密的失败率。
[0212]
在实施例中,可以组合对帐数据和奇偶校验位,但不是可靠位。该方法的优点是不需要共享关于元素的大小的信息。帮助者数据可以包括在封装数据中,但是也可以独立地从设备20传送到设备10。对帐数据可以方便地与封装密钥种子集成,例如,如本文所图示的。图3中图示了其中奇偶校验位和对帐数据被组合但非可靠位的实施例的示例。
[0213]
在第二密码设备或第一密码设备的实施例中,可靠位是所指示的元素的一个或多个最高有效位,针对所指示的元素的对帐数据是所指示的元素的在可靠的有效位之后的一个或多个位,可以丢弃所指示的元素的一个或多个最低有效位。所指示的元素(即,可靠的元素)可以从第二密码设备传送到第一密码设备,例如,它们在矩阵中的位置。
[0214]
在第一密码设备的实施例中,由可靠索引指示的原始密钥中的元素被选择并且被替换为与对应的对帐数据一致的经修改的元素。例如,经修改的元素可以使所选择的元素与经修改的元素之间的lee距离最小化。可以将可靠位作为经修改的元素的一个或多个最高有效位来获得。
[0215]
在实施例中,确定经修改的元素,使得它们与对应的对帐数据一致,以至于它们不会被第二密码设备丢弃。经修改的元素使所选择的元素与经修改的元素之间的lee距离最小化。
[0216]
根据实施例的公钥加密可以在各种现有协议中使用。例如,实施例可以与诸如tls、ipsec、vpn的协议集成。例如:
[0217]
tls1.3:客户端发送client_hello。client_hello可以包括公钥。代替于具有公钥,client_hello可以包括url,其指示可以在何处下载公钥。如果服务器还没有公钥,例如缓存,那么服务器可以前进到下载公钥并将其本地存储。利用公钥,服务器可以加密对称密钥或密钥种子并将其发送给客户端,使得它可以用作导出针对记录层的对称密钥的主密钥。在该示例中,客户端用作第一密码设备。
[0218]
tls1.2:在该示例中,是另一种方式。客户端可以发送请求,并且服务器发送可以
获得服务器公钥的url。如果公钥尚不可用,则客户端可以下载。并且一旦客户端具有公钥,其就可以前进到加密密钥种子,例如以用于记录层中。在该示例中,客户端充当第二密码设备。
[0219]
请注意,可以预先分配公钥。例如,在浏览器中,可以预先分配一个或多个公钥矩阵(例如,多个公钥矩阵)。例如,可以利用公钥id(例如,密钥的散列)来指示公钥,使得软件(例如,浏览器)能够验证是否通过预先分配获得了公钥。在预先分配的情形中,带宽的不对称是优点。例如,在预先分配期间,如果公钥矩阵较大,则这不是问题,但是在使用期间,消息的大小减小。而且,在比如说例如基于tls的vpn中,可以在通信方中的一方或双方中预先配置公钥。
[0220]
在实施例中,设备10可以被配置为发送第一问候消息,该第一问候消息列出诸如ssl或tls版本之类的密码信息,或者以客户端的偏好顺序、所支持的密码套件等列出密码信息。响应于第一问候消息,设备20可以发送第二问候消息。第二问候消息可以包含类似的细节。设备20还可以在第二问候消息中发送其数字证书。设备10可以验证证书。第一问候消息和/或第二问候消息可以包括公钥或对公钥的指示。在第二问候消息和/或随后的消息中,商定一个或多个密钥种子。密钥种子可以用于加密或认证设备10和20之间的后续通信。如果商定了多个密钥种子,则可以将它们组合成单个密钥,例如,可以将它们散列在一起或者进行xor-ed等。
[0221]
图3示意性地示出了公钥加密和私钥解密的示例。在图3中,使用了以下符号。
[0222]
·
parity_bits是指用于纠错的信息
[0223]
·
obain_parity_bits(k)意指获得k的一些奇偶校验位。例如,可以根据纠错码来生成奇偶校验位。
[0224]
·
error_correct(k,parity_bits)意指使用parity_bits来校正k或parity_bits中的潜在错误,从而获得更可能无错误的k的版本。
[0225]
根据图3的实施例使用不同类型的帮助者数据。例如,根据实施例,设备20计算密钥种子的奇偶校验位。例如,奇偶校验位与密钥种子一起可以是根据纠错码(例如,bch码)的码字。例如,如本文所述地利用原始密钥封装码字。如果需要,封装可以包括对帐数据。为了解封装,设备10首先应用对帐数据,从而获得近码字,例如,其中可能存在位错误的码字。可以使用与纠错码相关联的纠错算法来校正近码字。纠错和对帐数据的使用提高了解密失败的概率,从而允许较小的参数并通过较小的密钥大小来提高性能。奇偶校验位和对帐数据的组合是优选组合,从而允许使用公钥矩阵的小的大小。
[0226]
在协议的实施例中,第一公钥包含个向量。密文包括第二公钥u和封装数据c。第二公钥矩阵u可以是维度d的向量,其中,元素在z_p中。为了最小化密文的大小,我们可以使用这意指原始密钥至多将具有元素。为了优化原始共享秘密的大小,我们将从尽可能多的元素中获取b位,因此使用封装数据c对密钥种子进行加密,并且可能具有个元素,使得可以封装长度κ=μb的密钥种子。b是从每个向量条目提取的位数。不需要例如,一个可能具有例如
[0227]
第一公钥矩阵可以包括个长度d的向量。据此能够封装其中,κ是密钥种子长度,并且存在用作奇偶校验位的parity_bits_length位。
[0228]
由于需要传输额外奇偶校验位,因此向量c将变得parity_bits_length
×
log
2 t
更长。然而,由于具有这些奇偶校验位,该方案能够更好地处理解密错误,使得能够选择q和p的较小值。由于p较小,d也可能减小,这是因为我们能够保持相同的安全水平。总之,通过以这种方式加上纠错码,我们能够进一步减小密文的大小,即使密文以较长的公钥为代价也可以。选择b=1是有效的,并且使用它,我们然后需要
[0229]
奇偶校验位允许校正位错误。例如,可以使用纠错码xef,该纠错码xef允许3位纠错。在sauvik bhattacharya等人的“round5:compact and fast post-quantum public-key encryption”中描述了xef。使用xef的优点是能够在恒定时间内高效地完成解码,由此避免了定时攻击。
[0230]
在该实施例中,密文大小将略大于1kb。这意味着这样的构造能够实现不需要密文碎片的非环形配置。重要的是将密文的大小减小到大约1.5kb以下,因为这样避免在基于包的通信中的碎片,在基于包的通信中,例如在互联网上使用的包大约为2kb。
[0231]
请注意,通过缩放引入的噪声量相对高。在上面的示例中,秘密矩阵元素的16位减少为公共矩阵元素的8位;减少了50%。与之前未给出奇偶校验位的示例相比,将14位减少为12位,减少了大约15%。同样,秘密位的位长与公共位的位长之间的差异已经从2位增加到8位。较高的噪声允许协议的格点部分的较高的效率,但是以较高的失败率为代价。然后使用奇偶校验位来减少后者。
[0232]
在实施例中,且例如,其中,κ≥128。例如,可以选择奇偶校验位的数量,使得它们能够校正至少3个错误。在实施例中,log
2 p/log
2 q≤0.85,或≤0.72,或≤0.7,或≤0.6,或甚至如以上实施例中那样≤0.5,或甚至更小。请注意,由于原始共享密钥中的所有元素都被使用,例如,因此没有使用所谓的可靠位。这样的高噪声可以与低(特别是与或)等相结合。
[0233]
图4示意性地示出了公钥加密和私钥解密的示例。图4的实施例包括三个不同的纠错源:安全位、对帐数据和奇偶校验位。
[0234]
在图4中:
[0235]
·
h表示帮助者数据,其包括对帐位。
[0236]
·
get_reconciliation(k)是从raw_key k中返回对帐位的函数。
[0237]
·
reconciliate(k,h)是在给定对帐位h的情况下对raw_key k进行对帐的函数。
[0238]
·
safe_bits()返回两个值:(i)实际可靠值;以及(ii)关键位的位置,由于所获得的值距离量化边界较远,因此关键位的位置能够引起较低的失败概率。由safe_bits()返回的实际值以后例如用于封装。位置被交换给另一方,使得另一方知道需要哪些位置。
[0239]
有趣的是,当交换码字和从其随机生成的密钥时,可以使用这三种信息源来减少失败概率。此外,由于能够随机生成码字,因此提高了主动安全性。请注意,可以根据码字导出第二私钥矩阵,以进一步提高主动安全性。该码字可以包括密钥种子和奇偶校验位。这些源包括可靠位的使用,为原始密钥的系数提取的对帐数据,以及作为码字的部分的纠错冗余信息(例如,奇偶校验位)。
[0240]
应当强调的是,不需要组合不同的方式来降低故障概率。例如,安全位或可靠位的使用完全是任选的。
[0241]
例如,在实施例中,设备10和20可以在原始密钥上达成一致,比如在z_q中具有n个系数的矩阵密钥k*。例如,原始密钥矩阵中的元素可以被映射到密钥种子的部分,例如被映
射到一个或多个位。例如,z_q中的值的一半可以被映射到0,并且它们的一半可以被映射到1,例如,b=1。选择可靠位可以通过选择例如距离解码边界最远的一些数目的(比如,mu个)系数来完成,使得降低出错的概率。
[0242]
密钥对帐数据可以是由第二密码设备例如针对原始密钥(比如,矩阵密钥)的所选择的可靠系数(比如,所选择的mu个系数)提取的信息。对帐信息帮助第一密码设备做出相同的决定,即,是否将原始密钥的特定系数映射到码字的哪个部分。并非只需要对所选择的可靠系数做出该操作,这意味着需要较少工作。
[0243]
纠错信息可以是奇偶校验位。可以从随机生成的二进制密钥k、消息m或预密钥中提取奇偶校验位,使得第二设备封装的信息具有一些冗余性。以这种方式,即使之前发生错误,设备10也能够校正它们。因此,如果要传输的密钥k的长度为kappa位并且存在(mu

kappa)个奇偶校验位,则这些奇偶校验位帮助设备10确保密钥k的kappa位是正确的。
[0244]
许多量子抗性公钥加密的问题是它们具有一定的失败概率。例如,第一密码设备和第二密码设备最初在有噪声的原始密钥上达成一致,其然后例如通过对帐数据对有噪声的原始密钥进行对帐。可靠位函数允许第二密码设备(例如,首先导出原始密钥的一方)识别出第一密码设备更可能以相同的方式导出原始密钥中的哪些位以及原始密钥中的哪些位较不可能相同。
[0245]
可靠位函数的直接实施方式定义被采样以获得系数位的系数的两个或更多个中心点。(例如根据阈值)距离中心点太远的系数可以被丢弃,而其余部分可以被采样到与中心点相关联的值。例如,中心点的数目可以是2的幂。例如,矩阵元素可以取自各种不同的环等。
[0246]
可靠位采样使用以下假设:密钥不需要由环维度给出的所有位。通常,基础矩阵的维度y比所需的密钥长度大得多。例如,第二密码设备可以选择y中最可能达成一致的m个索引。这些安全系数可以是最接近被映射到零位或一位(k=0和k=1)的系数范围的中心点的那些系数。例如,在对q取模的环中,如果系数在范围内,则系数可以被映射到0,如果系数在范围内,则系数可以被映射到1,反之亦然。如果系数不在这两个范围内,则它不是可靠位。该值b部分确定位的可靠性。例如,在这种情况下,可以将其选择为q/8;针对b的较小的值提供较高的可靠性,但较少密钥位。在这种情况下,中心点可以是q/4和3q/4,或者是其舍入结果。
[0247]
应用上述流程的第二密码设备获得可靠位和与其对应的密钥位的索引。可以将可靠索引传递到第一密码设备,而不可以将可靠密钥位传递到第一密码设备。第一密码设备能够根据由第二密码设备指示的索引处的位来获得密钥位。由于这些位更可靠,因此错误率将更低。
[0248]
可靠位函数的其他实施方式能够在文章hila 5中找到,通过引用将其包括在本文中。例如,可以应用第3章中的算法。发明人发现,可靠位函数可以应用于多种情况,例如,(例如特别是在矩阵上)具有不同的底层环或对象的情况。
[0249]
在实施例中,两方生成两个原始密钥,例如,近似但不完全等同的矩阵。为了达成精确一致,发送了特定对帐数据。在同一申请人于2016年11月4日向欧洲专利局提交的申请号为16197277.3的专利申请(标题为“reaching agreement on a secret value”)中说明
了这样做的方案;例如,在实施例中,可以使用第7-10页上的方法进行对帐。也可以采用在引用的专利申请中的其他地方公开的变型。
[0250]
在该申请中,我们将为以下三个函数使用以下符号:
[0251]
1、舍入函数对于q,bh,b∈z,bh≥1,b《log2q-bh,令
[0252]
那么,
[0253][0254]
直观地,提取的b个最高有效位,其中,第二分量是舍入因子,以确保无偏置的舍入错误。b指示从符号v中提取的位的数目,并且bh指示帮助者数据位的数目。在实施例中,q可以是2的幂。
[0255]
2、交叉舍入函数对于q,bh,b∈z,bh》1,b《log2q-bh,令
[0256]
那么,
[0257][0258]
直观地,提取v的(b bh)个最高有效位中的bh个最低有效位。
[0259]
3、对帐函数rec(w,b):
[0260]
对于
[0261][0262]
其中,v是最接近w的元素,使得最接近的元素w可以根据lee距离(例如,min(|v-w|,q-|v-w|))来获得。
[0263]
这三个函数能够逐元素地应用于矩阵。在本文中,以上引用的对帐函数用作示例。如上所述,也可以使用以上引用的申请中的对帐方法。能够应用交叉舍入函数来获得对帐数据,并且能够应用舍入函数来获得经过对帐的数据(例如,可靠位)。当以后在对帐函数中使用对帐数据时,经过对帐的数据将被恢复。换句话说:假设v和w在彼此阈值距离内。
[0264]
弱公钥b被认为是安全漏洞,因为如果没有由第二密码密钥拒绝,弱公钥b(比如说具有0的值)甚至可能允许被动窃听者读取会话流量。
[0265]
如上文所解释的,许多基于格点的公钥加密方案,诸如例如在nist pqc标准化项目中考虑的。许多基于格点的公钥加密方案进行密钥生成阶段,其中,公钥分量一般来说计算为b=as e,其中,a是公共参数,并且s和e是秘密的。第一密码设备将(a,b)发送到第二密码设备等。接下来,这些方案可能要求第二加密设备来封装消息m,例如密钥种子,如类似于v=br e” q/2m的一些事物。第二密码设备向第一密码设备发送回u=ar e’和v等。
[0266]
像这样的基于格点的公钥加密方案的示例包括round5(例如,规范的第17页,算法1和2),frodokem(规范的第17页,算法9和10),newhope(第7页,算法1和2)、saber(第7页,算法1和2)或kyber(规范的第9页,算法4和5)。
[0267]
如果第二公钥b具有异常值,那么这可能不安全。例如,如果b,那么v泄露了封装消息m。之所以如此,是因为br e”与q/2m相比是小的。出于任何原因,第二公钥可能很小,例如,偶然地,例如程序员错误,或作为攻击的部分,例如,使以后的否认可能。
[0268]
同样地,特制的公钥u可能泄露关于私钥的信息。对于使用长期私钥的一方,例如
第一密码设备,该问题最为明显。例如,对于小的或具有许多零分量的特制密钥u,可能出现此问题。该性质的攻击的示例在论文“an efficient key mismatch attack on the nist second round candidate kyber”(yue qin、chi cheng,member,ieee和jintai ding,cryptology eprint archive:report 2019/1343)中给出,该论文通过引用包括在本文中。
[0269]
下面给出了可以应用于公钥的验证流程的若干示例。第一和第二密码设备中的一个或两个可以配置有验证流程。
[0270]
在接收到公钥b(或u)后,密码设备可以检查公钥的值是否遵循对应的概率分布。这可以通过执行统计测试来完成,诸如卡方测试、二项式测试或多项式测试,例如,参见david diez等人的第四版“openintro statistics”。例如,在非环参数集的情况下,可以对b和/或u公共参数中的和分量中的每个执行这些测试。
[0271]
卡方测试可以被用于验证b和/或u是否均匀分布。例如,密码设备可以被配置为:(i)计算公共参数的直方图,例如b或u,(ii)计算其卡方统计量,并且(iii)将其与固定的预计算值进行比较。临界值可以由自由度确定,例如,分箱数-1和p值。p值可以被选择为小于round5参数集的目标故障概率。优选地,对于卡方测试,每个分箱的预期元素的数目至少是10。此外,对于更大数目的分箱,测试倾向于更准确。在实施例中,分箱的数目可以设定为或设定为或大约。
[0272]
在实施例中,测试被执行两次:一次在从公钥b和/或u导出的直方图版本上,以及一次在移动公钥分量之后在从公钥导出的直方图上。例如,公钥分量可以被移动k/2,其中,k是分箱大小。这具有更好地检测接近连续分箱的最小值和最大值的值的非均匀分布的优点。
[0273]
二项式测试可以被用于验证某个值(例如零值)是否经常意外出现。给定一个值或一组值的预期概率,我们可以获得阈值,使得二项式分布的尾部(指示一个或多个值出现比所述阈值更频繁的可能性多么大)小于round5参数集的目标故障概率。
[0274]
在实施例中,该检查在公钥b和/或u的分量的可能值的整个范围内执行。这特别有利地使用平衡秘密,例如如在round5中。该测试可以直接在b和u上执行。二项式测试也可以在从公钥导出的直方图上执行。这具有减少存储器需要的优点。至于卡方测试,可以有利地对非移动直方图和移动直方图执行测试;即,从接收到的公钥获得的直方图和对公钥分量进行移动之后获得的直方图。例如,公钥分量可以被移动k/2,其中,k是分箱大小。
[0275]
卡方测试和二项式测试可能涉及两个阈值。为了获得卡方阈值,即临界值(cv),人们可以获得上正则化不完全伽马函数小于目标故障概率的最小cv。换句话说,人们可以计算累积分布函数的上部分的积分小于目标故障概率的最小值cv。
[0276][0277]
其中γ()是gamma函数,并且df是指自由度。类似地,针对二项分布的阈值可以被确定为最小值c,使得:
[0278][0279]
其中:
[0280][0281]
例如,round5的参数集r5nd_1cpa_0d可以使用以下两个阈值用于卡方测试和二项式测试:297和43。第一值考虑使用32的分箱大小的交换参数集的直方图版本。第二阈值认为对b或u的每个分量的p个潜在值中的每个进行了检查。下表包括包含函数checkpublicparameter()的c代码,该函数根据以上描述对输入公共参数执行chi2测试和二项式测试。在该表中,params_d是b的分量的数目,并且params_p是指分量中的每个分量的大小。如果分箱的数目是2的幂,则该表给出了优化的实施方式。
[0282]
[0283]
[0284]
[0285][0286]
例如,在round5和saber和frodo中,公钥的值均匀分布在z_p(frodo中的z_q)中。可以计算具有k个分箱的直方图,例如k》2,并且计算b中的元素在p/k分箱上的分布。例如,可以选择k使得p/k很小,例如p/k=4。针对p/k的较大值也是可能的。在实施例中,k是2的幂。例如,由于round5和saber和frodo具有p(和/或q)是2的幂,因此针对k值也使用2的幂。
[0287]
如果人们考虑p/k个分箱,则值小于k的概率等于k/p。恰好d中c个值小于k的概率可以计算为:
[0288][0289]
上述公式针对每个k成立,不要求k是2的幂。存在超过d-c_max个不同值小于v的概率可以计算为p(d,d-c)与c从0到但不包括c_max的和。因此,人们可以计算公钥具有如此多小条目的概率非常小的最大值c。
[0290]
例如,考虑具有d个值的公钥,例如d-1次的多项式公钥。对于d=700、p=256和k=256/4=64,找到公钥b使得最多仅6个项大于64的概率低于2^{-256}。利用这一点,假设上述值的验证流程如下:
[0291]
k=p/4
[0292]
分布[p/k]={0,0,0,0}
[0293]
对于i=0至d{分布[(b[i]》》logk)] }
[0294]
如果分布[0]》d-6{拒绝公钥}
[0295]
上述算法可以在接收到公钥b或u时执行。接收设备首先设定适合的k值,如上文所描述的。然后,它初始化被称为分布的阵列,其中,p/k=4个分箱到0。接下来,在以上示例b中,接收设备循环接收到的公钥的系数。对于每个系数,其执行log k位右侧的位移,即log p

2位,使得仅保留两个最高有效位,并且使用这两个位来增加分布阵列中的对应分箱。在最后一行中,如果第一分箱具有高于d-6的值,那么拒绝公钥b。通过拒绝分布阵列中的其他元素,可以更改或扩展测试。
[0296]
例如,该检查可以应用于本文所描述的密码协议,应用于诸如round5、saber、frodo等的协议。注意,上述实施方式假设k和p是2的幂并分类为p/k个分箱。但是,这不是必要的,例如,如果p不是2的幂,则人们可以检查多少值小于k。还应注意,如果密钥具有太多条目接近0,但也接近p-1,或接近两者,则可以测试它。
[0297]
在所有候选中特别重要的特定情况是检查b不等于0。另一潜在的弱b值是使所有值相等或几乎相等的值;后者对于使用平衡三元秘密(诸如round5)的方案尤其重要。
[0298]
诸如newhope或kyber的方案在变换域(在这种情况下ntt域)中执行多项式相乘,以加速运算。但是,验证公钥仍然是可能的。例如,人们可以通过首先将公钥变换回变换域到普通域来直接应用本文所描述的技术。然而,一些测试可以直接在变换域中执行。例如,人们可以检查变换域中的系数的乘积的线性组合(其可以在数学上示出为等于原始域中的公钥的欧几里得范数)是否具有不太可能的值,特别是不太可能的小值。
[0299]
例如,newhope利用来自{0、1、..、q-1}的符号字符串进行操作,其中,长度n的q=12289等于512或1024。这样的字符串g的理论变换(ntt)被定义为g=(g0,g1,..,g
n-1
)=ntt(g0,g1,..,g
n-1
)=ntt(g),其中,此处,ω是z_q中的原始n次单位根,并且γ2=ω。
[0300]
根据newhope规范中的表2,如果n=512,则γ=10968,并且如果n=1024,则γ=7。ntt是可逆的;如果g=ntt(g),那么此处,n-1
是z_q中满足n
·
n-1
≡1mod q的整数。如果f、g是长度n的序列,并且ei=f
igi
γi(对于0≤i≤n-1),那么其可以在数学上示出:
[0301][0302]
特别地,如果fi=giω-i
,那么
[0303]
通过直接计算,使得以下成立:
[0304][0305]
因此,假设我们具有表示为“正常_阈值”的阈值,适用于变换域中的公钥的检查,例如,newhope如下:
[0306]
正常=0
[0307]
对于j=0至n{正常 =b[i]*b[n-1-i]}
[0308]
正常=正常*n^(-1)mod q.
[0309]
如果正常《正常_阈值{拒绝公钥}
[0310]
在第一行中,它将正常初始化为0。在第二行中,它通过接收到的公钥的系数并计算(**)中的在第三行中,它乘以n-1
并减少模块q以获得范数。如果范数小于阈值,则拒绝公钥。
[0311]
这很有效,因为它成功地检测到非常小的密钥b和u。由于范数是模q计算的,因此可能发生一些大密钥b和u被错误分类的情况。
[0312]
因此,代替于完全拒绝,人们可以使用上述算法作为要求执行更昂贵操作的指示符,即执行返回到正常域的变换,并且然后执行本文列出的其他检查中的任何。
[0313]
额外的检查是查看对应于原始域中的条目的总和的系数的线性组合是否低于阈值。实际上,在(*)中取fi=ω-i
,我们发现通过直接计算,通过直接计算,此处,我们使用ωn=1和γ2=ω,使得γn=-1。因此,在ntt域中对公钥b的测试是如果对q取模低于阈值,或在形式[0,t1)∪[q-t2,q-1]的集合中。
[0314]
使用具有特殊性质的公钥对长期私钥的攻击可能要求在由攻击者获得有用的信息量之前多次调用解封装算法。攻击者可以通过调谐其公钥来绕过验证流程,使得验证流程不触发警报(例如,用于攻击的公钥u具有7个非零元素,而不是仅6个),但代价是要求更多调用。这可以通过包括状态完整验证流程来解决,例如,通过保持先前交换的状态。如果接收到超过x个偏离标准的消息,则可能触发警报。例如,如果通过了第一阈值,则可能拒绝公钥或可能直接生成警报,但是如果通过了不太严格的第二阈值,则可以针对私钥或发送
公钥的密码设备或组合增加计数。如果计数超过阈值,则拒绝公钥,或者可以使用较不严格的测试而不是更严格的测试。
[0315]
例如,严格阈值可以是6个非零系数(或更少),并且较不严格的阈值可以是7个非零系数。当公钥具有6个非零系数或更少时,其被拒绝。如果公钥具有7个非零系数,则计数增加。如果计数超过阈值(其可能仅是2),则公钥仍然被拒绝。例如,如果接收到具有7个非零系数的两个公钥,则后者被拒绝,此外,从那时起,7个非零系数可能足以拒绝公钥。
[0316]
图5示意性地示出了根据实施例的密码系统301的示例。系统301包括第一密码设备300、第二密码设备350以及任选的公钥存储库302。例如,第一设备300和第二设备350可以在被实施在诸如第一设备10、100和/或第二设备20、200的设备上。密码系统301可以实施如图4所图示的公钥加密系统。密码系统301可以根据需要而(例如通过省略在所述实施例中未使用的元素)适应于其他实施例。
[0317]
第一设备300和第二设备350被配置为执行密码协议。它们具有将数据从一个设备安全地传递到另一个设备的能力。各种密码协议可以使用这种相同的能力。作为示例,描述了使用这种能力的两个协议。
[0318]
例如,第一设备和第二设备可以被配置为公钥加密(例如被设计为允许其他设备(比如,第二设备350)对消息(m)进行加密),使得特定设备(比如,第一设备300)能够对加密消息进行解密。然而,除了加密设备和解密设备(例如,第二设备350和第一设备300)之外,不能由其他设备获得公钥加密消息的内容。在进行公钥加密的情况下,可以由多个第二设备使用第一设备的相同公钥(例如,相同的第一公钥和公共对象)来向第一公共设备发送加密消息。即使第二设备使用相同的公钥来对消息进行加密,它们也不能对另一设备的通信进行解密。
[0319]
第一设备300和第二设备350分别包括通信接口305和355。通信接口被配置为彼此通信。本文描述了例如通过有线或无线网络的通信接口的示例。
[0320]
第一设备300包括被配置为生成第一私钥(r)和根据第一私钥导出的第一公钥(b)的公钥/私钥生成器315。根据私钥导出公钥可以使用公共对象(a),例如,公共矩阵或公共多项式。例如,生成公钥可以涉及与公共对象相乘和/或引入一些类型的噪声,例如按比例缩小相乘结果,加上噪声项等。私钥和公共对象可以是矩阵,例如,在有限域或环上的矩阵。
[0321]
可以短暂地生成第一私钥和第一公钥。例如,后者可以针对密钥协商协议来完成,特别是在第一设备和第二设备使用一些其他认证机制(例如,带外机制,例如,基于证书的认证等)来彼此认证的情况下。也可以生成第一私钥和第一公钥以供长期使用。例如,第一公钥可以被存储在外部公钥存储库302中。公钥存储库302也可以存储公共对象(a)或用于公共对象(a)的种子。公钥存储库302可以被配置为对接收到的公钥执行公钥验证流程。例如,公钥储存器302可以拒绝未通过验证流程的密钥。例如,太小的公钥(例如具有太多的小元素)可能被拒绝。小元素可以被确定为绝对值小于界限。
[0322]
第一公钥例如通过通信接口305和355从第一设备300被传送到第二设备350。这可以通过直接通信来完成,也可以例如通过公钥存储库302来间接完成。如果需要,还可以与第一公钥一起传送公共对象(a)。例如,可以通过发送可以根据其生成公共对象(a)的种子来传送公共对象。
[0323]
第二设备350可以包括公钥获得器360,公钥获得器360例如被配置为从公钥存储
库302中检索第一公钥。例如,这种类型的获得适合于公钥加密。然而,公钥也可以直接从第一设备获得,例如在电子邮件中可能是越界的。可以存储公钥,直到需要进行公钥加密交换为止。然而,也可以接收第一公钥以供立即使用,例如用于密钥共享操作,例如,在这种情况下,可以短暂地生成第一公钥和/或公共对象。公钥获得者360可以被配置为执行公钥验证流程。
[0324]
第二设备350可以包括被配置为生成第二私钥(s)并根据第二私钥(s)生成第二公钥(u)的公钥/私钥生成器365。与第一私钥(r)和第一公钥(b)相比,第二私钥(s)和第二公钥(u)可以更小,例如具有更少的条目。
[0325]
第二公钥使用与生成第一公钥时相同的公共对象。第一私钥和第二私钥是其各自设备的私钥。如果需要,它们可以与受信方共享,例如用于备份、密钥托管等。公钥和公共对象不一定针对安全性是秘密的;尽管如此,如果期望,它们中的一个或多个仍然可以是针对第一设备和第二设备私有的。例如,第一公钥只可以与第二设备共享,反之亦然。
[0326]
第二设备350可以包括码字生成器370。码字生成器370被配置为根据纠错码来生成码字。纠错码可以是线性码或非线性码。例如,纠错码可以是bch码、reed-solomon码、hadamard码等。可以级联多个代码。级联代码是根据两个或更多个较简单代码构成以便以合理的复杂度实现良好性能的纠错码。例如,可以将hadamard码与bch码级联。
[0327]
在码字中编码的是用于封装的数据。例如,码字可以被划分为数据部分(例如,数据位)和奇偶校验部分(例如,奇偶校验位)。例如,用于封装的数据可以被包括在数据位中。用于生成码字的一种方法是生成数据部分并根据该数据部分来计算奇偶校验位。例如,可以将具有数据位的数据向量与奇偶矩阵进行矩阵相乘以获得奇偶校验位,或者甚至是完整的码字。可以通过组合用于封装的数据与奇偶校验位来获得码字。例如,可以对数据部分和奇偶校验部分进行级联,但是数据位和奇偶校验位的任何排列都可以用于根据对应的纠错码来产生有效的码字。例如,可以交替数据位与奇偶校验位。请注意,对帐数据通常是在单个q进制符号上计算的,但奇偶校验数据通常是根据多个位计算的;请注意,q远大于2。
[0328]
可以以各种方式使用该码字。还可以通过在第二设备350处(例如通过(例如为此目的而随机生成的)对称密钥))对消息(m)进行加密并将加密对称密钥编码在码字中来获得公钥加密。可以使用额外的密钥导出步骤。例如,可以在码字中编码随机预密钥,并且可以根据预密钥来导出加密密钥。例如,导出可以使用密钥导出函数(kdf),例如,散列函数。例如,在后一种情况下,可以将经加密的消息与对该数据进行解密所要求的数据(如下面所讨论的,例如,第二公钥和其他数据)一起从第二设备发送到第一设备。密钥种子可以被直接编码在码字中,或者可以根据码字来导出。
[0329]
有趣的是,码字是独立于第一私钥、第一公钥、第二私钥和第二公钥生成的。因此,该协议提高了抵御主动攻击的抵抗力。攻击者具有影响共享密钥的较小概率,因为攻击者不能够通过选择第一私钥和第二私钥来影响密钥。在实施例中,第二私钥矩阵是根据码字或者根据密钥种子导出的。
[0330]
例如,在消息的情况下,如果消息是根据独立于公钥加密的应用程序(例如,金融或通信应用程序等)生成的,则可以获得独立的生成。例如,可以通过随机生成来获得独立的生成。例如,码字中的密钥或预密钥可以是独立生成的,例如使用真正的随机数生成器或者使用伪随机生成器(其使用与第一私钥和第二私钥无关的种子,例如,其本身是随机生成
的,或者是预先确定的等)来独立生成。例如,即使在接收到第一公钥之前和/或在生成第二私钥之前,也可以在第二设备处生成码字;这也确保了独立性。
[0331]
第二设备350包括diffie-hellman单元375。diffie-hellman单元375被配置为根据第一公钥(b)和第二私钥(s)来生成第二原始共享密钥(k*)。例如,diffie-hellman单元375可以被配置为将diffie-hellman函数应用于第一公钥和第二私钥。例如,diffie-hellman函数可以是相乘的。第二设备350被配置为将其第二公钥传送到第一设备300。第一设备300包括diffie-hellman单元325。diffie-hellman单元325被配置为根据第二公钥(u)和第一私钥(r)来生成第一原始共享密钥(k’),例如通过应用相同的diffie-hellman函数来生成第一原始共享密钥(k’)。不幸的是,对于一些类型的diffie-hellman函数,第一原始密钥和第二原始密钥可能彼此靠近,但不一定是相同的。发生这种情况的特定概率取决于基础diffie-hellman函数。在大多数应用程序中可以接受不同原始密钥的某种概率,然而,这种概率有多高将取决于应用程序。但是,通常,较低的概率将是优选的。原始密钥可以与私钥和公钥具有相同的数学类型,例如,矩阵。
[0332]
第二设备350包括可靠位生成器380和对帐数据生成器385。可靠位生成器380被配置为将可靠位函数应用于第二原始共享密钥(k*)以获得可靠索引和根据所指示的系数导出的可靠位。可靠索引指示原始共享密钥的系数。例如,可靠位生成器380可以确定原始密钥中的哪些系数接近采样边界以及原始密钥中的哪些系数不接近采样边界。例如,原始密钥中的在采样边界的阈值内的系数可以被认为不可靠而被丢弃。剩余的可靠系数可以由可靠索引来指示。可以通过对可靠系数进行采样来获得可靠位。
[0333]
在剩余的系数不足的情况下,存在若干概率,例如,终止协议,利用新的第一私钥和/或第二私钥和/或新的公共对象来重新启动协议,导出较短的密钥或者丢弃较少的系数。代替于选择阈值内的所有系数,还可以选择预定数目的系数(例如,mu个系数),并且选择最可靠的系数(例如,前mu个最可靠的系数)。
[0334]
实施可靠位的一种方法是采用系数的一个或多个(比如,b个)最高有效位)。例如,每个所选择的系数的可靠位的数目可以是1或2。在一些实施例中,例如,当使用大矩阵时,系数的数目很大,这允许高可靠性,例如b的低值。对于其他实施例,例如,对于iot设备,可以使用b的更大值。有限环中的计算可以在对2的幂取模的整数的有限环中进行。后一种选择的优点是,可靠位中的更均匀分布。
[0335]
对帐数据生成器385被配置为针对原始共享密钥的所指示的系数生成对帐数据(h)。对帐数据包括允许减小在第一设备和第二设备处导出的第一原始密钥和第二原始密钥之间的差异的信息。例如,应用对帐数据可以使在第一设备和第二设备处的原始密钥的系数之间的差异(例如,lee距离)减小,由此增加了这两者将产生相同的可靠位的概率。码字中的奇偶校验位和对帐数据都用于降低噪声,然而,奇偶校验位是在多个数据位上计算的,而对帐数据是在原始共享密钥中的系数上计算的。对帐数据进一步提高了可靠位的可靠性。
[0336]
一种实施对帐数据的方法是采用系数的紧随被视为可靠位的位的一个或多个(比如,bh个)位。例如,这些位可以是在有效性上紧随这b个位的bh个位。例如,每个所选择的系数的对帐位数可以是比如1或2。较小的对帐位数具有减少通信开销的优点。但是,也可能有更大量的对帐位。
[0337]
第二设备350可以包括封装单元390。封装单元390被配置为通过应用例如xor的封装函数,利用可靠位来封装码字。该封装可以是一次性焊盘封装。在实施例中,在不知道可靠位的情况下能够从封装码字获得的关于码字的信息为零的意义上讲,封装函数获得了完美的安全性。例如,可以在本文描述的其他封装函数之一上使用xor函数。
[0338]
请注意,封装适用于整个码字,包括数据位和奇偶校验位,而不仅仅是奇偶校验位。此外,封装应用于所生成的数据(例如,消息、密钥、预密钥等),而不应用于根据第一公钥或第二公钥或第一私钥或第二私钥中的一个或多个导出的数据。
[0339]
第二设备被配置为将第二公钥(u)、对帐数据(h)、经封装的数据(c)和可靠索引传送到第一设备。该传送可以例如在密钥协商的情况下响应于接收到第一公钥,或者例如在公钥加密的情况下不响应于接收到第一公钥。
[0340]
第一设备300被配置为从第二设备接收第二公钥(u)、对帐数据(h)和封装数据(c)以及可靠索引。第一设备300可以被配置为对公钥(u)执行公钥验证流程。第一设备300包括对帐单元335,对帐单元335被配置为将对帐函数中的对帐数据(h)应用于由可靠索引(safe_bits)指示的第一原始共享密钥(k’)中的系数,从而获得可靠位(k)。例如,可以使用对帐位对被指示为可靠的系数进行对帐,并且然后对其进行采样以获得可靠位。
[0341]
第一设备300包括解封装单元340,解封装单元340被配置为对封装数据(c)进行解封装,从而使用可靠位来获得近码字。可以不直接获得第二设备的码字的原因是,即使具有可靠位和对帐,原始密钥之间的差异仍然无法解析。第一设备300包括纠错器320,纠错器320被配置为将纠错函数应用于近码字以获得码字。
[0342]
最后,可以对码字进行解码,以例如获得数据部分,从而获得消息(m)、密钥(k)或预密钥,例如,密钥种子。在第一种情况下,可以基于该消息来采取一些措施,例如,可以例如在通信器应用程序中显示该消息。在第二种情况下,可以将密钥用于进一步受保护的通信等。在第三种情况下,可以将密钥导出函数应用于预密钥以获得共享密钥。
[0343]
在一些实施例中,第二密码设备的处理器被配置为至少基于密钥种子导出最终密钥,利用最终密钥加密消息,并且将所述加密消息传送到第一密码设备。在一些实施例中,第一密码设备的处理器被配置为从第一密码设备接收加密消息,至少基于密钥种子导出最终密钥,并且利用最终密钥解密加密消息。
[0344]
例如,在实施例中,第二密码设备和/或私钥解密设备可以至少部分地基于将密码散列函数应用于密钥种子来导出最终密钥。作为说明性示例,可以通过将密码散列函数应用于密钥种子以及任选地部分或全部公钥(例如g=h(m||pk)),从密钥种子k导出最终密钥。这样的密码散列g可以直接用作最终密钥,或任选地,这样的密码散列的至少部分,例如l||rest=g,可以被进一步散列,例如,利用掩码密钥种子c,以获得最终密钥,例如,k=h(l||c)。
[0345]
图6a示意性地示出了根据实施例的第二密码方法(400)的示例。方法400包括:
[0346]-与第一密码设备建立(410)通信,
[0347]-获得(420)与第一密码设备相关联的第一公钥(b),
[0348]-生成(430)第二私钥(r),并且根据第二私钥(r)来计算第二公钥(u),
[0349]-根据第二私钥(r)和第一公钥(b)来计算(440)第二原始共享密钥(k*),计算第二原始共享密钥包括第二私钥(r)与第一公钥(b)之间的噪声相乘,
[0350]-通过应用封装函数利用第二原始共享密钥的至少部分来封装(450)密钥种子(m),从而获得封装数据(v),并且
[0351]-将第二公钥(u)和封装数据(v)传送(460)到第一密码设备,并且
[0352]-对获得的公钥(b)应用(405)验证流程,以确定公钥对于对密钥种子的封装是否安全,其中,如果验证流程不成功,则密钥种子未被封装或封装数据(v)未被传送。
[0353]
验证流程405可以在获得420与封装450之间执行。验证流程405可以在封装450之后执行,在这种情况下,可以丢弃封装,例如在传送460之前。
[0354]
图6b示意性地示出了根据实施例的第一密码方法500的示例。方法500包括:
[0355]-与第二密码设备建立(510)通信,
[0356]-生成(520)第一私钥(s)并且根据第一私钥(s)来计算第一公钥(b),并且允许将第一公钥(b)传送到第二密码设备,
[0357]-从第二密码设备接收(530)第二公钥(u)和封装数据(v),
[0358]-根据第二公钥(u)和第一私钥(v)来计算第一原始共享密钥(k’),计算第一原始共享密钥包括第二公钥(u)与第一私钥(s)之间的噪声相乘,
[0359]-使用第一原始共享密钥(k’)的至少部分来解封装(550)封装数据(v)以获得密钥种子,并且
[0360]-对获得的公钥应用(505)验证流程以确定公钥对于对密钥种子的解封装是否安全,其中,如果验证流程不成功,则密钥种子未被解封装或解封装数据(v)未被使用。
[0361]
如本领域技术人员将显而易见的,可以有许多不同方式来执行该方法。例如,能够以所示顺序执行步骤,但是步骤的顺序也可以改变,或者一些步骤可以并行执行。此外,在步骤之间可以插入其他方法步骤。所插入的步骤可以表示例如本文描述的方法的改进,也可以与该方法无关。此外,在开始下一步骤之前,给定步骤可能尚未完全完成。
[0362]
可以使用软件来执行该方法的实施例,该软件包括用于使处理器系统执行方法400和/或500的指令。软件可以仅包括由系统的特定子实体采取的那些步骤。该软件可以被存储在合适的存储介质(例如,硬盘、软盘、存储器、光盘等)中。该软件可以作为信号沿着电线,无线地或使用数据网络(例如,互联网)进行发送。可以使该软件可用于服务器上的下载和/或远程使用。可以使用被布置为配置可编程逻辑单元(例如,现场可编程门阵列(fpga))的比特流来执行该方法的实施例,从而执行该方法。
[0363]
将意识到,本发明还扩展到适于将本发明付诸实践的计算机程序,特别是在载体上或载体中的计算机程序。该程序可以是源代码、目标代码、中间源代码和目标代码的形式,例如部分编译的形式,或者是适合于在该方法的实施例的实施中使用的任何其他形式。与计算机程序产品有关的实施例包括与所阐述的方法中的至少一个方法的每个处理步骤相对应的计算机可执行指令。这些指令可以被细分成子例程并且/或者被存储在可以被静态或动态链接的一个或多个文件中。与计算机程序产品有关的另一实施例包括与所阐述的系统和/或产品中的至少一个的每个单元相对应的计算机可执行指令。
[0364]
应当注意,上面提到的实施例说明而不是限制本发明,并且本领域技术人员将能够设计出许多替代实施例。
[0365]
在权利要求中,括号内的任何附图标记都不应被解释为对权利要求的限制。动词“包括”及其词形变化的使用并不排除存在权利要求中未提及的其他元件或步骤。元件前面
的词语“一”或“一个”并不排除存在多个这样的元件。当在元件列表之前时,诸如
“……
中的至少一个”的表述表示从该列表中选择所有元件或元件的任何子集。例如,表述“a、b和c中的至少一个”应被理解为仅包括a,仅包括b,仅包括c,包括a和b两者,包括a和c两者,包括b和c两者,或者包括全部a,b和c。本发明可以借助于包括若干不同元件的硬件来实施,也可以借助于经适当编程的计算机来实施。在列举了若干单元的装置型权利要求中,这些单元中的若干单元可以由同一件硬件来体现。在互不相同的从属权利要求中记载某些措施的事实并不意味着不能有利地使用这些措施的组合。
[0366]
在权利要求书中,括号内的引用内容指的是例示实施例的附图中的附图标记或实施例的公式,由此提高了权利要求的可理解性。这些引用内容不应被解释为对权利要求的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献