在计算机系统中的方法、计算机程序和数据处理设备 |
|||||||
申请号 | CN201610318627.0 | 申请日 | 2016-05-13 | 公开(公告)号 | CN106250252A | 公开(公告)日 | 2016-12-21 |
申请人 | 西门子公司; | 发明人 | 扬·里希特; 马克西米利安·沃尔特; 卡尔-赫尔曼·威特; | ||||
摘要 | 本 发明 涉及一种在 计算机系统 中用于将已编码的中间变量(z)代码转换为码转换的结果变量(z')的方法,其中,通过输入常量(A)与待编码的输入变量(xf)的乘法形成乘积,并且至少借助该乘积形成已编码的中间变量(z),并且其中,确定输入常量(A)的乘法逆元(A-1),并且乘法逆元(A-1)用于已编码的中间变量(z),从而不产生未编码的或者部分未编码的中间结果(R1,R2,R3),和/或在该中间结果中,始终能够识别出潜在地包含在已编码的中间变量(z)中的差错信息。此外,本发明涉及一种 计算机程序 以及 数据处理 设备。 | ||||||
权利要求 | 1.一种在计算机系统中用于将已编码的中间变量(z)代码转换为码转换的结果变量(z')的方法,其特征在于,通过输入常量(A)与待编码的输入变量(xf)的乘法形成乘积,并且至少借助所述乘积形成已编码的所述中间变量(z),并且其中,确定所述输入常量(A)的乘法逆元(A-1),并且所述乘法逆元(A-1)用于已编码的所述中间变量(z),从而不产生未编码的或者部分未编码的中间结果(R1,R2,R3),和/或在所述中间结果中,始终能够识别出潜在地包含在已编码的所述中间变量(z)中的差错信息。 |
||||||
说明书全文 | 在计算机系统中的方法、计算机程序和数据处理设备技术领域[0001] 本发明涉及一种在计算机系统中用于将已编码的中间变量转换为码转换的结果变量代码转换的方法、计算机程序以及数据处理设备。 背景技术[0002] 为了减小对于健康和寿命的危险以及为了避免环境危害而使用功能上安全的系统。除了对于过程信息的安全检测和通信外,这还需要安全的处理,例如在存储器可编程的控制装置或者在工业计算机中。 [0003] 在处理功能上安全的数据时,必须识别出安全功能的内部的差错,并且产生安全反应(例如输出安全的备用值)的结果。这以较为传统的方式通过硬件复制和结果比较来实现。替换方案是借助数学的代码对安全功能进行编码。 [0004] 经常使用的编码是ANBD编码,其中通过与输入常量A的乘法,并通过静态的取决于变量的输入信号B_x以及动态的取决于周期的输入操作数D的加法,对变量xf进行编码。在此,全部数字变量根据如下公式的规定进行编码: [0005] z=A*xf+B_x+D [0006] 并且数学运算(+,-,*,/,等等)如下地进行匹配,即在已编码的范围内的处理提供与原始范围(Ur-Bereich)一致的结果(在此B或者D也能够完全具有数值零)。 [0007] 根据目前的现有技术,对已编码的变量的检验以及变量的从ANBD代码到另外的A’NB’D’代码的代码转换只有通过已编码的变量的完全解码才是可行的。解码借助:xf=(z-B_x-D)/A来实现。对已编码的变量的检验通过:((z-B_x-D)MOD A==0)来实现。该检验的结果本身是未编码的变量,从而使得该检验必须在独立的硬件上实施。如果使用用于代码转换的方法,则产生未编码的中间结果。对该中间结果产生作用的差错在原则上不能被识别。此外,包含在原始的已编码的变量中的差错信息通过解码丢失,即无效的已编码的输入也反映出有效的已编码的密码。因此必须单独地检验输入操作数的有效性。 发明内容[0008] 本发明的第一目的是提出一种在计算机系统中用于将已编码的中间变量代码转换为码转换的结果变量的方法,该方法解决了上述的问题。第二目的在于提出一种具有程序代码的解决这些问题的计算机程序。另外的目的是提出一种数据处理设备。 [0009] 在该方法方面的目的通过提出一种在计算机系统中用于将已编码的中间变量代码转换为码转换的结果变量的方法来实现,其中,通过输入常量与待编码的输入变量的乘法形成乘积,并且至少借助该乘积形成已编码的中间变量,并且其中,确定输入常量的乘法逆元,并且乘法逆元用于已编码的中间变量,从而不产生未编码的或者部分未编码的中间结果,和/或在该中间结果中,始终能够识别出潜在地包含在已编码的中间变量中的差错信息。 [0010] 在该计算机程序方面的目的通过提出一种具有用于执行上述方法的程序代码的计算机程序来实现,当该计算机程序在计算机上运行时。 [0011] 在数据处理设备方面的目的通过提出一种用于从已编码的中间变量中提供码转换的结果变量的数据处理设备来实现,该数据处理设备具有: [0012] 通过输入常量与待编码的输入变量的乘法形成的乘积, [0013] 至少借助该乘积编码的中间变量, [0014] 输入常量的乘法逆元, [0015] 通过使用乘法逆元用于已编码的中间变量而码转换的结果变量,从而不产生未编码的或者部分未编码的中间结果,和/或在该中间结果中,始终能够识别出潜在地包含在已编码的中间变量中的差错信息。 [0016] 到目前为止,代码转换只有通过已编码的变量的完全解码的弯路才是可行的。但是,这也表示高的危险因素。在此,包含在已编码的变量中的差错信息丢失,即无效的已编码的输入也在有效的密码上示出。要求的安全的处理只能通过必须附加地并且取决于硬件地实施的附加的诊断来遵守,并且因此是成本非常高的。现在,这根据本发明得以避免。 [0017] 根据本发明,现在不是通过除法,而是通过乘法逆元与已编码的中间变量的乘法来实现中间变量的代码转换。 [0018] 在本发明中使用乘法逆元并不是容易想到的方法。其原因特别在于,当运算应用于不能被除数整除的被除数时,通常不产生有意义的结果。在此有针对性地使用这种在其他情况下不受欢迎的特性,以便在无效的已编码的变量时也得到有效的已编码的结果。 [0019] 与传统的借助于通过除法的解码和随后的新编码进行代码转换不同,没有未编码的或者部分未编码的中间结果产生。因此,该方法也能够在已编码的运算的内部使用,虽然在该处没有提供独立的检验装置(冗余的硬件)。 [0020] 对于没有附加诊断也行的编码处理的每个纯实施而言,这种特性是重要的前提条件。 [0021] 优选地,至少借助输入常量与待编码的输入变量的乘法形成已编码的中间变量,其中,确定输入常量的乘法逆元,并且其中,乘法逆元与码转换的结果常量的乘积用于已编码的中间变量,从而不产生未编码的或者部分未编码的中间结果。 [0022] 优选地,输入信号和/或输入操作数不仅恒定为零,还能够使用附件的另外的输入信号和/或附件的另外的输入操作数。在此,乘法逆元或者乘法逆元与码转换的结果常量的乘积随后在第一步骤中用于已编码的中间变量。 [0023] 优选地,乘法逆元具有模数为2的n次幂 的剩余类环,其中,n表示已编码的中间变量的比特宽度,例如n=32或者n=64。乘法逆元能够例如借助于扩展的欧几里得算法(Euklid'schen Algorithmus)进行计算。在优选的设计方案中忽略数学溢出。由此节省了耗费时间的计算步骤。 [0024] 在另外的优选的设计方案中,通过输入变量与输入常量的乘法,并且通过静态的取决于变量的输入信号以及动态的取决于周期的输入操作数的加法,形成中间变量,其中,中间变量通过以下步骤转换为具有码转换的结果常量、码转换的静态的取决于变量的结果信号和码转换的动态的取决于周期的结果操作数的码转换的结果变量: [0025] 通过中间变量与第一参数的乘法产生第一中间结果,其中,第一参数是关于输入常量的乘法逆元和码转换的结果常量的乘法积, [0026] 通过给第一中间结果加上第二参数的加法产生第二中间结果,其中,第二参数是减去输入信号与第一中间结果的乘法积的码转换的结果信号, [0027] 通过给第二中间结果加上码转换的动态的取决于周期的结果操作数的加法产生第三中间结果, [0028] 通过从第三中间结果减去第一参数的减法产生码转换的结果变量。 [0029] 容易认知的是,在全部中间结果中,功能上的输入变量满足对于已编码的变量的要求。在代码转换时因此不产生未编码的中间结果,从而通过编码识别出可能的新出现的差错。 [0030] 在示例性的设计方案中,通过使用乘法逆元将潜在存在的差错逆转。例如,通过一减去输入常量乘以2的n次幂来确定码转换的结果常量,即A'=(1-2n*A),其中,n是比特宽度。有利地,码转换的静态的取决于变量的结果信号以及码转换的动态的取决于周期的结果操作数都能自由地进行选择。由此如下地实现代码转换,即将在输入中存在的差错值逆转。如果在实施时在已编码的否定运算中使用编码,那么总共得出没有逆转差错值的运算,因为差错的双重否定进行了补偿。由此能够避免系统地遮盖差错。 [0031] 码转换的结果常量也能够如此形成,即复制输入变量。优选地,在此通过一加上2n的n次幂的加法形成结果常量,即A'=2+1,从而复制输入变量。此外,码转换的静态的取决于变量的结果信号和码转换的动态的取决于周期的结果操作数设置成等于零,即B_x'=0和D'=0。这种编码是有利的,因为例如是AND,OR或者XOR的按位方式的布尔运算能够直接用于这种已编码的操作数。 [0032] 优选地,结果常量设置成等于一,并且同时,码转换的静态的取决于变量的结果信号和码转换的动态的取决于周期的结果操作数设置成等于零,从而使得代码转换是已编码的中间变量的解码,其中,始终能够识别出潜在地包含在已编码的中间变量中的差错信息。附图说明 [0033] 本发明的另外的特征、特性和优点从以下关于附图的说明中得出。其中示意性地示出: 具体实施方式[0035] 虽然本发明在细节上通过优选的实施例进一步进行阐述和说明,但是本发明不受限于公开的实例。本领域技术人员能够由此推导出变体方案,而不脱离本发明的保护范围。 [0036] 图1示出ANBD编码的中间变量z=(A*xf+B_x+D)到A’NB’D’编码的结果变量z'=(A'*xf+B_x'+D')的代码转换。这通过以下计算步骤实现: [0037] 步骤1:z*K1,其中常量K1=A-1*A' [0038] 这导致第一中间结果R1: [0039] A'*xf+A-1*A'*B_x+A-1*A'*D。 [0040] 步骤2:R1+K2,其中常量K2=B_x*K1+B_x' [0041] 这导致第二中间结果R2: [0042] A'*xf+B_x'+A-1*A'*D。 [0043] 步骤3:R2+D' [0044] 这导致第三中间结果R3: [0045] A'*xf+B_x'+A-1*A'*D+D'。 [0046] 步骤4:R3+K3*D,其中常量K3=-K1=-A-1*A' [0047] 这导致码转换的结果变量z': [0048] z':A'*xf+B_x'+D'。 [0049] 在此,必要时能够忽略溢出。值A-1在模数为2的n次幂 的剩余类环 中表示A的乘法逆元,其中n表明已编码的中间变量z的比特宽度(例如n=32或者n=64)。A-1能够例如借助扩展的欧几里得算法进行计算。如由此显而易见的那样,全部中间结果R1,R2,R3是已被编码的。容易认知的是,在全部中间结果R1,R2,R3中,功能上的输入变量xf与质数A或A’相乘,始终相加地包含多倍的静态信号B_x和/或B_x',并且始终包含多倍的动态信号D或D'。因此,全部中间结果R1,R2,R3满足对于已编码的变量的要求。 [0050] 与传统的借助于通过除法的解码和随后的新编码进行代码转换不同,没有未编码的或者部分未编码的中间结果产生。因此,该方法也能够在已编码的运算的内部使用,虽然在该处没有提供独立的检验装置(冗余的硬件)。 [0051] 对于没有附加诊断也行的编码处理的每个纯实施而言,这种特性是重要的前提条件。 [0052] 根据本发明保持获得差错的可识别性。根据本发明,在代码转换时不产生未编码的中间结果,从而通过编码识别出可能的新出现的差错。这在多个关键点处是必要的,例如在利用同时的差错检验对变量解码时,在没有逆转差错问题的情况下实施否定运算时,和在实施按位方式的布尔运算时。 [0053] 另外的实例是ANBD编码的中间变量z=(A*xf+B_x+D+e)到A’NB’D’编码的变量z'=(A'*xf+B_x'+D')的代码转换,其中A'=1,B_x'=0并且D'=0以及e为差错。 [0054] 这导致结果变量: [0055] z':=xf+A-1*e。 [0056] 在此获得操作数z的解码作为代码转换。然而与经典的借助除法的解码不同,在输入操作数中的无效的解码在结果中能识别出:刚好在这种情况下较高数值的比特位不等于0(正数和零)或者不等于-1(负数)。这能够在实施结果驱动器(Ergebnistreiber)时使用,这由此实现,即,较高数值的比特位中的无效值导致输出的电报的校验和有针对性地被干扰,并由此对于接收者能够被识别为是有差错的。 [0057] 另外的实例是ANBD编码的中间变量z'=(A*xf+B_x+D+e)到A’NB’D’编码的变量z'=(A'*xf+B_x'+D')的代码转换,其中选择A'=(1-2n*A)。由此如下地实现代码转换,即将潜在存在的差错值逆转。如果在实施时在已编码的否定运算中使用编码,那么总共得出没有逆转差错值的运算,因为差错的双重否定进行了补偿。由此能够避免系统地遮盖差错。 [0058] 附加的实例是ANBD编码的中间变量z=(A*xf+B_x+D+e)到A’NB’D’编码的变量z'=(A'*xf+B_x'+D')的代码转换,其中选择A'=2n+1,B_x'=0并且D'=0。通过代码转换在此产生未编码的值的复制。这种编码是有利的,因为例如是AND,OR或者XOR的按位方式的布尔运算能够直接用于编码。 [0059] 需要注意的是,在许多情况下选择D=D'。然后该方法简化为: [0060] z'=(z*K1+K2)+K3*D [0061] 其中K1=A-1*A',K2=-Bx*K1+Bx',K3=-K1+1。 |