存储用于计算函数的查找表的计算设备

申请号 CN201380032952.5 申请日 2013-10-21 公开(公告)号 CN104380244A 公开(公告)日 2015-02-25
申请人 皇家飞利浦有限公司; 发明人 P.M.H.M.A.格里斯森; L.M.G.M.托休伊泽恩;
摘要 提供一种计算设备,其被配置为计算一个或多个输入的函数,所述设备包括存储用于计算所述函数的一个或多个查找表的 存储器 件,所述查找表将输入值映射到输出值,针对所述第一纠错代码、第二纠错代码、第一错误 阈值 和第二错误阈值构造所述查找表,以便将任何两个输入值(112)映射到相应输出值(131-38),所述输入值(112)各自与所述第一纠错代码的相同代码字最多相差第一错误阈值数量的位,所述输出值(131-38)各自与所述第二纠错代码的相同代码字最多相差第二错误阈值数量的位,其中所述第一错误阈值最少为1,最多为所述第一纠错代码的所述纠错能 力 (t1),并且所述第二错误阈值最多为所述第二纠错代码的所述纠错能力(t2)。
权利要求

1.一种计算设备,其被配置为计算一个或多个输入的函数,
- 所述设备包括存储用于计算所述函数的一个或多个查找表的存储器件,所述查找表将输入值映射到输出值,针对所述第一纠错代码、第二纠错代码、第一错误阈值和第二错误阈值构造所述查找表,以便将任何两个输入值映射到相应输出值,所述输入值各自与所述第一纠错代码的相同代码字最多相差第一错误阈值数量的位,所述输出值各自与所述第二纠错代码的相同代码字最多相差第二错误阈值数量的位,其中
- 所述第一错误阈值最少为1,最多为所述第一纠错代码的所述纠错能(t1),并且所述第二错误阈值最多为所述第二纠错代码的所述纠错能力(t2)。
2.根据权利要求1所述的计算设备,其中所述第一纠错代码与所述第二纠错代码相同。
3.根据上述任一权利要求所述的计算设备,其中所述第一错误阈值等于所述第一纠错代码的所述纠错能力(t1)。
4.根据上述任一权利要求所述的计算设备,其中所述第二错误阈值为零。
5.根据上述任一权利要求所述的计算设备,其中所述设备被配置为获得所述一个或多个输入作为一个或多个编码输入,通过将编码函数应用于一个所述输入获得编码输入,所述编码函数将输入映射到纠错代码的对应代码字,可选地最多添加第一错误阈值数量的位错误。
6.根据上述任一权利要求所述的计算设备,其中所述计算设备被配置为通过向一序列中间结果应用一序列表查找访问,计算所述函数,所述中间结果包括所述序列中的所述表查找访问的所述编码输入值和所述输出值,一个所述中间结果是所述函数的所述编码结果。
7.根据上述任一权利要求所述的计算设备,其中所述第一或第二纠错代码的任何一个是以下任何一个:[7, 4, 3]、[11, 4, 5]、[12, 8, 3]、[16, 8, 5]、[21, 16, 3]以及[9,
5, 3]、[13, 5, 5]、[10, 6, 3]、[14, 6, 5]以及[8, 4, 4]、[10, 4, 4]。
8.一种针对将输入位大小(k1)的位串映射到输出位大小(k2)的位串的运算符,构造查找表的方法,所述方法包括
- 生成位串,所述生成的位串与第一纠错代码的代码字位大小(n1)具有相同大小,所述第一纠错代码具有至少所述输入位大小(k1)的维数,以及
- 对于每个可解码的生成位串,
- 对所述生成的位串进行解码以便获得解码的生成位串,所述解码对应于所述第一纠错代码,
- 将所述运算符应用于所述解码的生成位串,以及
- 对所述运算符的所述结果进行编码以便获得第二纠错代码的代码字,可选地,向所述代码字中最多添加第二错误阈值数量的位错误,所述第二错误阈值数量最多为所述第二纠错代码的所述纠错能力(t2),所述第二纠错代码具有至少所述输出位大小(k2)的维数,以及
- 在所述查找表中,将所述可解码的生成位串映射到包括可选位错误的所述运算符的所述编码结果。
9.一种针对将输入位大小(k1)的位串映射到输出位大小(k2)的位串的运算符,构造查找表的方法,所述方法包括
- 生成与所述输入位大小(k1)具有相同大小的位串,
- 对于每个生成的位串,
- 将所述运算符应用于所述生成的位串,以及
- 对所述运算符的所述结果进行编码以便从第二纠错代码中获得代码字,可选地,向所述代码字中添加可纠正错误模式,所述第二纠错代码具有至少所述输出位大小(k2)的维数,
- 对所述生成的位串进行编码以便从第一纠错代码中获得代码字,所述第一纠错代码具有至少所述输入位大小(k1)的维数,以及
- 对于每个可纠正错误模式,
- 将所述可纠正错误模式应用于所述编码的生成位串以便获得编码输入值,- 在所述查找表中,将所述编码输入值映射到包括可选位错误的所述运算符的所述编码结果。
10.根据权利要求1至7中任一项所述的计算设备,其中通过权利要求8或9的方法,从将输入位大小(k)的位串映射到输入位大小(k)的位串的运算符,构造用于计算所述函数的所述一个或多个查找表中的查找表。
11.根据权利要求10所述的计算设备,其中所述运算符是双射。
12.根据权利要求10所述的计算设备,其中所述运算符是恒等式。
13.一种编译器,其用于将以第一计算机编程语言编写的第一计算机程序编译为第二计算机程序,
- 所述编译器包括代码生成器,其用于通过生成表和机器语言代码生成所述第二计算机程序,所述生成的表和所述生成的机器语言代码共同形成所述第二计算机程序,所述生成的机器语言代码参考所述表,其中
- 所述编译器被配置为在所述第一计算机程序中标识算术或逻辑表达式,所述表达式依赖至少一个变量;以及所述代码生成器被配置为生成一个或多个表,所述表表示用于所述变量的多个值的所述标识的表达式的预计算结果,并且被配置为生成机器语言代码,以便通过访问表示预计算结果的所述生成的一个或多个表,在所述第二计算机程序中实现所述标识的表达式,其中根据权利要求8和9中任一项生成所述一个或多个表。
14.一种用于计算一个或多个输入的函数的方法,所述输入具有输入位大小(k),所述方法包括
- 存储一个或多个查找表,所述查找表将输入值映射到输出值,查找表的输入值具有的位大小等于第一纠错代码的第一代码字位大小(n1),针对所述第一纠错代码、第二纠错代码、第一错误阈值和第二错误阈值构造所述查找表,以便将任何两个输入值映射到相应输出值,所述输入值各自与所述第一纠错代码的相同代码字最多相差第一错误阈值数量的位,所述输出值各自与所述第二纠错代码的相同代码字最多相差第二错误阈值数量的位,其中所述第一错误阈值最少为1,最多为所述第一纠错代码的所述纠错能力(t1),并且所述第二错误阈值最多为所述第二纠错代码的所述纠错能力(t2),
- 将所述一个或多个查找表用于计算所述函数包括将所述一个或多个查找表应用于编码值。
15.一种包括计算机程序代码装置的计算机程序,所述计算机程序代码装置适合于执行权利要求8、9和14中任一项的所有步骤。
16.根据权利要求15所述的计算机程序,其包含在计算机可读介质上。

说明书全文

存储用于计算函数的查找表的计算设备

技术领域

[0001] 本发明涉及被配置为计算一个或多个输入的函数的计算设备,所述输入具有输入位大小,所述设备包括存储用于计算所述函数的一个或多个查找表的存储器件,所述查找表将输入值映射到输出值。

背景技术

[0002] 计算机实现的系统的安全性取决于多个因素。一方面,具有底层抽象协议和加密的安全性。一旦采用的加密被破坏,系统通常也被破坏。另一方面,具有与实现本身相关的安全性。
[0003] 例如,很早以前就知道计算机系统通过所谓的旁通道泄露某些信息。观察计算机系统的输入输出行为可能不会提供有关敏感信息(例如计算机系统使用的密钥)的任何有用信息。但是,计算机系统具有可以观察的其它通道,例如其电源消耗或电磁辐射;这些通道称为旁通道。例如,可以测量不同指令消耗的功率的微小变化,以及执行指令时消耗的功率的变化。测量的变化可以与敏感信息(例如加密密钥)关联。除了可观察和预期输入输出行为之外的这种有关机密信息的其它信息称为旁通道。通过旁通道,计算机系统可以在其使用期间“泄露”机密信息。观察和分析旁通道可以使攻击者访问更好的信息,该信息好于可以从仅对输入输出行为进行加密分析获得的信息。一种已知类型的旁通道攻击是所谓的差分功率分析(DPA)。
[0004] 具有其它攻击系统的方式。与传统旁通道攻击相关的是故障注入攻击。在此有意使底层硬件发生故障。由于故障,设备将产生错误答案。如果特定类型的错误与机密信息相关,则分析错误可以泄露机密信息。具体地说,光攻击(也称为闪光攻击)是一种特别强大的注入故障方式。在光攻击中,在计算期间使激光在电路上闪现以便破坏中间值。
[0005] 例如,对RSA签名算法的一种已知攻击通过调节系统的电压源,在目标机器中注入瞬时故障。攻击者不需要进入受害者芯片的内部组件,他们仅在系统遭受瞬时故障时,从系统收集损坏签名输出。一旦收集足够数量的损坏消息,可以通过离线分析提取私钥。
[0006] 一种应对故障攻击的方式是验证计算。例如,通过执行两次关键计算。在特定的RSA签名实例中,可以通过RSA验证算法验证签名。通过这种方式检测故障攻击,并且避免错误值离开计算设备。
[0007] 对计算机的一种甚至更强大的攻击是所谓的反向工程。在许多安全情形下,攻击者可以对计算机具有完全访问权限。这为攻击者提供机会以便对程序进行反汇编,并且获得有关计算机和程序的任何信息。如果足够努,则攻击者可以发现隐藏在程序中的任何密钥。
[0008] 防止这种攻击情形被证明非常困难。一种类型的防范措施是所谓的白盒加密。在白盒加密中,组合密钥和算法。生成的算法仅适用于一个特定密钥。接下来可以将算法实现为所谓的查找表网络。将计算转换为密钥相关表中的一系列查找。例如参见S. Chow、P. Eisen、H. Johnson、P.C. van Oorschot的“White-Box Cryptography and an AES Implementation(白盒加密和AES实现)”,以便获得这种方法的实例。
[0009] 计算机硬件和计算机软件中的功能实现都易于遭受上面的旁通道攻击。但是,软件中的问题最严重。与硬件实现相比,软件相对缓慢并且消耗相对大量的功率。两个因素都促成旁通道攻击。
[0010] 已经尝试通过更改计算机程序的编译,增加计算机程序对旁通道攻击的抵抗力。
[0011] 美国专利7996671建议通过改进的编译,增加计算机程序对旁通道攻击的抵抗力。因为功率分析攻击依赖测量的功率消耗,所以通过编译增加抵抗力以便减小电源消耗。编译器预测最节能的编译并且选择该编译。可以观察到,能源消耗降低将增加功率噪声/变化,并且提高旁通道抵抗力。
[0012] 如果仅有能源降低方法不足以产生足够的功率噪声/变化,则可以使用用于能源优化的编译器方法来随机化代码关键部分(例如加密算法)中的功率成本。这在编译时通过有意生成具有不同功率要求的代码来实现。
[0013] 用于旁通道问题的在计算中产生随机性的当前方法被证明不太满意。

发明内容

[0014] 解决这些和其它安全问题是有利的。攻击者观察到,对旁通道攻击的所述基于编译的防范措施可能在应对被动旁通道(例如DPA)方面取得一定程度的成功,但在应对主动攻击(例如故障攻击和反向工程)方面则没有成功。
[0015] 提供一种计算设备,其被配置为计算一个或多个输入的函数。所述设备被配置为获得所述一个或多个输入作为一个或多个编码输入。所述设备包括存储用于计算所述函数的一个或多个查找表的存储器件,所述查找表将输入值映射到输出值,查找表的输入值具有的位大小等于第一纠错代码的第一代码字位大小(n1),针对所述第一纠错代码、第二纠错代码、第一错误阈值和第二错误阈值构造所述查找表,以便将任何两个输入值映射到相应输出值,所述输入值各自与所述第一纠错代码的相同代码字最多相差第一错误阈值数量的位,所述输出值各自与所述第二纠错代码的相同代码字最多相差第二错误阈值数量的位。所述第一错误阈值最少为1,最多为所述第一纠错代码的所述纠错能力(t1),并且所述第二错误阈值最多为所述第二纠错代码的所述纠错能力(t2)。
[0016] 可以通过将编码函数应用于一个所述输入获得编码输入,所述编码函数将输入映射到纠错代码的对应代码字。可选地,所述编码输入可以在某种程度上被损坏;可以向所述编码输入值中最多添加所述第一阈值的位错误,所述位错误对应于将应用于所述输入值的所述第一查找表。通常可以通过更改完成添加位错误,即,通过翻转位,在这种情况下最多翻转第一错误阈值数量的位。在某些应用中,所述程序实际上直接接收编码输入。所述编译器可以被配置为产生辅助程序,以便将未编码值转换为编码值。需要提供所述编码输入值的其它应用可以使用所述辅助程序。
[0017] 使用编码输入值代替所述输入值本身导致所述应用的混淆,即,增加对所述程序进行反向工程的难度。所述存储的查找表具有纠错属性。可以以两种方式利用这些属性。所述查找表以相同方式,处理与相同代码字最多相差所述纠错能力(也称为“t”)位的所有编码输入值。因此,导致最多“t”位错误的故障攻击不会产生安全相关错误,如密钥关联错误。对于必须注入的每个其它错误,故障攻击变得越来越困难。通过使用纠错表执行计算,故障攻击变得更难以实现。另一方面,所述查找表不需要针对属于所述相同输入值(即,接近于所述相同代码字)的两个输入提供相同结果。因为所述查找表能够抵抗错误,所以还可能故意产生这些错误。当值和编码之间的固定关系被干扰时,反向工程越发困难。当使用纠错表时,单个输入值可以由多个编码值表示。具体地说,对于依靠发现输入值、输出值和内部变量之间的关联的自动反向工程,需要运行更多的数据以便克服这种统计障碍。所述纠错表应对故障和反向工程攻击的两种方式需要互相排斥,两者可以同时使用。
[0018] 有趣的是,所述纠错代码不需要针对每个查找表相同。所述纠错代码甚至不需要针对每个查找表具有相同参数。使用不同纠错代码促进混淆,但也会明显增加所述系统的灵活性。通常,使用所述查找表实现的函数使用所谓的表网络。通过允许多个不同的纠错表,这些表不需要具有相同大小;这会明显节省需要的大小要求,因为可以很小的表实际上能够变得很小。在所述设备的实施例中,函数实现为表网络,针对多个不同的第一纠错代码和多个不同的第二纠错代码构造。在所述查找表网络中,所述使用的纠错代码应该适合:如果将第一表的所述输出提供给第二表,则所述第一表的所述第二纠错代码应该是所述第二表的所述第一纠错代码。
[0019] 实际上,在实施例中,用于计算所述函数的所述一个或多个查找表包括用于计算所述函数的第一和第二查找表,针对第一第一纠错代码和第一第二纠错代码构造所述第一查找表,针对第二第一纠错代码和第二第二纠错代码构造所述第二查找表,其中所述第一第二纠错代码等于所述第二第一纠错代码。
[0020] 但是,这不是必需的:在实施例中,查找表的所述第一纠错代码与该查找表的所述第二纠错代码相同。在实施例中,所述查找表的所有所述第一纠错代码都相同,并且所述查找表的所有所述第二纠错代码都相同。
[0021] 所述第一和第二错误阈值允许在故障抵抗力和增加的混淆之间进行权衡。
[0022] 例如,在实施例中,所述第二错误阈值为零。在该实施例中,将任何两个输入值映射到相同的第二代码字,所述输入值各自与相同代码字最多相差第一错误阈值数量的位。该实施例最佳地防止故障注入。针对中间值执行任何计算之后,立即自动纠正在这些中间值中注入的故障。如果有意故障在所述程序中动态插入,而不是固定在所述表中,则这种类型的查找表也是最佳的。同样,通过选择所述第一错误阈值等于所述第一纠错代码的所述纠错能力(t1),增加纠错能力。在优选实施例中,组合这两种选择。
[0023] 在实施例中,所述计算设备被配置为在所谓的查找表网络中计算所述函数。通过在存储于所述存储器件内的所述查找表中应用一序列表查找访问,获得一序列中间结果。所述中间结果包括所述序列中的所述表查找访问的所述编码输入值和所述输出值,一个所述中间结果是所述函数的所述编码结果。如果将所述纠错表应用于程序的更大部分,则所述纠错表的有益效果更强大。通过将函数实现为表网络,对混淆的作用明显增加。
[0024] 如果所述第一和第二纠错函数针对所述网络中的每一个所述查找表相同,则构造所述表网络更容易。在这种情况下,一个表的输出值可以直接用作另一个表的输入值。但是,需要谨慎,所述表可以具有不同纠错代码。例如,可以确保一个表的所述第二纠错代码等于另一个表的所述第一纠错代码。此外,通过转换恒等运算符,获得从一个编码转换为另一个编码的转换表。
[0025] 为了简单起见,许多实例使用一个纠错代码,以便接收所述输入、提供所述输出和用于所有中间值。但是,应该注意这不是必需的,并且实际上以下操作可以是有利的:允许不同的第一和第二纠错代码的复杂性增加,即,获得额外混淆和/或使所述存储的查找表的占用空间减小。甚至不需要所述第一纠错代码和所述第二纠错代码具有相同的最小距离,也不需要跨不同的表。但是,如果所有使用的纠错代码具有相同的最小距离,则很方便,因为这确保对错误的最小防御,同时避免使表大于满足该最小防御需要的表。
[0026] 所述计算设备的实施例被配置为计算一个或多个输入的函数。所述设备包括存储用于计算所述函数的一个或多个查找表的存储器件,所述查找表将输入值映射到输出值,输入值和输出值具有的位大小等于所述代码字位大小,针对所述纠错代码构造所述查找表,以便将任何两个输入值映射到相应输出值,所述输入值各自与相同代码字最多相差“t”位,所述输出值各自与另一个相同代码字最多相差“t”位。所述值“t”也称为所述代码的所述“纠错能力”。
[0027] 例如,所述计算设备被配置为获得所述一个或多个输入作为一个或多个编码输入,通过将编码函数应用于一个所述输入获得编码输入,所述编码函数将输入映射到t纠错代码的对应代码字,所述代码字具有的代码字位大小大于所述输入的位大小。编码之前的输入具有输入位大小,并且编码之后的输入具有代码字位大小。
[0028] 所述一个或多个输入的所述函数可以是安全应用的实现,如签名或解密函数。在处理安全敏感值(例如密钥)的特定功能中,授权、访问等受益于所述纠错表。
[0029] 所述计算设备本身可以通过将编码函数应用于一个所述输入(例如,通过编码模),获得所述编码输入。还可以在所述计算设备外部获得,在这种情况下,所述计算设备直接接收所述编码输入。注意,使用纠错编码的编码可以很好地与混淆编码组合,例如从白盒加密得知的那样。
[0030] 例如,如果Y表示未编码域,即,纯(输入)值。X表示代码字空间。假设M是将域-1Y嵌入到更大的域X中,并且假设M 是从域X到Y的映射,其中X的值M(v)中的小误差e仍映射回到v。可以通过计算M(y)对输入值y进行编码。计算M(y)可以通过应用编码函数(如线性矩阵乘法等)实现,而且还通过查找表实现。假设g是Y到混淆的Y的函数。应用g将隐藏变量的含义。这可以与上面给出的编码组合,如下所示:y映射到M(g(y))。例如,g可以随机选择,至少g不是恒等式。
[0031] 使用函数的表格化实现(例如,通过专用编译器获得,或者手动执行),将导致更大的占用空间。此外,因为所述编码将增加值大小,所以所述表大于没有所述纠错编码的情况。对于许多应用,利大于弊,这将增加空间。要用于所述第一和/或第二纠错代码的某些有趣代码如下:[7, 4, 3]、[11, 4, 5]、[12, 8, 3]、[16, 8, 5]、[21, 16, 3]。这些代码将相对低的“t”值(即,1或2)和与二元架构具有良好关系的未编码块大小组合。但是,没有理由将所述未编码输入位大小(k)限制为2的幂,尽管这很方便。在不限制为2的幂的情况下,可以使用[9, 5, 3]、[13, 5, 5]、[10, 6, 3]、[14, 6, 5]之类的代码。
[0032] 可以使用具有偶数最小距离的代码,然而首选奇数最小距离。这意味着还可以使用[8, 4, 4]、[10, 4, 4]之类的代码。
[0033] 使用偶数最小距离(d)对于故障检测而言可以很重要。对于:d=2t,可以纠正(t-1)个错误,并且最多检测t位错误。例如,可以包括验证是否具有t个错误的错误逻辑。此外,当使用不完美代码时,所述错误逻辑可以检测不可纠正位模式。当检测到这些问题时,可以采取适当的操作,例如终止过程、提出错误等。
[0034] 尽管首选线性代码,因为它们明显简化所述编译器的设计,但所述线性结构不会导致改进的查找表。这意味着还可以使用非线性代码,例如[14, 7, 5]、[15, 7, 6]、[15,8, 5]和[16, 8, 6]。
[0035] 但是,为使表保持很小,首选使n保持很小,如12或以下,或者甚至小于11;以及首选使维数很小,如8或更小,可能为4。
[0036] 本发明的一个方面涉及通过将输入位大小的位串映射到输入位大小的位串的运算符,构造查找表。这些方法优选地是计算机实现的方法。所述生成的查找表优选地存储在计算机可读介质上。
[0037] 在所述方法的实施例中,生成代码字位大小(n1)的所有可纠正位串的子集。将所述运算符应用于所述生成的可纠正位串的所述解码;根据所述第一纠错代码执行所述解码。将所述结果编码为所述第二纠错代码的代码字,从而可能添加一个或多个错误。构造查找表,其中将所述生成的可纠正位串映射到包括可选一个或多个错误的所述编码代码字。所述运算符的所述未编码输入值中的所述位数最多为所述第一纠错代码的所述维数。所述运算符的所述未编码输出值中的所述位数最多为所述第二纠错代码的所述维数。
[0038] 为了构造所述纠错查找表,具有至少两种基本方法。在两种方法中,构造与所述第一纠错代码的所述代码字大小具有相同大小的可纠正位串;计算对应于所述可纠正位串的所述运算符结果;以及通过对所述运算符结果进行编码,发现所述第二纠错代码中的所述代码字。后一个步骤可能包括添加位错误,即,添加可纠正位错误。然后构造将所述可纠正位串映射到运算符结果的查找表。
[0039] 可以发现,以至少两种方式构造与所述第一纠错代码的所述代码字大小具有相同大小的所述可纠正位串:在第一种方法中,直接生成所述可纠正位串。对于完美代码,这可以仅生成给定长度的所有可能位串。在更高级的实现中,这可以生成给定长度的所有可能位串,但过滤掉所述可解码位串。某些专用代码具有专用算法以便生成所述可解码位串。
[0040] 在第二种方法中,生成位大小等于所述第一纠错代码的所述维数的未编码位串。这可以通过直接生成给定长度的所有字符串实现。然后对所述生成的位串进行编码,以便获得所述第一纠错代码的代码字。从所述获得的代码字,可以通过添加可纠正位模式获得所述可纠正位串。添加可纠正位模式可以向所述代码字中最多添加第一错误阈值位错误,即,最多更改所述代码字的第一错误阈值位。
[0041] 例如,在实施例中,通过生成与所述第一纠错代码的所述第一代码字位大小(n1)具有相同大小的位串,获得代码字的可纠正位串。在实施例中,生成该大小的所有位串。例如,在实施例中,通过以下操作获得代码字的所述可纠正位串:生成与所述第一输入位大小(k1)具有相同大小的位串,将所述生成的位串编码为所述第一纠错代码的代码字,生成所有可纠正错误模式,并且将所述可纠正错误模式应用于所述编码的生成位串。
[0042] 所述运算符可以是基本运算符,例如算术运算符或逻辑运算符。但是,运算符可以是复杂运算符,例如包括多个基本运算符的表达式,或者甚至是采取输入值并且产生输出值的算法。具体地说,所述运算符可以是所述函数;但通常,所述函数需要应用多个运算符。
[0043] 通过用于构造查找表的所述方法获得的查找表,可以用于所述计算设备。
[0044] 本发明的一个方面涉及一种编译器,其用于将以第一计算机编程语言编写的第一计算机程序编译为第二计算机程序。所述编译器包括代码生成器,其用于通过生成表和机器语言代码生成所述第二计算机程序,所述生成的表和所述生成的机器语言代码共同形成所述第二计算机程序,所述生成的机器语言代码参考所述表。所述编译器被配置为在所述第一计算机程序中标识算术或逻辑表达式,所述表达式依赖至少一个变量;以及所述代码生成器被配置为生成一个或多个表,所述表表示用于所述变量的多个值的所述标识的表达式的预计算结果,并且被配置为生成机器语言代码,以便通过访问表示预计算结果的所述生成的一个或多个表,在所述第二计算机程序中实现所述标识的表达式。可以根据在此描述的任何一种构造方法,生成所述一个或多个表。
[0045] 所述编译器是有利的,因为它使程序员避开使用纠错表所关联的复杂性。尤其是当使用多个纠错代码时,复杂性变得不可能手动管理。
[0046] 本发明的一个方面涉及一种计算一个或多个输入的函数的方法,所述方法包括存储一个或多个查找表,所述查找表将输入值映射到输出值,查找表的输入值具有的位大小等于第一纠错代码的第一代码字位大小(n1),针对所述第一纠错代码、第二纠错代码、第一错误阈值和第二错误阈值构造所述查找表,以便将任何两个输入值映射到相应输出值,所述输入值各自与所述第一纠错代码的相同代码字最多相差第一错误阈值数量的位,所述输出值各自与所述第二纠错代码的相同代码字最多相差第二错误阈值数量的位,其中所述第一错误阈值最少为1,最多为所述第一纠错代码的所述纠错能力(t1),并且所述第二错误阈值最多为所述第二纠错代码的所述纠错能力(t2),将所述一个或多个查找表用于计算所述函数包括将所述一个或多个查找表应用于编码值。
[0047] 所述计算设备是电子设备;它可以是诸如移动电话之类的移动电子设备、机顶盒、计算机等。
[0048] 根据本发明的方法可以在计算机上实现为计算机实现的方法,或者以专用硬件实现,或者以两者的组合实现。用于根据本发明的方法的可执行代码可以存储在计算机程序产品上。计算机程序产品的实例包括存储器设备、光存储器件、集成电路、服务器、在线软件等。优选地,所述计算机程序产品包括存储在计算机可读介质上的非瞬时性程序代码装置,其用于在计算机上执行所述程序产品时,执行根据本发明的方法。
[0049] 在优选实施例中,所述计算机程序包括计算机程序代码装置,其适合于在计算机上运行所述计算机程序时,执行根据本发明的方法的所有步骤。优选地,所述计算机程序包含在计算机可读介质上。附图说明
[0050] 参考以下描述的实施例,本发明的这些和其它方面将显而易见并且得以说明。在附图中,图1是示出纠错查找表的图,
图2是示出计算设备的框图
图3是示出查找表网络的框图,
图4是示出用于针对运算符生成查找表的方法的流程图
图5a是示出用于针对运算符生成查找表的方法的流程图,
图5b示出对应于图5a的例示值,
图6是示出编译的流程图,
图7是示出用于构造查找表的设备的框图。
[0051] 应该注意,在不同附图中具有相同参考标号的项目具有相同结构特性和相同功能,或者是相同信号。如果已经解释这种项目的功能和/或结构,则没有必要在具体实施方式中重复解释。

具体实施方式

[0052] 尽管本发明允许多种不同形式的实施例,但在附图中示出并且在此详细描述一个或多个特定实施例,同时理解本公开被视为本发明的示例性原理,并且并非旨在将本发明限于示出和描述的特定实施例。
[0053] 图1解释纠错查找表。查找表通过从存储器件中由输入值控制的存储位置处检索输出值,将输入值映射到输出值。
[0054] 查找表100包括输出值120。每个输出值对应于输入值。输入值在110处示意性地指示。注意,不需要一定存储输入值。通常输入值隐含在上下文中。例如,输入值通常与存储输出值的存储地址具有固定关系。在一般情况下,查找表列出特定范围内的所有值,并且以排序顺序列出。在这种情况下,不需要将输入值存储在存储器中。不存储输入值将节省存储空间,通常节省一半。另一方面,显式存储输入值也具有优势。例如,当存储输入值时,输出值可以采用任何顺序,甚至采用随机顺序。可以通过查找输入值发现输出值,从而稍微简化代码。但重要的是,通过显式存储输入值,查找表可以很容易地省略值。例如,如果查找表表示某个函数或运算符,则可以省略任何未使用的输入值。此外,如下面解释的,它还允许使用编码,这些编码不使用所有可能位模式。在这种情况下,存储输入值甚至可以减少存储要求。
[0055] 查找表100具有特殊属性,其考虑纠错代码C。代码C包括2k个n位代码字。C中的任何两个代码字至少d个位不同。代码的参数称为[n, k, d]代码。数量t=floor ((d-1)/2)表示可以纠正的位错误数量。即,如果最多翻转代码字中的t位,则具有最接近于生成的位串的唯一代码字。数量k称为代码维数,数量d称为最小距离。使用字维数并不暗示需要线性代码,尽管首选线性代码。我们使用字维数指示代码至少包括2至维数的幂个代码字。
[0056] 数量t称为代码的纠错能力。如果需要强调第一纠错代码可以不同于第二纠错代码,则添加下标,因此指的是n1、k1、t1以及n2、k2、t2。但是,我们主要提供其中使用相同代码的实例,在这种情况下可以省略数字。一旦提供两个相同代码的实例,将实例推广到两个不同代码则很简单。
[0057] 查找表100具有以下属性:对于与相同代码字最多相差t位的任何两个输入值,具有也与(可能不同的)代码字最多相差t位的对应输出值。在特殊情况下,输出值全部是代码字。在后一种情况下,与相同代码字最多相差t位的任何两个输入值具有属于代码字的相同输出值。
[0058] 在图1中,输入112与相同代码字最多相差t位。例如,如果t=1并且n>=5,则可以从一个代码字并且翻转5个不同位,获得五个输入112;例如,如果t>1并且n>3,则可以从一个代码字并且翻转3个位,获得五个输入112,等等。5个输入是一个实例,并且可以更多或更少。如4或6或8等。多个输入112的每个输入对应于仅一个输出131-138。
[0059] 发明人发现,纠错表的概念非常通用并且具有许多应用。首先,如果计算环境易受位翻转,如可以在诸如光攻击之类的攻击中发生的那样,则纠错表自动纠正输入中的位翻转。这同样适用于可靠性较低的硬件,或者用于恶劣环境(例如,高辐射等级)的硬件。
[0060] 另一个应用存在于代码混淆中。因为使用纠错表的计算能够抵抗某些错误,所以可能故意产生错误以便更难以对代码进行反向工程。可以通过使用错误添加装置,例如控制XOR的随机数生成器,故意产生错误。但是,还可以在表本身中产生错误。在该应用中,输出值不是代码字,而是其中翻转多个位的代码字。翻转的位数必须小于或等于t这一纠错界限。
[0061] 为了构造采取多个输入的纠错表,可以使用梳理(currying)。还可以级联输入。如果给出代码C,则级联C‖C也是代码。
[0062] 图2示出具有存储器件210的计算设备。存储器件210通常是一个或多个非易失性存储器,但还可以是硬盘、光盘等。存储器件210还可以是易失性存储器,其包括下载的数据或以其它方式接收的数据。计算设备200包括处理器250。处理器通常执行存储在存储器中的代码255。为了方便起见,可以将代码存储在存储器210中。代码导致处理器执行计算。设备200可以包括可选I/O设备260,以便接收输入值和/或发送结果。I/O设备260可以是网络连接、可移动存储器件等。
[0063] 存储器件210可以包括编码查找表241,其采取数据字作为输入值,并且具有代码字(可能包括错误)作为输出值。例如,输入值具有“k”个位,而输出值具有对应于[n, k, d]代码的“n”个位。
[0064] 存储器件210可以包括解码表242,以便将代码字解码为其数据位。该表可以用于通过设备260的输出。
[0065] 存储器件210包括单一输入查找表,如上所述。示出表221和222。例如,可以构造这些表以便表示一元函数,例如求反。
[0066] 有趣的是,还可以使纠错表具有多个输入;查找表将多个输入值映射到输出值,输入值和输出值具有的位大小等于代码字位大小(n),针对纠错代码构造查找表;将两组多个输入值映射到相应输出值,这些输入值不同以便对应输入值与相同代码字最多相差“t”位,这些输出值各自与另一个相同代码字最多相差“t”位。图2示出多个输入查找表231、232。
[0067] 可以以各种方式表示具有多个输入值的查找表。一种有利的方式是使用梳理:通过固定一个输入值,将用于“r”个输入值的查找表减小到仅具有r-1个输入值的运算符。针对固定操作数的所有值存储这些更小的查找表。备选地,可以连接输入值。如果并非所有位串都被允许作为输入值,则连接很方便。图2使用梳理方法:2311-2323是单一输入查找表。
[0068] 在实施例中,计算设备可以在操作期间按如下方式工作:计算设备200接收输入值。例如通过使用编码表241,对输入值进行编码。因此,获得输入值作为编码输入值。注意,可以直接获得输入值作为编码输入值。处理器250执行存储器210中的程序255。程序导致处理器将查找表应用于编码输入值,或者应用于生成的输出值。可以针对任何逻辑或算术函数创建查找表,因此可以通过使用一序列查找表执行任何计算。在白盒加密中,这用于混淆程序。在这种情况下,对中间值进行编码以便进行混淆,对于查找表也是如此。注意,这可以有利地与纠错属性组合。
[0069] 在某一时刻发现结果值。如果需要,则可以例如使用解码表242对结果进行解码。但是,还可以以编码形式导出结果。输入值还可以从输入设备获得,并且输出值可以用于在屏幕上显示。
[0070] 针对编码数据字(即,可能最多包括t个错误的代码字)执行计算。通过应用一序列表查找访问实现计算。使用的输入值可以是从计算设备外部接收的输入值,但还可以通过先前查找表访问获得。通过这种方式获得中间结果,这些中间结果然后可以用于新查找表访问。在某一时刻,一个中间结果是函数的编码结果。
[0071] 图3示出表网络。大多数函数可以表示为表网络。具体地说,算术和逻辑运算的任何组合都可以如此表示。例如,表网络可以是例如密码的实现。示出多个表中的8个表。表通过输入值的表查找,将输入值转换为输出值。示出三个输入表310,以便从函数实现外部接收输入。示出一个输出表330。输出表330例如通过连接,共同形成函数实现的输出。
示出中间表320中的四个表,它们从另一个表接收至少一个输入,并且产生输出以便用作至少一个其它表的输入。表310、320和330共同形成网络。密码可以是块密码;块密码可以被配置为进行加密或解密。块密码对块密码进行加密,如AES。实现可以用于特定密钥,在这种情况下,表可以依赖该特定密钥。
[0072] 例如,假设表322表示将k1个位映射到k2个位的运算符,则针对第一纠错代码[n1, k1, d1]和第二纠错代码[n2, k2, d2]构造查找表322。该表将n1个位映射到n2个位。实现器可以选择映射n1个位的所有可能字符串(无论位串是否可解码),或者仅映射可解码位串。使用第一选择,表具有大小n2*2^n1个位。查找表324从表322接收输入值,其表示将k2个位映射到k3个位的运算符。针对第一纠错代码[n2, k2, d2]构造查找表322。
[0073] 查找表326表示具有两个输入和一个输出的运算符。用于一元运算符的查找表构造可以扩展到二元运算符。例如,可以“梳理出”第二输入;参考函数转换技术,梳理是转换采取n多个参数(或n元组参数)的函数的技术,其采用这样一种方式以便可以称为函数链,每个函数具有单个参数。当使用该方法时,查找表326实现为多个一元查找表。另一方面,还可以针对每个输入生成可纠正位串,并且连接结果。通过这种方式直接生成查找表,并且获得单个但更大的查找表。尽管查找表的布局可以根据构造而有所不同,但它们具有相等大小和相同属性。注意,不需要根据相同纠错代码对多个输入值进行编码。
[0074] 图4示出用于创建纠错函数的方法400。在图4和5的实例中,下面我们使用[7,4, 3]汉明码。代码字的长度为7位,对4个数据位进行编码。代码可以纠正单个错误,即t=1。我们使用其中代码字具有形式d1 d2 d3 d4 p1 p2 p3的构造,在此d1-d4是数据位,p1=d1+d2+d4、p2=d2+d3+d4、p3=d1+d3+d4是奇偶校验位,并且+表示模2加法。
[0075] 假设给出运算符,针对其需要纠错查找表。我们假设函数具有两个输入,但可能具有1个或多于2个输入。运算符可以是通用运算符,如+、mod、mul等。但是,运算符还可以特定于应用,如AES的S盒。
[0076] 在下面的讨论中,我们假设运算符是二元运算符,采取两个输入值。例如,使用算术加法。为使实例可管理,输入值的宽度为4位,并且编码输入值的宽度为7位。实际上,可以使用更大的输入值和/或编码,这相应地导致更大的表。
[0077] 在步骤410,生成代码字位大小(n)的位串。生成的位串可能是最终查找表的输入值。在该实例中,生成字符串1011001和0110111。注意,前者是代码字,但后者不是。例如使用纠错算法对生成的位串进行解码,以便获得解码的生成位串。解码字符串具有输入值位大小(k),在此为4位。注意,第二生成的位串中的错误已经被纠正。在这种情况下,即,在使用[7, 4, 3]汉明码的情况下,使用所谓的完美代码。完美代码具有的优势是可以将任何生成的位串解码为唯一解码位串。可以使用不完美代码;在这种情况下,使用连接中断器从最接近的解码位串中选择解码位串。连接中断器是确定的,例如它可以施加排序,如词典排序。备选地,某些输入串可能不解码,而是报告“解码错误”并且采取适当的动作。这还可以是表中的注释,例如不可解码位串可以作为不可解码输入串的输出提供。优选地,不可解码位串是随机的,以便避免无意中产生密钥关联等。
[0078] 将运算符应用于生成的位串的解码结果。在这种情况下,生成两个位串,并且将运算符应用于这两者。在这种情况下,执行4位加法。对结果进行编码以便获得代码字。可选地,可以向代码字中最多添加t位错误。在这种情况下,可以翻转代码字的一位。最后,构造查找表以便将生成的位串映射到包括可选位错误的运算符的编码结果。
[0079] 重复该过程直到生成所有需要的位串。通常,按顺序生成代码位大小(n)的所有位串。如果运算符具有多个输入,则生成多个位串。
[0080] 在该实例中,所述方法可以生成两个7位字符串的所有组合。因此生成2^14位字符串。在查找表452中列出结果。在左侧,在454处指示输入值,并且在右侧,在456处是对应的输出值。注意,输入值不需要一定显式列出。尤其是,如果生成所有位串,则可以省略输入侧
[0081] 图5a示出构造纠错表的备选方式。图5b通过示出相同表项目如何可以如图4中那样在最终查找表中出现,示出如何可以构造相同表。
[0082] 在步骤510,生成输入位大小(k)的位串。在步骤530通过将运算符应用于生成的位串,使用生成的位串,并且在步骤540对结果进行编码。如图4中那样,可选地可以向代码字中添加有意错误(最多t个)。还在步骤520使用生成的位串以便生成编码,即,编码为代码字。在步骤560,生成可纠正错误模式。不需要通过查找表表示所有可能输入值。相反,可以将输入值限制为代码字加上一组有限的可纠正输入值。如果代码完美并且该组可纠正输入值相等,则所有模式最多t位为一并且其余为零。结果相同。但是,可以选择添加少于t个错误。如果代码不完美并且该组可纠正输入值相等,则所有模式最多t位为一并且其余为零,该组输入值将严格小于所有可能位串。在步骤560添加的可纠正位模式和在步骤540添加的错误之间应该具有对应性。
[0083] 在图4和图5中,生成代码字位大小(n)的所有可纠正位串的子集,将运算符应用于生成的可纠正位串的解码结果,将结果编码为代码字,从而可能添加一个或多个错误。构造查找表,其中将生成的可纠正位串映射到包括可选一个或多个错误的编码代码字。
[0084] 图6示出编译方法600的流程图。在步骤610,接收器接收第一计算机程序。在步骤620,词法分析器执行词法分析,以便例如标识令牌。还可能执行诸如宏扩展之类的处理。在步骤630,解析器解析程序。例如,解析器根据第一程序的编程语言的形式语法,生成解析树。解析器标识程序中的不同语言结构,并且调用适当的代码生成例程。具体地说,标识一个运算符或多个运算符。在这种情况下,在步骤640代码生成器生成代码。在代码生成期间,生成某些代码,并且如果需要,则生成附表。附表是纠错表。生成的代码不需要并且通常不包含运算符,因为它由一个或多个查找表替换。例如,解析器标识并添加运算,并且将其转换为加法指令的查找表,并且在生成的代码中用于将查找表应用于正确的值。
[0085] 在步骤655,将生成的表合并到表库,因为很可能多次生成某些表,在这种情况下,不需要多次存储它们。例如,可以需要并且仅生成一次加法表。当合并所有代码并且合并所有表时,编译完成。可选地,可以具有优化步骤。
[0086] 通常,编译器使用编码域,即,其中对所有值或者至少对应于某些条件的所有值进行编码(即,具有代码字位大小(n))的程序部分。在编码域中,可以通过查找表执行来执行操作。当进入编码域时,对所有值进行编码,当离开编码域时,对值进行解码。条件可以是值与安全敏感信息(例如,加密密钥)关联或者依赖该信息。
[0087] 一种用于创建编译器的有趣方式如下所示。在步骤630,执行中间编译。这可以是中间语言(例如寄存器传输语言等),但还可以是机器语言代码编译。这意味着对于图6的步骤610-630,可以使用传统编译器,该编译器不会产生纠错表。但是在步骤640,根据中间编译生成代码。例如,如果使用机器语言代码,则每个指令由该指令的对应运算符自由实现(即,该指令的基于表的实现)替换。这表示用于创建编译器的一种特定简单方式。图6还可以用于生成编译器,该编译器不产生机器语言而产生第二编程语言。
[0088] 在实施例中,编译器是用于将以第一计算机编程语言编写的第一计算机程序编译为第二计算机程序的编译器,编译器包括代码生成器,其用于通过生成表和机器语言代码生成第二计算机程序,生成的表和生成的机器语言代码共同形成第二计算机程序,生成的机器语言代码参考表,其中编译器被配置为在第一计算机程序中标识算术或逻辑表达式,表达式依赖至少一个变量;以及代码生成器被配置为生成一个或多个纠错表,这些表表示用于变量的多个值的标识的表达式的预计算结果,并且被配置为生成机器语言代码,以便通过访问表示预计算结果的生成的一个或多个表,在第二计算机程序中实现标识的表达式。在理想情况下,为了实现标识的表达式而生成的机器语言代码不包含算术或逻辑机器指令本身,至少没有与敏感信息相关的算术或逻辑机器指令。
[0089] 这将减少第二计算机程序的旁通道泄露,因为第二计算机程序包含更少的算术或逻辑运算。在理想情况下,所有算术和逻辑表达式以及子表达式都由表访问替换。因为没有构成算术或逻辑表达式或子表达式的这些指令,所以它们不能泄露任何信息。预计算表;在程序的执行期间,执行放入表中的算术或逻辑行为而消耗的功率不明显。因为表是纠错表,所以程序还更能够抵抗故障注入攻击。如果在程序中添加有意错误(在执行期间动态添加或者在查找表中添加),则进一步混淆内部变量和外部结果之间的关系,因此使反向工程更困难。
[0090] 图7示出构造查找表700的设备。设备包括可纠正位串生成器712和解码位串生成器714。生成器712和714协同工作,以便产生查找表应该接受作为输入的所有字符串(即,可纠正位串)和对应的未解码字符串。生成器712产生代码字位大小(n1)的字符串。生成器714产生运算符输入位大小(k1)的字符串。两个生成器对应于第一纠错代码。这两个生成器可以使用在此描述的用于构造查找表的任何方法。
[0091] 运算符730使用生成器714的输出。运算符730被配置为针对未编码(即,解码)位串执行运算符。运算符730的输出具有k2个位。大小k1可以等于k2。编码器740对运算符的结果进行编码以便用于第二纠错代码。最后,收集器750收集从生成器712接收的可纠正位串和编码器740的对应编码结果,以便产生查找表。如果可以很容易地获得生成的查找表的输入和输出的位置之间的关系,例如,因为收集器实际上包括大小等于第一纠错代码的代码字大小的所有位串,则不需要在查找表中包括可纠正位串。
[0092] 收集器可以添加部分或全部位错误。其上添加位错误的位置可以依赖可纠正字符串,例如,如果输入串在位置i中具有位错误,则在第二纠错代码内的位置i+1中添加位错误。
[0093] 下面给出实施例的进一步细化。程序中的最常用指令是运算和存储其结果。这些运算包括加法(+)、减法(-)、乘法(*)之类的公知运算。编译器面向这些指令,即,它将以某种高级语言编写的表达式分解为这些已知运算。表可以用于所有涉及的运算(程序中的运算),并且如果使用VM,则还用于执行程序的VM的运算。可以通过为这些表提供特殊特性或属性,进一步提高安全性。
[0094] 对于每个运算,都可以使用表。根据运算定义表。在没有编码的情况下,例如,对于一元运算符Opm tableOpm [x] == Opm(x),或者对于二元运算符Opd tableOpd [x][y] == Opd(x, y)。注意,对于非一元运算,编译器可以将对表的访问实现为多次访问,这一过程称为梳理。即,X = tableOpd [x],后跟X[y]。注意:在存储器方面,对于8位数据路径,14个二元运算符需要等于1 MB的存储使用,这被视为可接受。注意,部分或全部表可以存储在ROM中,并且部分或全部表可以存储在其它易失性或非易失性存储器中。可以通过替代上面公式中的编码,添加纠错编码。
[0095] 可以通过由运算的表访问替换运算使用,维护编译器/链接器和VM的一致性。底层平台只需用于跳转指令以及来自/去往寄存器和存储器的写入/读取。
[0096] 在更高级的实施例中,编译器可以将全部表达式实现为表。例如,表达式:X2+Y2可以通过两个乘法和一个加法实现,从而导致至少三个运算(如果梳理,则导致更多运算)。但2 2
是,它还可以实现为X+Y 的表,并且编译为对该表的访问。这可以导致一次(如果梳理,则为两次)表访问。
[0097] 如果VM用于执行编译的程序,则可以通过将表传递到VM,维护编译器/链接器和VM之间的一致性。标记的表变成编译器的输出和VM的输入。在编译器提供的代码中,然后参考这些标签。这可以是存储器方面的改进,因为可以省略未使用运算的表。在实施例中,编译器包括表达式单元,以便针对第一程序标识为一个、两个或多个数值输入分配值的表达式,代码生成器被配置为生成表,该表表示用于数值输入的所有值的表达式的结果。有趣的是,表达式不需要等于现有机器代码指令。
[0098] 有趣的是,对于适合于执行采用特定VM编程语言的程序的虚拟机,可以将其编译为使用纠错表。这本身在VM上执行的任何程序中传递某些纠错属性。但是,还可以通过将采用某种其它语言的程序编译为VM编程语言,获得程序。后一种编译还可以编译为使用纠错表。
[0099] 例如,可以使用虚拟机的表格化指令(扩展为具有纠错功能),以便实现VM本身。我们对此进行解释以便使用纠错机制扩展加法指令。可以类似地对待其它指令。
[0100] 第 一 步 骤 可 以 是 向 指 令(在 目 前 情 况 下 向 add_instruction)中-1添加纠错属 性。假设M是将域Y 嵌入到更大的 域X中,并且假设M 是 从
域X到 Y的 映 射,其 中 X的 值M(v)中 的 小 误 差e 仍 映 射 回 到v。 简 言 之 。在此 表示X中的加法。通常,X包括长度相等的二进制字符串,
表示字符串的逐位模2加法,并且误差e是“小误差”,前提是它具有更少的非零分量(或者在编码用语中,前提是它具有小的汉明权重)。我们通过E表示希望纠正的错误集合,并且通过S表示集合 。以这种一种方式设计纠错编码:S中的每个
元素s可以以唯一方式编写为 ,其中v在Y中并且e在E中;然后我们具有
。对于X中不在S中的元素x,不定义 。
[0101] 举一个小的实例,我们采取Y={0, 1, 2, 3},X={0, 1}5,并且E={00000, 10000,01000, 00100, 00010, 00001}(因此我们希望纠正一位错误)。我们通过M(0)=00000、M(1)=01110、M(2)=10101和M(3)=11011定义M。
[0102] 显然,我们具有M(0) E = E = {00000, 10000, 01000, 00100, 00010, 00001}
M(1) E = {01110, 11110, 00110, 01010, 01100, 01111}
M(2) E = {10101, 00101, 11101, 10001, 10111, 10100}。
[0103] M(3) E = {11011, 01011, 10011, 11111, 11001, 11011}。
[0104] 通过检查,我们看到 的每个元素可以以唯一方式编写为 ,其中u在Y中并且e在E中。因此集合S是可解码位串集合。
[0105] 具有八个不在S中的X元素(即,11000、10110、01101、00011、10010、11100、00111、-101001);不针对这八个元素定义M 。
[0106] 类似于混淆方法,我们现在引入:对于S中的所有x和y。
[0107] 如果x和y的至少一个不在S中,则不定义函数add(x, y)。可以设想,每当使用这种无效输入调用add(x, y)时,不执行该指令并且出现错误符号。
[0108] 通过这种方式,我们使用纠错属性扩展原始加法,并且注意除了O或M之外的表达式相等。
[0109] 在小的实例中,将可以由两位表示的数字映射到五位字符串,以便能够纠正单个位。通常,可以由k位表示的数字能够被编码为长度为k+r的位串,以便可以纠正一个错误r位错误,其中r如此以便k+r ≤ 2-1。因此,例如对于k=8位数字,我们可以通过使用r=4个冗余位获得;对于k=32位数字,我们可以通过使用r=6个冗余位获得。在后一种情况下,当编码字符串的长度为38时,集合E具有39个元素,并且存储大小将乘以因数39。
[0110] 应该注意,可以使用多种不同方式执行在此描述的方法,具体地说,在权利要求中和/或参考图4、5和6描述的那些方法。这对于所属技术领域的技术人员来说将显而易见。例如,步骤顺序可以有所变化,或者可以并行执行某些步骤。此外,在步骤之间,可以插入其它方法步骤。插入的步骤可以表示对例如在此描述的方法的细化,或者可以与所述方法无关。例如,步骤520和530或者步骤620和630等可以至少部分地并行执行。此外,在下一步骤开始之前,给定步骤可能未完全完成。
[0111] 根据本发明的方法可以使用软件执行,该软件包括用于导致处理器系统执行方法400、500或600的指令。软件可以仅包括系统的特定子实体采取的那些步骤。软件可以存储在合适的存储介质中,例如硬盘、软盘、存储器等。软件可以作为信号沿着导线发送,或者无线发送,或者使用因特网之类的数据网络发送。软件可用于下载和/或服务器上的远程使用。
[0112] 应该理解,本发明还扩展到计算机程序,具体地说,适合于实施本发明的载体之上或之中的计算机程序。程序可以采用源代码、目标代码、代码中间源和目标代码的形式(例如部分编译形式)。或者采用适合于用于实现根据本发明的方法的任何其它形式。涉及计算机程序产品的实施例包括计算机可执行指令,这些指令对应于给出的至少一个方法的每个处理步骤。这些指令可以细分为子例程和/或存储在可以静态或动态链接的一个或多个文件中。涉及计算机程序产品的另一个实施例包括计算机可执行指令,这些指令对应于给出的至少一个系统和/或产品的每个装置。
[0113] 应该注意,上述实施例示出而不是限制本发明,并且所属技术领域的技术人员能够设计多个备选实施例。
[0114] 在权利要求中,放在括号中的任何参考标号不应该被解释为限制权利要求。动词“包括”及其变体的使用并不排除权利要求中所述之外的元件或步骤的存在。元件前面的冠词“一”或“一个”并不排除多个这种元件的存在。本发明可以通过包括数个不同元件的硬件实现,或者通过经过适当编程的计算机实现。在枚举数个装置的设备权利要求中,这些装置中的数个可以由硬件的同一个项目包含。在相互不同的从属权利要求中描述的某些措施的这一事实,并不指示这些措施的组合不能加以利用。
[0115] 参考标号列表:100 查找表
110 表输入(不真正存储在存储器中)
112 与代码字最多相差‘t=floor((d-1)/2)’位的多个输入
120 表内容
131-138 输入112的表结果
200 计算设备
210 存储器件
221, 222 单个输入查找表
231,232 多个输入查找表
2311-2323 单个输入查找表
241 编码查找表
242 解码查找表
255 机器语言代码
250计算机处理器
260 I/O设备
310 输入表
320 中间表
330 输出表
452 查找表
454 输入部分
456 输出部分
552 查找表
700 构造查找表的设备
712 可纠正位串生成器
714 解码位串生成器
730 运算符
740 用于第二纠错代码的编码器
750 收集器
QQ群二维码
意见反馈