西电网络空间安全数学基础《第一章:线性系统与矩阵乘法》

文章目录

  • 讲在前面
    • 章节脉络
  • 第一章 线性系统与矩阵乘法
    • 概述
    • 一、线性反馈移位寄存器(LFSR)的引入
      • 1.1 移位寄存器:
      • 1.2 反馈移位寄存器:
      • 1.3 线性反馈移位寄存器:
    • 二、线性反馈移位寄存器(LFSR)
      • 2.1、LFSR的反馈函数:
      • 2.2、LFSR的级数:
      • 2.3 运用矩阵的形式表达
    • 三 实例分析:以三级线性反馈移位寄存器为例
    • 四 实战演练:编程实现130级的线性反馈移位寄存器
      • 4.1.问题的转化:
      • 4.2.代码的实现:
      • 4.3 测试用例:
    • 五 求解线性反馈移位寄存器的输出(**考试重点考察**)
      • 5.1 反馈多项式已知,通过观测连续的输出,可以得到Y~0~
      • 5.2反馈多项式未知
    • 参考文献:

讲在前面

大二下学期网络与信息安全学院开展了网络空间安全数学基础(网安数基)
个人认为这个对于只有概率论基础的普通大二学生是比较困难的,如果只听一遍基本消化不了,甚至我经常听着听着就听不懂了。
课程分两位老师讲解,第一位老师讲课很是有趣,并且在带着学生学知识,但是我说实话,有一些比较困难的的东西有点难听懂。并且老师对于考试的考察也比较灵活。
第二位老师讲课也是比较有趣的,但是第二部分的内容我感觉整体上是难度高于第一部分的,而且课程的知识量变多了,也挺难的,基本都是自己自学了,好的一点是由于比较困难,加上有ppt,考的内容比较固定,考试会相对轻松一点。
在此写出本课程的总结,方便后续的复习,并且帮助在这门课上迷茫的同学们。

平时作业建议: 本课程是没有教材的,也没有练习题和标准答案。所以需要自己在网上搜索相关的资料,并且根据出题人的意图对题目进行猜测,自己平常经一些练习。并且由于本课程的存在一下比较难的积分计算,所以需要大家了解一些积分公式。

备考建议: 平时作业认真做,老师上课讲过的题目都复习一遍,包括一些证明,不懂就背下来记忆,千万不要有侥幸心理(我就吃了这个亏),考试会出现比较多的作业题,这些复习到了基本就是80+的卷面分,剩下的就是曾老师的变式题,需要对知识了解的深刻一些。

个人总结:
本课程学到的东西确实是不少的,对于一些方法的实现,在编程的作业中有所感受,但是我认为这门课的考核是需要一些思考的。没有书,没有习题,没有答案,这个是一个比较开发的方式在锻炼我们的开放性思维,但是考试是有标准答案的,这个时候考生就不知道应该怎么办了。
一个建议,如果老师考察的知识变得灵活起来,建议老师可以讲解习题,或者可以把答案发给学生供学生思考,供学生参考。不然,建议老师考察的知识就是平时讲的习题,因为对于掌握知识比较少的学生是比较痛苦的一件事。

章节脉络

课程一共分为2个部分,每个部分6次课

  1. 线性系统与矩阵乘法
  2. 矩阵的分解
  3. 范数、距离与相似度
  4. 最优化入门
  5. 概率+矩阵
  6. pagerank的两个数学解释
  7. bloom过滤器
  8. 贝叶斯推理
  9. 信息熵与决策树
  10. 差分隐私
  11. 网络传播
  12. 随机过程

第一章 线性系统与矩阵乘法

概述

本章节主要讲了下关于矩阵乘法的的几何意义:伸缩和旋转。
并讲解了线性反馈移位寄存器,实现的原理,代码,求解其输出(用到了关于矩阵乘法的思想)。
重要考点:线性反馈移位寄存器的原理以及求解其输出;
ps:现在不懂不着急,下面将详细讲解,看完后在思考,便可以理解。

一、线性反馈移位寄存器(LFSR)的引入

1.1 移位寄存器:

移位寄存器(Shift Register,SR)曾在《数字电路与设计基础》,是指有若干个寄存器排成一行,每个寄存器中都存储着一个二进制数(0或1)。移位寄存器每次把最右端(末端)的数字输出,然后整体向右移动一位。
图片:

图1: D触发器构成的移位寄存器

假设一个5位移位寄存器中存储着数据10110,则不断移位、输出的效果如图所示:

图2:输出效果示意图

1.2 反馈移位寄存器:

在移位寄存器向右移位一位以后,左边就会空出一位(如上图所示),这时如果采用一个反馈函数,以寄存器中已有的某些序列作为反馈函数的输入,在函数中经过一定的运算后,将反馈函数输出的结果填充到移位寄存器的最左端,那么这样的移位寄存器就会有源源不断的输出。通俗来讲,就是通过已知的 r1 到rn-1,可以对这些数字通过定义一定的运算,从而得到rn,下面将会有具体实例讲到。这样的,拥有反馈函数的移位寄存器称为反馈移位寄存器(Feedback Shift Register,FSR)

1.3 线性反馈移位寄存器:

如果反馈移位寄存器的反馈函数是线性函数(即只进行简单线性运算的函数),那么这种寄存器就被称为线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)。
图3 线性反馈移位寄存器示意图

二、线性反馈移位寄存器(LFSR)

2.1、LFSR的反馈函数:

LFSR的反馈函数就是简单地对移位寄存器中的某些位进行异或,并将异或的结果填充到LFSR的最左端,如图所示。对于LFSR中每一位的数据,可以参与异或,也可以不参与异或。其中,我们把参与异或的位称为抽头

图4 笔记
如ci表示第i位是否是抽头,如果是,则ci=1,表示该位将参与运算;如果不是,则 ci=0,表示该位将不参与运算。上式表示了LFSR的一种递推关系,在这个式子中,可以明显看出,ci将抽头位选出并留下来参与运算,并且将不是抽头的位剔除掉。

2.2、LFSR的级数:

我们通常把LFSR中的寄存器个数称为LFSR的级数。
状态的概念:一个LFSR寄存器中当前存储的序列被称为一个状态。在LFSR输出一位,由反馈函数补充一位后,LFSR就移动到了下一个状态。

2.3 运用矩阵的形式表达


可以看出,通过使用矩阵的可以实现状态的变换

三 实例分析:以三级线性反馈移位寄存器为例


图5 分析案例示意图

四 实战演练:编程实现130级的线性反馈移位寄存器

题目:基本要求:80分

实现130级的线性反馈移位寄存器

不使用大数库提供的数据结构

至少给出一组测试向量,即给定初始寄存器的值,给定反馈多项式,移位129次以后,连续的32比特是多少

按照自己的理解给出实验报告,要求原理部分手写截图放入报告,代码部分给出核心代码并注释,测试向量列表展示
附加要求:20分
采用西电学报的论文模板10分
使用大数库提供的数据结构,和自己写的代码进行效率比较10分(本人尚未理解使用大数库是在哪里使用,欢迎大家提供思路)

4.1.问题的转化:

移位129位后,在该状态下,再移位32比特。
等价于向右移动161位,其中a130——a161,即为所求的连续的32位比特。

4.2.代码的实现:

结合老师上课讲的伪代码可以更好的理解代码

图六 核心代码:反馈多项式部分

4.3 测试用例:

移位寄存器:1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 1 1

反馈多项式:1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 0 0 1 0 0 1

具体的实现代码:

#include<stdio.h>
#define weishu 130                                      //移位寄存器的寄存器个数 :130
#define yiweishu 161                                    //希望移位寄存器移位的数目 :161
int main()
{//  int weishu,yiweishu;
//  printf("请输入移位寄存器的级数:");
//  scanf("%d",&weishu);
//  printf("请输入移位数:");
//  scanf("%d",&yiweishu);int a[weishu+yiweishu]={0};                                   //寄存器中初始的130位  +移位129位 int x[weishu]={0};                                         //描述反馈函数表达式 寄存器130位 int function1,function2,temp;                               //均作为临时变量 printf("请输入130级移位寄存器的数值 a1到a130:"); for(int i=0;i<weishu;i++)                                      //寄存器130位 {scanf("%d",&a[i]);                                     //输入 }printf("请输入反馈多项式的系数:c1到c130") ;for(int i=0;i<weishu;i++)                                   //寄存器130位 {scanf("%d",&x[i]);} int first_cnt;                                             //先找到第一个系数不是零的项,用来记录第一个不是零的项在第几位 for(int i=0;i<weishu;i++){if(x[i]!=0){first_cnt=i; break;}} int a_left=0;                                                 //开始时最右侧的项 for(int i=0;i<yiweishu;i++)                                //一共需要移位161次 {  temp=a[first_cnt+a_left];                             //找到在该状态下第一个系数不是零的项                                 for(int j=a_left;j<a_left+weishu;j++)                    //反馈多项式部分:关于反馈函数所有抽头的异或 {if(j!=first_cnt+a_left && x[j-a_left]!=0 )           //此时的j不是第一个系数不为零的项 //  表示此时a[j]的系数想不为零 {temp=temp^a[j];                                    //  进行异或 }}a[a_left+weishu]=temp;                                 //将反馈函数的结果填到最左端 a_left++;                                             //该状态下的第一位  下标加一 ,也就是向右面移一位 } // for(int i=0;i<weishu+yiweishu;i++)
//  {//      printf("%d %d\n",i+1,a[i]);
//
//  }printf("\n移位129次后,线性反馈移位寄存器中的值(从左往右即a259到a130)\n");for(int i=258;i>=129;i--){printf("%d",a[i]);}
//向右移动129位后,在移位32比特
//  等价于向右移动161位,其中输出连续的32比特就是a130-a161,所以连续的32位比特为//  for(int i=129;i<161;i++)
//  {//      printf("%d",a[i]);
//
//   } printf("\n再次经过32位移位后连续输出的32比特(从左往右即a161到a130):") ; for(int i=160;i>=129;i--){printf("%d",a[i]);} return 0;}

五 求解线性反馈移位寄存器的输出(考试重点考察

5.1 反馈多项式已知,通过观测连续的输出,可以得到Y0

5.2反馈多项式未知

反馈多项式未知,那么我们就求解得到反馈多项式,从而转换为情形一,进而求解

线性反馈多项式的状态输出我们是可以通过观测得到的,那么我们就可以构造上面的4个等式,并且四个等式中的未知量有4个,这样我们转换为情形1了。

参考文献:

[1] url:https://zhuanlan.zhihu.com/p/366067972
[2] url: https://blog.csdn.net/Drifter_Galaxy/article/details/107618275

西电《网络空间安全数学基础》 网安数基相关推荐

  1. NJUPT 《信安数基》第 11 章解题攻略

    NJUPT <信安数基>多项式环和有限域解题攻略 注:本文章适合学习信息安全数学基础的同学们考前突击,不适用于数学系专业的同学.里面有些内容可能对于数学系来说是不严谨的,但对于信息安全专业 ...

  2. NJUPT 《信安数基》第 10 章证明题攻略

    NJUPT <信安数基>环和域证明题攻略 注:本文章适合学习信息安全数学基础的同学们考前突击,不适用于数学系专业的同学.里面有些内容可能对于数学系来说是不严谨的,但对于信息安全专业为了应付 ...

  3. 信安数基Z/nZ的含义

    信安数基Z/nZ的含义 z/nz表示这样一个集合(群),它的元素也是集合,这些集合是:属于z且除以n余0的所有数,属于z且除以n余1的所有数,属于z且除以n余2的所有数,--属于z且除以n余n-1的所 ...

  4. 【信安数基】数论篇(一):整除

    [信安数基]数论篇(一):整除 文章目录 [信安数基]数论篇(一):整除 0x00 整除符号 1. 对符号的定义 2. 符号本身有以下性质 0x01 取余 对符号的定义 0x02 素数的四个定理 0x ...

  5. 【信安数基】数论篇(二):同余

    [信安数基]数论篇(二):同余 文章目录 [信安数基]数论篇(二):同余 0x00 同余的概念和性质 1. 符号的定义 2. 同余符号本身的性质 3. 同余式之间的关系 a. 总纲 b. 推论式 3. ...

  6. 桂电计算机网络老师,刘忆宁-桂电网络空间安全博士点获批,且行且珍惜

    桂林电子科技大学获批网络空间安全一级博士点,既是机遇也是挑战. 2017年在我校信息与通信学院招收第一位博士生,尚无太多经验可写.硕士生是从2009年开始招生,当时条件十分艰苦,2009-2015年, ...

  7. 西电网络攻防大赛--渗透测试第二题

    地址:http://test.xdsec.org/1/ 使用google浏览器打开 点击Resources 找到cookie 发现key 不过也是加密的 猜测是base64加密 so,百度一个解密网站 ...

  8. 【网络空间安全数学基础第8章】环和域

    1 环和域的基本概念 概念: 定义: 设 R R R是非空集合,其上定义了两种运算(通常表示为加法运算 + + +和乘法运算 ⋅ \cdot ⋅),满足以下条件: (1) < R , + > ...

  9. 中国人民公安大学 网络对抗技术 15网安六区 杨益 201521460031

    虚拟机的安装 安装windows和linux(kali)两个虚拟机. windows linux windows系统 ping命令 dir显示目录 cd进入目录 arp缓存 net share 查看计 ...

最新文章

  1. 把浮点型数值用科学计数法输出
  2. 列举一些RNN类模型的常见使用形式以及常见的应用
  3. 关于运算符重载的问题
  4. leetcode 368. Largest Divisible Subset | 368. 最大整除子集(动态规划详解)
  5. 当前工作目录Python
  6. 工作221:控制弹出框不全屏
  7. redistemplate怎么修改数据_如何使用RedisTemplate访问Redis数据结构?
  8. link.exe 的参数
  9. 矩阵的对数运算公式_对数(运算层面)
  10. 归并排序算法(java实现)
  11. 西门子plc程序好坏判定
  12. Webstorm汉字乱码时
  13. unity批量设置图片为etc2格式或者astc格式
  14. 平台级SAAS架构——统一身份管理系统
  15. 百度内部发文:砥砺风雨坚守使命的背后
  16. OSError: Unable to create file (unable to open file: name = ‘../working/best.hdf5 No such file or di
  17. Maven(自动化构建工具)
  18. 计算机视觉中的变分方法-扩散(Diffusion)
  19. 不想做CEO的程序员不是好码农?
  20. Tableau各版本更新情况

热门文章

  1. 关键讲述亚军背后的故事
  2. wpa或者wpa2暴力破解WiFi
  3. python mysql 双主_keepalived+mysql双主复制高可用方案
  4. Spring的@Enable*注解的工作原理
  5. BitBlt实现透明背景贴图
  6. c语言写pid算法,用c语言实现的pid算法
  7. itoa 头文件 linux,Linux C编程 itoa()函数 atoi()函数
  8. 4种典型限流实践保障应用高可用|云效工程师指北
  9. 关于 QWidget+Qml程序打包到ubuntu时,程序与系统库版本不同,编译时添加并依赖自带库 的方法
  10. 前台autoForm控件的只读和隐藏