CN112989395B - 一种sm4密码算法的形式化验证方法及系统 - Google Patents
一种sm4密码算法的形式化验证方法及系统 Download PDFInfo
- Publication number
- CN112989395B CN112989395B CN202110465793.4A CN202110465793A CN112989395B CN 112989395 B CN112989395 B CN 112989395B CN 202110465793 A CN202110465793 A CN 202110465793A CN 112989395 B CN112989395 B CN 112989395B
- Authority
- CN
- China
- Prior art keywords
- result
- module
- cryptographic algorithm
- decryption
- algorithm
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/45—Structures or tools for the administration of authentication
- G06F21/46—Structures or tools for the administration of authentication by designing passwords or checking the strength of passwords
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本申请公开了一种SM4密码算法的形式化验证方法,所述方法包括:将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。本申请能够在SM4密码算法实现过程中保证内存安全、避免受到时间侧信道攻击。本申请还公开了一种SM4密码算法的形式化验证系统,具有以上有益效果。
Description
技术领域
本申请涉及网络与信息安全服务领域,特别涉及一种SM4密码算法的形式化验证方法及系统。
背景技术
随着互联网技术的迅猛发展,计算机网络技术被广泛应用于各行各业,网络安全问题日益受到关注。网络安全的基础是安全协议,安全协议的实现依赖于密码技术,用于通信中的密码分发和身份认证,以此保证网络通信安全。但是,在密码算法的常规实现中存在内存安全和侧信道攻击的问题。
因此,如何在SM4密码算法实现过程中保证内存安全、避免受到时间侧信道攻击是本领域技术人员目前需要解决的技术问题。
发明内容
本申请的目的是提供一种SM4密码算法的形式化验证方法及系统,能够在SM4密码算法实现过程中保证内存安全、避免受到时间侧信道攻击。
为解决上述技术问题,本申请提供一种SM4密码算法的形式化验证方法,包括:
将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;
确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;
利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。
可选的,利用所述算法参数对所述SM4密码算法的轮密钥生成模块进行形式化验证,包括:
调用所述轮密钥生成模块,并将计数器的当前值加1;
判断所述计数器的当前值是否小于第一预设值;若是,则将所述主密钥与第一常数的异或结果赋值给中间数据;若否,则对每组所述中间数据的最后三个结果与第二常数的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第一运算结果,将所述第一运算结果与每组中间数据的第一个结果进行异或运算得到运算结果并将所述运算结果赋值给轮密钥;
判断所述计数器的当前值是否小于第二预设值;若是,则进入调用所述轮密钥生成模块,并将计数器的当前值加1的步骤;若否,则输出最近一次确定的轮密钥;其中,所述第二预设值大于所述第一预设值;
若所述轮密钥生成模块对应的后置条件被满足,则判定所述SM4密码算法的轮密钥形式化验证已通过。
可选的,利用所述算法参数对所述SM4密码算法的加密模块进行形式化验证,包括:
判断计数器的当前值是否小于第三预设值;若是,则对每一组加密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述加密中间值的第一个结果进行异或运算得到新的加密中间值,将计数器的当前值加1;若否,则进入将所述加密模块最后一轮加密生成的加密中间值进行倒序变换得到加密结果的步骤;其中,所述加密中间值为所述加密模块的每一轮加密结果;
若所述加密模块对应的后置条件被满足,则判定所述SM4密码算法的加密模块形式化验证已通过。
可选的,利用所述算法参数对所述SM4密码算法的解密模块进行形式化验证,包括:
判断所述计数器的当前值是否小于第四预设值;若是,则对每一组解密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述解密中间值的第一个结果进行异或运算得到新的解密中间值,将计数器的当前值加1;若否,则进入将所述解密模块最后一轮解密生成的解密中间值进行倒序变换得到解密结果的步骤;其中,所述解密中间值为所述解密模块的每一轮解密结果;
若所述解密模块对应的后置条件被满足,则判定所述SM4密码算法的解密模块形式化验证已通过。
可选的,所述轮密钥生成模块对应的后置条件包括:所述轮密钥生成模块生成的轮密钥和每一轮迭代生成的中间结果分别指向当前堆相应的已分配数组,所述轮密钥生成模块只修改所述目标缓冲区域中轮密钥和中间结果;
所述加密模块对应的后置条件包括:所述加密模块的加密输出和每一轮迭代生成的加密中间值分别指向当前堆相应的已分配数组,所述加密模块只修改所述目标缓冲区域中加密结果和中间结果;
所述解密模块对应的后置条件包括:所述解密模块的解密输出和每一轮迭代生成的解密中间值分别指向当前堆相应的已分配数组,所述解密模块只修改所述目标缓冲区域中解密结果和中间结果。
可选的,在所述初始堆的目标缓冲区域中添加所述算法参数,包括:
根据形式化验证的验证对象在所述初始堆的目标缓冲区域中添加对应的算法参数;
其中,若所述验证对象为所述轮密钥生成模块,所述初始堆中添加的算法参数包括所述主密钥、所述轮密钥、所述密钥常数和所述s盒参数;若所述验证对象为所述加密模块,所述初始堆中添加的算法参数包括所述明文输入、所述加密结果、所述轮密钥和所述s盒参数;若所述验证对象为所述解密模块,所述初始堆中添加的算法参数包括密文输入、解密结果、轮密钥和s盒参数。
可选的,利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果,包括:
利用所述算法参数对所述SM4密码算法的轮密钥生成模块进行形式化验证;
若所述SM4密码算法的轮密钥形式化验证已通过,则利用所述算法参数对所述SM4密码算法加密模块进行形式化验证;
若所述SM4密码算法的加密模块形式化验证已通过,则利用所述算法参数对所述SM4密码算法解密模块进行形式化验证;
若所述SM4密码算法的解密模块形式化验证已通过,则得到所述SM4密码算法的通过形式化验证的结果。
本申请还提供了一种SM4密码算法的形式化验证系统,该系统包括:
类型定义模块,用于将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;
参数添加模块,用于确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;
验证模块,用于利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。
可选的,所述验证模块包括:
轮密钥形式化验证单元,用于调用所述轮密钥生成模块,并将计数器的当前值加1;还用于判断所述计数器的当前值是否小于第一预设值;若是,则将所述主密钥与第一常数的异或结果赋值给中间数据;若否,则对每组所述中间数据的最后三个结果与第二常数的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第一运算结果,将所述第一运算结果与每组中间数据的第一个结果进行异或运算得到运算结果并将所述运算结果赋值给轮密钥;还用于判断所述计数器的当前值是否小于第二预设值;若是,则进入调用所述轮密钥生成模块,并将计数器的当前值加1的步骤;若否,则输出最近一次确定的轮密钥;其中,所述第二预设值大于所述第一预设值;还用于若所述轮密钥生成模块对应的后置条件被满足,则判定所述SM4密码算法的轮密钥形式化验证已通过。
可选的,所述验证模块包括:
加密模块形式化验证单元,用于判断计数器的当前值是否小于第三预设值;若是,则对每一组加密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述加密中间值的第一个结果进行异或运算得到新的加密中间值,将计数器的当前值加1;若否,则进入将所述加密模块最后一轮加密生成的加密中间值进行倒序变换得到加密结果的步骤;其中,所述加密中间值为所述加密模块的每一轮加密结果;还用于若所述加密模块对应的后置条件被满足,则判定所述SM4密码算法的加密模块形式化验证已通过。
和/或,解密模块形式化验证单元,用于判断计数器的当前值是否小于第四预设值;若是,则对每一组解密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述解密中间值的第一个结果进行异或运算得到新的解密中间值,将计数器的当前值加1;若否,则进入将所述解密模块最后一轮解密生成的解密中间值进行倒序变换得到解密结果的步骤;其中,所述解密中间值为所述解密模块的每一轮解密结果;还用于若所述解密模块对应的后置条件被满足,则判定所述SM4密码算法的解密模块形式化验证已通过。
本申请提供了一种SM4密码算法的形式化验证方法,包括:将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。
本申请通过将SM4密码算法的算法参数定义为安全整数类型,并利用基于F*框架的算法模块分别对SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。由于本申请利用安全整数类型的算法参数进行形式化验证,能够使得算法参数的内部表示只能通过显示函数在规范和证明中使用,而不能通过加密代码访问,进而达到避免密钥受到时间侧信道攻击的效果。进一步的,由于F*框架要求只将访问堆位置作为轮密钥生成模块、加密模块和解密模块的输入,能够维持栈的布局,且每一模块只能从自身对应的栈框架中读写变量,进而保证了密码算法的内存安全性。由此可见,本申请能够验证SM4密码算法的可靠性,进而在SM4密码算法实现过程中保证内存安全、避免受到时间侧信道攻击。本申请同时还提供了一种SM4密码算法的形式化验证系统具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种基于F*框架的SM4密码算法的形式化验证方法的流程图;
图2为本申请实施例所提供的一种SM4密码算法的形式化验证原理示意图;
图3为本申请实施例所提供的一种SM4密码算法的轮密钥形式化验证方法的流程图;
图4为本申请实施例所提供的一种SM4密码算法的加密模块形式化验证方法的流程图;
图5为本申请实施例所提供的一种SM4密码算法的解密模块形式化验证方法的流程图;
图6为本申请实施例所提供的一种基于F*框架的SM4密码算法的形式化验证系统的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面请参见图1,图1为本申请实施例所提供的一种基于F*框架的SM4密码算法的形式化验证方法的流程图。
具体步骤可以包括:
S101:将SM4密码算法的算法参数定义为安全整数类型;
其中,本实施例应用于SM4密码算法的形式化验证系统,该SM4密码算法的形式化验证系统进行形式化验证的过程应用了F*框架。F*框架是一种面向验证的编程语言框架,由Microsoft Research、MSR Inria和Inria开发。F*框架遵循ML语言家族的传统,是一种类型化的、严格的函数式编程语言,允许半自动地声明和检查功能正确性规范。上述SM4密码算法的算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒(Substitution-box)参数,在本步骤中将上述算法参数定义为抽象类型的安全整数类型。
S102:确定基于F*框架的算法模块的初始堆,并在初始堆的目标缓冲区中添加算法参数;
其中,基于F*框架的算法模块的初始堆为算法开始执行时申请的一块内存空间,本实施例将定义为安全整数类型的算法参数添加至初始堆的目标缓冲区中。
作为一种可行的实施方式,本实施例可以根据形式化验证的验证对象在所述初始堆的目标缓冲区域中添加对应的算法参数。具体的,若所述验证对象为所述轮密钥生成模块,所述初始堆中添加的算法参数包括所述主密钥、所述轮密钥、所述密钥常数和所述s盒参数;若所述验证对象为所述加密模块,所述初始堆中添加的算法参数包括所述明文输入、所述加密结果、所述轮密钥和所述s盒参数;若所述验证对象为所述解密模块,所述初始堆中添加的算法参数包括密文输入、解密结果、轮密钥和s盒参数。
S103:利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。
其中,在定义算法参数的类型并将算法参数添加至目标缓冲区之后,并选取特定的模块进行形式化验证操作。进一步的,本实施例可以先后对SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证。
可以理解的是,本实施例基于F*框架实现,因此SM4密码算法实现时所有的临时状态都存储在栈中,只将访问堆位置作为输入传送给模块(如轮密钥生成模块、加密模块或解密模块)以维持栈的布局,并且F*框架要求SM4密码算法的模块只能从自身对应的栈框架中读写变量,进而保证了密码算法的内存安全性。形式化验证是用逻辑来验证程序的可靠性,根据某个或某些形式规范或属性,使用数学的方法证明SM4密码算法的正确性或非正确性。
本实施例通过将SM4密码算法的算法参数定义为安全整数类型,并利用F*框架分别对SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。由于本实施例利用安全整数类型的算法参数进行形式化验证,能够使得算法参数的内部表示只能通过显示函数在规范和证明中使用,而不能通过加密代码访问,进而达到避免密钥受到时间侧信道攻击的效果。进一步的,由于F*框架要求只将访问堆位置作为轮密钥生成模块、加密模块和解密模块的输入,能够维持栈的布局,且每一模块只能从自身对应的栈框架中读写变量,进而保证了密码算法的内存安全性。由此可见,本实施例能够验证SM4密码算法的可靠性,进而在SM4密码算法实现过程中保证内存安全、避免受到时间侧信道攻击,在基于SM4密码算法加密的无线局域网产品和金融卡片(银行卡)等方面有着重要的应用价值。
图1对应的实施例提供了一种基于F*框架针对SM4密码算法实现的形式化验证方案,旨在解决目前如何对SM4密码算法实现时保证内存安全和抗时间侧信道攻击的问题。为实现上述目的,本实施例将明文输入、加密结果、密文输入、解密结果、主密钥、中间数据、密钥常数和轮密钥定义为抽象类型的安全整数类型,其内部表示只能通过显示函数在规范和证明中使用,但不能通过加密代码访问,采用独立于密钥的编码规则,防止密钥受到时间侧信道攻击。密码算法实现时所有的临时状态都存储在栈中,只访问堆位置作为输入传送给模块,保证维持栈的布局,并且只能从自己的栈框架中读写变量,保证密码算法的内存安全性。它包括以下三个步骤:(A)轮密钥生成形式化验证;(B)加密模块形式化验证;(C)解密模块形式化验证。
在形式化验证的过程中,可以根据每一模块对应的后置条件是否被满足来判断形式化验证是否通过。轮密钥生成模块对应的后置条件包括:所述轮密钥生成模块参数轮密钥rk和每一轮迭代生成的中间结果tmp分别指向当前堆相应已分配数组;轮密钥生成模块只修改所述目标缓冲区域中轮密钥和中间结果。加密模块对应的后置条件包括:所述加密模块参数加密输出out和每一轮迭代生成的中间结果state分别指向当前堆相应已分配数组;加密模块只修改所述目标缓冲区域中加密结果和中间结果。解密模块对应的后置条件包括:所述解密模块参数解密输出out和每一轮迭代生成的中间结果state分别指向当前堆相应已分配数组,解密模块只修改所述目标缓冲区域中解密结果和中间结果。在对每一模块进行形式化验证时,计数器的初始值为0。
进一步的本实施例可以依次对利用所述算法参数对SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,具体过程如下:利用所述算法参数对所述SM4密码算法的轮密钥生成模块进行形式化验证;若所述SM4密码算法的轮密钥形式化验证已通过,则利用所述算法参数对所述SM4密码算法加密模块进行形式化验证;若所述SM4密码算法的加密模块形式化验证已通过,则利用所述算法参数对所述SM4密码算法解密模块进行形式化验证;若所述SM4密码算法的解密模块形式化验证已通过,则得到所述SM4密码算法的通过形式化验证的结果。在上述过程中,若检测到轮密钥生成模块、加密模块和解密模块中任意模块未通过形式化验证,则可以直接结束流程,并提示SM4密码算法未通过形式化验证。
作为一种可行的实施方式,可以通过以下方式实现轮密钥生成形式化验证:调用所述轮密钥生成模块,并将计数器的当前值加1;判断所述计数器的当前值是否小于第一预设值;若是,则将所述主密钥与第一常数的异或结果赋值给中间数据;若否,则对每组所述中间数据的最后三个结果与第二常数的执行异或操作得到异或结果并对该异或结果执行所述SM4密码算法的非线性变换和线性变换得到第一运算结果,将所述第一运算结果与每组中间数据的第一个结果进行异或运算得到运算结果并将所述运算结果赋值给轮密钥;判断所述计数器的当前值是否小于第二预设值;若是,则进入调用所述轮密钥生成模块,并将计数器的当前值加1的步骤;若否,则输出最近一次确定的轮密钥;其中,所述第二预设值大于所述第一预设值;若所述轮密钥生成模块对应的后置条件被满足,则判定所述SM4密码算法的轮密钥形式化验证已通过。若所述轮密钥生成模块对应的后置条件未全部满足,则判定所述SM4密码算法的轮密钥形式化验证未通过。
下面通过实际应用中的实施例说明针对SM4国产密码算法的轮密钥形式化验证方案,具体步骤如下:
步骤A1:将用户主密钥输入密钥扩展初始化模块,定义主密钥mk、常数fk为安全整数类型u32s,主密钥mk和常数fk的长度大于等于4;轮密钥rk和常数ck为安全整数类型u32s,长度大于等于32;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区常数ck、fk、主密钥mk、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件,rk指向当前堆已分配的数组;密钥扩展初始化模块只修改缓冲区的轮密钥rk。定义中间数据tmp为32位整数类型U32,长度大于等于36,执行步骤A2密钥扩展流程模块。
步骤A2:定义主密钥mk、常数fk为安全整数类型u32s,长度大于等于4;轮密钥rk和常数ck为安全整数类型u32s,长度大于等于32;tmp为安全整数类型u32s,长度大于等于36;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区常数ck、fk、主密钥mk、中间数据tmp、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件:rk和tmp分别指向当前堆相应已分配的数组;密钥扩展流程模块只修改缓冲区rk和tmp。计数器i的值小于36时,执行步骤A3轮密钥生成模块和步骤A2密钥扩展流程模块,计数器的值加1,直到i值等于36时,循环结束。
步骤A3:定义主密钥mk、常数fk为安全整数类型u32s,长度大于等于4;轮密钥rk和常数ck为安全整数类型u32s,长度大于等于32;tmp为安全整数类型u32s,长度大于等于36;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区常数ck、fk、主密钥mk、中间数据tmp、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件,tmp指向当前堆已分配的数组;轮密钥生成模块只修改缓冲区tmp。当i小于4时,mk.(iul)与fk.(iul)异或后赋值给tmp.(iul);i大于等于4,tmp.(U32.(i-^3ul))、tmp.(U32.(i-^2ul))、tmp.(U32.(i-^1ul))与ck.(U32.(i-^4ul)做异或运算得到值t;再对t进行τ变换,即将32位的输入转换成4个8位的输入来进行s盒变换,查完s盒后的结果需要重新将4个8位数合成一个32位数;最后再进行SM4密码算法的L线性变换,即将32位的结果与其左移13位后的结果和其左移23位后的结果进行异或运算,将线性变换后的结果与tmp.(U32.(i-^4ul))进行异或运算,得到轮密钥的值。
作为一种可行的实施方式,可以通过以下方式实现加密模块生成形式化验证:判断计数器的当前值是否小于第三预设值;若是,则对每一组加密中间值的最后三个结果(即,state.(U32.(i-^3ul)、state.(U32.(i-^2ul)、state.(U32.(i-^1ul))和所述轮密钥执行异或操作得到异或结果,并对该异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述加密中间值的第一个结果state.(U32.(i-^4ul)进行异或运算得到新的加密中间值,将计数器的当前值加1;若否,则进入将所述加密模块最后一轮加密生成的加密中间值进行倒序变换得到加密结果的步骤;其中,所述加密中间值为所述加密模块的每一轮加密结果;若所述加密模块对应的后置条件被满足,则判定所述SM4密码算法的加密模块形式化验证已通过。若所述加密模块对应的后置条件未全部被满足,则判定所述SM4密码算法的加密模块形式化验证未通过。
下面通过实际应用中的实施例说明针对SM4国产密码算法的加密模块形式化验证方案,具体步骤如下:
步骤B1:将加密内容和轮密钥输入加密过程模块,定义加密输入input(即密文输入)、加密输出out(即加密结果)为安全整数类型u32s,长度大于等于4;轮密钥rk为安全整数类型u32s,长度大于等于32;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区加密结果out、明文输入input、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件:out指向当前堆已分配的数组;加密过程模块只修改缓冲区的加密结果out。定义中间状态state为安全整数类型u32s,长度大于等于36,启动步骤B2加密主体模块的工作流程。
步骤B2:定义加密输入input、加密输出out为安全整数类型u32s,长度大于等于4;轮密钥rk为安全整数类型u32s,长度大于等于32;中间状态state为安全整数类型u32s,长度大于等于36;s盒sbox长度为256的安全整数类型u8s;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区加密结果out、明文输入input、中间状态state(即上文中的加密中间值)、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问,然后设置后置条件,out和state指向当前堆相应已分配的数组;加密主体模块只修改缓冲区out和中间状态state。将输入input赋值给中间状态state,启动步骤B3加密循环模块的工作流程,将最后生成的4个中间状态state进行逆序变换,逆序后的中间状态state赋值给加密结果out。
步骤B3:定义轮密钥rk为安全整数类型u32s,长度大于等于32;中间状态state为安全整数类型u32s,长度大于等于36;s盒sbox长度为256的安全整数类型u8s;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区中间状态state、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问,然后设置后置条件,state指向当前堆已分配的数组;加密循环模块只修改缓冲区中间状态state。计数器i的值小于36时,启动步骤B4轮加密模块和加密循环模块的工作流程:计数器的值加1,直到i值等于36时,循环结束。
步骤B4:定义轮密钥rk为安全整数类型u32s,长度大于等于32;中间状态state为安全整数类型u32s,长度大于等于36;s盒sbox长度为256的安全整数类型u8s;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区中间状态state、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问,然后设置后置条件,state指向当前堆已分配的数组;轮加密模块只修改缓冲区中间状态state。当i大于等于4且小于36时,循环进行如下过程,中间状态state.(U32.(i-^3ul)、state.(U32.(i-^2ul)、state.(U32.(i-^1ul)与rk.(U32.(i-^4ul)做异或得到值t;再对t进行τ变换,即将32位的输入转换成4个8位的输入来进行s盒变换,查完s盒后的结果需要重新将4个8位数合成一个32位数;最后再进行L线性变换,即将32位的结果与其左移2位后的结果、其左移10位后的结果、其左移18位后的结果和其左移24位后的结果进行异或运算,将线性变换后的值与state.(U32.(i-^4ul)进行异或运算。
作为一种可行的实施方式,可以通过以下方式实现解密模块生成形式化验证:判断所述计数器的当前值是否小于第四预设值;若是,则对每一组解密中间值的最后三个结果(即,state.(U32.(i-^3ul)、state.(U32.(i-^2ul)、state.(U32.(i-^1ul))和所述轮密钥执行异或计算得到异或结果,并对该异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述解密中间值的第一个结果state.(U32.(i-^4ul)进行异或运算得到新的解密中间值,将计数器的当前值加1;若否,则进入将所述解密模块最后一轮解密生成的解密中间值进行倒序变换得到解密结果的步骤;其中,所述解密中间值为所述解密模块的每一轮解密结果;若所述解密模块对应的后置条件被满足,则判定所述SM4密码算法的解密模块形式化验证已通过。若解密模块对应的后置条件未全部被满足,则判定所述SM4密码算法的解密模块形式化验证未通过。
下面通过实际应用中的实施例说明针对SM4国产密码算法的解密模块形式化验证方案,具体步骤如下:
步骤C1:将密文和轮密钥输入解密过程模块,定义密文输入input、解密输出out为安全整数类型u32s,长度大于等于4;轮密钥rk为安全整数类型u32s,长度大于等于32;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,计数器的值小于等于36。设置前提条件指定活动缓冲区解密结果out、密文输入input、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件:out指向当前堆已分配的数组;解密过程模块只修改缓冲区的解密结果out。定义中间状态state为安全整数类型u32s,长度大于等于36,执行步骤C2解密主体模块的工作流程。
步骤C2:定义密文输入input、解密输出out为安全整数类型u32s,长度大于等于4;轮密钥rk为安全整数类型u32s,长度大于等于32;中间状态state(即上文中的解密中间值)为安全整数类型u32s,长度大于等于36;s盒sbox长度为256的安全整数类型u8s;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区解密结果out、密文输入input、中间状态state、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问,然后设置后置条件,out和state指向当前堆相应已分配的数组;解密主体模块只修改缓冲区out和中间状态state。将输入input赋值给中间状态state,启动步骤C3解密循环模块的工作流程,将最后生成的4个state状态进行逆序变换,逆序后的state赋值给解密结果out。
步骤C3:定义轮密钥rk为安全整数类型u32s,长度大于等于32;中间状态state为安全整数类型u32s,长度大于等于36;s盒sbox长度为256的安全整数类型u8s;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区中间状态state、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问,然后设置后置条件,state指向当前堆已分配的数组;解密循环模块只修改缓冲区中间状态state。计数器i的值小于36时,启动步骤C4轮解密模块和解密循环模块,计数器的值加1,直到i值等于36时,循环结束。
步骤C4:定义轮密钥rk为安全整数类型u32s,长度大于等于32;中间状态state为安全整数类型u32s,长度大于等于36;s盒sbox长度为256的安全整数类型u8s;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区中间状态state、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问,然后设置后置条件,state指向当前堆已分配的数组;轮解密模块只修改缓冲区中间状态state。当i大于等于4且小于36时,循环进行如下过程,中间状态state.(U32.(i-^3ul)、state.(U32.(i-^2ul)、state.(U32.(i-^1ul)与rk.(U32.(35ul-^i)做异或得到值t;再对t进行τ变换,即将32位的输入转换成4个8位的输入来进行s盒变换,查完s盒后的结果需要重新将4个8位数合成一个32位数;最后再进行L线性变换,即将32位的结果与其左移2位后的结果、其左移10位后的结果、其左移18位后的结果和其左移24位后的结果进行异或运算,将线性变换后的值与state.(U32.(i-^4ul)进行异或运算。
请参见图2,图2为本申请实施例所提供的一种SM4密码算法的形式化验证原理示意图,本实施例先将明文、密文、主密钥、中间数据、密钥常数和轮密钥定义为抽象类型的安全整数类型,其内部表示只能通过显示函数在规范和证明中使用,但不能通过加密代码访问,采用独立于密钥的编码规则,由此可防止密钥受到某些侧信道攻击。密码算法实现时所有的临时状态都存储在栈中,只访问堆位置作为输入传送给模块,保证维持栈的布局,并且只能从自己的栈框架中读写变量,从而保证了密码算法的内存安全性。
一种加密算法能被安全的应用,其在实现时保证内存安全和抗时间侧信道攻击是很有必要的。对于c语言实现的程序,内存安全应该是首先考虑和最重要的目标,因为内存中经常存有密钥信息,一旦泄漏可能会给用户带来巨大的损失。众所周知的心脏滴血漏洞正是由于内存泄漏而导致攻击者可以获取内存中用户敏感信息。本实施例基于F*验证框架设计了一种SM4国产密码算法可证明安全实现方法,保证了密码算法的内存安全性和抗时间侧信道攻击,可以整体提高算法实现的安全性。具体每一模块的形式化验证的过程如下:
请参见图3,图3为本申请实施例所提供的一种SM4密码算法的轮密钥形式化验证方法的流程图,本实施例可以包括以下步骤:
步骤S301:定义主密钥mk、常数fk为安全整数类型u32s,长度大于等于4;轮密钥rk和常数ck为安全整数类型u32s,长度大于等于32;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区常数ck、fk、主密钥mk、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件:rk指向当前堆已分配的数组;密钥扩展初始化模块只修改缓冲区rk。定义中间数据tmp为安全整数类型,长度大于等于36。
步骤S302:调用轮密钥生成模块,计算器i的值加1;
步骤S303:i与4作比较,当i小于4时,主密钥mk.(iul)与常数fk.(iul)异或后赋值给中间数据tmp.(iul);i大于等于4,中间数据tmp.(U32.(i-^3ul))、tmp.(U32.(i-^2ul))、tmp.(U32.(i-^1ul))与常数ck.(U32.(i-^4ul)做异或运算得到值t;再对t进行τ变换,将32位的输入转换成4个8位的输入来进行s盒变换,查完s盒后的结果需要重新将4个8位数合成一个32位数;最后再进行L线性变换,即将32位的结果与其左移13位后的结果和其左移23位后的结果进行异或运算,将线性变换后的结果与tmp.(U32.(i-^4ul))进行异或运算,运算结果赋值给中间数据tmp,中间数据再赋值给轮密钥rk;
步骤S304:i的值与36作比较,当i小于36时,跳转到步骤S303;i等于36时,跳转到步骤S305;
步骤S305:得到轮密钥的值。
请参见图4,图4为本申请实施例所提供的一种SM4密码算法的加密模块形式化验证方法的流程图,本实施例可以包括以下步骤:
步骤S401:定义明文输入input、加密结果out为安全整数类型u32s,长度大于等于4;轮密钥rk为安全整数类型u32s,长度大于等于32;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区加密结果out、明文输入input、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件,out指向当前堆已分配的数组;加密过程模块只修改缓冲区out。定义中间状态state为安全整数类型u32s,长度大于等于36。
步骤S402:调用加密循环模块,将最后生成的4个中间状态state进行逆序变换,逆序后的state赋值给加密结果out。
步骤S403:调用轮加密模块和加密循环模块,计数器的值加1。
步骤S404:当i大于等于4且小于36时,循环进行如下过程,中间状态state.(U32.(i-^3ul)、state.(U32.(i-^2ul)、state.(U32.(i-^1ul)与rk.(U32.(i-^4ul)做异或得到值t;再对t进行τ变换,即将32位的输入转换成4个8位的输入来进行s盒变换,查完s盒后的结果需要重新将4个8位数合成一个32位数;最后再进行L线性变换,即将32位的结果与其左移2位后的结果、其左移10位后的结果、其左移18位后的结果和其左移24位后的结果进行异或运算,将运算后的结果和state.(U32.(i-^4ul)进行异或运算,赋值给中间状态state。
步骤S405:i的值与36作比较,当i小于36时,跳转到步骤S402;i等于36时,跳转到步骤S406。
步骤S406:得到密文的值。
上述实施例中,τ变换为SM4密码算法中的一种非线性变换。加密循环模块、加密主体模块、轮加密模块、解密主体模块、解密循环模块和轮解密模块是SM4密码算法中通常用的几大模块。
中间数据和中间状态是指程序运行时生成的中间结果。
请参见图5,图5为本申请实施例所提供的一种SM4密码算法的解密模块形式化验证方法的流程图,本实施例可以包括以下步骤:
步骤S501:定义密文输入input、解密输出out为安全整数类型u32s,长度大于等于4;轮密钥rk为安全整数类型u32s,长度大于等于32;s盒sbox为安全整数类型u8s,长度为256;计数器i为常规整数类型UInt32.t,小于等于36。设置前提条件指定活动缓冲区解密结果out、密文输入input、轮密钥rk和s盒sbox位于初始堆h中,并在边界范围内根据索引能够被访问;然后设置后置条件,out指向当前堆已分配的数组;让解密过程模块只修改缓冲区out。定义中间状态state为安全整数类型u32s,长度大于等于36。
步骤S502:调用解密循环模块,将最后生成的4个中间状态state进行逆
步骤S503:调用轮解密模块和解密循环模块,计数器的值加1。
步骤S504:当i大于等于4且小于36时,循环进行如下过程,中间状态state.(U32.(i-^3ul)、state.(U32.(i-^2ul)、state.(U32.(i-^1ul)与rk.(U32.(35ul-^i)做异或得到值t;再对t进行τ变换,即将32位的输入转换成4个8位的输入来进行s盒变换,查完s盒后的结果需要重新将4个8位数合成一个32位数;最后再进行L线性变换,即将32位的结果与其左移2位后的结果、其左移10位后的结果、其左移18位后的结果和其左移24位后的结果进行异或运算。将运算后的结果和state.(U32.(i-^4ul)进行异或运算,赋值给中间状态state。
步骤S505:i的值与36作比较,当i小于36时,跳转到步骤S503;i等于36时,跳转到步骤S506。
步骤S506:得到明文的值。
请参见图6,图6为本申请实施例所提供的一种基于F*框架的SM4密码算法的形式化验证系统的结构示意图;
该系统可以包括:
类型定义模块601,用于将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;
参数添加模块602,用于确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;
验证模块603,用于利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。
本实施例通过将SM4密码算法的算法参数定义为安全整数类型,并利用F*框架分别对SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果。由于本实施例利用安全整数类型的算法参数进行形式化验证,能够使得算法参数的内部表示只能通过显示函数在规范和证明中使用,而不能通过加密代码访问,进而达到避免密钥受到时间侧信道攻击的效果。进一步的,由于F*框架要求只将访问堆位置作为轮密钥生成模块、加密模块和解密模块的输入,能够维持栈的布局,且每一模块只能从自身对应的栈框架中读写变量,进而保证了密码算法的内存安全性。由此可见,本实施例能够验证SM4密码算法的可靠性,进而在SM4密码算法实现过程中保证内存安全、避免受到时间侧信道攻击。
进一步的,验证模块603包括:
轮密钥形式化验证单元,用于调用所述轮密钥生成模块,并将计数器的当前值加1;还用于判断所述计数器的当前值是否小于第一预设值;若是,则将所述主密钥与第一常数的异或结果赋值给中间数据;若否,则对每组所述中间数据的最后三个结果与第二常数的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第一运算结果,将所述第一运算结果与每组中间数据的第一个结果进行异或运算得到运算结果并将所述运算结果赋值给轮密钥;还用于判断所述计数器的当前值是否小于第二预设值;若是,则进入调用所述轮密钥生成模块,并将计数器的当前值加1的步骤;若否,则输出最近一次确定的轮密钥;其中,所述第二预设值大于所述第一预设值;还用于若所述轮密钥生成模块对应的后置条件被满足,则判定所述SM4密码算法的轮密钥形式化验证已通过。
和/或,加密模块形式化验证单元,用于判断计数器的当前值是否小于第三预设值;若是,则对每一组加密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述加密中间值的第一个结果进行异或运算得到新的加密中间值,将计数器的当前值加1;若否,则进入将所述加密模块最后一轮加密生成的加密中间值进行倒序变换得到加密结果的步骤;其中,所述加密中间值为所述加密模块的每一轮加密结果;还用于若所述加密模块对应的后置条件被满足,则判定所述SM4密码算法的加密模块形式化验证已通过。
和/或,解密模块形式化验证单元,用于判断所述计数器的当前值是否小于第四预设值;若是,则对每一组解密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述解密中间值的第一个结果进行异或运算得到新的解密中间值,将计数器的当前值加1;若否,则进入将所述解密模块最后一轮解密生成的解密中间值进行倒序变换得到解密结果的步骤;其中,所述解密中间值为所述解密模块的每一轮解密结果;
若所述解密模块对应的后置条件被满足,则判定所述SM4密码算法的解密模块形式化验证已通过。
进一步的,所述轮密钥生成模块对应的后置条件包括:所述轮密钥生成模块生成的轮密钥和每一轮迭代生成的中间结果分别指向当前堆相应的已分配数组,所述轮密钥生成模块只修改所述目标缓冲区域中轮密钥和中间结果;
所述加密模块对应的后置条件包括:所述加密模块的加密输出和每一轮迭代生成的加密中间值分别指向当前堆相应的已分配数组,所述加密模块只修改所述目标缓冲区域中加密结果和中间结果;
所述解密模块对应的后置条件包括:所述解密模块的解密输出和每一轮迭代生成的解密中间值分别指向当前堆相应的已分配数组,所述解密模块只修改所述目标缓冲区域中解密结果和中间结果。
进一步的,参数添加模块602,用于根据形式化验证的验证对象在所述初始堆的目标缓冲区域中添加对应的算法参数;其中,若所述验证对象为所述轮密钥生成模块,所述初始堆中添加的算法参数包括所述主密钥、所述轮密钥、所述密钥常数和所述s盒参数;若所述验证对象为所述加密模块,所述初始堆中添加的算法参数包括所述明文输入、所述加密结果、所述轮密钥和所述s盒参数;若所述验证对象为所述解密模块,所述初始堆中添加的算法参数包括密文输入、解密结果、轮密钥和s盒参数。
进一步的,验证模块603用于利用所述算法参数对所述SM4密码算法的轮密钥生成模块进行形式化验证;还用于若所述SM4密码算法的轮密钥形式化验证已通过,则利用所述算法参数对所述SM4密码算法加密模块进行形式化验证;还用于若所述SM4密码算法的加密模块形式化验证已通过,则利用所述算法参数对所述SM4密码算法解密模块进行形式化验证;还用于若所述SM4密码算法的解密模块形式化验证已通过,则得到所述SM4密码算法的通过形式化验证的结果。
由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (8)
1.一种SM4密码算法的形式化验证方法,其特征在于,包括:
将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;
确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;
利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果;
利用所述算法参数对所述SM4密码算法的轮密钥生成模块进行形式化验证,包括:
调用所述轮密钥生成模块,并将计数器的当前值加1;
判断所述计数器的当前值是否小于第一预设值;若是,则将所述主密钥与第一常数的异或结果赋值给中间数据;若否,则对每组所述中间数据的最后三个结果与第二常数的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第一运算结果,将所述第一运算结果与每组中间数据的第一个结果进行异或运算得到运算结果并将所述运算结果赋值给轮密钥;
判断所述计数器的当前值是否小于第二预设值;若是,则进入调用所述轮密钥生成模块,并将计数器的当前值加1的步骤;若否,则输出最近一次确定的轮密钥;其中,所述第二预设值大于所述第一预设值;
若所述轮密钥生成模块对应的后置条件被满足,则判定所述SM4密码算法的轮密钥形式化验证已通过。
2.根据权利要求1所述SM4密码算法的形式化验证方法,其特征在于,利用所述算法参数对所述SM4密码算法的加密模块进行形式化验证,包括:
判断计数器的当前值是否小于第三预设值;若是,则对每一组加密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述加密中间值的第一个结果进行异或运算得到新的加密中间值,将计数器的当前值加1;若否,则进入将所述加密模块最后一轮加密生成的加密中间值进行倒序变换得到加密结果的步骤;其中,所述加密中间值为所述加密模块的每一轮加密结果;
若所述加密模块对应的后置条件被满足,则判定所述SM4密码算法的加密模块形式化验证已通过。
3.根据权利要求1所述SM4密码算法的形式化验证方法,其特征在于,利用所述算法参数对所述SM4密码算法的解密模块进行形式化验证,包括:
判断所述计数器的当前值是否小于第四预设值;若是,则对每一组解密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述解密中间值的第一个结果进行异或运算得到新的解密中间值,将计数器的当前值加1;若否,则进入将所述解密模块最后一轮解密生成的解密中间值进行倒序变换得到解密结果的步骤;其中,所述解密中间值为所述解密模块的每一轮解密结果;
若所述解密模块对应的后置条件被满足,则判定所述SM4密码算法的解密模块形式化验证已通过。
4.根据权利要求1至3任一项所述SM4密码算法的形式化验证方法,其特征在于:
所述轮密钥生成模块对应的后置条件包括:所述轮密钥生成模块生成的轮密钥和每一轮迭代生成的中间结果分别指向当前堆相应的已分配数组,所述轮密钥生成模块只修改所述目标缓冲区域中轮密钥和中间结果;
所述加密模块对应的后置条件包括:所述加密模块的加密输出和每一轮迭代生成的加密中间值分别指向当前堆相应的已分配数组,所述加密模块只修改所述目标缓冲区域中加密结果和中间结果;
所述解密模块对应的后置条件包括:所述解密模块的解密输出和每一轮迭代生成的解密中间值分别指向当前堆相应的已分配数组,所述解密模块只修改所述目标缓冲区域中解密结果和中间结果。
5.根据权利要求1所述SM4密码算法的形式化验证方法,其特征在于,在所述初始堆的目标缓冲区域中添加所述算法参数,包括:
根据形式化验证的验证对象在所述初始堆的目标缓冲区域中添加对应的算法参数;
其中,若所述验证对象为所述轮密钥生成模块,所述初始堆中添加的算法参数包括所述主密钥、所述轮密钥、所述密钥常数和所述s盒参数;若所述验证对象为所述加密模块,所述初始堆中添加的算法参数包括所述明文输入、所述加密结果、所述轮密钥和所述s盒参数;若所述验证对象为所述解密模块,所述初始堆中添加的算法参数包括密文输入、解密结果、轮密钥和s盒参数。
6.根据权利要求1所述SM4密码算法的形式化验证方法,其特征在于,利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果,包括:
利用所述算法参数对所述SM4密码算法的轮密钥生成模块进行形式化验证;
若所述SM4密码算法的轮密钥形式化验证已通过,则利用所述算法参数对所述SM4密码算法加密模块进行形式化验证;
若所述SM4密码算法的加密模块形式化验证已通过,则利用所述算法参数对所述SM4密码算法解密模块进行形式化验证;
若所述SM4密码算法的解密模块形式化验证已通过,则得到所述SM4密码算法的通过形式化验证的结果。
7.一种SM4密码算法的形式化验证系统,其特征在于,包括:
类型定义模块,用于将SM4密码算法的算法参数定义为安全整数类型;其中,所述算法参数包括明文输入、加密结果、密文输入、解密结果、主密钥、密钥常数、轮密钥和s盒参数;
参数添加模块,用于确定基于F*框架的算法模块的初始堆,并在所述初始堆的目标缓冲区中添加所述算法参数;
验证模块,用于利用所述算法参数对所述SM4密码算法的轮密钥生成模块、加密模块和解密模块进行形式化验证,得到所述SM4密码算法的形式化验证结果;
所述验证模块,包括:轮密钥形式化验证单元,用于调用所述轮密钥生成模块,并将计数器的当前值加1;还用于判断所述计数器的当前值是否小于第一预设值;若是,则将所述主密钥与第一常数的异或结果赋值给中间数据;若否,则对每组所述中间数据的最后三个结果与第二常数的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第一运算结果,将所述第一运算结果与每组中间数据的第一个结果进行异或运算得到运算结果并将所述运算结果赋值给轮密钥;还用于判断所述计数器的当前值是否小于第二预设值;若是,则进入调用所述轮密钥生成模块,并将计数器的当前值加1的步骤;若否,则输出最近一次确定的轮密钥;其中,所述第二预设值大于所述第一预设值;还用于若所述轮密钥生成模块对应的后置条件被满足,则判定所述SM4密码算法的轮密钥形式化验证已通过。
8.根据权利要求7所述SM4密码算法的形式化验证系统,其特征在于,所述验证模块包括:
加密模块形式化验证单元,用于判断计数器的当前值是否小于第三预设值;若是,则对每一组加密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述加密中间值的第一个结果进行异或运算得到新的加密中间值,将计数器的当前值加1;若否,则进入将所述加密模块最后一轮加密生成的加密中间值进行倒序变换得到加密结果的步骤;其中,所述加密中间值为所述加密模块的每一轮加密结果;还用于若所述加密模块对应的后置条件被满足,则判定所述SM4密码算法的加密模块形式化验证已通过;
和/或,解密模块形式化验证单元,用于判断计数器的当前值是否小于第四预设值;若是,则对每一组解密中间值的最后三个结果和所述轮密钥的异或结果执行所述SM4密码算法的非线性变换和线性变换得到第二运算结果,将所述第二运算结果和每组所述解密中间值的第一个结果进行异或运算得到新的解密中间值,将计数器的当前值加1;若否,则进入将所述解密模块最后一轮解密生成的解密中间值进行倒序变换得到解密结果的步骤;其中,所述解密中间值为所述解密模块的每一轮解密结果;还用于若所述解密模块对应的后置条件被满足,则判定所述SM4密码算法的解密模块形式化验证已通过。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110465793.4A CN112989395B (zh) | 2021-04-28 | 2021-04-28 | 一种sm4密码算法的形式化验证方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110465793.4A CN112989395B (zh) | 2021-04-28 | 2021-04-28 | 一种sm4密码算法的形式化验证方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112989395A CN112989395A (zh) | 2021-06-18 |
CN112989395B true CN112989395B (zh) | 2022-05-17 |
Family
ID=76340620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110465793.4A Active CN112989395B (zh) | 2021-04-28 | 2021-04-28 | 一种sm4密码算法的形式化验证方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112989395B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103227717A (zh) * | 2013-01-25 | 2013-07-31 | 国家密码管理局商用密码检测中心 | 选择轮密钥异或输入进行sm4密码算法侧信道能量分析的应用 |
CN104202145A (zh) * | 2014-09-04 | 2014-12-10 | 成都信息工程学院 | 针对sm4密码算法轮函数输出的选择明文或密文侧信道能量分析攻击的方法 |
CN104753665A (zh) * | 2015-03-19 | 2015-07-01 | 成都信息工程学院 | 一种针对sm4密码轮函数输出的侧信道能量攻击方法 |
CN112564890A (zh) * | 2020-12-07 | 2021-03-26 | 海光信息技术股份有限公司 | 一种加速sm4算法的方法、装置、处理器及电子设备 |
CN112600669A (zh) * | 2020-12-16 | 2021-04-02 | 航天恒星科技有限公司 | 一种密码算法和符合性验证系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101527908B (zh) * | 2009-04-08 | 2011-04-20 | 中兴通讯股份有限公司 | 一种无线局域网终端的预鉴别方法及无线局域网系统 |
CN108964886B (zh) * | 2018-05-04 | 2022-03-04 | 霍尼韦尔环境自控产品(天津)有限公司 | 包含加密算法的通信方法、包含解密算法的通信方法及设备 |
-
2021
- 2021-04-28 CN CN202110465793.4A patent/CN112989395B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103227717A (zh) * | 2013-01-25 | 2013-07-31 | 国家密码管理局商用密码检测中心 | 选择轮密钥异或输入进行sm4密码算法侧信道能量分析的应用 |
CN104202145A (zh) * | 2014-09-04 | 2014-12-10 | 成都信息工程学院 | 针对sm4密码算法轮函数输出的选择明文或密文侧信道能量分析攻击的方法 |
CN104753665A (zh) * | 2015-03-19 | 2015-07-01 | 成都信息工程学院 | 一种针对sm4密码轮函数输出的侧信道能量攻击方法 |
CN112564890A (zh) * | 2020-12-07 | 2021-03-26 | 海光信息技术股份有限公司 | 一种加速sm4算法的方法、装置、处理器及电子设备 |
CN112600669A (zh) * | 2020-12-16 | 2021-04-02 | 航天恒星科技有限公司 | 一种密码算法和符合性验证系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112989395A (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101291224B (zh) | 在通信系统中处理数据的方法和系统 | |
US9274976B2 (en) | Code tampering protection for insecure environments | |
US20120254625A1 (en) | Protecting states of a cryptographic process using group automorphisms | |
US9485226B2 (en) | Method for including an implicit integrity or authenticity check into a white-box implementation | |
US20060259965A1 (en) | Method and system for using shared secrets to protect access to testing keys for set-top box | |
CN111639325A (zh) | 基于开放平台的商户认证方法、装置、设备和存储介质 | |
US20060034462A1 (en) | Method of generating key for device authentication and apparatus using the method, and device authentication method and device authentication apparatus | |
US11870913B2 (en) | Method for generating a digital signature of an input message | |
US20230254160A1 (en) | A calculation method and device for elliptic curve digital signature to resist memory disclosure attacks | |
CN114760052A (zh) | 银行物联网平台密钥生成方法、装置、电子设备及介质 | |
CN112989395B (zh) | 一种sm4密码算法的形式化验证方法及系统 | |
CN115086008B (zh) | 密码安全保护的实现方法、装置、存储介质及电子设备 | |
EP2363974A1 (en) | Variable table masking for cryptographic processes | |
CN114553557B (zh) | 密钥调用方法、装置、计算机设备和存储介质 | |
CN115766244A (zh) | 车联网信息加密方法、装置、计算机设备和存储介质 | |
US20230068650A1 (en) | Method for testing if a data element belongs to a list of reference data elements | |
CN116781265A (zh) | 一种数据加密的方法和装置 | |
CN111651788B (zh) | 一种基于格密码的终端访问控制系统及方法 | |
US11568070B2 (en) | Secure access control processes | |
CN110955883B (zh) | 一种用户密钥生成的方法、装置、设备及存储介质 | |
CN117255341B (zh) | 基于mifi的数据加密传输保护方法及系统 | |
CN116527236B (zh) | 一种加密卡的信息变更验证方法及系统 | |
CN114254372B (zh) | 数据加密处理方法、系统及电子设备 | |
CN114238996A (zh) | 一种绕过登录JavaScript解密方法及系统 | |
CN117278195A (zh) | 一种攻击模型的验证方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |