GSM A5/1算法C语言代码实现和分析
发布日期:2022-03-18 18:19:17 浏览次数:3 分类:技术文章

本文共 1201 字,大约阅读时间需要 4 分钟。

介绍

全球超过200个国家和地区超过10亿人正在使用GSM电话。对中国用户来说,GSM就是移动和联通的2g模式。

GSM

在1982年A5首次提出时,人们认为A5 / 1密钥长度要128位,但最终确定的结果是64位密钥(政府可以使用暴力破解算出)。很可能是政府的压力迫使密钥位数缩短。事实上,据说英国认为只需要48位,而当时的西德政府推动更多的位数(因为他们担心东德政府能够破解他们的密码)

A5算法是一款主要用于GSM的加密算法。该算法本身在安装于1亿部移动电话时是秘密。

它最终在1999年8月公布,并在一个月内,A5 / 2方法被破解。
如果没有特别说明,通常所说的A5指的是A5/1。

具体分析

A5算法的核心是3个移位寄存器:

在这里插入图片描述
上图已经很清楚地说明了A5的移位寄存器的具体工作原理:
三个寄存器的第8,10,10bit是clock bit,意味着每次clock时,算法会计算这三位的多数是0还是1,然后对处于多数的寄存器进行移位操作。
比如说寄存器1的第8位是0,寄存器2的第10位是1,寄存器3的第十位是0。那么多数值就是0,然后对寄存器1和寄存器3进行移位操作。
代码如下:

typedef unsigned long ulong32;void clock() {
ulong32 x1 = ((R1 & R1MID) >> 8) & 1; ulong32 x2 = ((R2 & R2MID) >> 10) & 1; ulong32 x3 = ((R3 & R3MID) >> 10) & 1; ulong32 maj = (x1 + x2 + x3) >= 2 ? 1 : 0; //计算多数值是0还是1 if (x1 == maj) {
R1 = clockone(R1, R1MASK, R1TAPS); } if (x2 == maj) {
R2 = clockone(R2, R2MASK, R2TAPS); } if (x3 == maj) {
R3 = clockone(R3, R3MASK, R3TAPS); }}

完整代码实现见GitHub:

安全性

人们早在2000年就已经知道A5/1加密算法中存在严重的安全问题了。

在2008年,A5/1加密算法可以在几小时内被破解。
我们可以通过彩虹表攻击破解A5/1:
首先,安全研究人员利用了GSM通信加密中的两个安全漏洞,并且在普通商用硬件的帮助下,花费了55天的时间计算出了一个彩虹表。这个彩虹表的大小为984GB(已在网上公开)。
得到了彩虹表之后,安全专家就可以在几秒内确定用于加密通信数据的密钥了。
具体的攻击步骤见

参考资料:

  • Whitfield Diffie’s course

转载地址:https://zhang0peter.blog.csdn.net/article/details/83818880 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java安全地生成128,256,512bit随机数
下一篇:Python变量作用域问题

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月15日 10时05分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

webpack 入口文件 php,如何实现webpack多入口文件打包配置 2019-04-21
php tire树,Immutable.js源码之List 类型的详细解析(附示例) 2019-04-21
matlab转差频率控制,转差频率控制的异步电机调速系统的研究 2019-04-21
oracle错误1327,Oracle中的PGA监控报警分析(r11笔记第97天) 2019-04-21
php函数内的循环,PHP 循环列出目录内容的函数代码 2019-04-21
oracle树状排序,Oracle树状结构查询 2019-04-21
深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级 2019-04-21
sql 拆解函数_SQL入门50题详解(含知识点讲解及代码运行步骤拆解) 2019-04-21
java和python交互 jni_Python基于pyjnius库实现访问java类 2019-04-21
macbook pro 卸载mysql_MacBook Pro全新重装OS X Yosemite 2019-04-21
已达到计算机的连接数最大值无法再同此远程计算机连接_电脑远程访问已达到计算机的连接数最大值怎么办?解决方法很简单... 2019-04-21
mysql表名长度_JavaWeb之MySQL(一) 2019-04-21
mysql服务器语法_Mysql语法 2019-04-21
pdf 模版 汉字和数字_《吉林大学珠海学院毕业论文(设计)模板》(汉字标题版) .pdf... 2019-04-21
python bottle部署_nginx+uwsgi+bottle python服务器部署 2019-04-21
python双击py一闪_Python脚本在双击.py时无法正常运行 2019-04-21
redis logfile为空_关于Redis(二) 2019-04-21
mysql 设计两个主键都不可重复_程序员面试备战篇:18个经典MySQL面试专题解析(干货分享答案)... 2019-04-21
下列关于python2.x和3.x的区别说法正确_Python 2.x和Python 3.x版本有哪些区别?【面试题详解】... 2019-04-21
git更换_git命令 2019-04-21