一种基于余数系统的商密SM2加密算法的白盒软件实现方法与流程

文档序号:11929744阅读:399来源:国知局

本发明涉及信息安全技术领域,特别是涉及一种基于余数系统的商密SM2加密算法的白盒软件实现方法。



背景技术:

随着网络和计算机技术应用的快速发展,信息安全问题已经成为关乎国计民生的大事。公钥密码学是当今社会信息安全技术的核心,它不仅可以实现加密功能,而且可以实现数字签名、身份认证、消息认证等功能,因此被广泛应用于电子邮件、数字内容分发、网络交易、电子政务等应用中。公钥密码中私钥的安全性是保证众多应用安全的基础。然而,在一个不可信任的环境中,例如手机、智能卡等,软件加解密的动态过程对于攻击者是可见的,他们很容易就获得密钥信息。2002年,Chow等人提出了白盒攻击环境的概念,允许攻击者对加密软件及其运行环境拥有完全的控制能力、与软件的执行者拥有同等的权利,这与实际生活中的安全威胁相吻合。

对密码算法的实现主要有硬件和软件两种方式。采用硬件的方式存在着使用成本高、通用性较差等问题。采用软件的方式,密钥将会出现在计算平台的内存中,攻击者可通过恶意软件等方式获取密钥,不能应对已有的白盒攻击。目前,主要采用云端协作和密钥分散存储的方式来减轻密码算法软件实现过程中的密钥安全问题。然而,云端协作的方式并不能抵抗本地密钥的泄露问题,同时还需要解决云端与终端的身份识别问题;密钥分散存储的方式虽然可以减轻密钥静态存储时被泄露的风险,但密钥在密码算法运行时必须合成,这将导致完整的密钥信息出现在内存中。

SM2算法是国家商用密码管理局制定的商用公钥密码标准,广泛应用于国内的电子商务、电子政务等领域。为了保护SM2加密算法软件实现过程中私钥的安全,设计高效、易用、且能抵抗白盒攻击的SM2加密算法是十分必要的。



技术实现要素:

为解决上述问题,本发明提供了一种基于余数系统的商密SM2加密算法的白盒软件实现方法,其特征在于,包括如下步骤:

步骤一:选取一个余数系统,该余数系统的余数基为β=(p1,p2,...,pt),基β的动态范围满足ω=p1p2p3…pt≤2512;预先生成客户端私钥dA,将dA在β这组基下表示为dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;预先确定密文信息C,所述C=C1||C2||C3,客户端和云服务器端预先确定β与dA作为椭圆曲线系统参数、确定椭圆曲线的基点G,其阶数为n。

步骤二:从密文C中提取出C1;验证C1是否为椭圆曲线上的非无穷远点,如果是的话则将C1发送给云服务器端,否则跳出本流程;

步骤三:云服务器端产生一个随机数k,且k∈[1,n-1]。

步骤四:云服务器端计算椭圆曲线上的点P,P=[k]*C1

步骤五:云服务器端计算k模n的逆k-1,即:k*k-1=1mod n。将k-1在β这组基下表示为其中i=1、2......t。

步骤六:云服务器端将k-1用非线性变换s1,s2,...,st进行混淆;即并将P和发送给客户端。

步骤七:客户端通过查找密钥表Tablei计算其中为si的逆变换,所述Tablei是通过遍历ki的所有可能值,计算制作出的密钥表,i=1、2......t,私钥信息dA,i隐藏在密钥表中。

步骤八:客户端利用中国剩余定理恢复出v;

步骤九:客户端计算v′=v mod n。

步骤十:客户端计算椭圆曲线点(x2,y2)=[v′]*P。

步骤十一:客户端计算t=KDF(x2||y2,klen),其中KDF()为密钥分发函数,klen为明文M的比特长度。若t≠0,从密文C中提取出C2,计算否则跳出本流程。

步骤十二:计算u=Hash(x2||M′||y2)。

步骤十三:从密文C中提取出C3,若u=C3,则M′为明文。

进一步的,步骤三中,云服务器端利用随机数发生器产生随机数k。

本发明的有益效果为:

(1)终端在进行解密运算过程中,内存等硬件设备中不会出现私钥的完整明文,确保的密码算法运行的白盒攻击安全。

(2)该解密算法表的大小为68.75KB,存储空间要求较小。

(3)该加密算法和标准SM2加密算法效率基本一致,实用性较高。

(4)通过使用白盒软件实现SM2解密算法可降低商用密码算法的使用成本,扩大商用密码算法的使用范围。

(5)使用白盒软件算法在确保加解密安全的同时,通用性较强,对运行平台硬件没有任何特殊需求。

附图说明

图1为本发明的流程图。

具体实施方式

本发明的设计构思为:针对商密SM2加密算法在不可信任环境中运行的私钥安全问题,提出一种基于查找表和置乱混淆等技术的SM2加密算法的白盒软件实现方案。该方案采用云加端的方式实现,能有效的保护终端私钥在存储和运行时的安全,且能直接与标准SM2加密算法结合使用。此外,本专利采用余数系统理论对大整数运算进行分解,从而降低查找表的大小,减小算法所需的存储空间。

本申请基于国家商用密码标准SM2加密算法进行构建,技术方案需要三类辅助函数:密码杂凑函数、密钥派生函数和随机数发生器,这三类函数的选取和标准SM2加密算法相同,沿用标准SM2加密算法中的记号:

dA:表示用户(即客户端)A的私钥。

G:表示椭圆曲线的一个基点,其阶数为n。

Hv():表示消息摘要长度为v比特的密码杂凑函数。

KDF():表示密钥派生函数。

M:表示明文信息。

C=C1||C2||C3:表示密文信息。

为了降低白盒SM2算法需要的存储空间,本申请采用余数系统理论对大整数运算进行分解,从而降低查找表的大小。

余数系统的定义可以描述为:现假设存在一个余数系统,它是由一组互为质数的余数基β={m1,m2,...,mk}来确定的,M=m1m2…mk为这组基的动态范围。对于任意整数x≤M,可以在β这组基下唯一表示为(x1,x2,...,xk),其中xi为x对mi的求模结果,记为对余数系统而言,只有当整数x在动态范围之内才存在唯一的表示,利用中国剩余定理可以恢复出x,其中Mi=M/mi,为Mi在模mi下的逆。

假设整数x、y在基β下分别表示为x=(x1,x2,...,xk)和y=(y1,y2,...,yk),则:

其中可为+或—或*运算。

下面结合图1对本发明的实现步骤进行详细说明。

步骤一:选取一个余数系统,该余数系统的余数基为β=(p1,p2,...,pt),基β的动态范围满足ω=p1p2p3…pt≤2512;预先生成客户端私钥dA,将dA在β这组基下表示为dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;预先确定密文信息C,所述C=C1||C2||C3,客户端和云服务器端预先确定β与dA作为椭圆曲线系统参数、确定椭圆曲线的基点G,其阶数为n。

云服务器端为执行解密算法的协同方,主要为客户端解密时提供一个混淆私钥的随机因子。客户端是执行解密算法的用户,其运行环境是不可信的。

步骤二:从密文C中提取出C1。验证C1是否为椭圆曲线上的非无穷远点,如果是的话则将C1发送给云服务器端,否则跳出本流程。

步骤三:云服务器端利用随机数发生器产生一个随机数k,且k∈[1,n-1]。

步骤四:云服务器端计算椭圆曲线上的点P,P=[k]*C1

步骤五:云服务器端计算k模n的逆k-1,即:k*k-1=1mod n。将k-1在β这组基下表示为其中i=1、2......t。

步骤六:云服务器端将k-1用非线性变换s1,s2,...,st进行混淆;即并将P和发送给客户端。

步骤七:客户端通过查找密钥表Tablei计算其中为si的逆变换,所述Tablei

是通过遍历ki的所有可能值,计算制作出的密钥表,i=1、2......t,私钥信息dA,i隐藏在密钥表中。

步骤八:客户端利用中国剩余定理恢复出v。

步骤九:客户端计算v′=v mod n。

步骤十:客户端计算椭圆曲线点(x2,y2)=[v′]*P。

步骤十一:客户端计算t=KDF(x2||y2,klen),其中KDF()为密钥分发函数,klen为明文M的比特长度。若t≠0,从密文C张提取出C2,计算否则跳出本流程。

步骤十二:计算u=Hash(x2||M′||y2)。

步骤十三:从密文C中提取出C3,若u=C3,则M′为明文。

发明内容

为解决上述问题,本发明提供了一种基于余数系统的商密SM2加密算法的白盒软件实现方法,其特征在于,包括如下步骤:

步骤一:选取一个余数系统,该余数系统的余数基为β=(p1,p2,...,pt),基β的动态范围满足ω=p1p2p3…pt≤2512;预先生成客户端私钥dA,将dA在β这组基下表示为dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;预先确定密文信息C,所述C=C1||C2||C3,客户端和云服务器端预先确定β与dA作为椭圆曲线系统参数、确定椭圆曲线的基点G,其阶数为n。

步骤二:从密文C中提取出C1;验证C1是否为椭圆曲线上的非无穷远点,如果是的话则将C1发送给云服务器端,否则跳出本流程;

步骤三:云服务器端产生一个随机数k,且k∈[1,n-1]。

步骤四:云服务器端计算椭圆曲线上的点P,P=[k]*C1

步骤五:云服务器端计算k模n的逆k-1,即:k*k-1=1mod n。将k-1在β这组基下表示为其中i=1、2......t。

步骤六:云服务器端将k-1用非线性变换s1,s2,...,st进行混淆;即并将P和发送给客户端。

步骤七:客户端通过查找密钥表Tablei计算其中为si的逆变换,所述Tablei

是通过遍历ki的所有可能值,计算制作出的密钥表,i=1、2......t,私钥信息dA,i隐藏在密钥表中。

步骤八:客户端利用中国剩余定理恢复出v;

步骤九:客户端计算v′=v mod n。

步骤十:客户端计算椭圆曲线点(x2,y2)=[v′]*P。

步骤十一:客户端计算t=KDF(x2||y2,klen),其中KDF()为密钥分发函数,klen为明文M的比特长度。若t≠0,从密文C中提取出C2,计算否则跳出本流程。

步骤十二:计算u=Hash(x2||M′||y2)。

步骤十三:从密文C中提取出C3,若u=C3,则M′为明文。

进一步的,步骤三中,云服务器端利用随机数发生器产生随机数k。

本发明的有益效果为:

(1)终端在进行解密运算过程中,内存等硬件设备中不会出现私钥的完整明文,确保的密码算法运行的白盒攻击安全。

(2)该解密算法表的大小为68.75KB,存储空间要求较小。

(3)该加密算法和标准SM2加密算法效率基本一致,实用性较高。

(4)通过使用白盒软件实现SM2解密算法可降低商用密码算法的使用成本,扩大商用密码算法的使用范围。

(5)使用白盒软件算法在确保加解密安全的同时,通用性较强,对运行平台硬件没有任何特殊需求。

附图说明

图1为本发明的流程图。

具体实施方式

本发明的设计构思为:针对商密SM2加密算法在不可信任环境中运行的私钥安全问题,提出一种基于查找表和置乱混淆等技术的SM2加密算法的白盒软件实现方案。该方案采用云加端的方式实现,能有效的保护终端私钥在存储和运行时的安全,且能直接与标准SM2加密算法结合使用。此外,本专利采用余数系统理论对大整数运算进行分解,从而降低查找表的大小,减小算法所需的存储空间。

本申请基于国家商用密码标准SM2加密算法进行构建,技术方案需要三类辅助函数:密码杂凑函数、密钥派生函数和随机数发生器,这三类函数的选取和标准SM2加密算法相同,沿用标准SM2加密算法中的记号:

dA:表示用户(即客户端)A的私钥。

G:表示椭圆曲线的一个基点,其阶数为n。

Hv():表示消息摘要长度为v比特的密码杂凑函数。

KDF():表示密钥派生函数。

M:表示明文信息。

C=C1||C2||C3:表示密文信息。

为了降低白盒SM2算法需要的存储空间,本申请采用余数系统理论对大整数运算进行分解,从而降低查找表的大小。

余数系统的定义可以描述为:现假设存在一个余数系统,它是由一组互为质数的余数基β={m1,m2,...,mk}来确定的,M=m1m2…mk为这组基的动态范围。对于任意整数x≤M,可以在β这组基下唯一表示为(x1,x2,...,xk),其中xi为x对mi的求模结果,记为对余数系统而言,只有当整数x在动态范围之内才存在唯一的表示,利用中国剩余定理可以恢复出x,其中Mi=M/mi,为Mi在模mi下的逆。

假设整数x、y在基β下分别表示为x=(x1,x2,...,xk)和y=(y1,y2,...,yk),则:

其中可为+或—或*运算。

下面结合图1对本发明的实现步骤进行详细说明。

步骤一:选取一个余数系统,该余数系统的余数基为β=(p1,p2,...,pt),基β的动态范围满足ω=p1p2p3…pt≤2512;预先生成客户端私钥dA,将dA在β这组基下表示为dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;预先确定密文信息C,所述C=C1||C2||C3,客户端和云服务器端预先确定β与dA作为椭圆曲线系统参数、确定椭圆曲线的基点G,其阶数为n。

云服务器端为执行解密算法的协同方,主要为客户端解密时提供一个混淆私钥的随机因子。客户端是执行解密算法的用户,其运行环境是不可信的。

步骤二:从密文C中提取出C1。验证C1是否为椭圆曲线上的非无穷远点,如果是的话则将C1发送给云服务器端,否则跳出本流程。

步骤三:云服务器端利用随机数发生器产生一个随机数k,且k∈[1,n-1]。

步骤四:云服务器端计算椭圆曲线上的点P,P=[k]*C1

步骤五:云服务器端计算k模n的逆k-1,即:k*k-1=1mod n。将k-1在β这组基下表示为其中i=1、2......t。

步骤六:云服务器端将k-1用非线性变换s1,s2,...,st进行混淆;即并将P和发送给客户端。

步骤七:客户端通过查找密钥表Tablei计算其中为si的逆变换,所述Tablei

是通过遍历ki的所有可能值,计算制作出的密钥表,i=1、2......t,私钥信息dA,i隐藏在密钥表中。

步骤八:客户端利用中国剩余定理恢复出v。

步骤九:客户端计算v′=v mod n。

步骤十:客户端计算椭圆曲线点(x2,y2)=[v′]*P。

步骤十一:客户端计算t=KDF(x2||y2,klen),其中KDF()为密钥分发函数,klen为明文M的比特长度。若t≠0,从密文C张提取出C2,计算否则跳出本流程。

步骤十二:计算u=Hash(x2||M′||y2)。

步骤十三:从密文C中提取出C3,若u=C3,则M′为明文。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1