开普敦大学快速相关攻击项目的简单使用
项目地址
可以到上面的地址中,从Download下载到该项目以及项目相关的介绍
安装
环境:Ubuntu18.04
步骤一:安装GSL
首先需要安装依赖包GSL(GNU Scientific Library),这是一个C语言科学计算类库,里面有超过1000个函数用于代数计算、矩阵运算
安装命令如下(以安装GSL2.6为例):
wget http://ftp.club.cc.cmu.edu/pub/gnu/gsl/gsl-2.6.tar.gz
tar -zxvf gsl-2.6.tar.gz
cd gsl-2.6
sudo ./configure
sudo make
sudo make install
步骤二:安装配置fca(fast correlation attack)
继续安装过程,进入到fastcorrattack目录,在Readme中,会用到CHECK,使用apt-get isntall check
可以进行安装,不过不安装这个也不影响正常的使用
根据Readme进行配置
./configure
make
此时在./src下会生成一个fca的可执行文件,此时也表示安装成功了
步骤三:了解项目结构
项目的源码都在src中
- algorithm_b.c里面是算法B的实现
- bitarray.c类似一个库,提供了许多关于位数组的创建和管理
- main.c作为入口,里面除了调用algorithm_b实现攻击,还有检查输入参数是否合规、使用帮助等功能
- pb_probability.c主要是算法过程中涉及到的一些概率计算,比如计算m(生成校验多项式的个数)等
- pc_paritycheck.c中有许多函数,用于生成校验多项式和计算每一位所满足的校验多项式个数
在test中是一些用于测试功能的用例
还提供了生成测试用例的函数。安装完成后可以使用test/data下的数据进行测试
也可以直接使用test下的combgen.py文件生成自己的测试用例,该文件里面是一个简单的Geffe型的NFSR(这里是根据test/data下的N_long.in按顺序进行输入),运行后会生成test.test文件(用于作为fca的输入)以及test.ans文件(根据输入产生的nfsr输出序列)
提供的测试用例,t表示抽头数,t2即为有2个抽头,d表示N/L(N为输出序列的个数;L表示LFSR的级数,即有几个寄存器)。
比如t2_d10_3.test,里面的内容表示
- 第一行表示相关性为0.75
- 第二行指截取到的NFSR输出序列有2000位
- 第三行是说组成该NFSR的每个LFSR只有两个寄存器,级数为2
- 第四行是抽头数,这里为2,接下来的两行即为抽头的位置(低位为1)
- 第五六行即为抽头的位置,这里的1和2表示,两个寄存器都参与了反馈
- 第七行即为截取序列
下图表示攻击的适用范围,抽头数过多的情况,攻击难以实施
步骤四:使用fca
可以直接使用test/data下的测试用例进行测试,比如使用t2_d10_2.test作为输入,项目会输出一个文件
文件内容是使用快速相关攻击算法B攻击的一些过程和结果。
可以看到,最后的是还原的LFSR序列
此时问题就转化成了已知LFSR的输出序列,求LFSR初始状态
源码对应
算法主要流程(快速相关攻击的部分步骤)
核心源码在algorhtm_b.c。
一般认为第六步到第八步是小循环,第六步到第十步为大循环
小循环对应的c源码。
// alpha一般取5,即一般迭代5次for (unsigned int iter = 1; iter <= alpha; iter++){ /* 计算截取序列z满足的校验等式个数h */unsigned int h[N];pc_h(parchecks, z, h);/* 对截取序列z,重新计算p* */pc_parcheck_s(parchecks, z, p, s); for (unsigned int i = 0; i < N; i++){p[i] = pb_update_var_p(p[i], s[i]);}/* 计算p_thr < p*的个数N_w */N_w = 0;for (unsigned int i = 0; i < N; i++){// dbl_gt表示double形式下的大于(greater than)if (dbl_gt(p_thres, p[i])){N_w++;} }printf("%u \t%u \t\t%u\n", r, iter, N_w); //r是指round,大循环的次数printlogline(logfp, iter, N, p_thres, p, z, a);/* 如果N_w达到了阈值N_thr则可以退出小循环,进行第九步位取补操作,到下一个大循环 */if (N_w >= N_thres){break;}
}
大循环
//这里要设置一个maxrounds,防止陷入死循环
for ( unsigned int r = 1; r <= maxrounds; r++ ){if ( logfp != NULL )fprintf( logfp, "\\midrule\n%u", r );/* 将概率重置为初始值 */for ( unsigned int i = 0; i < N; i++ ){p[i] = prob;}/* log start of line */printlogline( logfp, 0, N, 0, p, z, a );for ( unsigned int iter = 1; iter <= alpha; iter++ ){// 小循环}/* 将小于p_thr的位进行取补操作 */for ( unsigned int i = 0; i < N; i++ ){if ( dbl_gt( p_thres, p[i] ) ){if ( BitArrayTestBit( z, i ) ){BitArrayClearBit( z, i );} else{BitArraySetBit( z, i );}}}printf( "------------------------------------------\n" );/* 如果在这轮中的取补操作,没有改变任何一位,那么下一轮的结果将会和本轮一致。* 此时如果没有还原出LFSR序列的话,就说明攻击失败了 */if ( N_w == 0 ){printf( "FAILED: No bits have been flipped on the last round of this program, so algorithm cannot proceed.\n" );if ( pc_check_lfsr( parchecks, z ) == 0 ){printf( "However converged on a solution.\n" );}else {printf( "Failed to converge on on a solution.\n" );}break;}/* 检查是否成功还原出了LFSR序列 */if ( pc_check_lfsr( parchecks, z ) == 0 ){printf( "Converged on a LFSR Sequence\n" );break;}}
参考
开普敦大学快速相关攻击项目的简单使用相关推荐
- 学界 | 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录
来源:AI科技评论 概要:最近这项来自南非开普敦大学的研究就带来了新的发现,只用单块GPU的资源就进化出了理想的网络结构,还刷新了三项测试的结果. 作者按:进化算法和生成式对抗性网络GANs类似,提出 ...
- 计算机操作员有关大学专业,如何根据自身特长选大学专业,这样操作最简单直接!...
原标题:如何根据自身特长选大学专业,这样操作最简单直接! 点击图片,即可快速预约 很多考生对专业的选择往往手足无措,不知道报什么专业,更不知道从哪些方面考虑专业方向.这里有一句话:"本科看学 ...
- 快速上手Springboot项目(登录注册保姆级教程)
本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...
- 研发新人如何快速熟悉新项目和业务
进入一家新公司后,最头疼的就是如何快速了解公司的业务和项目架构. 如果碰到一个特别热心的老员工,事无巨细地给你讲,随时在你身边答疑解惑,那可能还好.但很可惜,我没有碰到这样的人,在加入新公司后,带我的 ...
- 程序员快速熟悉新项目和业务逻辑的技巧
很多新人进入一家新公司后或进入一个新的项目组,最头疼的就是如何快速了解公司的业务和项目架构,或者说不要求快速,即便有足够的时间,也很难在庞大的业务中整理出思绪.当然,如果你碰到一个特别热心的老员工,事 ...
- 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录...
雷锋网 AI 科技评论按:进化算法和生成式对抗性网络GANs类似,提出时大家都觉得是很好的想法,可以帮人类极大地拓展行为和想象空间,然而找到好的.可控的实现方法却没那么简单.GANs方面现在已经有了许 ...
- 低代码构建物联网平台,让物联网项目更简单
物联网(Internet of Things,IoT)是普遍联系的网络,是基于互联网.电信网等信息网络的承载体,可以视为互联网的延伸和升级,是科学技术发展的必然,也被称为继计算机.互联网和移动通信网络 ...
- SSM+MyBatis-Plus+EasyExcel+腾讯云tianai滑动验证码接入项目搭建+简单实现增、删、改、查、导入、滑动验证码功能
SSM+MyBatis-Plus+EasyExcel+腾讯云&tianai滑动验证码接入项目搭建+简单实现增.删.改.查.导入.滑动验证码功能 文章末尾附源码 一.什么是SSM框架 SSM框架 ...
- acd幻灯片exe照片提取_如何使用照片创建快速幻灯片和项目
acd幻灯片exe照片提取 We have been talking about Apple's new Photos application since it was recently releas ...
最新文章
- 目标文件中的几个重要的段
- 环境变量_UG环境变量设置
- k8s部署dubbo-admin 2.5.10
- 简易的CRM系统案例之SpringMVC+JSP+MySQL+hibernate框架版本
- php 识别语种,HYPHP增加多国语言支持 PHP通过用户浏览器判断来源国家方案
- C#绘制条码CODE39和CODE39全码模式
- Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
- C# 反双曲余弦函数
- hdfs误删文件恢复教程
- python 批量处理图片文件(做到图片不变形)
- 对于损失函数MASE的计算公式
- Java时间格式化工具类大全_二
- 网卡属性中的巨帧、巨型帧、Jumbo Frame
- matlab曲线已知y求x,已知X、Y用MATLAB绘制曲线
- python基础(一)完结
- upc 个人训练赛第三场:排课表(容斥原理+组合数学)
- 【JTeam Champion NFT】一张nft头像价值千万,能抵一套房,nft是数字艺术还是金融泡沫?
- 重磅!巴菲特2021年致股东公开信(中译版,下篇)
- 划水神器--在浏览器地址栏和标签页title里面玩俄罗斯方块
- 【狂云歌之unity_vr】unity项目持续集成dailybuild以及多平台打包管理