一种反向攻击获取gmr-2加密卫星通信密钥的方法

文档序号:1775768 发布日期:2019-12-03 浏览:18次 >En<

阅读说明:本技术 一种反向攻击获取gmr-2加密卫星通信密钥的方法 (A kind of method that inverse attack obtains GMR-2 encryption satellite communication key ) 是由 马丕明 韩文聪 杨勇 于 2019-08-07 设计创作,主要内容包括:一种反向攻击获取GMR-2加密卫星通信密钥的方法,属于卫星通信解密技术领域。本发明可以利用一帧密钥流建立查询表,通过查表得到有效密钥链进而得到候选密钥,最后通过找到多帧密钥流对应的候选密钥集合中唯一的公共密钥即为正确的加密密钥。具体实现过程中可以方便的对有效密钥链进行动态的增删和回溯,使得具体操作更容易实现;同时在验证时通过使用多个候选密钥集找公共密钥的方法,可以在不知道密钥器初始化方式的情况下获取加密密钥。(A kind of method that inverse attack obtains GMR-2 encryption satellite communication key, belongs to satellite communication decryption technology field.The present invention can use a frame key stream and establish inquiry table, and candidate key is obtained and then tabling look-up to obtain effective key chain, be correct encryption key finally by unique public keys in the corresponding candidate cipher key sets of multiframe key stream is found.What be can be convenient during specific implementation carries out dynamic additions and deletions and backtracking to effective key chain, so that concrete operations are easier to realize;The method for looking for public keys by using multiple candidate key sets in verifying simultaneously, can obtain encryption key in the case where not knowing key device initialization mode.)

一种反向攻击获取GMR-2加密卫星通信密钥的方法

技术领域

本发明涉及一种反向攻击获取GMR-2加密卫星通信密钥的方法,属于卫星通信解密技术领域。

背景技术

随着移动通信的迅速发展,世界各地的人们都能方便快捷的进行通信。但是移动通信系统的正常工作依赖于基站和天线,在一些偏远地区或者广袤的海洋上基站的建设和维护存在工程或技术上的困难。因此,在这些传统的移动通信系统信号无法覆盖到的区域卫星电话得到了广泛的应用。

在享受卫星通信给我们的生活带来的诸多便利的同时,卫星通信的安全性也越来越多的受到人们的关注。欧洲电信标准化协会(ETSI)提出了两种卫星电话的加密算法:GMR-1和GMR-2。GMR-1算法的规范是GSM标准的延伸,Thuraya(舒拉亚)卫星电话使用了这一加密算法;GMR-2是ETSI全新设计的一种流密码,主要用于国际海事卫星组织(INMARSAT)的卫星电话中。

近些年来,研究人员在使用GMR-2加密算法的卫星通信系统的安全性方面做了很多研究。由Benedikt Driessen等人所写“Don't Trust Satellite Phones:A SecurityAnalysis of Two Satphone Standards”(不要相信卫星电话:两种卫星电话标准的安全性分析)【IEEE Symposium on Security and Privacy,2012,pp.128-142】一文中通过反向工程推出了GMR-2加密器的结构和加密过程,使得破解GMR-2算法成为可能。Jiao HU等人所写“A real-time inversion attack on the GMR-2cipher used in the satellitephones”(对用在卫星电话中的GMR-2加密器的实时反向攻击)【Science ChinaInformation Sciences,2018,61(3):032113】一文通过研究GMR-2加密器的反向特性提出了一种使用单帧密钥流的实时反向攻击方法,包括建立查询表、动态查表、筛选、组合和验证等步骤。该方法在验证时需要已知密钥器的初始化方式,故存在一定的局限性。

发明内容

为了弥补现有研究存在的不足,本发明提供了一种反向攻击获取GMR-2加密卫星通信密钥的方法,实现了在验证时通过使用多个候选密钥集找公共密钥的方法,填补了在不知道密钥器初始化方式的情况下能获取加密密钥的空白。

本发明的技术方案如下:

一种反向攻击获取GMR-2加密卫星通信密钥的方法,通过三个步骤来实现,包括生成查询表、查表得候选密钥和验证得到正确密钥,其具体步骤如下:

1)根据密钥流生成查询表

在GMR-2标准中,加密密钥共8个字节,表示为(K0,K1,…,K7);一帧密钥流有15个字节,表示为(Z0,Z1,…,Z14),对于一组已知的密钥流,分析第c+8个时钟,可以得到7组密钥流字节的组合(Zc+8,Zc+7,Zc),其中0≤c≤6,Zc表示第c个密钥流字节;在第c个密钥字节Kc已知的情况下,根据(Zc+8,Zc+7,Zc)可以唯一的确定第t个密钥字节Kt,因此每组(Zc+8,Zc+7,Zc)值都对应256组可能的(Kc,Kt,t);定义8个结构体list[0],…,list[7],对于0≤c≤6,把(Kc,Kt,t)按照Kc取0~255的顺序存放到结构体list[c]中,称之为表list[c],由此能得到7个表;当表的序号取7时,对应的Kt和t无法根据密钥流得到,故在建立表list[7]时,其中K7取0~255,对应的Kt和t全设为0;这样就得到了8个表list[0],…,list[7];

2)通过查表得到候选密钥

a.定义一个向量R用来存放之前找到的有效密钥链;向量Delta用来存放当前正在查找的密钥链;数组Tao1、Tao2长度为8,数组元素取值为0或1,取1时表示对应位的密钥字节已获得;向量KeyCandidate用来存放查找到的候选密钥;初始化数组Tao1、Tao2的值为0,c=0,Kc=0;

b.根据(c,Kc)查找表list[c]的第Kc行得到与Kc对应的(t,Kt),判断数组Tao1或Tao2的第t位是否为1,若不为1,则转到步骤c;若为1,则判断(t,Kt)是否存在于向量Delta或R中,若是,转到步骤g;若否,执行函数backtrack;然后转到步骤i;

c.判断t是否等于c,若是,转到步骤d;若否,转到步骤e;

d.判断Kt是否等于Kc,若是,转到步骤g;若否,执行函数backtrack;然后转到步骤i;

e.判断t是否等于7,若是,转到步骤f;若否,转到步骤h;

f.把数组Tao2的第c位和第7位设为1,同时把(c,Kc)和(7,K7)存到向量Delta中,执行函数Combine;然后转到步骤i;

g.把数组Tao2的第c位设为1,同时把(c,Kc)存到向量Delta中,执行函数Combine;然后转到步骤i;

h.把数组Tao2的第c位设为1,同时把(c,Kc)存到向量Delta中,把(t,Kt)的值赋给(c,Kc);

i.判断c=0和Kc>255是否同时成立,若否,转到步骤b;若是,则向量KeyCandidate中的内容即为全部候选密钥;

上述步骤中所述两个子函数,分别定义如下:

函数Combine:

C1.将向量Delta的值存到向量R中,将数组Tao1与数组Tao2的值进行异或结果存到数组Tao1中,统计数组Tao1中值为1的元素的个数,若为8,则转到步骤C2;否则转到步骤C3;

C2.把向量R存到向量KeyCandidate中,把向量R中的最后一个元素删除,将数组Tao1与数组Tao2的值进行异或结果存到数组Tao1中,执行函数backtrack;然后转到步骤C4;

C3.如果数组Tao1中前7位值为1,最后一位值为0,则令数组Tao2的前7位为0,最后一位为1;清空向量Delta,当K7依次取0~255时,分别执行以下操作:把(7,K7)存入向量Delta中,执行函数Combine;如果上述条件不满足,则令c等于数组Tao1中第一个不为0的元素对应的下标,Kc=0;转到步骤C4;

C4.把数组Tao2中的元素初始化为0,清空向量Delta,返回(c,Kc)的值;

函数backtrack:

B1.取向量Delta中的第一个结构体的值赋给(c,Kc),然后把Kc的值加1;判断Kc>255是否成立,若是,则转到步骤B2;若否,则转到步骤B4;

B2.判断c=0是否成立,若是,则返回(c,Kc)的值;若否,则转到步骤B3;

B3.把向量R中的最后一个值赋给向量Delta,用s表示数组Tao2的位数,依次把向量Delta中各结构体的第一个值赋给s,并将数组Tao2的第s位的值设为1;删除向量R中的最后一个元素,将数组Tao1与数组Tao2的值进行异或结果存到数组Tao1中,执行函数backtrack;

B4.把数组Tao2的值初始化为0,向量Delta的值清空,返回(c,Kc)的值;

3)验证得到正确密钥

在不知道密钥器初始化方式的情况下,通过以下方式得到加密密钥:

i.定义一个向量I用于存放两组密钥流的公共密钥,用k表示第k帧密钥流,k的初始值为1;

ii.对于第0帧密钥流,通过步骤1)和步骤2)能得到一组候选密钥,存放在向量KeyCandidate[0]中;对于第k帧密钥流,通过步骤1)和步骤2)能得到一组候选密钥,存放在向量KeyCandidate[k]中;依次从向量KeyCandidate[0]中取一个候选密钥与向量KeyCandidate[k]中的每一个候选密钥进行比较,如果能够从向量KeyCandidate[k]中的候选密钥中找到一个与向量KeyCandidate[0]中的这个候选密钥相同,则将其存到向量I中;

iii.判断向量I中的元素个数,如果向量I中只有一个候选密钥,则这个候选密钥就是要找的加密密钥,获取加密密钥过程结束;如果有多个候选密钥,则令k=k+1,转到步骤iv;

iv.对于第k帧密钥流,通过步骤1)和步骤2)能得到一组候选密钥,存放在向量KeyCandidate[k]中;依次从向量I中取一个候选密钥与向量KeyCandidate[k]中的每一个候选密钥进行比较,如果能够从向量KeyCandidate[k]中的候选密钥中找到一个与向量I中的这个候选密钥相同,则保留向量I中的这个候选密钥,如果向量I中的这个候选密钥与向量KeyCandidate[k]中的所有候选密钥都不同,则将这个候选密钥从向量I中删除;转到步骤iii。

本发明提供了一种反向攻击获取GMR-2加密卫星通信密钥的方法,可以方便的对有效密钥链进行动态的删减和回溯,具有易于实现的特点;同时在验证时通过使用多个候选密钥集找公共密钥的方法,填补了在不知道密钥器初始化方式的情况下获取加密密钥的空白。

具体实施方式

下面结合实施例对本发明作进一步说明,但不限于此。

实施例:

一种反向攻击获取GMR-2加密卫星通信密钥的方法,通过三个步骤来实现,包括生成查询表、查表得候选密钥和验证得到正确密钥,其具体步骤如下:

1)根据密钥流生成查询表

在GMR-2标准中,加密密钥共8个字节,表示为(K0,K1,…,K7);一帧密钥流有15个字节,表示为(Z0,Z1,…,Z14),对于一组已知的密钥流,分析第c+8个时钟,可以得到7组密钥流字节的组合(Zc+8,Zc+7,Zc),其中0≤c≤6,Zc表示第c个密钥流字节;在第c个密钥字节Kc已知的情况下,根据(Zc+8,Zc+7,Zc)可以唯一的确定第t个密钥字节Kt,因此每组(Zc+8,Zc+7,Zc)值都对应256组可能的(Kc,Kt,t);定义8个结构体list[0],…,list[7],对于0≤c≤6,把(Kc,Kt,t)按照Kc取0~255的顺序存放到结构体list[c]中,称之为表list[c],由此能得到7个表;当表的序号取7时,对应的Kt和t无法根据密钥流得到,故在建立表list[7]时,其中K7取0~255,对应的Kt和t全设为0;这样就得到了8个表list[0],…,list[7];

2)通过查表得到候选密钥

a.定义一个向量R用来存放之前找到的有效密钥链;向量Delta用来存放当前正在查找的密钥链;数组Tao1、Tao2长度为8,数组元素取值为0或1,取1时表示对应位的密钥字节已获得;向量KeyCandidate用来存放查找到的候选密钥;初始化数组Tao1、Tao2的值为0,c=0,Kc=0;

b.根据(c,Kc)查找表list[c]的第Kc行得到与Kc对应的(t,Kt),判断数组Tao1或Tao2的第t位是否为1,若不为1,则转到步骤c;若为1,则判断(t,Kt)是否存在于向量Delta或R中,若是,转到步骤g;若否,执行函数backtrack;然后转到步骤i;

c.判断t是否等于c,若是,转到步骤d;若否,转到步骤e;

d.判断Kt是否等于Kc,若是,转到步骤g;若否,执行函数backtrack;然后转到步骤i;

e.判断t是否等于7,若是,转到步骤f;若否,转到步骤h;

f.把数组Tao2的第c位和第7位设为1,同时把(c,Kc)和(7,K7)存到向量Delta中,执行函数Combine;然后转到步骤i;

g.把数组Tao2的第c位设为1,同时把(c,Kc)存到向量Delta中,执行函数Combine;然后转到步骤i;

h.把数组Tao2的第c位设为1,同时把(c,Kc)存到向量Delta中,把(t,Kt)的值赋给(c,Kc);

i.判断c=0和Kc>255是否同时成立,若否,转到步骤b;若是,则向量KeyCandidate中的内容即为全部候选密钥;

上述步骤中所述两个子函数,分别定义如下:

函数Combine:

C1.将向量Delta的值存到向量R中,将数组Tao1与数组Tao2的值进行异或结果存到数组Tao1中,统计数组Tao1中值为1的元素的个数,若为8,则转到步骤C2;否则转到步骤C3;

C2.把向量R存到向量KeyCandidate中,把向量R中的最后一个元素删除,将数组Tao1与数组Tao2的值进行异或结果存到数组Tao1中,执行函数backtrack;然后转到步骤C4;

C3.如果数组Tao1中前7位值为1,最后一位值为0,则令数组Tao2的前7位为0,最后一位为1;清空向量Delta,当K7依次取0~255时,分别执行以下操作:把(7,K7)存入向量Delta中,执行函数Combine;如果上述条件不满足,则令c等于数组Tao1中第一个不为0的元素对应的下标,Kc=0;转到步骤C4;

C4.把数组Tao2中的元素初始化为0,清空向量Delta,返回(c,Kc)的值;

函数backtrack:

B1.取向量Delta中的第一个结构体的值赋给(c,Kc),然后把Kc的值加1;判断Kc>255是否成立,若是,则转到步骤B2;若否,则转到步骤B4;

B2.判断c=0是否成立,若是,则返回(c,Kc)的值;若否,则转到步骤B3;

B3.把向量R中的最后一个值赋给向量Delta,用s表示数组Tao2的位数,依次把向量Delta中各结构体的第一个值赋给s,并将数组Tao2的第s位的值设为1;删除向量R中的最后一个元素,将数组Tao1与数组Tao2的值进行异或结果存到数组Tao1中,执行函数backtrack;

B4.把数组Tao2的值初始化为0,向量Delta的值清空,返回(c,Kc)的值;

3)验证得到正确密钥

在不知道密钥器初始化方式的情况下,通过以下方式得到加密密钥:

i.定义一个向量I用于存放两组密钥流的公共密钥,用k表示第k帧密钥流,k的初始值为1;

ii.对于第0帧密钥流,通过步骤1)和步骤2)能得到一组候选密钥,存放在向量KeyCandidate[0]中;对于第k帧密钥流,通过步骤1)和步骤2)能得到一组候选密钥,存放在向量KeyCandidate[k]中;依次从向量KeyCandidate[0]中取一个候选密钥与向量KeyCandidate[k]中的每一个候选密钥进行比较,如果能够从向量KeyCandidate[k]中的候选密钥中找到一个与向量KeyCandidate[0]中的这个候选密钥相同,则将其存到向量I中;

iii.判断向量I中的元素个数,如果向量I中只有一个候选密钥,则这个候选密钥就是要找的加密密钥,获取加密密钥过程结束;如果有多个候选密钥,则令k=k+1,转到步骤iv;

iv.对于第k帧密钥流,通过步骤1)和步骤2)能得到一组候选密钥,存放在向量KeyCandidate[k]中;依次从向量I中取一个候选密钥与向量KeyCandidate[k]中的每一个候选密钥进行比较,如果能够从向量KeyCandidate[k]中的候选密钥中找到一个与向量I中的这个候选密钥相同,则保留向量I中的这个候选密钥,如果向量I中的这个候选密钥与向量KeyCandidate[k]中的所有候选密钥都不同,则将这个候选密钥从向量I中删除;转到步骤iii。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:初始接入控制方法、装置、终端、智能卡及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!