专利名称:一种用于车载atp系统的安全冗余编码处理方法
技术领域:
本发明涉及编码方法,尤其是涉及一种用于车载ATP系统的安全冗余编码处理方 法。
背景技术:
铁路信号行业直接涉及到列车的安全运行和人民群众的生命财产安全。对于一个 铁路行业的安全产品而言,必须满足RAMS(可靠性、可用性、可维护性、安全性)的要求。尤 其是对于车载ATP系统而言,它直接控制列车安全运行,因而必须达到SIL4级的系统安全 完善度等级。普通的软件和硬件环境并不能保证系统的安全性,系统在运行期间由于内部 和外部的原因造成的运算错误不能被发现,最终将导致严重的后果。在该领域引入安全冗 余编码将有效地提升系统的安全度等级,并且根据该方法所使用的基础理论,安全冗余编 码的实施可以独立于软件和硬件环境,在不改造硬件环境,不变更底层软件的情况下,达到 极高的系统安全度等级。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种用于车载ATP 系统的安全冗余编码处理方法。 本发明的目的可以通过以下技术方案来实现 —种用于车载ATP系统的安全冗余编码处理方法,其特征在于,该方法包括以下 步骤 1)预生成签名、配置信息、不安全的C语言代码通过输入与错误检测模块处理;
2)将处理后的预生成签名、配置信息、不安全的C语言代码经安全冗余编码编译 器的预编译器处理后生成中间代码文件,中间代码文件经过安全冗余编码编译器的中间代 码编译器处理后生成补偿常量、编码后的C语言代码;
3)安全冗余编码优化模块生成辅助语言代码; 4)将补偿常量、编码后的C语言代码、辅助语言代码经通用编译器和连接器(如 VC)处理后生成安全冗余代码; 5)该安全冗余代码经输出与错误检测模块处理后输出。 所述的步骤2)中的冗余编码编译器处理过程所涉及算法方法包括数值编码方 法、算术运算符运算方法、移位运算符运算方法、逻辑运算符运算方法、数组运算方法、函数 使用方法、分支结构的运算方法、循环结构的运算方法、素数A的选取方法、签名生成方法。
所述的数值编码方法包括数值变量的编码方法、数值常量的编码方法、布尔变量 的编码方法。 所述的算术运算符运算方法包括加法运算方法、减法运算方法、乘法运算方法、除
法运算中除以常数的方法、除法运算中除以变量的方法。 所述的移位运算符运算方法包括右移运算方法、左移运算方法。
所述的逻辑运算符运算方法包括逻辑与运算方法、逻辑或运算方法、逻辑非运算 方法。 所述的数组运算方法包括一维数组的赋值运算方法、一维数组的引用运算方法、 多维数组运算方法。 所述的函数使用方法包括以下步骤
(8a)根据函数的不同功能对其进行分类;
(8b)对函数进行调用。 所述的分支结构的运算方法包括数值判断条件下分支结构的运算方法、布尔判断 条件下分支结构的运算方法、混合判断条件下分支结构的运算方法。 所述的循环结构的运算方法包括数值判断条件下循环结构的运算方法、布尔判断 条件下循环结构的运算方法、混合判断条件下循环结构的运算方法。 所述的素数A的选取方法为以素数A的选取规则从接近计算机字长的范围内查找 素数A,其中素数A的选取规则包括 (lla)素数A的大小决定了系统所能达到的安全等级;
(lib)素数A的选取决定了签名的选取;
(llc)素数A的大小同计算机字长有关; (lid)素数A的取值能够使整数均匀地分布在值域空间内,任何经由素数A的计算 都具有一定的码距空间; (lie)素数A保证了经由A产生的取值空间的数值的互素性。 所述的签名生成方法为采用线性反馈同余发生器或者平方反馈发生器以签名生 成规则来产生签名,其中签名生成规则为
(12a)每个变量的签名必须不同; (12b)每个变量的签名必须均匀地分布在取值域内;
(12c)不同变量的签名之间存在码距,并对码距进行检查。 所述的步骤2)中的安全冗余编码编译器所涉及的处理方法包括中间编码器分层 处理结构的处理方法、针对数组和结构的处理方法、针对多重判断条件的分支或者循环语 句的处理方法。
所述的步骤3)中的安全冗余编码优化模块处理过程包括以下步骤 (14a)使用汇编语言,对于各种运算操作结果的取模运算,用减法或者加法操作代
替除法操作; (14b)使用汇编语言,将64位乘法操作简化为32位乘法操作,并且省去取模运 算; (14c)使用汇编语言简化无符号取模运算。 所述的步骤1)、步骤5)输入与错误检测模块、输出与错误检测模块处理过程包括 以下步骤 (15a)编码器对所有输入的变量在处理前进行编码,其中对布尔变量进行编码并 且加入时间戳后,才能进入编译处理器处理单元,时间戳信息由编译处理器单元提供;
(15b)动态控制器负责检查所有输出变量的签名是否同预测的签名相同,动态控 制器从编译处理器单元获得时间戳信息;
6
(15c) —旦输出变量的签名同预测的签名不同,动态控制器使系统导向安全侧。 所述的中间编码器分层处理结构的处理方法包括以下步骤 (16a)将C语言源代码信息处理成各种语法二叉树表示的计算机数据结构; (16b)需要将语法二叉树转化为简单的基本冗余编码形式,简单的基本冗余编码
形式被转化成冗余代码输出。
所述的针对数组和结构的处理方法包括以下步骤 (17a)在使用多维数组时,使用不依赖于计算机存储结构方式的寻址方式定位对 特定维数组合的数据项,并执行存取操作; (17b)在使用结构或者嵌套结构时,使用不依赖于计算机存储结构方式的寻址方 式对结构中特定数据项进行定位,并执行存取操作; (17c)在数组和结构混合使用的情况下,特定数据项的存取操作包含两步,第一步 搜索数据项位置,第二步在该位置对特定数据项进行存取操作。 所述的针对多重判断条件的分支或者循环语句的处理方法包括以下步骤
(18a)在分支结构中,多重判断条件使用单一判断条件来表示,包括与操作(&&)、 或操作(I l),多重判断条件用语法二叉树结构表示; (18b)在循环结构中,多重判断条件表示成单一判断条件,包括与操作(&&)、或操 作(I l),多重判断条件用语法二叉树结构表示。
与现有技术相比,本发明具有以下优点 实现对车载ATP在运算过程中进行安全防护,从而使其不可检出错误发生的概率 低于系统的设计要求,进而来保证系统的运行安全。
图1为本发明- 图2为本发明-式图; 图3为本发明-码形式图; 图4为本发明-运算图; 图5为本发明-运算图; 图6为本发明-算图; 图7为本发明-图; 图8为本发明-程图; 图9为本发明-流程-种用于车载ATP系统的安全冗余编码处理方法的流程图; 4中用于车载ATP系统的安全冗余编码处理方法的数值冗余编码形
4中用于车载ATP系统的安全冗余编码处理方法的算术运算冗余编
4中用于车载ATP系统的安全冗余编码处理方法的高位部分的逻辑
4中用于车载ATP系统的安全冗余编码处理方法的逻辑非高位冗余
4中用于车载ATP系统的安全冗余编码处理方法的一维数组赋值运
-种用于车载ATP系统的安全冗余编码处理方法的函数调用过禾
、王
-种用于车载ATP系统的安全冗余编码处理方法的if分支语句流
-种用于车载ATP系统的安全冗余编码处理方法的while循环语句、王 图10为本发明一种用于车载ATP系统的安全冗余编码处理方法的签名生成流禾 图11为本发明一种用于车载ATP系统的安全冗余编码处理方法的安全冗余编码
Tm ,,* ma r^i
编译器处理流程图; 图12为本发明一种用于车载ATP系统的安全冗余编码处理方法的语法表示数据 结构图; 图13为本发明一种用于车载ATP系统的安全冗余编码处理方法的多重判断条件 a < b&&c = = d的语法二叉树图; 图14为本发明一种用于车载ATP系统的安全冗余编码处理方法的安全冗余编码 优化模块的结构示意图。
具体实施例方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例 如图l所示,一种用于车载ATP系统的安全冗余编码处理方法,该方法包括以下步 骤 步骤101,预生成签名、配置信息、不安全的C语言代码通过输入与错误检测模块 处理; 步骤102,将处理后的预生成签名、配置信息、不安全的C语言代码经安全冗余编 码编译器的预编译器处理后生成中间代码文件,中间代码文件经过安全冗余编码编译器的 中间代码编译器处理后生成补偿常量、编码后的C语言代码;
步骤103,安全冗余编码优化模块生成辅助语言代码; 步骤104,将补偿常量、编码后的C语言代码、辅助语言代码经通用编译器和连接 器(如VC)处理后生成安全冗余代码; 步骤105,该安全冗余代码经输出与错误检测模块处理后输出。
如图2所示,为显示了数值冗余编码的表示方法,其中对于一个32位字长的软件 系统而言,冗余编码的数据总共具有64位,高32位表示一个有符号的数据值,低32位表示 一个有符号的校验值。高位数据通常表示变量的数值,低位数据由高位数据通过冗余取模 运算得到。冗余取模运算还需要变量的签名以及时间戳标志参与。变量的签名标识了变量 的特性,时间戳标识了程序运行周期的特性。用XH表示变量的冗余编码形式的高位,用XL 表示变量的冗余编码形式的低位,对于变量的冗余编码形式可以表示为
X (XH, XL) 低位的计算也同素数A有关,通常是进行无符号取模操作,素数A的大小决定了整 个系统的安全级别。用codedMOD表示冗余取模运算,低位的计算方法可以表示为
XL = codedMOD(XH, SigX, DT) unsignedMOD A 常量的编码形式为高位为常量的数值,低位为常量的校验值,如图1所示。常量 编码不与系统的运行周期有关,对于整个系统而言,一个常量是唯一确定的。在计算过程 中,常量的特性标识将唯一,不再变更。常量在系统运行时将不考虑系统运行周期的影响。
布尔变量的编码形式分为高位和低位。高位为布尔变量的真值或者假值,低位为布尔变量的校验值,如图l所示。对于每个布尔变量而言,有唯一的一组确定的真值和假值 与该布尔变量相对应。在一个32位的计算机系统中,布尔变量的真值和假值分别由两个不 同的32位数来表示,这两个32位数是固定的,预先确定的,在整个程序运行期间保持不变。 一个布尔变量的真值和假值将根据不同的输入方式来确定。如果一个布尔变量经由硬件设 备读取,那么该布尔变量的真值和假值的取值将由硬件电路的设计来决定;如果一个布尔 变量由运行程序自身创建,那么该布尔变量真值和假值将由生成算法来确定。根据硬件电 路的设计约定,布尔变量的真值的最后一位为l,假值的最后一位为O,真值和假值之间的 保持一定的码距,并且两者之间没有任何联系。 图3显示了冗余编码算术运算的运算方法。编码后的变量进行算数运算时,高位 和低位分开运算。高位运算采用一般的算数运算。低位采用冗余编码算术运算,冗余编码 算术运算是有限域理论封闭、结合以及求逆运算的扩展,每个冗余编码中使用的运算符都 有其不同于其他运算符的编码运算方法。编码运算步骤如下所示
(1)操作数的高位进行普通运算符运算;
(2)操作数的低位进行冗余编码运算; (3)对高位运算和低位运算的结果进行常数补偿,再次进行冗余编码补偿运算;
(4)将结果保存为高位和低位的形式。 加法运算使用加法冗余运算方法,加法冗余运算使得加法运算结果的签名可以被 预测。变量的高位和低位在加法运算中分开进行,表现为
ZH = XH+YH
ZL = XL+YL 减法运算使用减法冗余运算方法,减法冗余运算使得减法运算结果的签名可以被 预测。变量的高位和低位在减法运算中分开进行,表现为
ZH = XH-YH
ZL = XL-YL 乘法运算使用乘法冗余运算方法,乘法冗余运算使得乘法运算结果的签名可以被 预测,乘法冗余运算方法产生的签名加入运算补偿常数,该补偿常数由参与乘法运算的变 量签名以及素数A来决定,并且将其通过有限域乘法运算得到。变量的高位和低位在乘法 运算中分开进行。 除法运算使用的冗余除法方法根据除数性质的不同而不同。如果除数是常量,那
么除数将被处理并转换成冗余编码形式嵌入到除法冗余运算中。除数是变量的除法运算运
用其他冗余运算形式拟合除法运算进行编码。除法运算结果的签名可以被预测。 所述的安全冗余编码算法实现方案,针对移位运算符的运算方法包括右移运算
和左移运算。 右移运算使用右移冗余运算方法。右移运算结果的签名可以被预测。右移运算的 步骤如下 (1)根据右移位数已知的特性,将右移位数进行冗余编码,并嵌入到右移运算中;
(2)将右移操作转化为相对应的冗余编码运算形式,该冗余编码运算形式保证了 右移运算的安全性; (3)对右移运算的结果进行常数补偿;
9
(4)保存右移运算结果的高位和低位。 左移运算使用左移冗余运算方法。左移运算结果的签名可以被预测。左移运算的 步骤如下 (1)根据左移位数已知的特性,将左移位数进行冗余编码,并嵌入到左移运算中;
(2)将左移操作转化为相对应的冗余编码运算形式,该冗余编码运算形式保证了 左移运算的安全性; (3)对左移运算的结果进行常数补偿;
(4)保存左移运算结果的高位和低位。 所述的安全冗余编码算法实现方案,针对逻辑运算符的运算方法包括
a.逻辑与运算的实现方法;
b.逻辑或运算的实现方法;
c.逻辑非运算的实现方法。 逻辑运算是布尔变量之间的运算。逻辑冗余运算分为高位逻辑冗余运算和低位逻 辑冗余运算,高位逻辑冗余运算和低位逻辑冗余运算使用的运算方法不同。高位运算的步 骤如下 (1)在预处理阶段取得参与运算的每个布尔变量的真值和假值,包括运算结果布 尔变量的真值和假值; (2)使用两个操作数的真值和假值进行高位冗余运算,计算出操作数补偿常数;
(3)使用由(2)计算得到的补偿常数与运算结果布尔变量的真值和假值进行高位 冗余运算,取得最终补偿常数; (4)将操作数的当前值(真值或者假值)同由(3)得到的补偿常数进行高位冗余
运算,得到最终运算结果的高位部分。 图4显示了逻辑变量高位冗余运算的过程。 逻辑与的高位运算使用逻辑与高位冗余运算。逻辑与高位冗余运算保证了运算结 果不是真值就是假值,运算结果同普通的逻辑与运算结果相同。 逻辑或的高位运算使用逻辑或高位冗余运算。逻辑或高位冗余运算保证了运算结 果不是真值就是假值,运算结果同普通的逻辑或运算结果相同。 如图5所示,逻辑非的高位运算使用逻辑非高位冗余运算。逻辑非高位冗余运算
保证了运算结果不是真值就是假值,运算结果同普通的逻辑非运算结果相同。 逻辑运算的低位运算步骤同逻辑运算的高位运算步骤基本相同,如图3所示。逻
辑运算的低位运算使用逻辑运算低位冗余运算,参与运算的是各操作数真值和假值的冗余
编码低位部分。 逻辑与的低位运算使用逻辑与低位冗余运算。逻辑与低位冗余运算保证了运算结 果不是结果变量的真值的低位值,就是结果变量的假值的低位值,逻辑与低位运算结果变 量的签名可以被预测。 逻辑或的低位运算使用逻辑或低位冗余运算。逻辑或低位冗余运算保证了运算结 果不是结果变量的真值的低位值,就是结果变量的假值的低位值,逻辑或低位运算结果变 量的签名可以被预测。 逻辑非的低位运算使用逻辑非低位冗余运算。逻辑非低位冗余运算保证了运算结
10果不是结果变量的真值的低位值,就是结果变量的假值的低位值,逻辑非低位运算结果变 量的签名可以被预测。 多重逻辑运算指在逻辑运算中有多个逻辑与运算、逻辑或运算或者逻辑非运算参
与。多重逻辑运算分解成单一逻辑运算来求解,步骤如下所示 (l)M = A&&B| |C&&D (2)TMP1 = A&&B ; (3) TMP2 = C&&D ; (4) TMP3 = TMP11 | TMP2 。 所述的安全冗余编码算法实现方案,针对数组运算方法包括
a. —维数组的赋值运算;
b. —维数组的引用运算;
c.多维数组运算。
如图6所示,一维数组赋值运算的步骤如下 (1)对一维数组中,由索引指向的数据项的高位进行赋值操作;
(2)对一维数组中,由索引指向的数据项的低位进行赋值操作;
(3)对该数据项进行一维数组赋值冗余操作,将该数组的特征保存;
(4)对该数据项低位进行修正值补偿。
—维数组引用运算的步骤如下 (1)对一维数组中,由索引指向的数据项的高位赋给变量;
(2)对一维数组中,由索引指向的数据项的低位赋给变量;
(3)对变量的低位进行修正值补偿。 多维数组的赋值和引用使用的冗余运算同 一维数组赋值和引用的方法相同。 所述的安全冗余编码算法实现方案,针对函数使用的方法包括 a.根据函数的作用形式,对函数进行分类。不同类型的函数具有不同的功能; b.函数声明以及函数调用时对签名变化所产生的影响。不同类型的函数对变量签
名具有不同的影响,可以影响全局变量的签名,或者不影响。
函数被分为两类,划分的依据为函数是否有返回值,函数是否能使用参数,函数
是否可以操作全局变量。对于不同类型的函数,使用的方法也不同。能够操作全局变量的
函数将不能出现在大部分语句中,对于有返回值的函数,使用的范围较大,具有参数的函数
需要对函数进行特征标识。
函数调用如图7所示,步骤如下 (1)函数如果有参数,使用函数签名对参数进行冗余运算,参数变为具有特定函数 特征的输入变量; (2)将由(1)产生的函数特征保存; (3)调用函数进入函数体内,取出本函数的函数特征与输入参数作比较,比较正确 表明函数调用正确; (4)对参数进行函数签名修正,从而可以在函数体内使用; (5)当函数执行结束时,使用函数签名对返回值进行冗余运算,保存函数特征;
(6)函数调用结束,如果函数有返回值,取得返回值。使用函数特征检查函数调用返回是否正确。 如果在函数调用期间,函数体内的语句操作了全局变量,那么所有被函数使用的
全局变量的签名可预测。函数体本身使用的参数签名可预测,函数体返回值签名可预测。 所述的安全冗余编码算法实现方案,针对分支结构的方法包括 a.数值判断条件下分支结构的运算方法; b.布尔判断条件下分支结构的运算方法; c.混合判断条件下分支结构的运算方法。 如图8所示,数值判断条件的运算步骤如下 (1)对判断条件变量进行无符号取模运算,运算的结果会根据变量自身的数值而 有所不同,如果当前的变量不是同零值作比较,那么根据判断操作符的不同而使用不同的 算术运算进行转换; (2)执行判断条件而进入不同的分支语句,支持的判断条件有大于( > )、小于 (<)、大于等于(>=)、小于等于(<=)、等于(==)以及不等于(!=),在进行条 件判断时,计算条件分支变量Si的值,Si将根据条件分支的不同而取得不同的数值; [OWO] (3)如果是等于(==)、不等于(!=)运算,计算条件变量Si的值时,需要条 件判断变量的正值和负值同时参与运算; (4)如果进入第一条分支条件,各变量间的计算将根据各种冗余运算进行,如果进 入第二条分支条件,各变量在进行冗余运算之后,将对每个计算结果变量进行常数补偿,补 偿的常数由(2)计算出的判断变量Si的两个取值以及在第一条分支条件中计算的结果变 量签名的值来决定; (5)在跳出条件分支后,将条件变量Si的值加入到参与条件分支运算的变量的低 位。 数值判断条件下分支结构的运算变量的签名可以被预测,无论程序在运行时执行
了哪一条分支,在跳出分支后的签名保持一致。 布尔判断条件下分支结构的运算步骤如下 (1)根据判断条件变量进行比较的对象不同而采取不同的比较方法,如果判断条 件变量与该变量的真值作比较,那么判断条件进行真值比较运算,如果判断条件变量与该 变量的假值作比较,那么判断条件进行假值比较运算; (2)执行判断条件而进入不同的分支语句,支持的布尔判断条件有等于(==) 以及不等于(! 二),在进行条件判断时,计算条件分支变量Si的值,Si将根据条件分支的 不同而取得不同的数值; (3)如果是等于(==)、不等于(!=)运算,计算条件变量Si的值时,需要条 件判断变量的正值和负值同时参与运算; (4)如果进入第一条分支条件,各变量间的计算将根据各种冗余运算进行,如果进 入第二条分支条件,各变量在进行冗余运算之后,将对每个计算结果变量进行常数补偿,补 偿的常数由(2)计算出的条件变量Si的两个取值以及在第一条分支条件中计算的结果变 量签名的值来决定; (5)在跳出条件分支后,将条件变量Si的值加入到参与条件分支运算的变量的低 位。
布尔判断条件下分支结构的运算变量的签名可以被预测,无论程序在运行时执行 了哪一条分支,在跳出分支后的签名保持一致。 混合判断条件是指数值判断和布尔判断混合使用的情况。混合判断条件的处理需
要首先将混合判断条件分解成数值判断或者布尔判断,再分别处理这些判断条件。混合判
断条件的分支结构的运算变量的签名可以被预测,无论运行时执行了哪一条分支,在跳出
分支后的签名保持一致。混合判断条件的步骤如下 M > b顯> b 分解为 T = False ; If(M^b) {if (N > b)T = True ;else {T = False ;} else T = False ; 所述的安全冗余编码算法实现方案,针对循环结构的方法包括
a.数值判断条件下循环结构的运算方法;
b.布尔判断条件下循环结构的运算方法;
c.多重判断条件下循环结构的运算方法。
如图9所示,数值判断循环语句运算步骤如下 (1)对于参与循环体运算的变量,在变量的低位加入初始化签名标记,该标记表示 了该变量将要进入循环体; (2)使用分支判断条件中对判断条件变量处理方法来判别是否进入循环体。可以 使用的判断条件有大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(= =)以及不等于(!=); (3)计算条件变量Si,该条件变量在进入循环体和退出循环体时所得到的值有所 不同,计算Si的方法同if分支条件中使用的方法相同,该方法对于分支判断变量进行无符 号取模运算,再进行补偿来得到; (4)在循环体内,参与循环的变量按照循环体内语句的形式而进行不同的冗余运 算; (5)在循环体内最后一条语句结束后,循环体结束前,对每个参与循环体的变量作 签名调整,将变量的签名调整到进入循环体前的数值; (6)将每次循环执行的标记值dD加入到变量的低位,该标记值表明了变量执行了 一次循环; (7)当退出循环时,检查参与循环的变量中所含有的循环标记值是否与循环实际 执行的次数相同,同时将分支变量Si计算在变量的结果签名数值中。 数值判断条件下循环结构的运算变量的签名可以被预测,无论程序在运行时是否
进入循环,在循环体中执行了多少次,在跳出循环后的签名保持一致。 布尔判断循环语句运算步骤如下 (1)对于参与循环体运算的布尔变量,在变量的低位加入初始化签名标记,该标记 表示了该变量将要进入循环体;
(2)根据判断条件变量进行比较的对象不同而采取不同的比较方法,如果判断条 件变量与该变量的真值作比较,那么判断条件进行真值比较运算,如果判断条件变量与该 变量的假值作比较,那么判断条件进行假值比较运算; (3)使用分支判断条件中对判断条件变量处理方法来判别是否进入循环体。可以 使用的判断条件有等于(==)以及不等于(!=); (4)计算条件变量Si,该条件变量在进入循环体和退出循环体时所得到的值有所 不同,计算Si的方法同if分支条件中使用的方法相同,该方法对于分支判断变量进行无符 号取模运算,再进行补偿来得到; (5)在循环体内,参与循环的变量按照循环体内语句的形式而进行不同的冗余运 算; (6)在循环体内最后一条语句结束后,循环体结束前,对每个参与循环体的变量作 签名调整,将变量的签名调整到进入循环体前的数值; (7)将每次循环执行的标记值dD加入到变量的低位,该标记值表明了变量执行了 一次循环; (8)当退出循环时,检查参与循环的变量中所含有的循环标记值是否与循环实际 执行的次数相同,同时将分支变量Si计算在变量的结果签名数值中。 布尔判断条件下循环结构的运算变量的签名可以被预测,无论程序在运行时是否 进入循环,在循环体中执行了多少次,在跳出循环后的签名保持一致。 混合判断条件是指数值判断和布尔判断混合使用的情况。混合判断条件的处理需 要首先将混合判断条件分解成数值判断或者布尔判断,再分别处理这些判断条件。混合判 断条件的分支结构的运算变量的签名可以被预测,无论运行时是否进入循环体,在跳出循 环后的签名保持一致。 所述的安全冗余编码算法实现方案,针对素数A的选取的方法包括
a.素数A的选取规则;
b.素数A的产生方法。
素数A的选取规则包括 (1)素数A的大小决定了系统所能达到的安全等级;
(2)素数A的选取决定了签名的选取;
(3)素数A的大小同计算机字长有关; (4)素数A的取值能够使整数均匀地分布在值域空间内,任何经由素数A的计算都 具有一定的码距空间; (5)素数A保证了经由A产生的取值空间的数值的互素性。 素数A的产生方法包括 (1)应当服从随机有限序列的分布规律; (2)数值在计算机中以二进制的形式出现,应到考虑数值二进制的编码形式,数值 间的码距以及0和1的排布规律;
(3)素数A应该成对出现; (4)在接近计算机字长的范围内寻找合适的A。 所述的安全冗余编码算法实现方案,针对签名的生成方法包括
14
a.签名的生成方法; b.签名之间的码距检验方法。 如图10所示,签名的生成方法包括 (1)每个变量的签名必须不同; (2)每个变量的签名必须均匀地分布在取值域内; (3)不同变量的签名之间具有一定的码距; (4)采用线性反馈同余发生器或者平方反馈发生器产生签名。 签名之间的码距检查方法包括 (1)使用签名检查公式检查签名之间的码距,如下所示
尸 (£) = | (1 —力"
,=1 (2)根据签名检查公式,将码距最大可能的签名挑选并排布; (3)检查挑选出的所有签名之间的码距,所有签名之间的码字应该达到所要求的 安全标准。
如图11所示,安全冗余编码编译器处理流程如下 a.预编译器可以对C语言源代码文件进行解析,处理预编译指令,可以处理的预 编译指令包括头文件、条件编译; b.中间代码编译器处理预编译器产生的文件。在中间代码编译器处理阶段,它不 再需要参考包括头文件在内的其他外部文件。 安全冗余编码编译器所涉及的处理方法包括中间编码器分层处理结构的处理方 法、针对数组和结构的处理方法、针对多重判断条件的分支或者循环语句的处理方法。
针对中间代码编译器分层处理结构的方法包括 a.将C语言源代码信息处理成各种语法二叉树表示的计算机数据结构; b.语法二叉树包含了各种各样的C语言语法形式,需要将它们转化为简单的基本
冗余编码形式,简单的基本冗余编码形式能够被转化成冗余代码输出。 如图12所示,中间代码编译器分层处理结构,待编译的C语言数据被依次解析为
二叉树形式、语法消息形式,最后生成冗余代码。 针对数组和结构的处理方法包括 a.在使用多维数组时,使用了不依赖于计算机存储结构方式的寻址方式定位对特 定维数组合的数据项,并执行存取操作; b.在使用结构或者嵌套结构时,使用了不依赖于计算机存储结构方式的寻址方式 对结构中特定数据项进行定位,并执行存取操作; c.在数组和结构混合使用的情况下,特定数据项的存取操作包含两步,第一步搜 索数据项位置,第二步在该位置对特定数据项进行存取操作。 数组或者结构的存取总是与数据项在数组或者索引中的位置有关,而与其它因素 无关,并且根据数据项的位置进行冗余编码。
多重判断条件处理方法包括 a.在分支结构中,将多重判断条件使用单一判断条件来表示,通常包括与操作 (&&)、或操作(| l),多重判断条件用语法二叉树结构表示;
b.在循环结构中,将多重判断条件表示成单一判断条件,通常包括与操作(&&)、 或操作(I l),多重判断条件用语法二叉树结构表示。 如图13所示,多重判断条件可以用语法二叉树表示。在处理多重判断条件时,首 先处理各语法二叉树的子树条件,处理完所有子树之后,再处理语法二叉树的父结点。
安全冗余编码优化模块生成辅助语言代码包括以下流程 (1)使用汇编语言,对于各种运算操作结果的取模运算,用减法或者加法操作代替 除法操作。因此可以不再需要64位变量来保存计算结果; (2)使用汇编语言,将64位乘法操作简化为32位乘法操作,并且省去取模运算; (3)使用汇编语言简化无符号取模运算,不再需要进行类型转换。
如图14所示,所述输入与错误检测模块、输出与错误检测模块工作流程如下 (1)所有输入的变量都必须在处理前进行编码,布尔变量必须进行编码并且加入
时间戳后,才能进入编译处理器处理单元,时间戳信息由编译处理器单元提供; (2)所有输出的变量都是编码变量,编码变量包括高位信息、低位信息和时间戳,
时间戳信息由编译处理器单元提供; (3)动态控制器负责检查所有输出变量的签名是否同预测的签名相同,动态控制 器从编译处理器单元获得时间戳信息; (4) —旦输出变量的签名同预测的签名不同,动态控制器使系统导向安全侧。
1权利要求
一种用于车载ATP系统的安全冗余编码处理方法,其特征在于,该方法包括以下步骤1)预生成签名、配置信息、不安全的C语言代码通过输入与错误检测模块处理;2)将处理后的预生成签名、配置信息、不安全的C语言代码经安全冗余编码编译器的预编译器处理后生成中间代码文件,中间代码文件经过安全冗余编码编译器的中间代码编译器处理后生成补偿常量、编码后的C语言代码;3)安全冗余编码优化模块生成辅助语言代码;4)将补偿常量、编码后的C语言代码、辅助语言代码经通用编译器和连接器处理后生成安全冗余代码;5)该安全冗余代码经输出与错误检测模块处理后输出。
2. 根据权利要求1所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的步骤2)中的冗余编码编译器处理过程所涉及算法方法包括数值编码方法、算术 运算符运算方法、移位运算符运算方法、逻辑运算符运算方法、数组运算方法、函数使用方 法、分支结构的运算方法、循环结构的运算方法、素数A的选取方法、签名生成方法。
3. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的数值编码方法包括数值变量的编码方法、数值常量的编码方法、布尔变量的编码 方法。
4. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的算术运算符运算方法包括加法运算方法、减法运算方法、乘法运算方法、除法运 算中除以常数的方法、除法运算中除以变量的方法。
5. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的移位运算符运算方法包括右移运算方法、左移运算方法。
6. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的逻辑运算符运算方法包括逻辑与运算方法、逻辑或运算方法、逻辑非运算方法。
7. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的数组运算方法包括一维数组的赋值运算方法、一维数组的引用运算方法、多维数 组运算方法。
8. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的函数使用方法包括以下步骤(8a)根据函数的不同功能对其进行分类; (8b)对函数进行调用。
9. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的分支结构的运算方法包括数值判断条件下分支结构的运算方法、布尔判断条件 下分支结构的运算方法、混合判断条件下分支结构的运算方法。
10. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的循环结构的运算方法包括数值判断条件下循环结构的运算方法、布尔判断条件 下循环结构的运算方法、混合判断条件下循环结构的运算方法。
11. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的素数A的选取方法为以素数A的选取规则从接近计算机字长的范围内查找素数A,其中素数A的选取规则包括(11a)素数A的大小决定了系统所能达到的安全等级; (lib)素数A的选取决定了签名的选取;(IIC)素数A的大小同计算机字长有关;(lid)素数A的取值能够使整数均匀地分布在值域空间内,任何经由素数A的计算都具 有一定的码距空间;(lie)素数A保证了经由A产生的取值空间的数值的互素性。
12. 根据权利要求2所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的签名生成方法为采用线性反馈同余发生器或者平方反馈发生器以签名生成规则 来产生签名,其中签名生成规则为(12a)每个变量的签名必须不同;(12b)每个变量的签名必须均匀地分布在取值域内;(12c)不同变量的签名之间存在码距,并对码距进行检查。
13. 根据权利要求l所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的步骤2)中的安全冗余编码编译器所涉及的处理方法包括中间编码器分层处理 结构的处理方法、针对数组和结构的处理方法、针对多重判断条件的分支或者循环语句的 处理方法。
14. 根据权利要求l所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的步骤3)中的安全冗余编码优化模块处理过程包括以下步骤(14a)使用汇编语言,对于各种运算操作结果的取模运算,用减法或者加法操作代替除 法操作;(14b)使用汇编语言,将64位乘法操作简化为32位乘法操作,并且省去取模运算; (14c)使用汇编语言简化无符号取模运算。
15. 根据权利要求l所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征在 于,所述的步骤1)、步骤5)输入与错误检测模块、输出与错误检测模块处理过程包括以下 步骤(15a)编码器对所有输入的变量在处理前进行编码,其中对布尔变量进行编码并且加 入时间戳后,才能进入编译处理器处理单元,时间戳信息由编译处理器单元提供;(15b)动态控制器负责检查所有输出变量的签名是否同预测的签名相同,动态控制器 从编译处理器单元获得时间戳信息;(15c) —旦输出变量的签名同预测的签名不同,动态控制器使系统导向安全侧。
16. 根据权利要求13所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征 在于,所述的中间编码器分层处理结构的处理方法包括以下步骤(16a)将C语言源代码信息处理成各种语法二叉树表示的计算机数据结构; (16b)需要将语法二叉树转化为简单的基本冗余编码形式,简单的基本冗余编码形式 被转化成冗余代码输出。
17. 根据权利要求13所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征 在于,所述的针对数组和结构的处理方法包括以下步骤(17a)在使用多维数组时,使用不依赖于计算机存储结构方式的寻址方式定位对特定维数组合的数据项,并执行存取操作;(17b)在使用结构或者嵌套结构时,使用不依赖于计算机存储结构方式的寻址方式对 结构中特定数据项进行定位,并执行存取操作;(17c)在数组和结构混合使用的情况下,特定数据项的存取操作包含两步,第一步搜索 数据项位置,第二步在该位置对特定数据项进行存取操作。
18.根据权利要求13所述的一种用于车载ATP系统的安全冗余编码处理方法,其特征 在于,所述的针对多重判断条件的分支或者循环语句的处理方法包括以下步骤(18a)在分支结构中,多重判断条件使用单一判断条件来表示,包括与操作、或操作,多 重判断条件用语法二叉树结构表示;(18b)在循环结构中,多重判断条件表示成单一判断条件,包括与操作、或操作,多重判 断条件用语法二叉树结构表示。
全文摘要
本发明涉及一种用于车载ATP系统的安全冗余编码处理方法,该方法包括以下步骤1)预生成签名、配置信息、不安全的C语言代码通过输入与错误检测模块处理;2)将处理后的预生成签名、配置信息、不安全的C语言代码经安全冗余编码编译器的预编译器处理后生成中间代码文件,中间代码文件经过安全冗余编码编译器的中间代码编译器处理后生成补偿常量、编码后的C语言代码;3)安全冗余编码优化模块生成辅助语言代码;4)将补偿常量、编码后的C语言代码、辅助语言代码经通用编译器和连接器处理后生成安全冗余代码;5)该安全冗余代码经输出与错误检测模块处理后输出。与现有技术相比,本发明具有保证系统安全运行等优点。
文档编号H03M13/03GK101764619SQ20091025054
公开日2010年6月30日 申请日期2009年12月15日 优先权日2009年12月15日
发明者刘昕, 姜坚华, 崔科, 张磊, 曹杰, 朱翔 申请人:卡斯柯信号有限公司;上海申通轨道交通研究咨询有限公司