CN116961908A - 加密方法、电子装置、电子设备及计算机存储介质 - Google Patents

加密方法、电子装置、电子设备及计算机存储介质 Download PDF

Info

Publication number
CN116961908A
CN116961908A CN202311221673.5A CN202311221673A CN116961908A CN 116961908 A CN116961908 A CN 116961908A CN 202311221673 A CN202311221673 A CN 202311221673A CN 116961908 A CN116961908 A CN 116961908A
Authority
CN
China
Prior art keywords
length
encryption
target element
plaintext
determining
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.)
Granted
Application number
CN202311221673.5A
Other languages
English (en)
Other versions
CN116961908B (zh
Inventor
袁丽婕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Open Security Research Inc
Original Assignee
Open Security Research Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Open Security Research Inc filed Critical Open Security Research Inc
Priority to CN202311221673.5A priority Critical patent/CN116961908B/zh
Publication of CN116961908A publication Critical patent/CN116961908A/zh
Application granted granted Critical
Publication of CN116961908B publication Critical patent/CN116961908B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

本申请公开了一种加密方法、电子装置、电子设备及计算机存储介质,其中,该方法包括:获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。本申请能够使得加密过程所需要的时间短。

Description

加密方法、电子装置、电子设备及计算机存储介质
技术领域
本申请实施例涉及但不限于密码技术领域,尤其涉及一种加密方法、电子装置、电子设备及计算机存储介质。
背景技术
随着全球信息化步伐的加快,网络安全变到越来越重要。一种数据加密的基本过程就是对明文按某种算法进行处理,使其成为密文和认证标签。在解密时,通过密文进行解密,并根据认证标签,确定解密所得的明文是否正确。通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。
相关技术中,在电子设备获得加密请求后,电子设备开始计算散列密钥和加密结果,然后根据散列密钥和加密结果,确定密文和认证标签。即相关技术中,由于电子设备在获取加密请求后,需要计算散列密钥和加密结果,导致电子设备从获得加密请求到确定密文和认证标签的过程的时间长,即相关技术中加密过程所需要的时间长。
发明内容
本申请实施例提供一种加密方法、电子装置、电子设备及计算机存储介质。本申请能够解决相关技术中加密过程所需要的时间长的问题。
第一方面,本申请实施例提供一种加密方法,包括:
获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;
根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;
根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
第二方面,本申请实施例提供一种电子装置,包括:
获取单元,用于获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;
读取单元,用于根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;
确定单元,用于根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
第三方面,本申请实施例提供一种电子设备,包括:存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于调用并运行所述存储器中存储的计算机程序,使得所述电子设备执行第一方面所述的方法。
第四方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面所述的方法。
本申请实施例中,获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。如此,在获取加密请求之前,散列密钥和第一加密结果就已经计算完成并存储在目标元素中,这样电子设备直接根据从目标元素中读取的第一加密结果确定密文,根据密文和从目标元素中读取的散列密钥,确定认证标签,从而在获取加密请求后,无需再进行散列密钥和第一加密结果的计算,进而从获得加密请求到确定密文和认证标签的过程的时间短,即加密过程所需要的时间短。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为本申请实施例提供的一种网络架构示意图;
图2为本申请实施例提供的一种加密方法的流程示意图;
图3为本申请实施例提供的另一种加密方法的流程示意图;
图4为本申请实施例提供的又一种加密方法的流程示意图;
图5为本申请实施例提供的再一种加密方法的流程示意图;
图6为本申请实施例提供的一种确定密文和认证标签的流程示意图;
图7为本申请实施例提供的一种链表中的一个元素中存储的内容的示意图;
图8为本申请另一实施例提供的一种加密方法的流程示意图;
图9为本申请实施例提供的一种电子装置的组成结构示意图;
图10为本申请实施例提供的一种电子设备的硬件实体示意图。
具体实施方式
下面将通过实施例并结合附图具体地对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
需要说明的是:在本申请实例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
另外,本申请实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
伽罗瓦/计数器模式(Galois/Counter Mode,GCM)是对称算法中具有认证加解密作用的一种模式,通过认证标签T,可验证解密所得明文是否正确。GCM加密的输入参数为密钥K(也称对称密钥)、初始化向量IV、明文P、附加的认证数据A。设n和u表示唯一的正整数对,明文中的总位数为(n-1)×128+u,其中u在区间[1,128]中,即明文由n个位字符串序列组成,其中最后一个位字符串的位长为u,其他位字符串的位长为128。明文可以表示为。在本申请任一实施例中,位字符串可以称为数据块。密文可以表示为,其中最后一个数据块/>中的位数为u。附加的认证数据A表示为,其中最后一个位字符串/>可以是长度为v的部分数据块,而m和v表示唯一的一对正整数,使得A中的比特总数为(m-1)×128+v,其中v在区间[1,128]中。
以使用的算法为SM4分组密码算法为例,加密过程对应的公式为公式(1)至(6):
散列密钥:H=SM4(K,0128) (1);
计数器0的值:Y0=IV||0311, len(IV)=96 (2);
计数器i的值:Yi=incr(Yi-1), for i=1,…,n-1 (3);
密文分组i:Ci=Pi⊕SM4(K,Yi), for i=1,…,n-1 (4);
密文分组n: (5);
认证标签:T=MSB128(GHASH(H,A,C)⊕SM4(K,Y0)) (6);
其中,SM4(K,0128)表示用密钥K对值0128的分组密码进行国密SM4加密;0128表示一个位长为128的0位字符串,对应128位0;IV为初始化向量;符号||表示两个位字符串的拼接;0311对应31位0和1位1;函数len()返回一个64位字符串(该64位字符串对应的值为96),该字符串包含描述其参数中位数的非负整数,右边的位数最小;连续计数器值是用函数incr()生成的,该函数将其参数中最右边的32位作为一个非负整数,右边的位数最小,并递增此值模232;例如,Y1=incr(Y0)=incr(IV||0311)=IV||(0311+1)mod232;符号⊕表示两个位字符串的异或;函数MSBu(S)返回只包含S的最高位(最左边)u位的位字符串。明文表示为,Pi为P1,P2,…,Pn-1中的一个;密文表示为/>,Ci为C1,C2,…,Cn-1中的一个;for表示其中。
伽罗瓦散列(GHASH)函数由GHASH(H,A,C)=Xm+n+1定义,其中输入A和C的格式如下所述,变量Xi,i=0,…,m+n+1通过公式(7)至(12)确定:
Xi=0, for i=0 (7);
, for i=1,…,m-1 (8);
, for i=m (9);
, for i=m+1,…,m+n-1,j=1,…,n-1 (10);
, for i=m+n (11);
, for i=m+n+1 (12);
其中,认证数据A表示为,Ai为A1,A2,…,Am-1中的一个;len(A)表示认证数据A的字符数,len(C)表示密文C的字符数。
这样,通过公式(7)至(12)能够得到X0,X1,…,Xi、Xm+n+1的结果,进而通过Xm+n+1和公式(6)确定认证标签T。
这样,运算完成后,得到GCM输出参数,分别为密文C、认证标签T。
在一些方案中,提供一种基于现场可编程门阵列(Filed Programmable GateArray,FPGA)或专用集成电路(Application Specific Integrated Circuit,ASIC)的并行GCM模块,该并行GCM模块支持一个乘法核模块和多个加解密模块(可配置);加解密模块进行分组数据加解密,并输出密文和明文;乘法核模块根据附加信息A和密文C,产生认证标签T,认证标签T用于指示根据GCM模式经加密的消息是否可信。
多个加解密模块同时进行数据加解密,并将加解密结果依次传输到乘法核模块进行GHASH运算,当前加解密模块运算结果传输完成后立刻进行下一轮加解密运算,乘法核模块在数据有效时一直循环进行计算。
GCM运算启动后,需先启动加解密运算模块计算出H值(散列密钥),乘法核接收到H值后才计算得到计数器值Y0(在本申请任一实施例中,Y0与Y0同一含义),继而计算得到计数器值Y1,…,Yn(在本申请任一实施例中,Y1,…,Yn与Y1,…,Yn同一含义),然后分别给各加解密运算模块预置计数器初始值,再启动加解密运算模块进行数据加解密。这种方案下,GCM运算启动与真正进行加解密运算之间存在时间差(该时间差为计算散列密钥和计算计数器值Y1,…,Yn的时间),具有一定滞后性,导致加密过程所需的时间长。在一些实施例中,GCM运算启动是在接收到加密请求后执行的。
在一些实施例中,本申请产品表现与服务器密码机产品表现形式相同,一方面,服务器密码机支持用户通过浏览器登录密码机管理系统,进行设备管理、密钥管理等操作;另一方面,服务器密码机为客户端提供所需的密码运算服务,如对称加解密、非对称加密解密与签名验签等。
在一些实施例中,本申请的电子设备可以为服务器密码机。在另一些实施例中,本申请的电子设备可以包括以下之一或者至少两者的组合:服务器、物联网(Internet ofThings,IoT)设备、卫星终端、无线本地环路(Wireless Local Loop,WLL)站、个人数字助理(Personal Digital Assistant,PDA)、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、手机(mobile phone)、平板电脑(Pad)、带无线收发功能的电脑、掌上电脑、台式计算机、个人数字助理、便捷式媒体播放器、智能音箱、导航装置、智能手表、智能眼镜、智能项链等可穿戴设备、学习机、翻译笔、翻译机、点读机、计步器、数字TV、虚拟现实(Virtual Reality,VR)终端设备、增强现实(Augmented Reality,AR)终端设备、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端以及车联网系统中的车、车载设备、车载模块、无线调制解调器(modem)、手持设备(handheld)、客户终端设备(Customer PremiseEquipment,CPE)、智能家电等。
图1为本申请实施例提供的一种网络架构示意图,如图1所示,网络架构10中包括客户端11、网络节点12以及服务器密码机13。其中,客户端11可以包括用户主机。客户端11可以与网络节点12进行数据交互,网络节点12可以与服务器密码机13进行数据交互。在一些实施例中,网络节点12可以包括以下一项或多项:路由器、交换机、网线等。
图2为本申请实施例提供的一种加密方法的流程示意图,如图2所示,该方法应用于电子设备,该方法包括:
S201、获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据。
在一些实施例中,加密请求可以是从加密接口接收的。在一些实施例中,加密请求可以是根据用户对电子设备进行加密操作生成的。在一些实施例中,加密请求可以是根据客户端发送的明文,或根据获取的明文生成的。
在一些实施例中,明文的长度(比特总数)为(n-1)×Z+u。在本申请任一实施例中,Z可以为16、32、64、128、512或1024等等。在一些实施例中,认证数据的长度(比特总数)为(m-1)×Z+v。
在本申请任一实施例中,长度可以理解为比特总数。
S202、根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果。
在一些实施例中,散列密钥H的确定方式可以为H = SM4(K,0128)。K为对称密钥。
在一些实施例中,第一加密结果可以包括从小到大的一个或多个计数器值对应的加密结果。例如,一个或多个计数器值对应的计数器值的数量为4,则第一加密结果包括计数器值Y1、Y2、Y3以及Y4对应的加密结果。又例如,一个或多个计数器值对应的计数器值的数量为5,则第一加密结果包括计数器值Y1、Y2、Y3、Y4以及Y5对应的加密结果。
在一些实施例中,第一加密结果的有效长度可以与用于存储加密结果的存储区域对应。
在一些实施例中,S202可以包括:根据所述第一初始化向量,从多个元素中确定目标元素;从目标元素中读取散列密钥和第一加密结果。
在一些实施例中,多个元素中分别存储有:多个散列密钥和多个第一加密结果。
在一些实施例中,多个元素可以包括在链表中,即多个元素是指链表中的多个元素。在一些实施例中,目标元素是链表中的多个元素中的一个元素。在一些实施例中,链表可以包括单链表、双链表或循环链表。在一些实施例中,循环链表可以包括循环单链表或循环双链表。在一些实施例中,元素也可以称为数据元素、链表元素、节点或结点。
在另一些实施例中,多个元素可以分别为多个存储空间。在一些实施例中,目标元素可以为一个存储空间。在一些实施例中,对于一个存储空间来说,该存储空间可以连续或不连续。
在一些实施例中,目标元素中至少存储有散列密钥和第一加密结果。在一些实施例中,散列密钥和第一加密结果,均与目标元素中的初始化向量对应。在一些实施例中,目标元素中还可以存储有初始化向量和/或该初始化向量对应的以下一项或多项:与第一加密结果对应的计数器值、对称密钥、第一有效长度。
在一些实施例中,多个元素中加密结果的存储区域对应的大小相同。
在一些实施例中,多个元素中不同元素存储的散列密钥不同,和/或,多个元素中不同元素存储的第一加密结果不同,和/或,多个元素中不同元素存储的初始化向量不同,和/或,多个元素中不同元素存储的对称密钥不同。
在一些实施例中,由于多个元素中加密结果的存储区域对应的大小相同,多个元素中不同元素存储的计数器值相同,和/或,多个元素中不同元素存储的有效长度相同。
以下以多个元素为10个元素进行举例,说明多个元素中的内容。在一些实施例中,10个元素为元素1至10,元素1至10分别存储散列密钥1至10和第一加密结果1至10。在另一些实施例中,10个元素为元素1至10,元素1至10分别存储初始化向量1至10、散列密钥1至10、计数器值1至10、对称密钥1至10、第一有效长度1至10、第一加密结果1至10。在实施过程中,目标元素可以为元素1至10中的一个元素。例如,目标元素为元素5,则从目标元素中读取散列密钥和第一加密结果5。需要说明的是,虽然本申请以多个元素为10个元素进行举例,但是本申请并不限定多个元素的具体数量,多个元素对应的元素数量可以为大于或等于2的任一整数。例如,多个元素对应的元素数量可以为2、5、8、15、20或50等。
S203、根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
在一些实施例中,S201至S203的步骤可以是主线程执行的。
在本申请任一实施例中,主线程可以替换为以下之一:第一线程、第一执行单元、主执行单元。
以下对线程进行说明:一个进程中,可以同时有多条执行链路,这些执行链路称为线程。线程是中央处理器(Central Processing Unit,CPU)或处理器的调度与分配最小单位。其中,每个独立执行的程序称为进程。进程是进行系统资源分配、调度和管理的最小单位,进程在执行过程中拥有独立的内存单元。
在一些实施例中,主线程和加密线程在一个进程中。
在本申请任一实施例中,加密线程可以替换为以下之一:第二线程、第二执行单元、加密执行单元。
在一些实施例中,第一加密结果中的部分加密结果可以为加密明文所需的全部加密结果。
在另一些实施例中,第一加密结果可以为加密明文所需的全部加密结果。
在又一些实施例中,第一加密结果可以为加密明文所需的部分加密结果。在这种情况下,S203还可以包括:确定加密明文所需的另一部分加密结果(即下述的第三长度的目标加密结果),根据所述目标元素中的第一加密结果、第三长度的目标加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
本申请实施例中,获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。如此,在获取加密请求之前,散列密钥和第一加密结果就已经计算完成并存储在目标元素中,这样电子设备直接根据从目标元素中读取的第一加密结果确定密文,根据密文和从目标元素中读取的散列密钥,确定认证标签,从而在获取加密请求后,无需再进行散列密钥和第一加密结果的计算,进而从获得加密请求到确定密文和认证标签的过程的时间短,即加密过程所需要的时间短。
图3为本申请实施例提供的另一种加密方法的流程示意图,如图3所示,该方法应用于电子设备,该方法包括:
S301、根据多个初始化向量和所述多个初始化向量分别对应的多个对称密钥,向多个元素中分别存储多个散列密钥和多个第一加密结果。
其中,所述多个散列密钥分别通过所述多个对称密钥确定,所述多个元素分别与所述多个初始化向量对应,所述多个元素包括所述目标元素。
在一些实施例中,多个初始化向量中每个初始化向量可以是主线程随机生成的。例如,主线程可以生成初始化向量1至10。在一些实施例中,每个初始化向量对应的对称密钥,可以是主线程确定的。例如,主线程可以确定对称密钥1至10。在一些实施例中,主线程可以将多个初始化向量和多个对称密钥,分别存储到多个元素中。例如,主线程可以将初始化向量1至10和对称密钥1至10,分别存储到元素1至10中。
在一些实施例中,主线程可以根据所述多个初始化向量分别对应的多个对称密钥,分别确定多个散列密钥,向多个元素中分别存储多个散列密钥。例如,主线程可以根据对称密钥1至10,确定散列密钥1至10,向多个元素中分别存储散列密钥1至10。在另一些实施例中,确定散列密钥和存储散列密钥的操作可以是加密线程执行的。例如,加密线程可以根据对称密钥1至10,确定散列密钥1至10,向元素1至10中分别存储散列密钥1至10。
在一些实施例中,加密线程可以根据多个初始化向量和所述多个初始化向量分别对应的多个对称密钥,分别确定多个第一加密结果,向多个元素中分别存储多个第一加密结果。例如,加密线程可以根据初始化向量1至10和对称密钥1至10,确定第一加密结果1至10,向多个元素中分别存储第一加密结果1至10。在一些实施例中,第一加密结果可以根据SM4(K,Yi)确定,计数器i的值:Yi = incr(Yi-1), for i=1,…,n-1。其中,Y0的值根据初始化向量确定。
在本申请任一实施例中,加密线程可以包括计数器模式(CounTeR,CTR)加密线程。
S302、获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据。
S303、根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果。
在一些实施例中,多个元素包括目标元素。
S304、根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
在本申请实施例中,通过提前确定多个散列密钥和多个第一加密结果,并将多个散列密钥和多个第一加密结果分别存储在多个元素中,从而在使用时可以直接根据第一初始化向量,选择目标元素,从目标元素中读取散列密钥和第一初始化结果。
在一些实施例中,所述方法还包括:向所述多个元素中还分别存储:所述多个初始化向量和/或所述多个初始化向量对应的以下一项或多项:与所述多个第一加密结果分别对应的多个计数器值、多个对称密钥、多个第一有效长度;
其中,所述多个第一有效长度,分别为所述多个第一加密结果的有效长度。在一些实施例中,第一加密结果的有效长度可以为第一加密结果的长度或第一加密结果的实际长度。
在这种方式下,S301的步骤可以替换为:根据多个初始化向量和所述多个初始化向量分别对应的多个对称密钥,向多个元素中分别存储所述多个初始化向量和/或所述多个初始化向量对应的以下一项或多项:多个散列密钥、与所述多个第一加密结果分别对应的多个计数器值、多个对称密钥、多个第一有效长度、多个散列密钥。
在本申请任一实施例中,对称密钥可以替换为对称密钥标识或对称密钥索引。
在一些实施例中,多个计数器值的存储可以是加密线程执行的。例如,加密线程可以向元素1至10中分别存储计数器值1至10。在一些实施例中,多个第一有效长度的存储可以是加密线程执行的。例如,加密线程可以向元素1至10中分别存储第一有效长度1至10。
图4为本申请实施例提供的又一种加密方法的流程示意图,如图4所示,所述目标元素包括在多个元素中,所述多个元素分别存储多个散列密钥、多个初始化向量和多个第一加密结果;该方法应用于电子设备,该方法包括:
S401、获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据。
在S401之后,可以执行S402或S403。
S402、在所述多个初始化向量中包括所述第一初始化向量的情况下,将所述第一初始化向量对应的元素,确定为所述目标元素,从所述目标元素中读取散列密钥和第一加密结果。
例如,第一初始化向量属于初始化向量1-10中的一个,所述多个初始化向量中包括所述第一初始化向量。例如,第一初始化向量可以为初始化向量4,将初始化向量4对应的元素4,确定为目标元素。
S403、在所述多个初始化向量中不包括所述第一初始化向量的情况下,从所述多个元素中选择指定元素,将所述指定元素确定为所述目标元素,从所述目标元素中读取散列密钥和第一加密结果。
在一些实施例中,从所述多个元素中选择指定元素,可以包括:从所述多个元素中随机选择指定元素。例如,第一初始化向量不属于初始化向量1至10中的一个,所述多个初始化向量中不包括所述第一初始化向量。例如,第一初始化向量可以为初始化向量11,初始化向量11没有包括在初始化向量1至10中,可以从元素1至10中随机确定一个指定元素,例如,该指定元素为元素5,将元素5确定为目标元素。
在另一些实施例中,从所述多个元素中选择指定元素,可以包括:将多个元素中的第一个元素确定为指定元素,或者,将多个元素中的最后一个元素确定为指定元素,或者,将多个元素中第预设数量个元素确定为指定元素等等,本申请对此不一一列举。
S404、根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
在一些实施例中,S401至S404是主线程执行的。
需要说明的是,S402和S403的步骤可以是单独执行的。例如,S401、S402和S404可以形成一个实施例。例如,S401、S403和S404可以形成一个实施例。
在本申请实施例中,提出了在多个初始化向量中包括所述第一初始化向量,或者多个初始化向量中不包括所述第一初始化向量的情况下,确定目标元素的方案,从而无论加密请求中的第一初始化向量的什么值,都可以根据第一初始化向量确定一个目标元素,从目标元素中读取散列密钥和第一加密结果,从而加密过程所需要的时间短。
图5为本申请实施例提供的再一种加密方法的流程示意图,如图5所示,该方法应用于电子设备,该方法包括:
S501、获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据。
S502、根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果。
在S502之后,可以执行S503、S504或S505。
S503、在所述明文的第一长度小于第二长度的情况下,根据所述目标元素中的第一加密结果中的前所述第二长度的加密结果和所述明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签。
在本申请任一实施例中,所述第二长度为所述目标元素中的第一加密结果的有效长度。
在一些实施例中,根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签,可以包括:根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定第一长度对应的伽罗瓦散列中的GHASH值(即该值是根据全部明文确定的);根据第一长度对应的伽罗瓦散列中的GHASH值和计数器值Y0对应的加密结果(即SM4(K,Y0)),确定认证标签。
在本申请实施例中,在所述明文的第一长度小于第二长度的情况下,能够根据从目标元素中读取的第一加密结果中的前所述第二长度的加密结果,确定认证标签,从而在获得加密请求之后,无需再计算加密结果,从而加密过程所需要的时间短。
S504、在所述明文的第一长度等于第二长度的情况下,根据所述目标元素中的第一加密结果和所述明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签。
在一些实施例中,根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签,可以包括:根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定第一长度对应的伽罗瓦散列中的GHASH值(即该值是根据全部明文确定的);根据第一长度对应的伽罗瓦散列中的GHASH值和计数器值Y0对应的加密结果(即SM4(K,Y0)),确定认证标签。
在本申请实施例中,在所述明文的第一长度等于第二长度的情况下,能够根据从目标元素中读取的第一加密结果,确定认证标签,从而在获得加密请求之后,无需再计算加密结果,从而加密过程所需要的时间短。
S505、在所述明文的第一长度大于第二长度的情况下,根据所述目标元素中的第一加密结果和所述明文中的前第二长度的子明文确定前第二长度的子密文,以及根据所述目标元素中的散列密钥、所述前第二长度的子密文和所述认证数据,确定所述第二长度对应的第一结果。
在本申请任一实施例中,第一结果、第k结果可以均为伽罗瓦散列中的GHASH值,不同的GHASH值对应的长度不同。
在一些实施例中,第二长度的第一结果为第二长度对应的伽罗瓦散列中的GHASH值(该值是根据所述明文中的前第二长度的子明文确定的)。
S506、根据第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文,以及根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签。
其中,所述第三长度为所述第一长度减去所述第二长度;所述第三长度的目标加密结果为所述第一加密结果之后确定的加密结果。
在一些实施例中,确定第三长度的目标加密结果的第一步骤,与根据第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文,以及根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签的第二步骤,是同步进行的,或者说是并行的,或者说是通过不同的线程执行的。例如,第一步骤是加密线程执行的,第二步骤是主线程执行的。通过第一步骤和第二步骤,是同步进行的,或者说是并行的,或者说是通过不同的线程执行的,相较于串行执行第一步骤和第二步骤的方案来说,加密过程所需要的时间短。
在一些实施例中,根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签,可以包括:根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定第一长度对应的指定结果;该第一长度对应的指定结果可以为第一长度对应的伽罗瓦散列中的GHASH值(该值是通过所有明文确定的);根据第一长度对应的伽罗瓦散列中的GHASH值和计数器值Y0对应的加密结果(即SM4(K,Y0)),确定认证标签。
在本申请任一实施例中,根据第一长度对应的伽罗瓦散列中的GHASH值和计数器值Y0对应的加密结果(即SM4(K,Y0)),确定认证标签,包括:据第一长度对应的伽罗瓦散列中的GHASH值和len(A)||len(C),确定最终的GHASH值,根据最终的GHASH值和SM4(K,Y0),确定认证标签。其中,len(A)为认证数据的长度,len(C)为密文的长度。
在一些实施例中,S501至S506是主线程执行的。
需要说明的是,以下任一项步骤S503、S504、S505和S506可以是单独执行的。例如,S501、S502和S503可以形成一个实施例。例如,S501、S502和S504可以形成一个实施例。例如,S501、S502、S505和S506可以形成一个实施例。
在本申请实施例中,在所述明文的第一长度大于第二长度的情况下,先根据目标元素中的第一加密结果和明文中的前第二长度的子明文,确定前第二长度的子密文和第二长度对应的第一结果,然后再通过后续计算的第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文和所述认证标签,从而在获取到加密请求后,就能够从目标元素中读取全部明文加密所需的部分加密结果(即第一加密结果),从而加密过程所需要的时间短。
在一些实施例中,所述根据第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文,以及根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签,包括:
从所述目标元素中第k次读取第k有效长度对应的第k加密结果;k为大于或等于二的整数;
根据所述第k加密结果和所述明文中第k有效长度的子明文,确定第k有效长度的子密文,以及根据所述目标元素中的散列密钥和所述第k有效长度的子密文,确定第k结果;所述第k结果与已读取的所有加密结果的有效长度之和对应;
在目标结果对应的子明文为所述明文中的末尾子明文的情况下,根据所述目标结果,确定所述认证标签;所述目标结果可以为最后一次得到的第k结果,所述第三长度的目标加密结果包括第二加密结果至所述末尾子明文对应的加密结果。
在一些实施例中,第k有效长度的子明文中可以包括一个或多个子明文。在一些实施例中,在k不同的情况下,第k有效长度的子明文中包括的子明文的数量不同。其中,一个或多个子明文分别对应一个或多个计数器值。
在一些实施例中,在末尾子明文包括一个子明文的情况下,末尾子明文对应的加密结果为该一个子明文对应的加密结果。在一些实施例中,在末尾子明文包括多个子明文的情况下,末尾子明文对应的加密结果为该多个子明文中最后一个子明文对应的加密结果。
在一些实施例中,第三长度为第二加密结果至所述末尾子明文对应的加密结果的有效长度之和。
在一些实施例中,第k有效长度可以大于0且小于或等于第一有效长度。其中,第一有效长度可以为所述目标元素中的第一加密结果的有效长度,即第二长度。例如,第一有效长度对应4个计数器值对应的有效长度。示例性地,第一有效长度对应计数器值Y1、Y2、Y3以及Y4对应的有效长度。这样,第k有效长度可以对应1个计数器值对应的有效长度、2个计数器值对应的有效长度、3个计数器值对应的有效长度或4个计数器值对应的有效长度。其中,k不同,对应的有效长度可以相同或不同。例如,第二有效长度对应3个计数器值对应的有效长度,第三有效长度对应3个计数器值对应的有效长度,第四有效长度对应2个计数器值对应的有效长度,第五有效长度对应4个计数器值对应的有效长度等等,本申请实施例对此不一一列举。这样,第二有效长度对应计数器值Y5、Y6以及Y7对应的有效长度,第三有效长度对应计数器值Y8、Y9以及Y10对应的有效长度,第四有效长度对应计数器值Y11以及Y12对应的有效长度,第五有效长度对应计数器值Y13、Y14、Y15以及Y16对应的有效长度。
在一些实施例中,第k有效长度对应的第k加密结果可以是加密线程确定,并存储在目标元素中的,主线程只需要每次从目标元素中读取第k加密结果。在一些实施例中,加密线程可以向目标元素中存储第k有效长度和第k加密结果对应的最大的计数器值。
在一些实施例中,第k结果可以为已读取的所有加密结果的有效长度之和对应的GHASH值。例如,第二结果可以为已读取的第一加密结果和第二加密结果的有效长度之和对应的GHASH值。又例如,第三结果可以为已读取的第一加密结果、第二加密结果以及第三加密结果的有效长度之和对应的GHASH值等等,此处不再赘述。
在一些实施例中,根据所述目标结果,确定所述认证标签,可以包括:根据所述目标结果、所述认证数据的长度、所述第一长度、所述目标元素中的目标散列密钥以及计数器0(即计数器值Y0)对应的加密结果,确定所述认证标签。
其中,目标结果可以为Xm+n的结果,认证标签根据T=MSB128(GHASH(H,A,C)⊕SM4(K,Y0))确定。其中,GHASH(H,A,C)=Xm+n+1。其中,len(A)为认证数据的长度,len(C)为密文的长度,也等于明文的第一长度,H为目标元素中的目标散列密钥。计数器值Y0对应加密结果为SM4(K,Y0)。
在一些实施例中,每次确定第k结果之后,设置k=k+1,然后再执行从所述目标元素中第k次读取第k有效长度对应的第k加密结果,直到目标结果对应的子明文为所述明文中的末尾子明文。
以下对确定认证标签的方式进行举例:
在一些实施方式中,从所述目标元素中第二次读取第二有效长度对应的第二加密结果;根据所述第二加密结果和所述明文中第二有效长度的子明文,确定第二有效长度的子密文,以及根据所述目标元素中的散列密钥和所述第二有效长度的子密文,确定第二结果;在第二结果对应的子明文为所述明文中的末尾子明文的情况下,根据所述第二结果,确定所述认证标签。
在另一些实施方式中,从所述目标元素中第二次读取第二有效长度对应的第二加密结果;根据所述第二加密结果和所述明文中第二有效长度的子明文,确定第二有效长度的子密文,以及根据所述目标元素中的散列密钥和所述第二有效长度的子密文,确定第二结果;在第二结果对应的子明文不为所述明文中的末尾子明文的情况下,从所述目标元素中第三次读取第三有效长度对应的第三加密结果;根据所述第三加密结果和所述明文中第三有效长度的子明文,确定第三有效长度的子密文,以及根据所述目标元素中的散列密钥和所述第三有效长度的子密文,确定第三结果;在第三结果对应的子明文为所述明文中的末尾子明文的情况下,根据所述第三结果,确定所述认证标签。
需要说明的是,本申请分别以k为二和三进行了举例,需要说明的是,在其它实施例中,k还可以为大于或等于四的其它数值,在k还为其它数值时,确定认证标签的方式,与k为二或三确定认证标签的方式类似,本申请对此不一一列举。
在一些实施例中,所述获取加密请求之后,所述方法还包括:
确定第一剩余长度为所述明文的第一长度减去所述第二长度,和/或,确定第一偏移量为所述第二长度;
在第k次读取到第k加密结果的情况下,将第k剩余长度确定为第k-1剩余长度减去所述第k有效长度,和/或,将第k偏移量确定为第k-1偏移量加上所述第k有效长度;
在目标剩余长度小于或等于0,和/或,目标偏移量大于或等于所述明文的第一长度的情况下,确定所述目标结果对应的子明文为所述明文中的末尾子明文;目标剩余长度为最后一次得到的第k剩余长度,目标偏移量为最后一次得到的第k偏移量。
在一些实施例中,本实施例中的步骤可以是主线程执行的。
在一些实施例中,可以仅根据目标剩余长度小于或等于0,来确定所述目标结果对应的子明文为所述明文中的末尾子明文。在另一些实施例中,可以仅根据目标偏移量大于或等于所述明文的第一长度,来确定所述目标结果对应的子明文为所述明文中的末尾子明文。在又一些实施例中,可以根据目标剩余长度小于或等于0,以及目标偏移量大于或等于所述明文的第一长度,来确定所述目标结果对应的子明文为所述明文中的末尾子明文。
在一些实施例中,通过第k剩余长度,可以确定明文中未处理部分的长度。在一些实施例中,通过第k偏移量,可以确定明文中已处理部分的长度。
在本申请实施例中,在目标剩余长度小于或等于0,和/或,目标偏移量大于或等于所述明文的第一长度的情况下,确定所述目标结果对应的子明文为所述明文中的末尾子明文,从而能够根据所述目标结果,确定所述认证标签。
在一些实施例中,所述方法还包括:
清除所述目标元素中的内容,生成第二初始化向量并确定所述第二初始化向量对应的对称密钥;
根据所述第二初始化向量和所述第二初始化向量对应的对称密钥,向所述目标元素中存储:所述第二初始化向量和/或所述第二初始化向量对应的以下一项或多项:散列密钥、与第一加密结果对应的计数器值、对称密钥、第一有效长度、第一加密结果;
其中,所述散列密钥通过所述对称密钥确定;所述第一有效长度为第一加密结果的有效长度。
在一些实施例中,清除所述目标元素中的内容,可以是在根据所述目标元素中的散列密钥和第一加密结果、所述明文以及所述认证数据,确定认证标签之后执行的。
在另一些实施例中,清除所述目标元素中的内容,可以是在所述明文的第一长度小于第二长度的情况下,从目标元素中读取散列密钥和第一加密结果之后执行的。
在又一些实施例中,清除所述目标元素中的内容,可以是在所述明文的第一长度等于第二长度的情况下,从目标元素中读取散列密钥和第一加密结果之后执行的。
在又一些实施例中,清除所述目标元素中的内容,可以是在目标结果对应的子明文为所述明文中的末尾子明文的情况下执行的。
在一些实施例中,主线程可以清除所述目标元素中的内容,生成第二初始化向量并确定所述第二初始化向量对应的对称密钥。
在一些实施例中,主线程可以根据所述第二初始化向量和所述第二初始化向量对应的对称密钥,向目标元素中存储第二初始化向量,和/或,向目标元素中存储第二初始化向量对应的以下一项或多项:散列密钥、对称密钥。
在一些实施例中,加密线程可以根据所述第二初始化向量和所述第二初始化向量对应的对称密钥,向目标元素中存储第二初始化向量对应的以下一项或多项:与第一加密结果对应的计数器值、第一有效长度、第一加密结果。
在一些实施例中,第二初始化向量与上述的多个初始化向量均不同,和/或,第二初始化向量对应的散列密钥与上述的多个散列密钥均不同,和/或,第二初始化向量对应的计数器值与上述的多个计数器值均不同,和/或,第二初始化向量对应的对称密钥与上述的多个对称密钥均不同,和/或,第二初始化向量对应的第一有效长度与上述的多个第一有效长度均不同,和/或,第二初始化向量对应的第一加密结果与上述的多个第一加密结果均不同。
例如,第二初始化向量可以为初始化向量11,第二初始化向量对应的以下一项或多项:散列密钥、与第一加密结果对应的计数器值、对称密钥、第一有效长度、第一加密结果,可以分别为散列密钥11、与第一加密结果对应的计数器值11、对称密钥11、第一有效长度11、第一加密结果11。
示例性地,在第一初始化向量为初始化向量1,第二初始化向量对应的以下一项或多项:散列密钥、与第一加密结果对应的计数器值、对称密钥、第一有效长度、第一加密结果,可以分别为散列密钥1、与第一加密结果对应的计数器值1、对称密钥1、第一有效长度1、第一加密结果1,在目标元素中的内容被使用的情况下,清除目标元素中的内容,并向目标元素中存储初始化向量11、散列密钥11、与第一加密结果对应的计数器值11、对称密钥11、第一有效长度11、第一加密结果11。这样,多个元素将分别存储初始化向量2至11、散列密钥2至11、与第一加密结果对应的计数器值2至11、对称密钥2至11、第一有效长度2至11、第一加密结果2至11。
这样,在多个元素中的某一个元素中的内容被使用的情况下,会将该元素中的内容清除,然后向该元素中添加重新生成的初始化向量(例如随机生成的)以及该初始化向量对应的相关内容,以供下次使用。
例如,在本申请的确定认证标签之后,如果主线程接收到加密请求,则在根据加密请求对应的第三初始化向量确定的元素也为目标元素的情况下,从目标元素中读取散列密钥11和第一加密结果11。其中,第三初始化向量可以与第二初始化向量相同或不同。根据第三初始化向量确定元素的方案,可以与上述的根据第一初始化向量确定元素的方案类似,本申请对此不作赘述。
在本申请实施例中,通过清除所述目标元素中的内容,向目标元素中存储第二初始化向量和/或所述第二初始化向量对应的相关内容,使得目标元素中内容在使用后能够更新,以便于下次使用,从而不同的加密过程使用不断更新的散列密钥和第一加密结果,提高了信息安全性。
在一些实施例中,所述从目标元素中读取散列密钥和第一加密结果之后,所述方法还包括:将所述目标元素中的有效长度设置为0。
在一些实施例中,将所述目标元素中的有效长度设置为0的同时,还可以删除所述目标元素中的第一加密结果。
在一些实施例中,从所述目标元素中第k次读取第k有效长度对应的第k加密结果之后,所述方法还包括:将所述目标元素中的有效长度设置为0。
在一些实施例中,将所述目标元素中的有效长度设置为0的同时,还可以删除所述目标元素中的第k加密结果。
在一些实施例中,将所述目标元素中的有效长度设置为0的操作是主线程执行的。在一些实施例中,删除所述目标元素中的第一加密结果和/或所述第k加密结果的操作是主线程执行的。
在本申请实施例中,通过主线程每次从目标元素中读取加密结果之后,将所述目标元素中的有效长度设置为0,从而便于下次的读取;另外,通过主线程每次从目标元素中读取加密结果之后,删除所述目标元素中的第一加密结果和/或所述第k加密结果,从而便于下次的读取和加密结果的存储。
在一些实施例中,所述方法还包括:
在所述目标元素中的有效长度小于第二长度的情况下,根据所述目标元素中的当前计数器值,确定在所述当前计数器值之后的下一计数器值和所述下一计数器值对应的加密结果;所述第二长度为所述目标元素中的第一加密结果的有效长度;
将所述目标元素中的所述当前计数器值修改为所述下一计数器值,向所述目标元素中存储所述下一计数器值对应的加密结果。
在一些实施例中,本实施例中的步骤可以是加密线程执行的。加密线程可以持续确定/持续检测/一直确定目标元素中的有效长度是否小于第二长度,在是的情况下,确定下一计数器值和所述下一计数器值对应的加密结果,以及将所述目标元素中的所述当前计数器值修改为所述下一计数器值,向所述目标元素中存储所述下一计数器值对应的加密结果。在否的情况下,不再执行加密结果的计算和存储。
在一些实施例中,本实施例中的步骤可以是在从目标元素中读取散列密钥和第一加密结果之后,将所述目标元素中的有效长度设置为0之后执行的。
在一些实施例中,本实施例中的步骤可以是在清除所述目标元素中的内容之后执行的。在清除所述目标元素中的内容的情况下,当前计数器值为空或Y0,当前计数器值的下一计数器值为Y1。
例如,在第二长度为4个计数器值对应的有效长度,在目标元素中的有效长度为0个计数器值对应的有效长度、1个计数器值对应的有效长度、2个计数器值对应的有效长度或3个计数器值对应的有效长度的情况下,所述目标元素中的有效长度小于第二长度。
在一些实施例中,目标元素中的当前计数器值可以为:在生成第一初始化向量之后,向目标元素中已经存储的所有加密结果对应的最后一次得到的计数器值。
例如,当前计数器值为Y4,则下一计数器值为Y5。又例如,当前计数器值为Y10,则下一计数器值为Y11。本申请对此不一一列举。
在本申请实施例中,通过将所述目标元素中的所述当前计数器值修改为所述下一计数器值,向所述目标元素中存储所述下一计数器值对应的加密结果,便于加密线程不断地确定下一个计数器值对应的加密结果,进而便于主线程第k次读取第k加密结果。
在一些实施例中,所述方法还包括:将所述目标元素中的有效长度,从所述当前计数器值对应的第四长度,修改为第五长度;其中,所述第五长度为所述第四长度与所述下一计数器值对应的加密结果的有效长度之和。
在一些实施例中,本实施例中的步骤可以是加密线程执行的。
在一些实施例中,当前计数器值对应的第四长度,可以为目标元素中当前存储的加密结果对应的长度。
在本申请实施例中,在每次向目标元素中存储一个计数器值对应的加密结果后,会将目标元素中的有效长度对应修改,以便于主线程从目标元素中每次读取目标元素中的有效长度的加密结果。
在一些实施例中,所述向所述目标元素中存储所述下一计数器值对应的加密结果,包括:
在所述目标元素中的有效长度为0的情况下,从所述加密结果的存储区域的起始位置,开始存储所述下一计数器值对应的加密结果。
在一些实施例中,所述向所述目标元素中存储所述下一计数器值对应的加密结果,包括:
在所述目标元素中的有效长度大于0的情况下,从所述加密结果的存储区域的起始位置,间隔所述目标元素中的有效长度后的位置,开始存储所述下一计数器值对应的加密结果。
本申请实施例通过线程将GCM加密运算中的关键步骤:对称加密与GHASH进行分离,实现并行计算。其中,加密线程控制计数器值、对称加密结果(对应上述的第一加密结果,第k加密结果)的实时计算,主线程则负责异或、GHASH等运算。
图6为本申请实施例提供的一种确定密文和认证标签的流程示意图,如图6所示,加密线程对应预计算的过程,加密线程根据初始化向量IV,分别确定计数器值Y0、Y1、Y2直到Yn。加密线程根据计数器Y0和对称密钥K,确定计数器值Y0对应的加密结果,即Enc(0)=SM4(K,Y0),加密线程根据计数器Y1和对称密钥K,确定计数器值Y1对应的加密结果,即Enc(1)=SM4(K,Y1),加密线程根据计数器Y2和对称密钥K,确定计数器值Y2对应的加密结果,即Enc(2)=SM4(K,Y2),直到加密线程根据计数器Yn和对称密钥K,确定计数器值Yn对应的加密结果,即Enc(n)=SM4(K,Yn)。
主线程可以根据明文P(表示为)分别对SM4(K,Y1),SM4(K,Y2),…,SM4(K,Yn)进行异或,得到密文C(表示为/>)。
主线程可以根据认证数据A,确定Xm的值,依次根据Xm与C1的异或结果,确定Xm+1,根据Xm+1与C2的异或结果,确定Xm+2,直到根据Xm+n-2与Cn-1的异或结果,确定Xm+n-1,直到根据Xm+n-1的异或结果,确定Xm+n
主线程根据len(A)||len(C)和Xm+n的异或结果,确定Xm+n+1,根据Xm+n+1与Enc(0)=SM4(K,Y0)的异或结果,确定认证标签T。其中,len(A)为认证数据的长度,len(C)为密文的长度,也等于明文的第一长度。
在本申请实施例中,服务器密码机的密码服务启动时,以随机数方式生成特定组数的IV(如10组),对应上述的初始化向量1至10,分别分配不同的内部对称密钥(对称密钥K),通过计数器累加、对称加密运算,得到GHASH的key,即H(对应上述的散列密钥)、特定长度(如64×1024字节,即4×1024个分组)的对称加密结果Data,存储相关数据于一链表中。在一些实施例中,对称密钥K可以包括密钥加密密钥(Key Encryption Key,KEK)。
图7为本申请实施例提供的一种链表中的一个元素中存储的内容的示意图,如图7所示,对于链表中的任一个元素来说,可以存储以下内容:初始化向量IV、GHASH的key值H、计数器值Y、对称密钥唯一标识(如KEK索引)、加密结果的有效长度Len、加密结果Data。
在初始化操作完成后,服务另起一个独立线程:CTR加密线程。此线程循环遍历链表,当查询到链表中某一元素对应的Data为空或Len不足64×1024时,则根据相应的Y(上一组计数器值,或者说元素中当前的计数器值),进行计数器累加与SM4加密运算,并实时记录Len与Y。
主线程主要负责密码运算请求的接收、解析及响应。当接收到GCM加密请求时,主线程解析请求,得到输入参数,分别为IV_in、明文P及其长度Len(P)、附加的认证数据A及其长度Len(A),令left_len=Len(P),offset=0。其中,left_len表示剩余长度,offset表示偏移量。
1)根据IV_in,遍历链表,若链表中找到IV_in相关记录,则根据记录中的长度Len,拷贝出GHASH密钥H、Data,将链表中长度Len清零,IV_out=IV_in;若链表中未找到IV_in相关记录,则从链表中任意选取一个元素,得到其IV、GHASH密钥H,并拷贝对应现已计算出的长度为Len的对称加密结果,链表中数据长度Len清零,IV_out=IV;
2)H作为密钥、附加的认证数据A作为入参,进行GHASH运算,得到Hash_A(Xm);
3)将1)中拿到Data与P + offset的前Len字节明文按照分组进行异或,得到相应的密文C;H作为密钥、密文C与Hash_A异或的结果作为入参,进行GHASH运算;循环此步骤,直至Len长度数据运算完毕;
4)剩余长度left_len-=Len,偏移量offset+=Len;
其中,left_len-=Len等同于left_len=left_len-Len或者将left_len-Len的值赋予left_len。
其中,offset+=Len等同于offset=offset+Len或者将offset+Len的值赋予offset。
5)若left_len>0,跳转至1)进行循环;否则,跳转至步骤6);
6)根据IV_out清除链表中对应记录,通过随机数重新生成一IV(对应上述的第二初始化向量)于相应位置,选择其对应的内部对称密钥,并计算出H;
7)GCM运算结束,得到输出参数,分别为IV_out、密文C及其长度len(C),认证标签T及其长度Len(T);
8)封装响应报文,返回响应。
图8为本申请另一实施例提供的一种加密方法的流程示意图,如图8所示,该方法应用于电子设备,该方法包括:
S801、在程序开始后,于链表中预置多个链表元素,存储相应IV、H、Y、对称密钥唯一标识、对称加密结果Data及长度Len,以Len等于64×1024为例。
在S801之后,CTR加密线程无限循环(while(1))S802。
S802、遍历链表,当查询到链表中某一成员对应的Data为空或Len小于64×1024时,则根据相应元素的Y,进行计数器累加与对称加密运算,并实时记录Len与Y。
在S801之后,主线程无限循环(while(1))S803。
S803、是否接收到请求。
在S803为否的情况下,继续无限循环(while(1))S803;在S803为是的情况下,执行S804。
S804、是否为GCM加密请求。
在S804为否的情况下,执行S805;在S804为是的情况下,执行S806。
S805、解析并处理其他请求。
在S805之后,返回至无限循环(while(1))。
S806、解析请求,得到入参IV_in、明文P及其长度Len(P)、附加的认证数据A及其长度Len(A),令剩余长度left_len=Len(P),偏移量offset=0。
S807、是否满足left_len>0。
在S807为是的情况下,执行S808;在S807为否的情况下,执行S813。
S808、链表中能否找到IV_in相应记录。
在S808为是的情况下,执行S809,在S808为否的情况下,执行S810。
S809、获取链表对应记录中的H、Data及长度Len,随后将Len置为0,IV_out=IV_in。
S810、任意选取链表中的一个元素,得到IV、H,Data与Len,随后将链表记录中Len置为0,IV_out=IV。
在S809和S810之后,均执行S811。
S811、对P+offset的前Len字节明文进行与Data进行异或(得到相应密文C)、GHASH运算。
S812、left_len-=Len;offset+=Len。
在S812之后,返回至S807。
S813、根据IV_out清除链表中对应记录,重新生成一个IV于相应位置,选择一内部对称密钥,并计算出H。
S814、GCM运算结束,得到出参:IV_out,密文C及其长度Len(C),认证标签T及其长度Len(T)。
在S814之后,返回至无限循环(while(1))。
本申请基于服务器密码机将GCM加密中的运算分解,实现并行计算,从而实现GCM加密加速目标。
本申请实施例中,将GCM加密运算中的计数器累加、SM4对称加密操作与剩余运算进行分离;服务启动时,预置特定组数的IV,分别使用不同内部对称密钥,进行计数器累加及对称加密操作,从而得到特定长度的初始数据,并将相关数据缓存至链表中;运算分离的方法在于,除主线程之外,密码机服务还需另起一个线程(称CTR加密线程),用于实时进行计数器累加及对称加密操作;主线程负责密码运算请求的接收、解析与相应处理(包含GCM加密中的异或、GHASH运算);CTR加密线程循环遍历链表,视情况进行计数器累加及对称加密操作。
本申请在不影响产品表现形式、符合标准规范接口定义前提下,能够一定程度上对对称算法GCM模式的加密运算进行加速优化,提高接口响应速度,优化用户对产品的使用体验感。
以下提供一种本方案的实施方式,需要说明的是,以下只是示例性地列举各个步骤,在实际执行过程中,可以是其它步骤,本申请对此不作限定。需要说明的是,下述的序号并不能限定实际过程中的执行顺序。
1、生成链表,链表中包括10个元素(分别对应10个初始化向量IV),每个元素中分别存储初始化向量IV、散列密钥H、与第一加密结果分别对应的计数器值Y(例如,第一加密结果对应计数器值Y4)、对称密钥的标识、第一有效长度(len)(即Y1+Y2+Y3+Y4对应的长度,等于4X,4X为目标元素中加密结果写满后的长度)、第一加密结果(data)。
2、主线程根据IV_in,读取完目标元素中第一加密结果(data),将目标元素中Len清零。
3、CTR加密线程根据Len清零,从开始位置存储Y5对应的加密结果(覆盖存储),并将目标元素中的Y设置为Y5,len设置为Y5对应的加密结果的有效长度(例如为X)。
4、CTR加密线程根据Len为X,不足4X(4X为目标元素中加密结果写满后的长度),继续在Y5对应的加密结果之后存储Y6对应的加密结果,并将目标元素中的Y设置为Y6,len设置为Y5+Y6对应的加密结果的有效长度(例如为2X)。
5、主线程计算到Y4对应的GHASH值,需要继续读取Y4对应的加密结果之后的加密结果,这时,主线程需要从目标元素中读取加密结果,发现只有Y5+Y6对应的加密结果,因此从目标元素中读取Y5+Y6对应的加密结果(即上文的第二加密结果),将目标元素中Len清零。
6、CTR加密线程根据Len清零,从开始位置存储Y7对应的加密结果(覆盖存储),并将目标元素中的Y设置为Y7,len设置为Y7对应的加密结果的有效长度(例如为X)。直到CTR加密线程存储Y10对应的加密结果(覆盖存储),并将目标元素中的Y设置为Y10,len设置为Y7+Y8+Y9+Y10对应的加密结果的有效长度(例如为4X)。CTR加密线程根据Len为4X,确定加密结果的存储区域无法再继续写入加密结果了,就不再写入加密结果。
7、主线程计算到Y6对应的GHASH值,需要继续读取Y6对应的加密结果之后的加密结果,这时,主线程从目标元素中读取加密结果,发现有Y7+Y8+Y9+Y10对应的加密结果,因此从目标元素中读取Y7+Y8+Y9+Y10对应的加密结果(第三加密结果),将目标元素中Len清零。
8、以此类推,CTR加密线程执行不断地向目标元素中存储加密结果、修改Y值和len值的操作。主线程不断地从目标元素中取出加密结果,并将len清零的操作,直到主线程得到认证标签,或者说直到主线程根据明文得到认证标签。
9、主线程清除目标元素中内容,然后随机数重新生成一IV于相应位置,选择其对应的内部对称密钥,并计算出H。即主线程向目标元素中存储:所述第二初始化向量、所述第二初始化向量对应的散列密钥、所述第二初始化向量对应的对称密钥。
10、CTR加密线程根据所述目标元素中的加密结果为空,计数器值Y为空,根据所述第二初始化向量、所述第二初始化向量对应的散列密钥、所述第二初始化向量对应的对称密钥,存储Y1至Y4对应的加密数据,以进行下一次加密计算。
基于前述的实施例,本申请实施例提供一种电子装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过电子装置中的处理器来实现;当然也可通过具体的逻辑电路实现。
图9为本申请实施例提供的一种电子装置的组成结构示意图,如图9所示,电子装置900包括:
获取单元901,用于获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;
读取单元902,用于根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;
确定单元903,用于根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
在一些实施例中,电子装置900还包括:存储单元,用于根据多个初始化向量和所述多个初始化向量分别对应的多个对称密钥,向多个元素中分别存储多个散列密钥和多个第一加密结果;
其中,所述多个散列密钥分别通过所述多个对称密钥确定,所述多个元素分别与所述多个初始化向量对应,所述多个元素包括所述目标元素。
在一些实施例中,存储单元,还用于向所述多个元素中还分别存储:所述多个初始化向量和/或所述多个初始化向量对应的以下一项或多项:与所述多个第一加密结果分别对应的多个计数器值、多个对称密钥、多个第一有效长度;
其中,所述多个第一有效长度,分别为所述多个第一加密结果的有效长度。
在一些实施例中,所述目标元素包括在多个元素中,所述多个元素分别存储多个散列密钥、多个初始化向量和多个第一加密结果;
读取单元902,还用于:
在所述多个初始化向量中包括所述第一初始化向量的情况下,将所述第一初始化向量对应的元素,确定为所述目标元素,从所述目标元素中读取散列密钥和第一加密结果;或者,在所述多个初始化向量中不包括所述第一初始化向量的情况下,从所述多个元素中选择指定元素 ,将所述指定元素确定为所述目标元素,从所述目标元素中读取散列密钥和第一加密结果。
在一些实施例中,确定单元903,还用于:
在所述明文的第一长度小于第二长度的情况下,根据所述目标元素中的第一加密结果中的前所述第二长度的加密结果和所述明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签;或者,在所述明文的第一长度等于第二长度的情况下,根据所述目标元素中的第一加密结果和所述明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签;
其中,所述第二长度为所述目标元素中的第一加密结果的有效长度。
在一些实施例中,确定单元903,还用于:
在所述明文的第一长度大于第二长度的情况下,根据所述目标元素中的第一加密结果和所述明文中的前第二长度的子明文确定前第二长度的子密文,以及根据所述目标元素中的散列密钥、所述前第二长度的子密文和所述认证数据,确定所述第二长度对应的第一结果;所述第二长度为所述目标元素中的第一加密结果的有效长度;
根据第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文,以及根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签;所述第三长度为所述第一长度减去所述第二长度;所述第三长度的目标加密结果为所述第一加密结果之后确定的加密结果。
在一些实施例中,确定单元903,还用于:
从所述目标元素中第k次读取第k有效长度对应的第k加密结果;k为大于或等于二的整数;
根据所述第k加密结果和所述明文中第k有效长度的子明文,确定第k有效长度的子密文,以及根据所述目标元素中的散列密钥和所述第k有效长度的子密文,确定第k结果;所述第k结果与已读取的所有加密结果的有效长度之和对应;
在目标结果对应的子明文为所述明文中的末尾子明文的情况下,根据所述目标结果,确定所述认证标签;所述目标结果可以为最后一次得到的第k结果,所述第三长度的目标加密结果包括第二加密结果至所述末尾子明文对应的加密结果。
在一些实施例中,确定单元903,还用于:
确定第一剩余长度为所述明文的第一长度减去所述第二长度,和/或,确定第一偏移量为所述第二长度;
在第k次读取到第k加密结果的情况下,将第k剩余长度确定为第k-1剩余长度减去所述第k有效长度,和/或,将第k偏移量确定为第k-1偏移量加上所述第k有效长度;
在目标剩余长度小于或等于0,和/或,目标偏移量大于或等于所述明文的第一长度的情况下,确定所述目标结果对应的子明文为所述明文中的末尾子明文;目标剩余长度为最后一次得到的第k剩余长度,目标偏移量为最后一次得到的第k偏移量。
在一些实施例中,电子装置900还包括:清除单元,用于清除所述目标元素中的内容,生成第二初始化向量并确定所述第二初始化向量对应的对称密钥;
确定单元903,还用于:根据所述第二初始化向量和所述第二初始化向量对应的对称密钥,向所述目标元素中存储:所述第二初始化向量和/或所述第二初始化向量对应的以下一项或多项:散列密钥、与第一加密结果对应的计数器值、对称密钥、第一有效长度、第一加密结果;
其中,所述散列密钥通过所述对称密钥确定;所述第一有效长度为第一加密结果的有效长度。
在一些实施例中,电子装置900还包括:设置单元,用于将所述目标元素中的有效长度设置为0。
在一些实施例中,确定单元903,还用于在所述目标元素中的有效长度小于第二长度的情况下,根据所述目标元素中的当前计数器值,确定在所述当前计数器值之后的下一计数器值和所述下一计数器值对应的加密结果;所述第二长度为所述目标元素中的第一加密结果的有效长度;
设置单元,还用于将所述目标元素中的所述当前计数器值修改为所述下一计数器值,存储单元,还用于向所述目标元素中存储所述下一计数器值对应的加密结果。
在一些实施例中,设置单元,还用于将所述目标元素中的有效长度,从所述当前计数器值对应的第四长度,修改为第五长度;其中,所述第五长度为所述第四长度与所述下一计数器值对应的加密结果的有效长度之和。
在一些实施例中,存储单元,还用于:
在所述目标元素中的有效长度为0的情况下,从所述加密结果的存储区域的起始位置,开始存储所述下一计数器值对应的加密结果;或者,在所述目标元素中的有效长度大于0的情况下,从所述加密结果的存储区域的起始位置,间隔所述目标元素中的有效长度后的位置,开始存储所述下一计数器值对应的加密结果。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的加密方法,并作为独立的产品销售或使用时,也可以存储在一个计算机存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备执行本申请各个实施例所述方法的全部或部分。
图10为本申请实施例提供的一种电子设备的硬件实体示意图,如图10所示,该电子设备1000的硬件实体包括:处理器1001和存储器1002,其中,存储器1002用于存储计算机程序,处理器1001用于调用并运行所述存储器1002中存储的计算机程序,使得所述电子设备执行实现上述任一实施例的方法。
存储器1002存储有可在处理器上运行的计算机程序,存储器1002配置为存储由处理器1001可执行的指令和应用,还可以缓存待处理器1001以及电子设备1000中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random Access Memory,RAM)实现。
处理器1001执行程序时实现上述任一项的加密方法的步骤。处理器1001通常控制电子设备1000的总体操作。
本申请实施例提供一种计算机存储介质,计算机存储介质存储有一个或者多个程序,该一个或者多个程序可被一个或者多个处理器执行,以实现如上任一实施例的加密方法的步骤。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
上述电子装置中的各个单元或处理器可以包括以下任一个或以下多个的集成:通用处理器、特定用途集成电路(Application Specific Integrated Circuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(Digital SignalProcessing Device,DSPD)、可编程逻辑装置(Programmable Logic Device,PLD)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、中央处理器(Central ProcessingUnit,CPU)、图形处理器(Graphics Processing Unit,GPU)、嵌入式神经网络处理器(neural-network processing units,NPU)、控制器、微控制器、微处理器、可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以理解地,实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。电子装置中的各个单元或处理器可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本申请实施例中的存储器或计算机存储介质可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(EnhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”或“本申请实施例”或“前述实施例”或“一些实施方式”或“一些实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”或“本申请实施例”或“前述实施例”或“一些实施方式”或“一些实施例”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在未做特殊说明的情况下,电子设备执行本申请实施例中的任一步骤,可以是电子设备的处理器执行该步骤。除非特殊说明,本申请实施例并不限定电子设备执行下述步骤的先后顺序。另外,不同实施例中对数据进行处理所采用的方式可以是相同的方法或不同的方法。还需说明的是,本申请实施例中的任一步骤是电子设备可以独立执行的,即电子设备执行上述实施例中的任一步骤时,可以不依赖于其它步骤的执行。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
在本申请实施例中,不同实施例中相同步骤和相同内容的说明,可以互相参照。在本申请实施例中,术语“并”不对步骤的先后顺序造成影响,例如,电子设备执行A,并执行B,可以是电子设备先执行A,再执行B,或者是电子设备先执行B,再执行A,或者是电子设备执行A的同时执行B。
值得注意的是,本申请实施例中的附图只是为了说明各个器件在电子设备上的示意位置,并不代表在电子设备中的真实位置,各器件或各个区域的真实位置可根据实际情况(例如,电子设备的结构)作出相应改变或偏移,并且,图中的电子设备中不同部分的比例并不代表真实的比例。
在本申请实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
需要说明的是,本申请所涉及的各个实施例中,可以执行全部的步骤或者可以执行部分的步骤,只要能够形成一个完整的技术方案即可。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

Claims (16)

1.一种加密方法,其特征在于,包括:
获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;
根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;
根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
2.根据权利要求1所述的方法,其特征在于,所述获取加密请求之前,所述方法还包括:
根据多个初始化向量和所述多个初始化向量分别对应的多个对称密钥,向多个元素中分别存储多个散列密钥和多个第一加密结果;
其中,所述多个散列密钥分别通过所述多个对称密钥确定,所述多个元素分别与所述多个初始化向量对应,所述多个元素包括所述目标元素。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
向所述多个元素中还分别存储:所述多个初始化向量和/或所述多个初始化向量对应的以下一项或多项:与所述多个第一加密结果分别对应的多个计数器值、多个对称密钥、多个第一有效长度;
其中,所述多个第一有效长度,分别为所述多个第一加密结果的有效长度。
4.根据权利要求1所述的方法,其特征在于,所述目标元素包括在多个元素中,所述多个元素分别存储多个散列密钥、多个初始化向量和多个第一加密结果;
所述根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果,包括:
在所述多个初始化向量中包括所述第一初始化向量的情况下,将所述第一初始化向量对应的元素,确定为所述目标元素,从所述目标元素中读取散列密钥和第一加密结果;或者,
在所述多个初始化向量中不包括所述第一初始化向量的情况下,从所述多个元素中选择指定元素,将所述指定元素确定为所述目标元素,从所述目标元素中读取散列密钥和第一加密结果。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签,包括:
在所述明文的第一长度小于第二长度的情况下,根据所述目标元素中的第一加密结果中的前所述第二长度的加密结果和所述明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签;或者,
在所述明文的第一长度等于第二长度的情况下,根据所述目标元素中的第一加密结果和所述明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定所述认证标签;
其中,所述第二长度为所述目标元素中的第一加密结果的有效长度。
6.根据权利要求1至4任一项所述的方法,其特征在于,所述根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签,包括:
在所述明文的第一长度大于第二长度的情况下,根据所述目标元素中的第一加密结果和所述明文中的前第二长度的子明文确定前第二长度的子密文,以及根据所述目标元素中的散列密钥、所述前第二长度的子密文和所述认证数据,确定所述第二长度对应的第一结果;所述第二长度为所述目标元素中的第一加密结果的有效长度;
根据第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文,以及根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签;所述第三长度为所述第一长度减去所述第二长度;所述第三长度的目标加密结果为所述第一加密结果之后确定的加密结果。
7.根据权利要求6所述的方法,其特征在于,所述根据第三长度的目标加密结果和所述明文中的后第三长度的子明文,确定后第三长度的子密文,以及根据所述目标元素中的散列密钥和所述后第三长度的子密文,确定所述认证标签,包括:
从所述目标元素中第k次读取第k有效长度对应的第k加密结果;k为大于或等于二的整数;
根据所述第k加密结果和所述明文中第k有效长度的子明文,确定第k有效长度的子密文,以及根据所述目标元素中的散列密钥和所述第k有效长度的子密文,确定第k结果;所述第k结果与已读取的所有加密结果的有效长度之和对应;
在目标结果对应的子明文为所述明文中的末尾子明文的情况下,根据所述目标结果,确定所述认证标签;所述目标结果可以为最后一次得到的第k结果,所述第三长度的目标加密结果包括第二加密结果至所述末尾子明文对应的加密结果。
8.根据权利要求7所述的方法,其特征在于,所述获取加密请求之后,所述方法还包括:
确定第一剩余长度为所述明文的第一长度减去所述第二长度,和/或,确定第一偏移量为所述第二长度;
在第k次读取到第k加密结果的情况下,将第k剩余长度确定为第k-1剩余长度减去所述第k有效长度,和/或,将第k偏移量确定为第k-1偏移量加上所述第k有效长度;
在目标剩余长度小于或等于0,和/或,目标偏移量大于或等于所述明文的第一长度的情况下,确定所述目标结果对应的子明文为所述明文中的末尾子明文;目标剩余长度为最后一次得到的第k剩余长度,目标偏移量为最后一次得到的第k偏移量。
9.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:
清除所述目标元素中的内容,生成第二初始化向量并确定所述第二初始化向量对应的对称密钥;
根据所述第二初始化向量和所述第二初始化向量对应的对称密钥,向所述目标元素中存储:所述第二初始化向量和/或所述第二初始化向量对应的以下一项或多项:散列密钥、与第一加密结果对应的计数器值、对称密钥、第一有效长度、第一加密结果;
其中,所述散列密钥通过所述对称密钥确定;所述第一有效长度为第一加密结果的有效长度。
10.根据权利要求1至4任一项所述的方法,其特征在于,所述从目标元素中读取散列密钥和第一加密结果之后,和/或,从所述目标元素中第k次读取第k有效长度对应的第k加密结果之后,所述方法还包括:
将所述目标元素中的有效长度设置为0。
11.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:
在所述目标元素中的有效长度小于第二长度的情况下,根据所述目标元素中的当前计数器值,确定在所述当前计数器值之后的下一计数器值和所述下一计数器值对应的加密结果;所述第二长度为所述目标元素中的第一加密结果的有效长度;
将所述目标元素中的所述当前计数器值修改为所述下一计数器值,向所述目标元素中存储所述下一计数器值对应的加密结果。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
将所述目标元素中的有效长度,从所述当前计数器值对应的第四长度,修改为第五长度;其中,所述第五长度为所述第四长度与所述下一计数器值对应的加密结果的有效长度之和。
13.根据权利要求11所述的方法,其特征在于,所述向所述目标元素中存储所述下一计数器值对应的加密结果,包括:
在所述目标元素中的有效长度为0的情况下,从所述加密结果的存储区域的起始位置,开始存储所述下一计数器值对应的加密结果;或者,
在所述目标元素中的有效长度大于0的情况下,从所述加密结果的存储区域的起始位置,间隔所述目标元素中的有效长度后的位置,开始存储所述下一计数器值对应的加密结果。
14.一种电子装置,其特征在于,包括:
获取单元,用于获取加密请求;所述加密请求中包括第一初始化向量、明文以及认证数据;
读取单元,用于根据所述第一初始化向量,从目标元素中读取散列密钥和第一加密结果;
确定单元,用于根据所述目标元素中的第一加密结果和明文确定密文,以及根据所述目标元素中的散列密钥、所述密文和所述认证数据,确定认证标签。
15.一种电子设备,其特征在于,包括:存储器和处理器,
所述存储器用于存储计算机程序,
所述处理器用于调用并运行所述存储器中存储的计算机程序,使得所述电子设备执行权利要求1至13任一项所述的方法。
16.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现权利要求1至13任一项所述的方法。
CN202311221673.5A 2023-09-21 2023-09-21 加密方法、电子装置、电子设备及计算机存储介质 Active CN116961908B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311221673.5A CN116961908B (zh) 2023-09-21 2023-09-21 加密方法、电子装置、电子设备及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311221673.5A CN116961908B (zh) 2023-09-21 2023-09-21 加密方法、电子装置、电子设备及计算机存储介质

Publications (2)

Publication Number Publication Date
CN116961908A true CN116961908A (zh) 2023-10-27
CN116961908B CN116961908B (zh) 2024-01-05

Family

ID=88444680

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311221673.5A Active CN116961908B (zh) 2023-09-21 2023-09-21 加密方法、电子装置、电子设备及计算机存储介质

Country Status (1)

Country Link
CN (1) CN116961908B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103701829A (zh) * 2014-01-03 2014-04-02 厦门市美亚柏科信息股份有限公司 一种离线解析dpapi加密数据的方法
US9537657B1 (en) * 2014-05-29 2017-01-03 Amazon Technologies, Inc. Multipart authenticated encryption
CN110336661A (zh) * 2019-09-02 2019-10-15 灵长智能科技(杭州)有限公司 Aes-gcm数据处理方法、装置、电子设备及存储介质
CN111555859A (zh) * 2020-03-31 2020-08-18 杭州熠芯科技有限公司 Sm4-gcm算法及在网络安全协议中的应用
CN111832087A (zh) * 2020-06-28 2020-10-27 福建捷宇电脑科技有限公司 一种提高flash使用寿命的密钥管理方法和装置
CN116170180A (zh) * 2022-12-27 2023-05-26 中国电信股份有限公司 加密方法、装置、存储介质以及电子设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103701829A (zh) * 2014-01-03 2014-04-02 厦门市美亚柏科信息股份有限公司 一种离线解析dpapi加密数据的方法
US9537657B1 (en) * 2014-05-29 2017-01-03 Amazon Technologies, Inc. Multipart authenticated encryption
CN110336661A (zh) * 2019-09-02 2019-10-15 灵长智能科技(杭州)有限公司 Aes-gcm数据处理方法、装置、电子设备及存储介质
CN111555859A (zh) * 2020-03-31 2020-08-18 杭州熠芯科技有限公司 Sm4-gcm算法及在网络安全协议中的应用
CN111832087A (zh) * 2020-06-28 2020-10-27 福建捷宇电脑科技有限公司 一种提高flash使用寿命的密钥管理方法和装置
CN116170180A (zh) * 2022-12-27 2023-05-26 中国电信股份有限公司 加密方法、装置、存储介质以及电子设备

Also Published As

Publication number Publication date
CN116961908B (zh) 2024-01-05

Similar Documents

Publication Publication Date Title
CA3078558C (en) A system and method for quantum-safe authentication, encryption and decryption of information
US11323255B2 (en) Methods and systems for encryption and homomorphic encryption systems using Geometric Algebra and Hensel codes
JP2001324925A (ja) 共通鍵暗号方法及び装置
CN105721156B (zh) 对数据进行编码和数字签名的方法和相关设备
CN109274485B (zh) 一种数据加密方法、数据认证方法及相关设备和系统
JP6517436B2 (ja) 暗号化デバイス及び符号化デバイス
CN110784306B (zh) Sm4算法白盒实现方法、装置、电子设备及计算机介质
CN115269938B (zh) 基于同态加密的关键词匿踪查询方法、系统及相关装置
CN115549891B (zh) 同态加密方法、同态解密方法、同态计算方法及设备
WO2014030706A1 (ja) 暗号化データベースシステム、クライアント装置およびサーバ、暗号化データ加算方法およびプログラム
CN110213050A (zh) 密钥生成方法、装置及存储介质
JP6294882B2 (ja) 鍵保管装置、鍵保管方法、及びそのプログラム
EP3889764A1 (en) Parallel generation of a random matrix
CN115632782B (zh) 基于sm4计数器模式的随机数生成方法、系统及设备
CN107592963B (zh) 用于执行安全计算的方法和计算设备
CN116961908B (zh) 加密方法、电子装置、电子设备及计算机存储介质
JP6890589B2 (ja) 計算デバイス及び方法
CN115766244A (zh) 车联网信息加密方法、装置、计算机设备和存储介质
JP5489115B2 (ja) 原本性保証装置、原本性保証プログラム、及びこのプログラムを記録する記録媒体
US20220083651A1 (en) Protection of authentication tag computation against power and electromagnetic side-channel attacks
JPWO2018043466A1 (ja) データ抽出システム、データ抽出方法、登録装置及びプログラム
CN110071927B (zh) 一种信息加密方法、系统及相关组件
KR20190041900A (ko) 암호화 장치 및 복호화 장치, 이들의 동작방법
CN112966294B (zh) 一种单轮交互的链表oram访问方法
CN115865348B (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