项目地址

可以到上面的地址中,从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,里面的内容表示

  1. 第一行表示相关性为0.75
  2. 第二行指截取到的NFSR输出序列有2000位
  3. 第三行是说组成该NFSR的每个LFSR只有两个寄存器,级数为2
  4. 第四行是抽头数,这里为2,接下来的两行即为抽头的位置(低位为1)
  5. 第五六行即为抽头的位置,这里的1和2表示,两个寄存器都参与了反馈
  6. 第七行即为截取序列

下图表示攻击的适用范围,抽头数过多的情况,攻击难以实施

步骤四:使用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;}}

参考

开普敦大学快速相关攻击项目的简单使用相关推荐

  1. 学界 | 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

    来源:AI科技评论 概要:最近这项来自南非开普敦大学的研究就带来了新的发现,只用单块GPU的资源就进化出了理想的网络结构,还刷新了三项测试的结果. 作者按:进化算法和生成式对抗性网络GANs类似,提出 ...

  2. 计算机操作员有关大学专业,如何根据自身特长选大学专业,这样操作最简单直接!...

    原标题:如何根据自身特长选大学专业,这样操作最简单直接! 点击图片,即可快速预约 很多考生对专业的选择往往手足无措,不知道报什么专业,更不知道从哪些方面考虑专业方向.这里有一句话:"本科看学 ...

  3. 快速上手Springboot项目(登录注册保姆级教程)

    本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...

  4. 研发新人如何快速熟悉新项目和业务

    进入一家新公司后,最头疼的就是如何快速了解公司的业务和项目架构. 如果碰到一个特别热心的老员工,事无巨细地给你讲,随时在你身边答疑解惑,那可能还好.但很可惜,我没有碰到这样的人,在加入新公司后,带我的 ...

  5. 程序员快速熟悉新项目和业务逻辑的技巧

    很多新人进入一家新公司后或进入一个新的项目组,最头疼的就是如何快速了解公司的业务和项目架构,或者说不要求快速,即便有足够的时间,也很难在庞大的业务中整理出思绪.当然,如果你碰到一个特别热心的老员工,事 ...

  6. 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录...

    雷锋网 AI 科技评论按:进化算法和生成式对抗性网络GANs类似,提出时大家都觉得是很好的想法,可以帮人类极大地拓展行为和想象空间,然而找到好的.可控的实现方法却没那么简单.GANs方面现在已经有了许 ...

  7. 低代码构建物联网平台,让物联网项目更简单

    物联网(Internet of Things,IoT)是普遍联系的网络,是基于互联网.电信网等信息网络的承载体,可以视为互联网的延伸和升级,是科学技术发展的必然,也被称为继计算机.互联网和移动通信网络 ...

  8. SSM+MyBatis-Plus+EasyExcel+腾讯云tianai滑动验证码接入项目搭建+简单实现增、删、改、查、导入、滑动验证码功能

    SSM+MyBatis-Plus+EasyExcel+腾讯云&tianai滑动验证码接入项目搭建+简单实现增.删.改.查.导入.滑动验证码功能 文章末尾附源码 一.什么是SSM框架 SSM框架 ...

  9. acd幻灯片exe照片提取_如何使用照片创建快速幻灯片和项目

    acd幻灯片exe照片提取 We have been talking about Apple's new Photos application since it was recently releas ...

最新文章

  1. 目标文件中的几个重要的段
  2. 环境变量_UG环境变量设置
  3. k8s部署dubbo-admin 2.5.10
  4. 简易的CRM系统案例之SpringMVC+JSP+MySQL+hibernate框架版本
  5. php 识别语种,HYPHP增加多国语言支持 PHP通过用户浏览器判断来源国家方案
  6. C#绘制条码CODE39和CODE39全码模式
  7. Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
  8. C# 反双曲余弦函数
  9. hdfs误删文件恢复教程
  10. python 批量处理图片文件(做到图片不变形)
  11. 对于损失函数MASE的计算公式
  12. Java时间格式化工具类大全_二
  13. 网卡属性中的巨帧、巨型帧、Jumbo Frame
  14. matlab曲线已知y求x,已知X、Y用MATLAB绘制曲线
  15. python基础(一)完结
  16. upc 个人训练赛第三场:排课表(容斥原理+组合数学)
  17. 【JTeam Champion NFT】一张nft头像价值千万,能抵一套房,nft是数字艺术还是金融泡沫?
  18. 重磅!巴菲特2021年致股东公开信(中译版,下篇)
  19. 划水神器--在浏览器地址栏和标签页title里面玩俄罗斯方块
  20. 【狂云歌之unity_vr】unity项目持续集成dailybuild以及多平台打包管理

热门文章

  1. pngtree多达33000种ppt模板免费下载
  2. 计算机组成原理中J1J3是什么,计算机组成原理第一次实验报告
  3. 易买网更多新闻代码_新闻 | 0516崔智友得女等更多资讯
  4. 单片机——IIC协议与24C02
  5. 中国军工产业发展规划及前景战略研究报告2021-2027年
  6. 社交媒体可追踪艾滋病传播
  7. PointNet源码解读
  8. mysql中esc是什么意思_esc按钮是什么意思
  9. liunx邮件群发服务器,邮件发送服务器 Postfix
  10. 蓝桥杯-拉马车(C语言)