密码学课程作业
简介
A5/1是用于在GSM蜂窝电话标准中提供无线通信隐私的流密码 一开始很安全 然后因为泄密和逆向工程被公众熟知 这个加密算法有很多弱点
—-wiki https://en.wikipedia.org/wiki/A5/1
今天上了一下Wikipedia 发现竟然在寻求捐赠 快破产了???
算法分析
加解流程密概述
- A5加密使用三个寄存器 简称为LFSR 来生成 keysteam
- 三个寄存器的长度分别为 19 22 23位
- 密钥key(64位 8个字节)用于三个线性反馈移位寄存器的初始填充
- 每次取每个寄存器的最后一位异或得到keysteam和明文异或得到密文
- 寄存器的反馈方式也是取特定位置的值异或 反馈分为两步 是否需要移位的判断 和 反馈移位
每个回合步骤可以拆分为:取KEY 反馈多项式(Feedback Polynomial)位移
下图很清晰地解释了keysteam生成的过程 和 寄存器的反馈多项式
生成keysteam
- 按顺序用key填充寄存器
- 取
(n1[18]+n2[21]+n3[22]) mod 2
也就是n1[18]^n2[21]^n3[22]
- 得到keysteam 异或加密明文
移位判断
使用择多原则
三个寄存器中选择三个钟控信号取n1[9] n2[10] n3[10]
两种二进制0,1 必定有0或1数量居多 居多的寄存器需要进行位移操作
流程图里标黄的位置
寄存器反馈
取如下图位置的数据进行异或操作 得到补位候补
python实现
1 | # -- coding: utf-8 -- |