CN109861820A - 基于随机散列和位运算的加密解密方法和装置 - Google Patents
基于随机散列和位运算的加密解密方法和装置 Download PDFInfo
- Publication number
- CN109861820A CN109861820A CN201910119851.0A CN201910119851A CN109861820A CN 109861820 A CN109861820 A CN 109861820A CN 201910119851 A CN201910119851 A CN 201910119851A CN 109861820 A CN109861820 A CN 109861820A
- Authority
- CN
- China
- Prior art keywords
- key
- file
- len
- plaintext
- hash function
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/065—Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Power Engineering (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种基于随机散列和位运算的加密解密方法和装置。其中方法包括步骤:S1、开辟内存空间,为明文文件、密文文件及密钥文件准备对应的存储空间,其中所述密钥文件来自于一串现有的编码序列,并且作为加密和解密的共用文件;S2、提供用于加密和解密的互逆散列函数集合,然后借助加密散列函数将明文均匀地打散在一个已知的二进制随机散列中;S3、引入位运算规则集合,通过位运算改变所述的二进制随机散列的全部或部分的二进制位的值,然后映射到密文空间。其中装置包括存储器和处理器,以被配置为实施上述方法。本发明的技术方案具有高安全性、强适用性和广应用范围。
Description
技术领域
本发明涉及一种基于随机散列和位运算的加密解密方法和装置,属于数字通信技术及信息加密领域。本发明一般可以用于网络通信信息加密,航天数字遥控指令与数据加密,无人机数字遥控通信数据加密,预警机数字通信指挥系统信息加密,GPS卫星数字通信数据加密,手机通信加密,电子邮件加密,电子金融数据传输加密等。在影像编码方面,可对各种格式影像加密,保护影像知识产权。对于军事、政治、外交文件加密后,可利用民用通信网络传输,节省文件传送成本。
背景技术
流密码(stream cipher),通常是一种对称密钥技术,因其实施简单、加密速度快,密文传输中的错误不会在明文中产生扩散等好处,而成为一类重要的密码体制。目前流密码技术在机密机构以及移动通讯领域中仍保持着优势,是当今最为通用的密码系统之一。为保障信息安全,很多流密码技术的研发和设计基本上都是在保密的状态下进行。各国常将流密码技术和产品,作为军工产品而限制出口。
流密码的核心思想是产生性能优良的伪随机序列,即密钥流来进行加解密。密钥流生成器的设计是流密码安全性的关键,目前流密码的设计方案中生成伪随机数列的常用方法如下:线性移位寄存器;S盒置换技术;钟控序列;组合网络序列;元胞自动机;混沌理论等。比较著名的流密码算法有:GSM移动通信系统中的A5算法、IEEE802.11的WEP标准中的RC4算法、3GPP采纳为国际标准的祖冲之(ZUC)算法、LTE系统中的SNOW 3G算法、蓝牙技术中的E0算法等。
这些方法已经是公开的秘密,现在已有很多学者在研究攻击和破译上述方法。2003年,Courtois和Meier将代数攻击应用于基于线性反馈移位寄存器的流密码算法,“代数攻击”从新的角度来分析密码体制的安全性,将其转化到求解超定的多变元方程组的问题上。2004年,Hoch等提出了针对RC4算法的错误引入攻击方法。除此之外,针对流密码技术常用的攻击手段还有猜测决定攻击、快速相关攻击、立方攻击等,近年来,流密码攻击技术的快速发展使得流密码体系的设计与发展受到了巨大的挑战和冲击。
另外,常规的流密码技术是基于位异或运算的,即:通过明文与密钥间的位异或运算产生密文,再通过密文与密钥间的异或运算解密出明文,这种方式的严重缺陷是流密码体制的安全强度完全取决于密钥流的安全强度。
发明内容
本发明的方法借助一串现有的已知编码序列(可称为真随机序列)作为初始密钥流,对初始密钥流的周期长度和随机性不做严格要求。初始密钥流可来自于各种类型的文件,如:文档、音频、视频、图片,也可以来自各种密钥流生成器产生的伪随机序列以及各种混沌信号等。本方法的密钥流生成器由位运算规则集合构成,初始密钥流经过密钥流生成器预处理后得到的输出序列作为加解密密钥。在一趟遍历明文的过程中,按照依赖(或不依赖)于密钥流的位运算规则改变明文的位值得到伪明文流,同时将伪明文流按照散列规则随机映射到密文空间进而得到密文。本发明还提出了几种用于构造散列规则集合的动态直接定址方法。
本方法与常规流密码技术的不同点是:本方法不是基于异或运算的,而是基于对明文序列在二进制上的动态散列与位运算,这使得流密码的安全性,不仅依赖于密钥流,还依赖于动态散列规则和位运算规则,其安全性更高。若采用穷举法破解本方法,在数学上很难实现,因为,穷举的次数应为明文的字节数(N)的8倍的二次幂,即:28×N。
本发明的技术方案第一方面为一种基于随机散列和位运算的加密解密方法,包括以下步骤:
S1、开辟内存空间,为明文文件、密文文件及密钥文件准备对应的存储空间,其中所述密钥文件来自于一串现有的编码序列,并且作为加密和解密的共用文件;
S2、提供用于加密和解密的互逆散列函数集合,然后借助加密散列函数将明文均匀地打散在一个已知的二进制随机散列中;
S3、引入位运算规则集合,通过位运算改变所述的二进制随机散列的全部或部分的二进制位的值,然后映射到密文空间。
进一步,所述步骤S1包括:初始化明文文件,加载需要加密的明文文件,设置密钥文件码元个数,其中密钥文件的字节长度能进行自定义设置,进一步,密钥文件码元个数不大于明文文件码元个数。其中生成密钥文件的编码序列来自于音频、视频、图片、图像、图形、伪随机码、混沌值中的任一者或者任意多者的组合。
进一步,所述步骤S2包括:采用动态直接定址法构造散列函数集,以避免碰撞的发生,使得对散列函数的字典攻击手段无效。
进一步,所述步骤S2还包括,提供加密和解密算法程序集合的算法程序对明文文件、密文文件、密钥文件进行位移读取。其中,加密算法集合的元素为用于加密运算的散列函数和位运算规则集合;解密算法集合的元素为用于解密运算的散列函数和位运算规则集合。加密算法集合中的任意散列函数和位运算规则应在解密算法集合中存在唯一的散列函数和位运算规则与之对应,并且是互逆的。
进一步,所述步骤S3包括:对明文或密钥的部分或全部二进制位按位取反,其中能够借助各种密钥流生成器产生的伪随机序列以及各种混沌信号,还能够借助各种布尔函数以及意的在二进制上码分布均匀的随机文件配置位运算规则。
进一步,在所述步骤S3中,所述位运算规则包括以下运算规则中的任意一种或者任意多种的组合:按照密钥流的真值位或假值位,对明文的部分二进制位取反;按照各种布尔函数,对明文的部分二进制位取反;按照另一个密钥流的真值位或假值位,对初始密钥流的部分二进制位取反;按照各种布尔函数,对初始密钥流的部分二进制位取反。
优选地,所述的布尔函数包括一种或多种数学公式的组合。如在遍历的过程中对满足公式|C+X×i|MOD Y=Z的特定位取反,其中:i为二进制位的编号,C、X为整数,Y为正整数,Z为大于等于且0小于Y的整数,所述特定位包括奇数位、偶数位、除以某质数Y余数为零的二进制位。
进一步,所述的方法还包括:对所述明文文件、密文文件和密钥文件分别创建对应的明文加密随机数、密文加密随机数和密钥加密随机数,根据加密随机数的值生成对应的工作指针;对明文文件、密文文件、密钥文件进行工作指针位移读取;对工作指针进行多次循环遍历,同时根据工作指针所指向的密钥流二进制位的值,对明文文件进行多次迭代,得到密文文件。
进一步,所述的方法还包括:对明文、密钥和密文均采用循环队列的结构实现;密钥文件的长度不一定等于明文文件的长度;截取一部分密钥文件的字节作为密钥,或者使用循环密钥。
本发明的技术方案第二方面为一种计算机装置,包括存储器、处理器及储存在存储器上并能够在处理器上运行的计算机程序,所述处理器执行所述程序时实施上述的步骤。
本发明的技术方案第三方面也可以为一种计算机可读存储介质,其上储存有计算机程序,所述计算机程序被处理器执行时实施上述的步骤。
本发明的技术方案的特点在于:
1.方法简单,破译极难。
2.不需要任何的辅助硬件设备,使用计算机算法与编程,实现容易。
3.本方法具有良好的时间性能,其时间复杂度为O(len(M)),与传统流密码方法一致。其中:len(M)为明文的长度。
4.本方法中明文与密文间不是传统的一对一、一对多的关系。而是无序加密,即明文与密文间的关系是最复杂的多对多的关系。
5.本方法生成的密文的码分布均匀度远高于传统的流密码方法生成的密文的码均匀度。
6.本方法对初始密钥流的随机性以及码分布均匀性不做严格要求,即使使用没有通过各种随机性测试(如美国国家标准与技术研究院NIST的16项测试)的初始密钥流,其加密效果仍然远高于传统方法。但是,随着密钥流序列周期长度和均匀性的增加,本方法的加密效果和复杂度也随之提高。
7.可在现有的、公开的通信信道进行传输。
8.明文加密、发送、接收,解密实行三分离原则,使得保密系统更加安全。
9.本技术遵循了Shannon提出的一次一密的密码体制。
附图说明
图1所示为根据本发明的方法的总体流程图。
图2所示为根据本发明实施例中的加密过程示意图。
图3所示为根据本发明实施例中的解密过程示意图。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体实例、详细实施例及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。
根据本发明的加解密方案中,加密器和解密器基于散列函数设计,加密过程中,借助密钥将明文均匀的打散在一个已知的二进制随机散列里,并按照散列函数的映射关系对全部或部分明文做位运算,然后映射到密文空间。参照图1,根据本发明的方法总体包括步骤:S1、开辟内存空间,为明文文件、密文文件及密钥文件准备对应的存储空间,其中所述密钥文件来自于一串现有的编码序列,并且作为加密和解密的共用文件;S2、提供用于加密和解密的互逆散列函数集合,然后借助加密散列函数将明文均匀地打散在一个已知的二进制随机散列中;S3、引入位运算规则集合,通过位运算改变所述的二进制随机散列的全部或部分的二进制位的值,然后映射到密文空间。
在本实施例的方案中,若仅依靠散列函数加密,在传输特殊信号,如:全0值或全1值时容易被破译,位运算规则的引入可以避免这种情况的发生。使用该方法,不但能得到离散分布的密文,而且散列函数和位运算的使用使得密文的码均匀度远远高于明文的码均匀度。通过设计不同的散列函数和位运算规则,就构成了加解密算法集,散列函数、位运算规则以及密钥的不确定性是本算法的优势。
本算法基于数据流加密技术,是一种依赖密钥而建立的一种二进制流离散的位映射的加密体系。该加密体系采用五元组(M,C,K,E,D)作为加解密的理论基础。在本文提出的五元组中,M为明文码元集合,C为密码码元集合,P为参照字节码元集合(也可称为密钥集合),E为加密算法集合,D为解密算法集合,这些集合具有如下特性:
1.M={M0,M1,…,Mlen(M)-1}={m0,m1,…,m8len(M)-2,m8×len(M)-1}。其中:len(M)为明文的字节数,8×len(M)为明文的二进制位数;Mi(i∈[0,len(M)-1])为明文的一个字节(byte);mj∈{0,1},j∈[0,8×len(M)-1]为明文的一个二进制位(bit)。
2.K={K0,K1,…,Klen(K)-1}={key0,key1,…,key8len(K)-2,key8×len(K)-1}。其中:len(K)为密钥的字节数,8×len(K)为密钥的二进制位数;Ki(i∈[0,len(K)-1])为密钥的一个字节(byte);keyj∈{0,1},j∈[0,8×len(K)-1]为密钥的一个二进制位(bit)。
3.C={C0,C1,…,Clen(C)-1}={c0,c1,…,c8len(C)-2,c8×len(C)-1}。其中:len(C)为密文的字节数,len(C)=len(M)即明文的长度与密文的长度相等,8×len(C)为密文的二进制位数;Ci(i∈[0,len(C)-1])为密文的一个字节(byte);cj∈{0,1},j∈[0,8×len(C)-1]为密文的一个二进制位(bit)。
4.M,K,C集合内的信息是由二进制码元{0,1}组成的字节符集。其中,码元{1}在各集合中的数量分别记作sum(M),sum(K),sum(C),其中sum(M)未必等于sum(C)。
5.加密算法集合E的元素为用于加密运算的散列函数和位运算规则集合。
6.解密算法集合D的元素为用于解密运算的散列函数和位运算规则集合,其中集合E中的任意散列函数和位运算规则应在集合D中存在唯一的散列函数和位运算规则与之对应,并且它们是互逆的。
下面通过更多的实施例来描述本发明的加密和解密方案。
一、加密实例(下面例子均基于加解密方法1)
例1:
假设文件均采用扩展的ASCII码(IBM扩展字符集)[24]作为编码方式,根据方法1所示的加密算法,例1中的明文M先通过密钥K进行散列求址,再按位运算最终求得密文C。
M={“aaaa”}={0X61,0X61,0X61,0X61}16={01100001,01100001,01100001,01100001}2。
M’={0XAF,0XAC,0XAD,0XAA}16={10101111,10101100,10101101,10101010}2。
K={“1234”}={0X31,0X32,0X33,0X34}16={00110001,00110010,00110011,00110100}2。
C={“▓cu╜”}={0XB2,0X63,0X75,0XBD}16={10110010,01100011,01110101,10111101}2。
请留意“▓cu╜”不是乱码,而是加密转码时产生的特定字符。
加密实例具体可以参照图2,其中:
1.M={“aaaa”}表示明文,为加密输入序列。{0X61,0X61,0X61,0X61}是明文“aaaa”的ASCII码(十六进制),将其转换为二进制得到{01100001,01100001,01100001,01100001}。
2.M’表示明文的部分二进制位根据密钥的特定位(“假”值二进制位)按位取反后产生的伪明文序列。{0XAF,0XAC,0XAD,0XAA}是M’的扩展ASCII码(十六进制),将其转换为二进制得到{10101111,10101100,10101101,10101010}。
3.K={“1234”}表示密钥。{0X31,0X32,0X33,0X34}是密钥“1234”的ASCII码(十六进制),将其转换为二进制得到{00110001,00110010,00110011,00110100}。
4.C={“▓cu╜”}表示密文,为加密输出序列。{0XB2,0X63,0X75,0XBD}是将密文“▓cu╜”的扩展ASCII码(十六进制),将其转换为二进制得到{10110010,01100011,01110101,10111101}。
5.明文、密钥和密文均采用形如循环队列的逻辑结构,可在队列任意位置开始计算,现取初值i=0、j=0、k1=0、k2=31,工作指针p指向明文M[0],q指向密钥K[0],r1、r2指向密文C[0]、C[31],其加密过程如图1所示。
6.按照密钥K的二进制位的值,应用加密算法的散列函数enHash,求得密钥“真”值二进制位q对应的明文二进制位p,将该明文二进制位取反之后映射到密文空间r1,从左向右填充;求得密钥“假”值二进制位q对应的明文二进制位p,将该明文二进制位取反之后映射到密文空间r2,从右向左填充。
7.密钥K中灰色底纹表示“假”值部分,明文M中灰色底纹表示密钥K的“假”值部分所对应的明文,伪明文序列M’中灰色底纹部分为明文M中灰色底纹部分按位取反后的结果,M’按照加密散列函数映射到密文空间得到密文C。
例2:
假设文件均采用扩展的ASCII码(IBM扩展字符集)作为编码方式,根据方法1所示的加密算法,例2中的明文M先通过密钥K进行散列求址,再按位运算最终求得密文C。
M={“^┘c”}={0X5E,0X09,0XD9,0XE3}16={01011111,00001001,11011001,01100011}2
K={“1234”}={0X31,0X32,0X33,0X34}16={00110001,00110010,00110011,00110100}2
C={“aaaa”}={0X61,0X61,0X61,0X61}16={01100001,01100001,01100001,01100001}2
其中:(1)明文M中0X09是定位功能键,没有显示为字符。(2)此处略去M’的列举。
例3:
例3中各文件采用文本文档保存(默认ANSI编码),因此密钥集K和密文集C显示为中文字符。根据方法1所示的加密算法,例3中的明文M的256个“a”经密钥K加密后得到的密文有多达138个不同编码(这一数值随着算法和密钥而变化),即编码为01100001(a的ASCII码)的明文经本算法加密后对应138个不同的八位二进制编码,当密文保存为文本文件时,显示为下面的集合C。
M={“aaaaaaaaaaaaaaaa……aaaaaaaaaaaaaaa”}(共256个a)
K={“我0~Gq*爱l9F&|你w1o4M*中J4a8+国r2》5E很f2%S好U2=”}
C={“BXN膶?泹芁B撋K3P寲P?劙潐2a7寴?挅24f?,E a;2d耼71
O%,dh虰2YB虋聉$d蓜躰2b濲X妊殑d矃?%勳H蓳 杠d?<敱懀5蒭
2(K貞?{沎疁哒諹凰z粂o谧&雫No觌*蒎絢ポ甲v讽k搖縹嬷毵7鮱昻蜣狄钷k籟龅珊呖sku記史yoZ閣o5莪鸝漭o吖岛橥齗e[挤璽环氼铸璻
严
X'G PU,K繁+U YJ貨S乐T$劢SD2邰严
X'G PU,K繁+U YJ貨S乐T$劢SD2邰严
X'G PU,K繁+U YJ貨S乐T$劢SD2邰严
X'G PU,K繁+U YJ貨S乐T$劢SD2邰严
X'G PU,K繁+U YJ貨S乐T$劢SD2邰严
X'G”}
其中:
(1)M表示明文,包含256个字符“a”,存储为文本文件,为加密输入序列。
(2)此处略去M’的列举。
(3)K表示密钥,包含字符“我0~Gq*爱l9F&|你w1o4M*中J4a8+国r2》5E很f2%S好U2=”,存储为文本文件,若以字节为单位计算,共包含48个不同的二进制编码。
(4)C表示用我们的方法加密得到的密文,存储为文本文件,为加密输出序列,若以字节为单位计算,共包含138个不同的二进制编码。
(5)C_old表示用原始的基于异或运算的流密码方法得到的密文,存储为文本文件,为加密输出序列,若以字节为单位计算,共包含48个不同的二进制编码。
(6)使用我们的方法得到的不同密文的二进制编码数量总体水平高于原始的基于异或运算的流密码方法,即使用本方法得到的密文的码分布更加均匀。
计算文件中符号分布的均匀度λ的公式如下[25]:
其中,αi表示第i个符号在文件中出现的次数;n表示文件中符号总数;若以字节为单位计算,则不同的符号(编码)总量r为256;n/r表示各种符号在全部256个编码中均匀出现的期望值。通过公式1计算出的λ值越小,表明符号分布得越均匀。
对于本例,λ的取值范围是[0,65280],密文C的均匀度λ经计算为402,密文C_old的均匀度λ经计算为1430,上述计算结果表明使用本方法加密后密文的码分布均匀性更佳。
二.解密实例
解密散列函数为加密散列函数的逆运算,通过扫描密钥空间和密文空间,计算密文的每个二进制位在明文空间的存储地址,然后映射到明文空间求得名明文M。上面的加密实例中的例1求得的密文的解密的过程如图3所示。
说明:
1.C={“▓cu╜”}表示密文,为解密输入序列。{0XB2,0X63,0X75,0XBD}是将密文“▓cu╜”的扩展ASCII码(十六进制),将其转换为二进制得到{10110010,01100011,01110101,10111101}。
2.K={“1234”}表示密钥。{0X31,0X32,0X33,0X34}是密钥“1234”的ASCII码,将其转换为二进制得到{00110001,00110010,00110011,00110100}。
3.M’是密文C按照解密散列函数映射后得到的伪明文序列。{0XAF,0XAC,0XAD,0XAA}是M’的扩展ASCII码(十六进制),将其转换为二进制得到{10101111,10101100,10101101,10101010}。
4.M={“aaaa”}表示明文,为解密输出序列。{0X61,0X61,0X61,0X61}是明文“aaaa”的ASCII码(十六进制),将其转换为二进制得到{01100001,01100001,01100001,01100001}。
5.密文、密钥和明文均采用形如循环队列的逻辑结构,可在队列任意位置开始计算,现取初值i=0、j=0、k1=0、k2=31,工作指针p指向明文M[0],q指向密钥K[0],r1、r2指向密文C[0]、C[31],其解密过程如图3所示。
6.按照密钥K的二进制位的值,应用解密算法的散列函数deHash,求得密钥“真”值二进制位q对应的密文二进制位r1,将该密文二进制位取反之后映射到明文空间p,从左向右填充;求得密钥“假”值二进制位q对应的密文二进制位r2,将该密文二进制位取反之后映射到明文空间p,从左向右填充。
7.密钥K中灰色底纹表示“假”值部分,密文C中灰色底纹表示密钥K的“假”值部分所对应的密文,将密文C按照解密散列函数映射后得到伪明文序列M’,伪明文序列M’的部分二进制位根据密钥的特定位(“假”值二进制位)按位取反后就得到了明文M。
三、设计和实施方案
下面具体详细地描述本发明技术方案实施方式,共包括四个部分,分别是:1.散列函数集合的设计、2.位运算规则集合的设计、3.加解密方法集合的设计、4.加解密方法1的具体实施方式。
1.散列函数集合的设计
加密散列函数集合E和解密散列函数集合D具有如下特性:
若E={enHashi()},D={deHashj()},其中:enHashi()为加密散列函数,deHashj()为解密散列函数,则有:C=enHashi(M,K),M=deHashj(C,K)。即:若存在加密散列函数enHashi()∈E,使得则必定存在其对应的解密散列函数deHashj()∈D,使得即加密散列函数与解密散列函数是互逆的,加密函数和解密函数应具有一一对应关系。
1.1加解密散列函数1(基于一趟扫描明文)
在计算散列地址时,不同的关键字通过相同的散列函数计算得到同一地址的现象称为冲突或碰撞(Collision),即keyx≠keyy,但是H(keyx)=H(keyy)。构造散列函数的方式很多,其中,我们提出的动态直接定址法不属于压缩映射方式,地址集合和关键字集合的大小相同。因此,对于不同的关键字不会发生冲突,该方法具有强抗碰撞性,且散列函数本身简单高效易于实现,非常适合本算法。
对于每一组由明文、密钥和密文构成的二进制三元组(mi,keyj,ck),其中:mi、keyj、ck∈{0,1},i、k∈[0,8*len(M)-1],j∈[0,8*len(K)-1]。
(1)加密散列函数1:用于计算明文的编号为i的二进制位mi在密文空间C的存储地址k的Hash函数设计如下:
其中k1、k2的初值满足:k2=(k1+8*len(C)-1)MOD(8*len(C))
按照二进制位同时扫描明文和密钥一趟,需扫描len(M)个字符:
当keyj MOD(8*len(K))=1时:
enHash(mi)=k1,k1=(k1+1)MOD(8*len(C)),i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K))
当keyj MOD(8*len(K))=0时:
enHash(mi)=k2,k2=(k2-1+8*len(C))MOD(8*len(C)),i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K))
(2)解密散列函数1:用于计算密文的编号为k二进制位ck在明文空间M的存储地址i的Hash函数设计如下:
其中k1、k2的初值于加密时相同,且需要满足:k2=(k1+8*len(C)-1)MOD(8*len(C))
按照二进制位同时扫描密钥和密文一趟,需扫描len(M)个字符:
当keyj MOD(8*len(K))=1时:
deHash(ck1)=i,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k1=(k1+1)MOD(8*len(C))
当keyj MOD(8*len(K))=0时:
deHash(ck2)=i,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k2=(k2-1+8*len(C))MOD len(C)
1.2加解密散列函数2(基于二趟扫描明文)
加密散列函数2:用于计算明文的编号为i的二进制位mi在密文空间C的存储地址k的Hash函数设计如下:
enHash1(mi)=k 第一趟扫描,当keyj MOD(8*len(K))=1时 (公式4)
enHash2(mi)=k 第二趟扫描,当keyj MOD(8*len(K))=0时 (公式5)
(1)实现方法一:基于二趟扫描明文,明文和密钥的工作指针同时向后移动。
第一趟按照二进制位同时扫描明文和密钥,需扫描len(M)个字符:
当keyj MOD(8*len(K))=1时:
enHash(mi)=k,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=0时:
i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K))
第二趟按照二进制位同时扫描明文和密钥,需扫描len(M)个字符:
当keyj MOD(8*len(K))=0时:
enHash(mi)=k,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=1时:
i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K))
(2)实现方法二:基于二趟扫描明文,密钥和密文的工作指针同时向后移动。
第一趟按照二进制位同时扫描明文和密钥,需扫描len(M)个字符:
当keyj MOD(8*len(K))=1时:
enHash(mi)=k,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=0时:
j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
第二趟按照二进制位同时扫描明文和密钥,需扫描len(M)个字符:
当keyj MOD(8*len(K))=0时:
enHash(mi)=k,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=1时:
j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
解密散列函数2:用于计算密文的编号为k二进制位ck在明文空间M的存储地址i的Hash函数设计如下:
deHash1(ck)=i 第一趟扫描,当keyj MOD(8*len(K))=1时 (公式6)
deHash2(ck)=i 第二趟扫描,当keyj MOD(8*len(K))=0时 (公式7)
(1)实现方法一:基于二趟扫描明文,明文和密钥的工作指针同时向后移动。
第一趟按照二进制位同时扫描密钥和密文,需扫描len(M)个字符:
当keyj MOD(8*len(K))=1时:
deHash(ck)=i,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=0时:
i=(i+1)MOD(8*len(M)),k=(k+1)MOD(8*len(C))
第二趟按照二进制位同时扫描密钥和密文,需扫描len(M)个字符:
当keyj MOD(8*len(K))=0时:
deHash(ck)=i,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=1时:
i=(i+1)MOD(8*len(M)),k=(k+1)MOD(8*len(C))
(2)实现方法二:基于二趟扫描明文,密钥和密文的工作指针同时向后移动。
第一趟按照二进制位同时扫描密钥和密文,需扫描len(M)个字符:
当keyj MOD(8*len(K))=1时:
deHash(ck)=i,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=0时:
j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
第二趟按照二进制位同时扫描密钥和密文,需扫描len(M)个字符:
当keyj MOD(8*len(K))=0时:
deHash(ck)=i,i=(i+1)MOD(8*len(M)),j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
当keyj MOD(8*len(K))=1时:
j=(j+1)MOD(8*len(K)),k=(k+1)MOD(8*len(C))
2.位运算规则集合的设计
对明文或密钥的部分或全部二进制位按位取反,可以解决明文或密钥的二进制编码中0或者1过多(即类似0X00或0XFF的字节过多),从而导致加密失败或者容易被破译的问题。位运算规则的设计可以借助数学公式,也可以借助各种密钥流生成器产生的伪随机序列以及各种混沌信号,还可以借助任意的在二进制上码分布均匀的随机文件。对位运算规则的抽象描述如下:
规则1:按照密钥流的真值位或假值位,对明文的部分二进制位取反。
规则2:按照各种布尔函数,对明文的部分二进制位取反。
规则3:按照另一个密钥流的真值位或假值位,对初始密钥流的部分二进制位取反。
规则4:按照各种布尔函数,对初始密钥流的部分二进制位取反。
根据上面介绍的抽象规则,下面列举几种具体位运算规则:
(1)参考前面设计的散列函数,按密钥的“假”值位对应的明文的部分二进制位取反;
(2)参考前面设计的散列函数,对密钥的“真”值位对应的明文的部分二进制位取反;
(3)对明文的奇数位取反;
(4)对明文的偶数位取反;
(5)对密钥的奇数位取反;
(6)对密钥的偶数位取反;
说明:
(1)具体规则1和2,按照密钥流的真值位或假值位,对明文的部分二进制位取反。
(2)具体规则3、4、5、6,如在遍历的过程中对满足公式|C+X×i|MOD Y=Z的特定位取反。其中:i为二进制位的编号,C、X为整数,Y为正整数,Z为大于等于且0小于Y的整数,特定位可以是奇数位、偶数位、除以某质数Y余数为零的二进制位等。
(3)上述对明文和密钥二进制位运算规则有时也可同时使用。
3.加密解密方法集合的设计
加解密方法集合的设计基于散列函数集合与位运算规则集合的组合,组合方式灵活多样,现只列举五种加解密方法。
表1(部分)加解密方法表
3.1加解密方法1
基于加解密散列函数1和位运算规则1设计,一趟遍历明文,双向写密文,密钥“假”位对应的明文取反。
1.加密方法1
一种简单易行的加密方案是:
首先,根据密钥的二进制位keyj的值,通过前面介绍的加密hash函数计算出明文的编号为i的二进制位mi在密文空间C的存储地址k;
然后,根据密钥keyj的值决定明文mi是否进行位运算改变其真实值,本方案中对于所有值为0的keyj所对应的mi取反变为mi’,而所有值为1的keyj所对应的mi的值保持不变。
最后,将求得的mi’或mi映射到密文空间C的存储地址k上,求得密文ck。
加密算法1描述如下:
步骤1:取初值i、j、k1、k2,满足0≤i≤8*len(M)-1,0≤j≤8*len(M)-1,0≤k1、k2≤8*len(K)-1,且k2=(k1+8*len(C)-1)%(8*len(C)),并加以保存。
步骤2:取位工作指针p、q分别用于遍历明文、密钥存储空间,位工作指针r、s用于遍历密文空间,r指针从左向右移动,s指针从右向左移动。依据初值,使得p→mi,q→keyj,r→ck1,s→ck2。
步骤3:遍历明文和密钥一趟,遍历过程中产生密文。使用前面介绍过的加密散列函数enHash,根据密钥的二进制位的值将加密过程分为两种情况:
(1)当密钥的当前二进制位(*q)的值为1时,*r=*p,p++,q++,r++。
(2)当密钥的当前二进制位(*q)的值为0时,*s=(*p+1)MOD 2,q++,p++,s--。
加密完成。
2.解密方法1
首先,根据密钥的二进制位keyj的值,通过前面介绍的解密hash函数计算出密文的编号为k的二进制位ck在明文空间C的存储地址i;
然后,根据密钥keyj的值决定密文ck是否进行位运算还原其真实值,本方案中对于所有值为0的keyj所对应的ck取反变为ck’,而所有值为1的keyj所对应的ck的值保持不变。
最后,将求得的ck’或ck映射到明文空间M的存储地址i上,求得明文mi。
解密算法1描述如下:
步骤1:取回初值i、j、k1、k2。
步骤2:取位工作指针p、q、r、s。依据初值,使得p→mi,q→keyj,r→ck1,s→ck2。
步骤3:遍历密文和密钥一趟,遍历过程中译出明文,使用前面介绍过的解密散列函数deHash,根据密钥的二进制位的值将解密过程分为两种情况:
(1)当密钥的当前二进制位(*q)的值为1时,*p=*r,p++,q++,r++。
(2)当密钥的当前二进制位(*q)的值为0时,*p=(*s+1)MOD 2,q++,p++,s--。
解密完成。
说明:
(1)明文、密钥和密文的逻辑结构为循环队列,工作指针在循环队列上移动。即,m8*len(M)-1的后继为m0,k8*len(K)-1的后继为k0,c8*len(C)-1的后继为c0。
(2)i、j、k1、k2与工作指针p、q、r、s相对应,它们随工作指针一起移动。
3.2加密解密方法2的设计
基于加解密散列函数1和位运算规则2设计,一趟遍历明文,双向写密文,密钥“真”位对应的明文取反。方法2的加密过程和方法1的加密过程区别在于步骤3的位运算部分。加密过程中算法2对于所有值为0的keyj所对应的mi的值保持不变,而所有值为1的keyj所对应的mi取反变为mi’;解密过程中方法2对于所有值为0的keyj所对应的ck的值保持不变,而所有值为1的keyj所对应的ck取反变为ck’。
1.加密算法2
步骤1:取初值i、j、k1、k2,满足0≤i≤8*len(M)-1,0≤j≤8*len(M)-1,0≤k1、k2≤8*len(K)-1,且k2=(k1+8*len(C)-1)%(8*len(C)),并加以保存。
步骤2:取位工作指针p、q分别用于遍历明文、密钥存储空间,位工作指针r、s用于遍历密文空间,r指针从左向右移动,s指针从右向左移动。依据初值,使得p→mi,q→keyj,r→ck1,s→ck2。
步骤3:遍历明文和密钥一趟,遍历过程中产生密文。使用前面介绍过的加密散列函数enHash,根据密钥的二进制位的值将加密过程分为两种情况:
(1)当密钥的当前二进制位(*q)的值为1时,*r=(*p+1)MOD 2,p++,q++,r++。
(2)当密钥的当前二进制位(*q)的值为0时,*s=*p,q++,p++,s--。
2.解密算法2
步骤1:取回初值i、j、k1、k2。
步骤2:取位工作指针p、q、r、s。依据初值,使得p→mi,q→keyj,r→ck1,s→ck2。
步骤3:遍历密文和密钥一趟,遍历过程中译出明文,使用前面介绍过的解密散列函数deHash,根据密钥的二进制位的值将解密过程分为两种情况:
(1)当密钥的当前二进制位(*q)的值为1时,*p=(*r+1)MOD 2,p++,q++,r++。
(2)当密钥的当前二进制位(*q)的值为0时,*p=*s,q++,p++,s--。
说明:
(1)明文、密钥和密文的逻辑结构为循环队列,工作指针在循环队列上移动。即,m8*len(M)-1的后继为m0,k8*len(K)-1的后继为k0,c8*len(C)-1的后继为c0。
(2)i、j、k1、k2与工作指针p、q、r、s相对应,它们随工作指针一起移动。
3.3.加密解密方法3的设计
基于加解密散列函数1、位运算规则1和位运算规则5设计,一趟遍历明文和密钥,单向写密文,明文与密钥工作指针同时向后移动,密钥的奇数位取反,密钥“假”位对应的明文取反。
加密算法3描述如下:
步骤1:取初值i、j、k1、k2,满足0≤i≤8*len(M)-1,0≤j≤8*len(M)-1,0≤k1、k2≤8*len(K)-1,且k2=(k1+8*len(C)-1)%(8*len(C)),并加以保存。
步骤2:取位工作指针p、q分别用于遍历明文、密钥存储空间,位工作指针r、s用于遍历密文空间,r指针从左向右移动,s指针从右向左移动。依据初值,使得p→mi,q→keyj,r→ck1,s→ck2。
步骤3遍历明文和密钥一趟,若密钥为奇数位,即j MOD 2为1,则*q=(*q+1)MOD2:
(1)当密钥的当前二进制位(*q)的值为“真”时,*r=*p,p++,q++,r++。
(2)当密钥的当前二进制位(*q)的值为“假”时,*s=(*p+1)MOD 2,q++,p++,s--。
加密完成。
解密算法3描述如下:
步骤1取回初值i,j,k。
步骤1:取回初值i、j、k1、k2。
步骤2:取位工作指针p、q、r、s。依据初值,使得p→mi,q→keyj,r→ck1,s→ck2。
步骤3遍历密文和密钥一趟:
(1)当密钥的当前二进制位(*q)的值为“真”时,*p=*r,p++,q++,r++。
(2)当密钥的当前二进制位(*q)的值为“假”时,*p=(*s+1)MOD 2,q++,p++,s--。
解密完成。
说明:
(1)明文、密钥和密文的逻辑结构为循环队列,工作指针在循环队列上移动。即,m8*len(M)-1的后继为m0,k8*len(K)-1的后继为k0,c8*len(C)-1的后继为c0。
(2)i、j、k1、k2与工作指针p、q、r、s相对应,它们随工作指针一起移动。
3.4.加密解密方法4的设计
基于加解密散列函数2(实现方法一)和位运算规则3设计,两趟遍历明文,单向写密文,明文与密钥工作指针同时向后移动,明文奇数位取反。
加密算法4描述如下:
步骤1:取初值i,j,k,满足0≤i≤8len(M)-1,0≤j≤8len(M)-1,0≤k≤8len(K)-1,并加以保存。
步骤2:取位指针变量p、q、r分别用于遍历明文、密钥及密文空间。依据初值,使得p→mi,q→keyj,r→ck。
步骤3第一次遍历,当*q为真时:
(1)若明文为奇数位,即i MOD 2为1,则:*r=(*p+1)MOD 2,p++,q++,r++;
(2)否则明文为偶数位,则:*r=*p,p++,q++,r++;
否则*q为假,则:p++,q++。
步骤4:恢复指针初始位。
步骤5:第二次遍历,当*q为假时:
(1)若明文为奇数位,即i MOD 2为1,则:*r=(*p+1)MOD 2,p++,q++,r++;
(2)否则明文为偶数位,则:*r=*p,p++,q++,r++;
否则*q为真,则:p++,q++。
加密完成。
解密算法4描述如下:
步骤1取回初值i,j,k。
步骤2取位指针变量p,q,r。依据初值,使得p→mi,q→keyj,r→ck。
步骤3第一次遍历,当*q为真时:
(1)若明文为奇数位,即i MOD 2为1,则:*p=(*r+1)MOD 2,p++,q++,r++;
(2)否则明文为偶数位,则:*p=*r,p++,q++,r++;
否则*q为假,则:p++,q++。
步骤4恢复指针初始位。
步骤5第二次遍历,当*q为假时:
(1)若明文为奇数位,即i MOD 2为1,则:*p=(*r+1)MOD 2,p++,q++,r++;
(2)否则明文为偶数位,则:*p=*r,p++,q++,r++;
否则*q为真,则:p++,q++。
解密完成。
说明:
(1)明文、密钥和密文的逻辑结构为循环队列,工作指针在循环队列上移动。即,m8*len(M)-1的后继为m0,k8*len(K)-1的后继为k0,c8*len(C)-1的后继为c0。
(2)i、j、k1、k2与工作指针p、q、r、s相对应,它们随工作指针一起移动。
3.5.加密解密方法5的设计
基于加解密散列函数2(实现方法二)和位运算规则4设计,两趟遍历明文,单向写密文,密钥与密文工作指针同时向后移动,明文偶数位取反。
加密算法5描述如下:
步骤1取初值i,j,k,满足0≤i≤8len(M)-1,0≤j≤8len(M)-1,0≤k≤8len(K)-1,并加以保存。
步骤2取位指针变量p、q、r分别用于遍历明文、密钥及密文空间。依据初值,使得p→mi,q→keyj,r→ck。
步骤3第一次遍历,当*q为真:
(1)若明文为偶数位,即i MOD 2为0,则:*r=(*p+1)MOD 2,p++,q++,r++;
(2)否则明文为奇数位,则:*r=*p,p++,q++,r++;
否则*q为假,则:q++,r++。
步骤4恢复指针初始位。
步骤5第二次遍历,当*q为假:
(1)若明文为偶数位,即i MOD 2为0,则:*r=(*p+1)MOD 2,p++,q++,r++;
(2)否则明文为奇数位,则:*r=*p,p++,q++,r++;
否则*q为真,则:q++,r++。
加密完成。
解密算法5描述如下:
步骤1取回初值i,j,k。
步骤2取位指针变量p,q,r。依据初值,使得p→mi,q→keyj,r→ck。
步骤3第一次遍历,当*q为真:
(1)若明文为偶数位,即i MOD 2为0,则:*p=(*r+1)MOD 2,p++,q++,r++;
(2)否则明文为奇数位,则:*p=*r,p++,q++,r++;
否则*q为假,则:q++,r++。
步骤4恢复指针初始位。
步骤5第二次遍历,当*q为假:
(1)若明文为偶数位,即i MOD 2为0,则:*p=(*r+1)MOD 2,p++,q++,r++;
(2)否则明文为奇数位,则:*p=*r,p++,q++,r++;
否则*q为假,则:q++,r++。
解密完成。
说明:
(1)明文、密钥和密文的逻辑结构为循环队列,工作指针在循环队列上移动。即,m8*len(M)-1的后继为m0,k8*len(K)-1的后继为k0,c8*len(C)-1的后继为c0。
(2)i、j、k1、k2与工作指针p、q、r、s相对应,它们随工作指针一起移动。
4.加密和解密方法的具体算法实现
加解密方法集合的设计基于散列函数集合与位运算规则集合的组合,前面介绍了5种加解密方法,现以方法1为例,举例说明加密解密方法的具体实施过程。
4.1加密算法实施过程
1.读入例1的明文文件和密钥文件。
明文“aaaa”={0X61,0X61,0X61,0X61}16={01100001,01100001,01100001,01100001}2。
密钥“1234”={0X31,0X32,0X33,0X34}16={00110001,00110010,00110011,00110100}2。
2.建立字符指针
明文字符串数组动态指针:char*M;
密钥字符串数组动态指针:char*K;
密文字符串数组动态指针:char*C;
3.打开明文文件M,统计明文文件M的字节数,并存放到M_bytes中。
4.分配存储空间
明文存储空间M=new char[M_bytes+1];
密钥存储空间K=new char[M_bytes+1];
密文存储空间C=new char[M_bytes+1];
5.取位下标初值
取位下标初值i、j均为0,即从明文、密钥的第一个二进制位开始加密,取位下标初值k1=0,k2=31,即k1和k2分别指向密文的低地址端和高地址端。参见图1。
说明:在实际应用中,各下标初值可取数组空间的任意合法值。
6.将明文文件的内容,读入到数组M所指存储空间。并将工作指针M_head指向i=0所在字节。当工作指针M_head指向该串尾标志时,若加密循环仍未结束,则将指针M_head指向该字符串首字节。
7.将密钥文件的内容,读入到K所指存储空间。并将工作指针K_head指向j=0所在字节。当工作指针K_head指向该串尾标志时,若加密循环仍未结束,则将指针K_head指向该字符串首字节。
说明:实际应用中,明文、密钥、密文均采用类似循环队列的结构实现。密钥文件的长度不一定等于明文文件的长度,若密钥文件长,则截取M_bytes个字节作为密钥,若密钥文件短,则使用循环密钥。
8.将密文工作指针C_head指k1=0的位置。将密文工作指针C_tail指k1=31的位置,C_head与C_tail相向移动。当指针C_head指向该串尾标志时,若加密循环仍未结束,则将指针C_head指向该字符串首字节。当指针C_tail指向该串首字节时,若加密循环仍未结束,则将指针C_tail指向该字符串尾。
9.建立函数int read_bit(char*p_str,int n)
函数参数:p_str为指向字符串的指针,参数n表示下标为n的二进制位;
函数功能:查找并返回p所指的字符串中第n位(bit)的值(0,1)。
函数返回值:返回p所指的字符串第n位(bit)的值(0,1)。
10.建立函数void write_bit_1(char*p_str,int n)
函数参数:p_str为指向字符串的指针,参数n表示下标为n的二进制位;
函数功能:将p_str所指的字符串第n位(bit)写入1。
函数返回值:空
关键语句序列:
11.建立函数void write_bit_0(char*p_str,int n)
函数参数:p_str为指向字符串的指针,参数n表示下标为n的二进制位;
函数功能:将p_str所指的字符串第n位(bit)写入0。
函数返回值:空
关键语句序列:
12.建立函数void encrypt()
函数参数:无;
函数功能:一趟遍历明文M和密钥K,双向遍历密文空间C,加密后产生密文存于C中;函数返回值:空
关键语句序列:
13.encrypt()函数计算得到的密文数组C写入密文文件并保存,得到密文文件“▓cu╜”即{0XB2,0X63,0X75,0XBD}16={10110010,01100011,01110101,10111101}2。
14.建立函数void statisticalAnalysis()
函数参数:无;
函数功能:统计每个字符编码(以字节为单位)的出现次数,然后计算码均匀度;
函数返回值:空。
关键语句序列:
其中:若以字节为单位计算,则不同的符号(编码)总量radix为256,lambda为本方法计算得到的密文的码均匀度,max_lam为码均匀度最大值。
4.2解密算法实施过程
1.密文文件C中保存的是“▓cu╜”
即{0XB2,0X63,0X75,0XBD}16={10110010,01100011,01110101,10111101}2。
密钥文件K中保存的是“1234”
即{0X31,0X32,0X33,0X34}16={00110001,00110010,00110011,00110100}2。
2.建立字符指针
明文字符串数组动态指针:char*M_decrypt;
密钥字符串数组动态指针:char*K;
密文字符串数组动态指针:char*C;
3.打开密文文件C,统计密文文件C的字节数,并存放到C_bytes中。
4.分配存储空间
明文存储空间M_decrypt=new char[C_bytes+1];
密钥存储空间K=new char[C_bytes+1];
密文存储空间C=new char[C_bytes+1];
5.取位下标初值
还原加密时的位下标初值i、j均为0,即从明文、密钥的第一个二进制位开始加密,取位下标初值k1=0,k2=31,即k1和k2分别指向密文的低地址端和高地址端。参见图2。
说明:在实际应用中,各下标初值可取数组空间的任意合法值。
6.将密文文件的内容,读入到数组C所指存储空间。将密文工作指针C_head指k1=0的位置。将密文工作指针C_tail指k1=31的位置,C_head与C_tail相向移动。当指针C_head指向该串尾标志时,若解密循环仍未结束,则将指针C_head指向该字符串首字节。当指针C_tail指向该串首字节时,若解密循环仍未结束,则将指针C_tail指向该字符串尾。
7.将密钥文件的内容,读入到K所指存储空间。并将工作指针K_head指向j=0所在字节。当工作指针K_head指向该串尾标志时,若加密循环仍未结束,则将指针K_head指向该字符串首字节。
说明:实际应用中,明文、密钥、密文均采用类似循环队列的结构实现。密钥文件的长度不一定等于密文文件的长度,若密钥文件长,则截取C_bytes个字节做为密钥,若密钥文件短,则使用循环密钥。
8.将明文工作指针M_head指向i=0所在字节。当工作指针M_head指向该串尾标志时,若加密循环仍未结束,则将指针M_head指向该字符串首字节。
9.建立函数int read_bit(char*p_str,int n)
函数参数:p_str为指向字符串的指针,参数n表示下标为n的二进制位;
函数功能:查找并返回p所指的字符串中第n位(bit)的值(0,1)。
函数返回值:返回p_str所指的字符串第n位(bit)的值(0,1)。
10.建立函数void write_bit_1(char*p_str,int n)
函数参数:p_str为指向字符串的指针,参数n表示下标为n的二进制位;
函数功能:将p_str所指的字符串第n位(bit)写入1。
函数返回值:空
关键语句序列:同加密过程的void write_bit_1函数,不再赘述。
11.建立函数void write_bit_0(char*p_str,int n)
函数参数:p_str为指向字符串的指针,参数n表示下标为n的二进制位;
函数功能:将p_str所指的字符串第n位(bit)写入0。
函数返回值:空
关键语句序列:同加密过程的void write_bit_0函数,不再赘述。
12.建立函数void decrypt()
函数参数:无;
函数功能:一趟双向遍历密文C和单向遍历密钥K,解密后产生明文存于M_decrypt中;
函数返回值:空
关键语句序列:
13.将decrypt()函数计算得到的明文数组M_decrypt写入明文文件并保存,得到明文文件“aaaa”,即{0X61,0X61,0X61,0X61}16={01100001,01100001,01100001,01100001}2。
总结上面的多个实施例,本发明的方案比以往的传统流密码加密技术的不同点在于不依赖于位异或运算,其主要原理:(1)借助一串现有的已知编码序列(可称为真随机序列)作为密钥文件。密钥文件可来自于音频、视频、图片、图像、图形、伪随机码、混沌值等。(2)设计用于加密和解密的互逆散列函数集合,然后借助加密散列函数将明文均匀的打散在一个已知的二进制随机散列里;(3)设计位运算规则集合,通过位运算改变全部或部分二进制位的值,然后映射到密文空间。这种加密方法具有很强的随机性,且散列函数集合和位运算规则集合的设计灵活多样。另外,本方法采用动态直接定址法构造散列函数集,避免了碰撞的发生,使得常用的对散列函数的攻击手段如字典攻击和生日攻击等对它无效。
此外,本方法中不存在明文集合M和密文集合C之间的字节对应关系,但是存在二进制位(bit)上的对应关系,位对应关系的依据是由密钥集K产生的散列函数,以及位运算规则,因此,要想破解使用本方法加密的文件,必须满足的四个充分必要条件是:(1)已知密钥集合;(2)已知解密散列函数集合;(3)已知位运算规则集合;(4)已知密文文件。而同时获得上述四个条件是不可能事件,我们的方法简单易行且具有很高的安全性。
此外,本申请人以往的流密码方面的发明专利中的技术方案只是基于散列函数的,存在的问题是,散列函数仅能改变明文中“0”和“1”的位置并映射到密文空间,当明文或密钥的码分布在二进制上偏向全“0”或者全“1”时(即类似0X00或0XFF的字节过多时),存在加密失败或容易被攻击的情况。而本发明提出的新方法中位运算规则集合的引入能够完美解决上述情况,使得明文和密文中的“0”和“1”的数量不存在对应关系,因此应用本方法即使传输特殊的明文也不易被破译。且散列函数和位运算的使用使得密文的码均匀度远远高于明文的码均匀度,也高于传统的流密码加密的密码均匀度。
此外,本方法还可以采用多密钥加密,初始密文C作为参数进行多次散列,得到多次加密后的密文Cn,进一步提高算法的安全性,以更好的满足日益高涨的信息加密需求。另外密钥可放在不同人手中,保证明文更加的安全。
应当认识到,本发明实施例中的方法步骤可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。
Claims (10)
1.一种基于随机散列和位运算的加密解密方法,其特征在于,所述方法包括以下步骤:
S1、开辟内存空间,为明文文件、密文文件及密钥文件准备对应的存储空间,其中所述密钥文件来自于一串现有的编码序列,并且作为加密和解密的共用文件;
S2、提供用于加密和解密的互逆散列函数集合,然后借助加密散列函数将明文均匀地打散在一个已知的二进制随机散列中;
S3、引入位运算规则集合,通过位运算改变所述的二进制随机散列的全部或部分的二进制位的值,然后映射到密文空间。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1包括:
初始化明文文件,加载需要加密的明文文件,设置密钥文件码元个数,其中密钥文件的字节长度能进行自定义设置,进一步,密钥文件码元个数不大于明文文件码元个数;
其中生成密钥文件的编码序列来自于音频、视频、图片、图像、图形、伪随机码、混沌值中的任一者或者任意多者的组合。
3.根据权利要求1所述的方法,其特征在于,所述步骤S2包括:
采用动态直接定址法构造散列函数集,以避免碰撞的发生,使得对散列函数的包含字典攻击、生日攻击的常规攻击手段无效。
4.根据权利要求1所述的方法,其特征在于,所述步骤S2包括,提供加密和解密算法程序集合的算法程序对明文文件、密文文件、密钥文件进行位移读取;其中:
加密算法集合的元素为用于加密运算的散列函数和位运算规则集合;
解密算法集合的元素为用于解密运算的散列函数和位运算规则集合,
其中加密算法集合中的任意散列函数和位运算规则应在解密算法集合中存在唯一的散列函数和位运算规则与之对应,并且是互逆的。
5.根据权利要求1所述的方法,其特征在于,所述步骤S3包括:
对明文或密钥的部分或全部二进制位按位取反,能够借助各种密钥流生成器产生的伪随机序列以及各种混沌信号,还能够借助各种布尔函数以及任意的在二进制上码分布均匀的随机文件配置位运算规则。
6.根据权利要求1或5所述的方法,其特征在于,在所述步骤S3中,所述的位运算规则包括以下运算规则中的任意一种或者任意多种的组合:
规则1:按照密钥流的真值位或假值位,对明文的部分二进制位取反;
规则2:按照各种布尔函数,对明文的部分二进制位取反;
规则3:按照另一个密钥流的真值位或假值位,对初始密钥流的部分二进制位取反;
规则4:按照各种布尔函数,对初始密钥流的部分二进制位取反。
7.根据权利要求5所述的方法,其特征在于,所述的布尔函数包括一种或多种数学公式的组合,其中,
如在遍历的过程中对满足公式|C+X×i|MOD Y=Z的特定位取反,该公式中:i为二进制位的编号,C、X为整数,Y为正整数,Z为大于等于且0小于Y的整数,所述特定位包括奇数位、偶数位、除以某质数Y余数为零的二进制位。
8.根据权利要求1所述的方法,其特征在于,还包括:
对所述明文文件、密文文件和密钥文件分别创建对应的明文加密随机数、密文加密随机数和密钥加密随机数,根据加密随机数的值生成对应的工作指针;
对明文文件、密文文件、密钥文件进行工作指针位移读取;
对工作指针进行多次循环遍历,同时根据工作指针所指向的密钥流二进制位的值,对明文文件进行多次迭代,得到密文文件。
9.根据权利要求1所述的方法,其特征在于,还包括:
对明文、密钥和密文均采用循环队列的结构实现;
密钥文件的长度不一定等于明文文件的长度;
截取一部分密钥文件的字节作为密钥,或者使用循环密钥。
10.一种计算机装置,包括存储器、处理器及储存在存储器上并能够在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实施如权利要求1至9中任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910119851.0A CN109861820B (zh) | 2019-02-18 | 2019-02-18 | 基于随机散列和位运算的加密解密方法和装置 |
US17/428,569 US20220109566A1 (en) | 2019-02-18 | 2019-04-19 | Encryption And Decryption Method And Device Based On Random Hash And Bit Operation |
PCT/CN2019/083405 WO2020168628A1 (zh) | 2019-02-18 | 2019-04-19 | 基于随机散列和位运算的加密解密方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910119851.0A CN109861820B (zh) | 2019-02-18 | 2019-02-18 | 基于随机散列和位运算的加密解密方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109861820A true CN109861820A (zh) | 2019-06-07 |
CN109861820B CN109861820B (zh) | 2021-05-25 |
Family
ID=66898190
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910119851.0A Active CN109861820B (zh) | 2019-02-18 | 2019-02-18 | 基于随机散列和位运算的加密解密方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20220109566A1 (zh) |
CN (1) | CN109861820B (zh) |
WO (1) | WO2020168628A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457916A (zh) * | 2019-07-19 | 2019-11-15 | 平安科技(深圳)有限公司 | 一种电子合同加密方法、装置及终端设备 |
CN110474932A (zh) * | 2019-09-29 | 2019-11-19 | 国家计算机网络与信息安全管理中心 | 一种基于信息传输的加密方法及系统 |
CN112291057A (zh) * | 2020-11-20 | 2021-01-29 | 天津市城市规划设计研究总院有限公司 | 城市规划领域提高智能物联网安全性的方法系统可读介质 |
CN112367155A (zh) * | 2020-10-13 | 2021-02-12 | 黑龙江大学 | 一种基于fpga的zuc加密系统ip核构建方法 |
CN113515769A (zh) * | 2021-09-15 | 2021-10-19 | 武汉泰乐奇信息科技有限公司 | 一种基于隐藏数据的大数据再发现方法与装置 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7552211B2 (ja) * | 2020-10-01 | 2024-09-18 | 株式会社リコー | 読取装置、画像形成装置および方法 |
CN112765635B (zh) * | 2021-01-27 | 2022-09-20 | 河南大学 | 基于耦合映像格子模型的图像加密方法 |
CN113742662A (zh) * | 2021-09-08 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种php源码加密方法和装置 |
CN114024675B (zh) * | 2021-11-24 | 2024-01-23 | 衡阳师范学院 | 一种适用于车联网终端的轻量级分组密码IoVCipher实现方法及其系统 |
CN114328414A (zh) * | 2021-12-31 | 2022-04-12 | 成都卫士通信息产业股份有限公司 | 一种文件存储方法、装置、设备及介质 |
CN115037444B (zh) * | 2022-06-01 | 2024-07-16 | 重庆邮电大学 | 基于明文数据自身来定义运算的衍射加密方法 |
CN115659409B (zh) * | 2022-12-27 | 2023-03-07 | 深圳迅策科技有限公司 | 一种金融资产交易数据安全存储方法 |
CN116781234B (zh) * | 2023-05-04 | 2024-02-02 | 深圳市海德盈富信息技术策划有限公司 | 基于伪随机乱序加密的财务数据共享方法及装置 |
CN116318686B (zh) * | 2023-05-17 | 2023-09-05 | 成都赛力斯科技有限公司 | 一种数据加密传输方法、装置、电子设备及存储介质 |
CN116346676B (zh) * | 2023-05-30 | 2023-08-04 | 温州华嘉电器有限公司 | 基于数据驱动的互联网断路器健康状态评估方法及系统 |
CN118018181B (zh) * | 2024-04-08 | 2024-06-07 | 中国民航大学 | 基于有限域积代数的流密码生成方法、电子设备及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006237908A (ja) * | 2005-02-24 | 2006-09-07 | Hitachi Software Eng Co Ltd | ファイルの暗号・復号方法、鍵情報抽出方法及び装置 |
CN101064812A (zh) * | 2006-04-24 | 2007-10-31 | 深圳Tcl新技术有限公司 | 对hdcp的密钥进行再加密的方法 |
CN101727407A (zh) * | 2008-10-29 | 2010-06-09 | 东北大学兴科中小企业服务中心 | 安全存储系统和方法 |
CN103188073A (zh) * | 2011-12-30 | 2013-07-03 | 苏州人为峰软件科技有限公司 | 一种快速蓝牙数据加密传输方法 |
CN103338104A (zh) * | 2013-06-05 | 2013-10-02 | 中北大学 | 记录仪实时采集数据的加密方法 |
CN105959118A (zh) * | 2016-04-28 | 2016-09-21 | 吉林大学 | 基于流密码的双位单向循环链表加密解密方法 |
CN107612692A (zh) * | 2017-09-25 | 2018-01-19 | 咪咕文化科技有限公司 | 一种信息处理方法、装置及存储介质 |
CN108810891A (zh) * | 2017-04-27 | 2018-11-13 | 华为技术有限公司 | 一种实现访问网络的认证方法、认证设备及用户设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6560338B1 (en) * | 1998-08-28 | 2003-05-06 | Qualcomm Incorporated | Limiting delays associated with the generation of encryption stream ciphers |
US10650373B2 (en) * | 2010-06-01 | 2020-05-12 | Ternarylogic Llc | Method and apparatus for validating a transaction between a plurality of machines |
EP3183836B1 (en) * | 2014-08-19 | 2018-01-10 | Telefonaktiebolaget LM Ericsson (publ) | Generating cryptographic checksums |
US11177942B2 (en) * | 2016-11-18 | 2021-11-16 | Duncan MacDougall Greatwood | Security through data scattering |
JP7127543B2 (ja) * | 2016-12-15 | 2022-08-30 | 日本電気株式会社 | 照合システム、方法、装置及びプログラム |
US10326587B2 (en) * | 2016-12-28 | 2019-06-18 | Intel Corporation | Ultra-lightweight cryptography accelerator system |
CN106953875A (zh) * | 2017-04-26 | 2017-07-14 | 吉林大学珠海学院 | 基于多密钥流密码的顺序加密方法 |
CN107147487B (zh) * | 2017-05-23 | 2020-02-04 | 高胜法 | 对称密钥随机分组密码 |
CN109194461B (zh) * | 2018-05-11 | 2022-02-22 | 吉林大学 | 基于双密钥流密码的单向链表顺序加密解密方法 |
-
2019
- 2019-02-18 CN CN201910119851.0A patent/CN109861820B/zh active Active
- 2019-04-19 WO PCT/CN2019/083405 patent/WO2020168628A1/zh active Application Filing
- 2019-04-19 US US17/428,569 patent/US20220109566A1/en active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006237908A (ja) * | 2005-02-24 | 2006-09-07 | Hitachi Software Eng Co Ltd | ファイルの暗号・復号方法、鍵情報抽出方法及び装置 |
CN101064812A (zh) * | 2006-04-24 | 2007-10-31 | 深圳Tcl新技术有限公司 | 对hdcp的密钥进行再加密的方法 |
CN101727407A (zh) * | 2008-10-29 | 2010-06-09 | 东北大学兴科中小企业服务中心 | 安全存储系统和方法 |
CN103188073A (zh) * | 2011-12-30 | 2013-07-03 | 苏州人为峰软件科技有限公司 | 一种快速蓝牙数据加密传输方法 |
CN103338104A (zh) * | 2013-06-05 | 2013-10-02 | 中北大学 | 记录仪实时采集数据的加密方法 |
CN105959118A (zh) * | 2016-04-28 | 2016-09-21 | 吉林大学 | 基于流密码的双位单向循环链表加密解密方法 |
CN108810891A (zh) * | 2017-04-27 | 2018-11-13 | 华为技术有限公司 | 一种实现访问网络的认证方法、认证设备及用户设备 |
CN107612692A (zh) * | 2017-09-25 | 2018-01-19 | 咪咕文化科技有限公司 | 一种信息处理方法、装置及存储介质 |
Non-Patent Citations (1)
Title |
---|
GENERALANDROID: "算法预备军(5)~散列表", 《CSDN 博客》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457916A (zh) * | 2019-07-19 | 2019-11-15 | 平安科技(深圳)有限公司 | 一种电子合同加密方法、装置及终端设备 |
WO2021012527A1 (zh) * | 2019-07-19 | 2021-01-28 | 平安科技(深圳)有限公司 | 一种电子合同加密方法、装置、终端设备及介质 |
CN110457916B (zh) * | 2019-07-19 | 2023-04-14 | 平安科技(深圳)有限公司 | 一种电子合同加密方法、装置及终端设备 |
CN110474932A (zh) * | 2019-09-29 | 2019-11-19 | 国家计算机网络与信息安全管理中心 | 一种基于信息传输的加密方法及系统 |
CN112367155A (zh) * | 2020-10-13 | 2021-02-12 | 黑龙江大学 | 一种基于fpga的zuc加密系统ip核构建方法 |
CN112367155B (zh) * | 2020-10-13 | 2022-06-07 | 黑龙江大学 | 一种基于fpga的zuc加密系统ip核构建方法 |
CN112291057A (zh) * | 2020-11-20 | 2021-01-29 | 天津市城市规划设计研究总院有限公司 | 城市规划领域提高智能物联网安全性的方法系统可读介质 |
CN113515769A (zh) * | 2021-09-15 | 2021-10-19 | 武汉泰乐奇信息科技有限公司 | 一种基于隐藏数据的大数据再发现方法与装置 |
CN113515769B (zh) * | 2021-09-15 | 2022-04-29 | 武汉泰乐奇信息科技有限公司 | 一种基于隐藏数据的大数据再发现方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109861820B (zh) | 2021-05-25 |
US20220109566A1 (en) | 2022-04-07 |
WO2020168628A1 (zh) | 2020-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109861820A (zh) | 基于随机散列和位运算的加密解密方法和装置 | |
CN110677237B (zh) | 一种具有似混沌特性的文件加密方法 | |
CN105046636B (zh) | 基于混沌系统与核酸序列库的数字图像加密方法 | |
CN109951268B (zh) | 基于位置换和位变换的加密解密方法和装置 | |
CN107147487B (zh) | 对称密钥随机分组密码 | |
CN109194461B (zh) | 基于双密钥流密码的单向链表顺序加密解密方法 | |
CN103973936B (zh) | 一种高强度医学图像快速加密方法及解密方法 | |
CN103825723A (zh) | 一种加密方法和装置 | |
CN105959118A (zh) | 基于流密码的双位单向循环链表加密解密方法 | |
CN109981249B (zh) | 基于拉链式动态散列和nlfsr的加密解密方法及装置 | |
Rahul et al. | Dynamic DNA cryptography-based image encryption scheme using multiple chaotic maps and SHA-256 hash function | |
CN102045169B (zh) | 一种新口令认证方法和装置 | |
AB et al. | A New Security Mechanism for Secured Communications Using Steganography and CBA | |
CN100555937C (zh) | 一种电子邮件加密收发系统 | |
CN108777611A (zh) | 基于双密钥流密码的双向链表顺序加密解密方法 | |
CN108777622B (zh) | 一种二进制流散列取模加密解密方法 | |
Ivanov et al. | Nonlinear transformations for the construction of the primitives of symmetric cryptoraphy | |
KR101790325B1 (ko) | 암호화 및 복호화 시스템 | |
Misra et al. | Analysing the parameters of chaos based image encryption schemes | |
Haryono | Comparison encryption of how to work caesar cipher, hill cipher, blowfish and twofish | |
Kashyap et al. | Security techniques using Enhancement of AES Encryption | |
Aryan et al. | Cloud Cryptography: A Cutting-Edge Method to Protect Your Cloud | |
Feng et al. | The Research of Dynamic Encryption & Decryption Methods Based on the Binary Random Hash | |
Azanuddin et al. | A combination of hill cipher and RC4 methods for text security | |
Al-Nemri et al. | New Block Cipher Encryption Based On OTP Algorithm |
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 |