【安全课件】第17讲--bm算法
最详细最容易理解的BM算法简介共37页文档

2、要冒一次险!整个生命就是一场冒险。走得最远的人,常是愿意 去做,并愿意去冒险的人。“稳妥”之船,从未能从岸边走远。-戴尔.卡耐基。
梦 境
3、人生就像一杯没有加糖的咖啡,喝起来是苦涩的,回味起来却有 久久不会退去的余香。
最详细最容易理解的BM算法简介 4、守业的最好办法就是不断的发展。 5、当爱不能完美,我宁愿选择无悔,不管来生多么美丽,我不愿失 去今生对你的记忆,我不求天长地久的美景,我只要生生世世的轮 回里有你。
56、书不仅是生活,而且是现在、过 去和未 来文化 生活的 源泉。 ——库 法耶夫 57、生命不可能有两次,但许多人连一 次也不 善于度 过。— —吕凯 特 58、问渠哪得清如许,为有源头活水来 。—— 朱熹 59、我的努力求学没有得到别的好处, 只不过 是愈来 愈发觉 自己的 无知。 ——笛 卡儿
拉
60、生活的道路一旦选定,就要勇敢地 走到底 ,决不
AC算法BM算法

AC算法BM算法AC算法(Aho-Corasick Algorithm)AC算法是一种字符串算法,通常用于在一段文本中查询多个模式串的出现情况。
它是由Alfred V. Aho和Margaret J. Corasick于1975年提出的,并以他们的名字命名。
AC算法的原理是构建一个有限状态机(FSM),该状态机能够同时处理多个模式串的匹配。
该算法具有高效的时间和空间复杂度,并且能够在一次扫描内找到所有模式串的匹配位置。
下面将介绍AC算法的详细步骤:1. 构建Trie树(前缀树):根据给定的模式串集合,构建一个Trie树。
Trie树是一种特殊的字典树,它能够实现快速的字符串匹配。
Trie树的根节点为一个空节点,每个节点都有多个子节点,每个子节点都代表一个字符。
从根节点到叶子节点的路径上的所有字符组成一个模式串。
2. 构建失败指针(Fail Pointer):在Trie树中,每个节点的失败指针指向它的最长后缀节点,该后缀节点也是Trie树的节点。
如果一个节点的当前字符在其最长后缀节点的子节点中不存在,则将失败指针指向最长后缀节点的失败指针指向的节点。
如果没有最长后缀节点,则将失败指针指向根节点。
3. 在文本中匹配模式串:从文本的第一个字符开始,按照Trie树的路径进行匹配。
如果在一些节点匹配失败,则通过失败指针转移到下一个节点进行匹配,直到匹配成功或到达文本的末尾。
当匹配成功时,可以通过沿着失败指针回溯,找到其他可能的匹配位置。
4.输出匹配结果:对于每个文本字符,记录匹配的模式串。
使用一个结果链表,其中每个节点包括一个指向匹配的模式串的指针和该模式串在文本中的位置。
AC算法的时间复杂度为O(n+m),其中n是文本的长度,m是模式串的总长度。
空间复杂度为O(m),即模式串的长度。
BM算法(Boyer-Moore Algorithm)BM算法是一种字符串和匹配算法,通过对模式串的后缀进行预处理,实现在文本中的快速。
第17讲--m序列与BM算法(密码学)教学文稿

11
4、实例
例2、求产生周期为7的m序列一个周期:0011101的最 短线性移位寄存器。
解:设 a0a1a2a3a4a5a600111,0首1先取初值 f0(x)=1, l0=0 , 则由a0=0得d0=1•a0=0从而 f1(x)=1, l1=0 ;同理由a1=0得 d1=1•a1=0从而 f2(x)=1, l2=0 。 由a2=1得d2=1•a2=1,从而根据l0= l1 = l2=0 知
L(t)(a)是左移变换,就是将序列 a 左移t位所得 到的序 列。
性质3:若 a 是由r级本原线性移存器产生的m序列, 则 a L (t)(a)(t0m2 o r d 1)是与 a 平移等价的m序列。 性质4:周期为p的m序列 a ,左移t (t0mo2rd1)位 得到序列 b ,将 a 与 b 按位对齐。则在一个周期 段中,序列 a 与序列 b (0,0)的有(p-3)/4对,(1, 1)、(1、0)、(0、1)的各有(p+1)/4对。
2、规定:0级线性移位寄存器是以f(x)=1为反馈多项式的 线性移位寄存器,且n长(n=1, 2, …, N)全零序列,仅由0级线性 移位寄存器产生。事实上,以f(x)=1为反馈多项式的递归关系式 是:ak=0,k=0, 1, …, n-1.因此,这一规定是合理的。
3、给定一个N长二元序列a,求能产生a并且级数最小 的线性移位寄存器,就是求a的线性综合解。利用B-M算法 可以有效的求出。
则最后得到的
就是产生给fN定(x)N,l长N 二元序列a的
最短的线性移位寄存器。
9
3、B-M算法 任意给定一个N长序列a(a0.,a1,,aN 1),按n归纳定义
BM算法详解

BM算法详解BM算法 后缀匹配,是指模式串的⽐较从右到左,模式串的移动也是从左到右的匹配过程,经典的BM算法其实是对后缀蛮⼒匹配算法的改进。
为了实现更快移动模式串,BM算法定义了两个规则,好后缀规则和坏字符规则,如下图可以清晰的看出他们的含义。
利⽤好后缀和坏字符可以⼤⼤加快模式串的移动距离,不是简单的++j,⽽是j+=max (shift(好后缀), shift(坏字符)) 先来看如何根据坏字符来移动模式串,shift(坏字符)分为两种情况:坏字符没出现在模式串中,这时可以把模式串移动到坏字符的下⼀个字符,继续⽐较,如下图:坏字符出现在模式串中,这时可以把模式串第⼀个出现的坏字符和母串的坏字符对齐,当然,这样可能造成模式串倒退移动,如下图: 此处配的图是不准确的,因为显然加粗的那个b并不是”最靠右的”b。
⽽且也与下⾯给出的代码冲突!我看了论⽂,论⽂的意思是最右边的。
当然了,尽管⼀时⼤意图配错了,论述还是没有问题的,我们可以把图改正⼀下,把圈圈中的b改为字母f就好了。
接下来的图就不再更改了,⼤家⼼⾥有数就好。
为了⽤代码来描述上述的两种情况,设计⼀个数组bmBc['k'],表⽰坏字符‘k’在模式串中出现的位置距离模式串末尾的最⼤长度,那么当遇到坏字符的时候,模式串可以移动距离为: shift(坏字符) = bmBc[T[i]]-(m-1-i)。
如下图: 数组bmBc的创建⾮常简单,直接贴出代码如下:1 void preBmBc(char *x, int m, int bmBc[]) {23 int i;45 for (i = 0; i < ASIZE; ++i)67 bmBc[i] = m;89 for (i = 0; i <= m - 1; ++i)1011 bmBc[x[i]] = m - i - 1;1213 } 代码分析:ASIZE是指字符种类个数,为了⽅便起见,就直接把ASCII表中的256个字符全表⽰了,哈哈,这样就不会漏掉哪个字符了。
最详细最容易理解的BM算法简介PPT共37页

• Shift = 6
-2
Case 2a
• 坏字符在模式串中
• *******NLE********
• NEEDLE
•
NEEDLE
• Shift =最右的坏字符位置–position(坏)
• Shift = 5
-2
Case 2b
• 坏字符在模式串中
• *******ELE********
•
NEEDLE
好后缀算法
• 模式串中没有子串匹配上好后缀,并且在 模式串中找不到最长前缀,让该前缀等于 好后缀的后缀时
• S= *******BABCDE******** • T= AACDEFGBCDE
好后缀算法
• 模式串中没有子串匹配上好后缀,并且在 模式串中找不到最长前缀,让该前缀等于 好后缀的后缀时
• S= *******BABCDE********
}
预处理-坏字符
• void preBmBc(char *S, int m, int bmBc[]) { int i; for (i = 0; i < ASIZE; ++i) //ASIZE=256 bmBc[i] = m; for (i = 0; i <=m - 1; ++i) bmBc[S[i]] = m - i - 1;
} • 这是会有倒退的算法设计,优点在于能够
对模式串预处理
预处理-坏字符
• void preBmBc(char *S, int m, int bmBc[]) { int i;
for (i = 0; i < ASIZE; ++i) //ASIZE=256
bmBc[i] = m;
【学习小记】Berlekamp-Massey算法

【学习⼩记】Berlekamp-Massey算法PrefaceBM算法是⽤来求⼀个数列的最短线性递推式的。
形式化的,BM算法能够对于长度为n的有穷数列或者已知其满⾜线性递推的⽆穷数列a,找到最短的长度为m的有穷数列c,满⾜对于所有的i≥n,有a i=m∑j=1c j a i−jTextBM算法的流程⼗分简洁明了——增量,构造,修正。
⽅便起见,我们令a的下标从0开始,c的下标从1开始假设我们当前构造出来的递推系数C是第cnt版(经过cnt次修正)长度为m,能够满⾜前a0...a i−1项,记做cnt C,初始时cnt C为空,m=0记d i=a i−m∑j=1c j a i−j若d i=0,那么C符合的很好,不⽤管它否则,我们需要进⾏⼀定的修正,cnt C需要变换到cnt+1C。
记fail cnt表⽰cnt C在a i处拟合失败。
若cnt=0,说明这是a的第⼀个⾮0元素,直接设m=i+1,在C中填上i+1个0。
显然这满⾜定义式(因为前m项是可以不满⾜递推式的)。
否则我们考虑如何构造,如果能找到⼀个C′,满⾜对于m≤j≤i−1,都有m∑k=1c′k a j−k=0,且m∑k=1c′k a i−k=1那么可以构造cnt+1C=cnt C+d i C′,显然这⼀定满⾜性质。
其中加法为按项数对应加。
如何构造呢?我们可以利⽤之前的C!找到某⼀个k∈[t−1]我们构造设w=d id failk,构造wC′={0,0,0,0,...,0,w,−w∗k C}其中前⾯填上了i−fail k−1个0,后⾯相当于是k C乘上−w接在了后⾯。
为什么这是对的?其实很简单,对于a i,带进去的算出来的东西相当于是$$w a_{fail_k}-w(a_{fail_k}-d_{fail_k})=w d_{fail_k}=d_i$$⽽对于m≤j≤i−1,算出来的是正好是w∗a j−(i−failk)−w∗a j−(i−fail k)=0,利⽤了k C在1到fail k−1都满⾜关系式,⽽在fail k相差d的性质。
BM算法原理

BM算法是一种精确字符串匹配算法(区别于模糊匹配)。
BM算法采用从右向左比较的方法,同时应用到了两种启发式规则,即坏字符规则和好后缀规则,来决定向右跳跃的距离。
BM算法的基本流程: 设文本串T,模式串为P。
首先将T与P进行左对齐,然后进行从右向左比较,如下图所示:若是某趟比较不匹配时,BM算法就采用两条启发式规则,即坏字符规则和好后缀规则,来计算模式串向右移动的距离,直到整个匹配过程的结束。
下面,来详细介绍一下坏字符规则和好后缀规则。
首先,诠释一下坏字符和好后缀的概念。
请看下图:图中,第一个不匹配的字符(红色部分)为坏字符,已匹配部分(绿色)为好后缀。
1)坏字符规则(Bad Character):在BM算法从右向左扫描的过程中,若发现某个字符x不匹配,则按如下两种情况讨论:i. 如果字符x在模式P中没有出现,那么从字符x开始的m 个文本显然不可能与P匹配成功,直接全部跳过该区域即可。
ii. 如果x在模式P中出现,则以该字符进行对齐。
用数学公式表示,设Skip(x)为P右移的距离,m为模式串P的长度,max(x)为字符x在P中最右位置。
例1:下图红色部分,发生了一次不匹配。
计算移动距离Skip(c) = 5 - 3 = 2,则P向右移动2位。
移动后如下图:2)好后缀规则(Good Suffix):若发现某个字符不匹配的同时,已有部分字符匹配成功,则按如下两种情况讨论:i. 如果在P中位置t处已匹配部分P'在P中的某位置t'也出现,且位置t'的前一个字符与位置t的前一个字符不相同,则将P右移使t'对应t方才的所在的位置。
ii. 如果在P中任何位置已匹配部分P'都没有再出现,则找到与P'的后缀P''相同的P的最长前缀x,向右移动P,使x对应方才P''后缀所在的位置。
用数学公式表示,设Shift(j)为P右移的距离,m为模式串P的长度,j 为当前所匹配的字符位置,s为t'与t的距离(以上情况i)或者x与P''的距离(以上情况ii)。
BM算法原理图示详细讲解

A
B
C
E
C
A
B
E
… …
… …
P
A
B
C
A
B
2010/10/29 于 HoHai University 4216
BM 算法详细图解 编著:WeiSteve@ 自此,讲解完毕。
[Weisteven]
在 BM 算法匹配的过程中,取 Jump(x)与 Shift(x)中的较大者作为跳跃的距离。 BM 算法预处理时间复杂度为 O(m+s),空间复杂度为 O(s),s 是与 P, T 相关的 有限字符集长度,搜索阶段时间复杂度为 O(m*n)。 最好情况下的时间复杂度为 O(n/m),最坏情况下时间复杂度为 O(m*n)。
T
A
B
C
B
A
D
F
T
B
C
F
A
Q
P
C
B
C
A
B
C
E
A
B
C
例二(说明情况 b):
T
A
B
C
B
A
D
F
T
B
C
F
A
Q
P
B
C
C
A
B
C
E
T
B
C
共同后缀为 TBC,寻找 P 中未匹配部分中是否出现过 TBC。发现未曾出现过。 那么我们就要找 P 的最长前缀同时又是 TBC 的最大后缀的情况。 发现只有 BC,那么 P 需要移动前缀 BC 至对齐 T 中的 BC。
A A
B B
C
A
B
由于 CAB 在前面 P 中未曾出现过,只能进行第二种情况的最大前缀的匹配。 上图中对应的就是已经匹配的部分 CAB 字段在 P 中前方的最大重叠 AB。 看出来了吧,最大的移动就是让 P 中的其实部分 AB 跟 T 中已匹配的字段 CAB 的 部分进行对齐。 移动后的结果如下:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、B-M算法要点
用归纳法求出一系列线性移位寄存器:
fn (x),ln 0 fn (x) ln , n 1,2,, N
每一个 fn (x),ln 都是产生序列a的前n项的最短线性移
位寄存器,在 fn (x),ln 的基础上构造相应的 fn1(x),ln1 ,
使得 fn1(x),ln1 是产生f给n1定(x)序,ln列1 前n+1项的最短移存器,
B-M 算 法
量子密码研究室
王滨
2005年4月6日
1
上节内容复习
移位寄存器序列的三种表示方法:
❖ 线性递推式(一元多项式): at+n=c1at+n-1+c2at+n-2+…+cnat ,t>=0
❖ 联结多项式: f(x)=1+c1x+c2x2+…+cnxn
❖ 状态转移矩阵: 满足:st+1=stTf 称st=(at,at+1,at+2,…,at+n-1)为n维状态
2
几个概念
❖ 非退化的移位寄存器
❖ (不)可约多项式 ❖ 极小多项式 ❖ 序列和周期 ❖ 本原多项式 ❖ m序列 ❖ 1游程、0游程 ❖ m序列的游程分布规律
3
线性移存器
(一)解方程法
已知序列a是由n级线性移存器产生的,且知a 的连续2n位,可用解线性方程组的方法得到线性递 推式。
例:设a=01111000是4级线性移存器产生的序列 的8个连续信号,求该移存器的线性递推式。
4
解:产生 a=01111000……的联结 多项式
❖ 设其联结多项式f(x)=1+c1x+c2x2+c3x3+x4 ❖ 线性递推式at=at-4+c3at-3+c2at-2+c1at-1 ❖ 0+c3+c2+c1=1 ❖ 1+c3+c2+c1=0 ❖ 1+c3+c2+0=0 ❖ 1+c3+0+0=0 ❖ 解得:c3=1;c2=0;c1=0 ❖ 故其联结多项式为1+x3+x4
虑,要想用线性方法重构密钥序列所必须付出的最小代价。 这个问题可通过B-M算法来解决。
6
1、概念简介
设 a (a0., a1,, aN 1) 是 F2 上的长度为N的序列,而 f (x) c0 c1x c2 x2 cl xl 是 F2 上的多项式,c0=1.
如果序列中的元素满足递推关系:
从而
f5 (x) f4 (x) 1 x x3
l5 l4 3
第3步,计算d5:d5=1·a5 + 1·a4 + 0·a3 + 1·a2=0,
从而
f6 (x) f5 (x) 1 x x3
l6 l5 3
第4步,计算d6:d6=1·a6 + 1·a5 + 0·a4 + 1·a3=0,
从而
最后得到的 fN (x),lN 便是产生序列a的最短线性移 位寄存器。
11
12
B-M算法流程
4、实例
例2、求产生周期为7的m序列一个周期:0011101的最 短线性移位寄存器。
解:设 a0a1a2a3a4a5a6 0011101 ,首先取初值 f0(x)=1, l0=0 , 则由a0=0得d0=1•a0=0从而 f1(x)=1, l1=0 ;同理由a1=0得 d1=1•a1=0从而 f2(x)=1, l2=0 。 由a2=1得d2=1•a2=1,从而根据l0= l1 = l2=0 知
2、规定:0级线性移位寄存器是以f(x)=1为反馈多项式的 线性移位寄存器,且n长(n=1, 2, …, N)全零序列,仅由0级线性 移位寄存器产生。事实上,以f(x)=1为反馈多项式的递归关系式 是:ak=0,k=0, 1, …, n-1.因此,这一规定是合理的。
3、给定一个N长二元序列a,求能产生a并且级数最小 的线性移位寄存器,就是求a的线性综合解。利用B-M算法 可以有效的求出。
则最后得到的
就是产生给fN定(x)N,l长N 二元序列a的
最短的线性移位寄存器。
9
3、B-M算法
任意给定一个N长序列a (a0., a1,, aN1),按n归纳定义
fn (x),ln
n 0, 1, 2, , N 1
1、取初始值: f0 (x) 1, l0 0
2、设 f0 (x),l0 , f1(x),l1 ,, fn (x),ln (0 n N ) 均已求得,且 l0 l1 ln
f2(x)=1+x2+1 =1+x3, l3=3
第1步,计算d3:d3=1·a3+ 0·a2 + 0·a1 + 1·a0=1 因为l2<l3,故m=2,由此
f4 (x) f3 (x) x32 f2 (x) 1 x x3 l4 max{3,3 1 3} max{3,1} 3
13
第2步,计算d4:d4=1·a4 + 1·a3 + 0·a2 + 1·a1=0,
❖
这些年的努力就为了得到相应的回报 。2020年12月7日星期 一2时1分14秒 14:01:147 December 2020
❖
科学,你是国力的灵魂;同时又是社 会发展 的标志 。下午2时1分14秒下 午2时1分14:01:1420.12.7
❖
每天都是美好的一天,新的一天开启 。20.12.720.12.714:0114:01:1414:01:14Dec- 20
记:
fn (x)
c (n) 0
c (n) 1
x
cln
(n
)
x
ln
,
c0(
n)
1,
再计算:
dn
c0(n)an
c1(n) an1
cln
a (n) nln
称dn为第n步差值。然后分两种情形讨论:
10
(ⅰ) 若 d n =0,则令: fn1 (x) fn (x), ln1 ln 。
(ⅱ) 若 d n =1,则需区分以下两种情形: ① 当: l0 l1 ln 0 时, 取: f n1 (x) 1 x n1, ln1 n 1 。 ② 当有 m( 0 m n ),使: lm lm1 lm2 ln 。 便置: f n1 (x) f n (x) x nm f m (x), ln1 max{ ln , n 1 ln}
❖
加强自身建设,增强个人的休养。2020年12月7日下 午2时1分20.12.720.12.7
❖
精益求精,追求卓越,因为相信而伟 大。2020年12月7日星 期一下 午2时1分14秒 14:01:1420.12.7
❖
让自己更加强大,更加专业,这才能 让自己 更好。2020年12月下 午2时1分20.12.714:01December 7, 2020
❖
相信命运,让自己成长,慢慢的长大 。2020年12月7日星期 一2时1分14秒 Monday, December 07, 2020
❖
爱情,亲情,友情,让人无法割舍。20.12.72020年12月7日 星期一 2时1分 14秒20.12.7
谢谢大家!
f7 (x) f6 (x) 1 x x3
l7 l6 3
这表明,1 x x3 ,3 即为产生所给序列一个周期的最短线 性移位寄存器。
14
❖
生活中的辛苦阻挠不了我对生活的热 爱。20.12.720.12.7Monday, December 07, 2020
❖
人生得意须尽欢,莫使金樽空对月。14:01:1414:01:1414:0112/7/2020 2:01:14 PM
ak c1ak1 c2ak2 cl akl , k l, l 1, , N 1
(2)
则称 f (x),l 产生二元序列a。其中 f (x),l 表示以f(x)为反馈
多项式的l级线性移位寄存器。
如果f(x)是一个能产生a并且级数最小的线性移位寄存器的 反馈多项式,l是该移存器的级数,则称 f (x),l 为序列a的 线性综合解。
❖
做一枚螺丝钉,那里需要那里上。20.12.714:01:1414:01Dec -207-D ec-20
❖
日复一日的努力只为成就美好的明天 。14:01:1414:01:1414:01Monday, December 07, 2020
❖
安全放在第一位,防微杜渐。20.12.720.12.714:01:1414:01:14December 7, 2020
5
(二)、B-M迭代算法
根据密码学的需要,对线性反馈移位寄存器 (LFSR)主要考虑下面两个问题:
(1)如何利用级数尽可能短的LFSR产生周期大、随 机性能良好的序列,即固定级数时,什么样的移存器 序列周期最长。这是从密钥生成角度考虑,用最小的代价
产生尽可能好的、参与密码变换的序列。
(2)当已知一个长为N序列a时,如何构造一个级 数尽可能小的LFSR来产生它。这是从密码分析角度来考
7
线性移位寄存器的综合问题可表述为:给定一个N长 二元序列a,如何求出产生这一序列的最小级数的线性移 位寄存器,即最短的线性移存器?
几点说明:
1、反馈多项式f(x)的次数l。因为产生a且级数最小的线性
移位寄存器可能是退化的,在这种情况下 f(x)的次数<l;并且此 时 f(x)中的cl=0,因此在反馈多项式f(x)中c0=1,但不要求cl=1。