20220616现代密码学读书笔记

 

 

20220616现代密码学读书笔记

4.1.9 离散对数

如果a的阶m等于φ(n),则称a为n的本原根(生成元)
若p是质数,a是p的本原根,则a, a*a, a*a*a,...a^(p-1)的结果是1~(p-1)之间互不相同的所有值,因此对任意的1<=b<=p-1都存在唯一的1<=i<=p-1使得b===a^i mod p
称i为模p下以a为底的指标,记为i=ind(a,p,b),也就是离散对数

性质 ind(a,p,1)=0, ind(a,p,a)=1
显然易证:a^0 mod p == 1 mod p == 1, a^1 mod p == a

若a^z === a^q mod p 则z===q mod φ(p)

4.1.10 平方剩余

n是正整数,a是整数,满足gcd(a,n)=1,称a是模n的平方剩余,反之若x * x === a mod n有解则称为非平方剩余

显然若p是质数则模p的平方剩余个数为(p-1)/2, 且与模p的非平凡剩余相等。
若a是模p的平方剩余则a的两个平方根0<=x1<=(p-1)/2, (p-1)/2+1<=x2<=(p-1),且x1或x2之一也是模p的平方剩余

legendre函数定义
p是质数,a是整数
若a被p整除,p|a则legendre(a,p)=0
若a是模p的平方剩余则legendre(a,p)=1
若a是模p的非平方剩余则legendre(a,p)=-1

公式 legendre(a,p) === a^((p-1)/2) mod p
性质,当p是奇素数且a,b都不能被p整除时
a === b mod p 则 legendre(a,p) = legendre(b,p)
legendre(a*b,p) = legendre(a,p) * legendre(b,p)
legendre(a*a,p) = 1
legendre(a+p,p) = legendre(a,p)

设n是正整数,当n表示为质因子的幂乘积的形式p1^a1 * p2^a2 * ... pk^ak
定义Jacobi(a,n) = legendre(a,p1) ^ a1 * legendre(a,p2) ^ a2 * legendre(a,pk) ^ ak

jacobi性质如下
当n是正合数,a,b与n互质时
a === b mod n 则 jacobi(a,n) = jacobi(b,n)
jacobi(a*b,n) = jacobi(a,n) * jacobi(b,n)
jacobi(a*b*b,n) = jacobi(a,n)
jacobi(a+n,n) = jacobi(a,n)
jacobi(1,n)=1, jacobi(-1,n)=(-1)^((n-1)/2), jacobi(2,n)=(-1)^((n^2-1)/8)

当m,n为大于2的奇数时
jacobi(m,n) = -1 ^ (((m-1)(n-1))/4) * jacobi(n,m)
易得当m===n===3 mod 4时 jacobi(m,n) = -jacobi(n,m)
否则jacobi(m,n)=jacobi(n,m)

综上所述计算jacobi不需要质因式分解,所以当计算legendre时可以先当作jacobi计算,如果有必要,计算jacobi(m,n)时可以通过m mod n 代替m,利用mn交换位置可以减小其中的一个数

jacobi和legendre的本质区别就是jacobi不表示平方剩余方程是否有解

设n为两个大质数p * q的积
由上面的结论可知1 ~ p-1的一半是模p的平方剩余,集合记为P,另一半记为NP
由上面的结论可知1 ~ q-1的一半是模q的平方剩余,集合记为Q,另一半记为NQ
而n的平方剩余a必须同时满足n是模p的平方剩余且a是模q的平方剩余, a属于P∩Q
所以与n互质小于n的a,有一半满足jacobi(a,n)=1记为c,另一半满足jacobi(a,n)=-1记为d
c可能属于P∩Q或NP∩NQ,d可能属于P∩NQ或NP∩Q
同理c中也有一半满足jacobi(a,p)=jacobi(a,q)=1的 a属于P∩Q 这些a就是n的平方剩余
c中剩下一半满足jacobi(a,p)=jacobi(a,q)=-1的 a属于NP∩NQ 这些a不是n的平方剩余

综上当p===q===3 mod 4 时,
由中国剩余定理可快速求出 x === y,-y mod p, x === z, -z mod q
反过来若已知四个中两个不同的根,就可快速的分解大整数n
jacobi(y,n) = -jacobi(z,n) 证明略

4.1.11 计算复杂度

这个数据结构里提过了,这里不赘述
若算法时间复杂度为多项式复杂度,就说这个算法是有效的,反之如果是指数复杂度则称之为无效

若问题存在多项式复杂度的算法可解,则称问题为P问题,也称之为计算可行的
NP问题是指可在多项式复杂度是时间内验证问题的一个解
问题若可在多项式时间内求解则一定可在多项式时间内验证,反之不行,因此P是NP的子集
NP问题中有一部分可以证明比其他问题困难,称之为NPC问题

下周继续第四章公钥密码,数学铺垫终于结束了,后面是公钥密码体制。现在回想起来好像当时听蔡老师没讲多久,自己看居然要这么久Orz
mark当前92页

 

20220615自行编译projector-client

编译client

gradle\wrapper\gradle-wrapper.properties这里可以修改gradlew的依赖地址distributionUrl,改成速度快的url就行,注意冒号要转义

distributionUrl=http\://xxxxx/generic-gradle-distributions/gradle-7.3-all.zip

修改projector-client-web\src\main\kotlin\org\jetbrains\projector\client\web\window\WebWindowManager.kt

注释掉stateMachine.fire DeactivationEvent后可以让projector一直处于前台,避免命令行调用idea失败

projector-client的electron和web的依赖还好,一次成功了

修改/root/.config/JetBrains/IdeaIC2021.2/idea64.vmoptions,增加

-Djava.awt.headless=true

可以在projector中正常使用命令行/projector/ide/bin/idea.sh

/usr/local/bin/idea软链到/projector/ide/bin/idea.sh可简化为idea

编写可执行文件i放到path下,内容为idea ${PWD},在项目根目录执行i可直接控制projector切换项目

projector-client-web\src\main\resources\manifest.webmanifest是静态的,当设置了连接密码后,edge默认的快捷方式会读取这个地址丢失query param,暂时通过–app参数代替–app-url可绕过。

TODO 考虑是否能动态生成start_url和manifest.webmanifest?

重新编译server

根目录新增local.properties,修改useLocalProjectorClient=true可使用本地的client依赖打包

projector-client必须和projector-server同级,程序默认使用../projector-client寻找上一步的产物

在projector-server-common\gradle.properties修改服务器版本

在projector-server根目录执行打包命令,不是第二层的projector-server

如果gradlew找不到正确的java11版本,手动修改脚本JAVA_HOME部分

projector-server的依赖不知道为啥有几率失败

待定位根本原因,基本是访问jetbrains服务器失败,在插件内部。debug显示jetbrans的依赖服务器不支持tlsv1.2和1.3,但curl手动测试是正常的,在根目录的gradle.properties里逐个尝试这几个版本直到所有依赖都下载成功后暂时绕过了问题

国内镜像

常用的环境变量如下表,其余的请参考smartide.cn
key
required
默认值
desc
LOCAL_USER_UID
0
1000
0代表root
1000代表内置的用户名smartide
LOCAL_USER_GID
0
1000
LOCAL_USER_UID!=0时有效,1000代表内置的用户名smartide
LOCAL_USER_PASSWORD
0
smartide123.@IDE
本地用户密码
PERSISTENT_HOME
0
0
是否持久化HOME目录
PERSISTENT_HOME_DIR
0
/data/root
HOME目录持久化物理路径
PROJECTOR_SERVER_TOKEN
0
读写token,不设置就不需要密码
PROJECTOR_SERVER_RO_TOKEN
0
只读token,设置了就允许通过此token观看

更新记录:

  • 支持vim和shell的中文显示编辑、tmux鼠标滚轮支持、idea命令行加入PATH
  • 修复vm下重启后$HOME目录的复用问题
  • after 2023.1,自动清理lock文件,修复异常重启后的CannotActivateException
  • 支持通过PERSISTENT_HOMEPERSISTENT_HOME_DIR持久化$HOME目录,同时兼容k8s pvc、虚机的docker runtime+volumn map,支持非root启动
  • 可选通过PROJECTOR_SERVER_TOKEN设置连接密码
  • 可选通过PROJECTOR_SERVER_RO_TOKEN设置只读密码
  • projector-client merge zhipengzuo/1.8.1,优化终端渲染速度tagv1.8.1.3
  • projector-server 修复部分情况下(如Getter Setter Selector) 被editor抢焦点的问题,tagv1.8.1.7
  • 修复了jcef的崩溃 client tag v1.8.1.8

vm命令示例

k8s的yaml示例

其他易用性处理

vm参数

这里也能加-Dxxx手动修改projector-server密码,重启后生效

/root/.config/JetBrains/IdeaIC2021.2/idea64.vmoptions增加idea启动参数开启开发者插件,开启tools里的psiviewer方便查看语法/语义树

其他IDEA vm参数均可通过菜单HelpEdit Custom VM Options...手动修改

剪切板

windows自带的端口转发,转发后使用localhost访问可避免剪切板无法使用的问题

处理中文显示问题

开启tmux鼠标滚轮

PWA快捷方式设置连接密码

参考资料

腾讯云gradlew mirror

distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.4.2-all.zip
阿里云mirror

附kts写法

https://github.com/JetBrains/projector-installer/blob/9d926fd75c5463585b900fa505f6b8e243331f46/projector_installer/config_generator.py#L148
https://github.com/JetBrains/projector-client/blob/master/projector-client-web/README.md
https://www.reddit.com/r/edge/comments/gcrq7n/location_of_edge_apps/
https://github.com/956237586/SmartIDE/releases/tag/2023101602_idea
https://github.com/956237586/projector-client/releases/tag/v1.8.0.2

20220614现代密码学读书笔记

 

 

 

20220614现代密码学读书笔记
后面即将出现大量数学基础,看不懂的建议直接放弃或者先去复习下离散数学

4.1.3 模运算

若a===0(modn),则n|a,也就是a=mn
若n|(a-b),则a===bmodn
简单理解,被n整除的部分都可以减去,所以如果差值都可以被整除了,所以a和b在模n下相等(同余)

证明,a===bmodn-->n|(a-b),d|n-->d|(a-b)-->a===bmodd
解释,d|n说明d是n的因子,a-b可以被n整除的话,也一定可以被n的因子整除,所以a和b在modd下也同余
a===bmodni,d=lcm(n1....nk),a===bmodd

模运算性质

4.1.4 模指数运算

给定m,n计算a^m%n
显然a=7,n=19时,a^3+j=a^3,从a^4就重复了,循环周期为3
定义这个最小的循环周期为模n下a的阶,记为ordn(a)

定理: a在模n下的阶是=m则a^k===1modn的充要条件是k为n的倍数

4.1.5 费马定理、欧拉定理、卡米歇尔定理

Fermat定理:若p是素数,a是正整数,gcd(a,p)=1即ap互质,则a^(p-1)===1modp
欧拉函数:小于n且与n互质的正整数的个数
性质:
若n为质数则fn=n-1,显然因为n无法被分解了,除了自己以为就是n-1
若n为两个质数qp乘积,fn=fq * fp = (q-1) * (p-1)
若n有标准分解式,则fn=n(1-1/p1)*...*(1-1/pn)

欧拉定理:若a和n互质,则a^fn===1modn,其中fn为n的欧拉函数
卡米歇尔Carmichael函数: 对满足所有gcd(a,n)==1的a使得a^m===1modn同时成立的最小的正整数m
卡米歇尔定理:若a和n互质,则a^fn===1modn,其中fn为n的卡米歇尔函数

4.1.6 素数校验

定理:若n为正整数,若所有满足p<=sqrt(n)的素数p都无法整除n,n为素数
基于上面的定理有Eratosthenes筛法,列出2-n后删掉小于等于sqrt(n)的素数的倍数剩下的都是素数
当n很大时要排除的数量很大,实际上是不可行的

若p为大于2的素数,则方程x*x === 1 mod p的解只有 x===1和x===-1
Miller-Rabin概率检测基于这个条件做反向判断,可以快速判定不是
反之则有概率是素数,对于足够大的尝试次数若总不返回非素数,则会加大是素数的概率

AKS算法由Agrawal Kayal Saxena三个人提出,完全看不懂。。。。。总之有确定性的公式可以大大降低计算量了

4.1.7 欧几里得算法

对任意非负整数a和正整数b有gcd(a,b) = gcd(b,a%b)
欧几里得算法可使当ab较大时逐渐缩小运算输入的大小

扩展的欧几里得算法可求模乘法逆元,当互输入的两数质时,利用倒数第二轮的变量可快速计算

4.1.8 中国剩余定理

今有物不知其数,三三数之有二,五五数之有七,七七数之有二,问物几何?
也就是求解x的一元一次同余方程组
结论:对两两互质的正整数序列mi,M为mi联乘乘积,一元一次同余方程组对模M有唯一解
公式略

作用,对模M下的大数运算因同余性质可使用小数运算代替

印象中这里有秘密分割的应用,利用的就是中国剩余定理,可使密钥分开存放后必须集齐才可完整解密
原则是互质数字序列分割为多个密钥,加密密钥把M中排除掉对应的质数再做加密运算

明天继续第四章公钥密码,学数学果然是催眠和消磨时间的好方法,就是有点费脑子
回想当年大学开学之前看国防科技大学的老师MOOC讲高数证明,每天都能睡的很香
mark当前87页,下一节离散对数

 

20220613现代密码学读书笔记

 

 

 

20220613现代密码学读书笔记
后面即将出现大量数学基础,看不懂的建议直接放弃或者先去复习下离散数学

4 公钥密码

4.1 密码学中亿些常用的数学知识

4.1.1 群 环 域

梦回离散数学抽象代数,主要描述数学对象的集合以及他们之间的运算,运算可以是一元或多元,可以有一个或多个
是集合S上的运算,对任意a,b属于S,ab属于S,则称S对运算是封闭的
是一元运算,对任意a属于S,a属于S,则称S对运算是封闭的
若对任意a,b,c属于S,有(ab)c=a(bc),则称*满足结合律

若代数系统<G,*>同时满足封闭性和结合律,则称之为半群

在半群中,若对任意a,b属于S,有ea=ae,则称e为单位元,也叫幺元
对任意a属于S,存在a的逆(a^-1,公式不好输入后面写-a~a或者a逆都是这个意思)使得a * a逆 = a逆 * a = e,则称S内元素均可逆
在半群<G,>中,若G内任意元素均可逆,则称之为群
若G为有限集,则称<G,
>是有限群,否则为无限群,其中G的元素个数称为群阶

若对任意a,b属于S,有ab=ba,则称满足交换律
若群<G,
>的运算满足交换律则称之为交换群,也叫做Abel群,中文一般叫阿贝尔群
运算
一般称之为乘法,对应的群为乘法群,若运算为+加法则称之为加法群

举例:
<I,+>是Abel群,I是整数集
<Q,*>是Abel群,Q是有理数集
设任意集合A,P为A上双射函数集,<P,+>是群, +表示函数合成,通常这个群不是Abel群
PS:既是单射又是满射的映射称为双射
<Zn,+n>是Abel群,其中Zn={0,1,2,…,n-1},
+n是模加a +n b == (a + b) % n
~x == n – x
<Zn,*n>不是群,因为0没有逆元。*n是模乘a *n b == (a * b) % n

若<G,*>是群,I是整数集合,存在元素g属于G,对任意元素a属于G,都有相应的i属于I,使得a==g^i。则称之为循环群,其中g称为生成元

对任意a,b,c属于S,若a*(b+c)==ab+ac且(b+c)a==ba+ca,则称乘法在加法上可分配
若代数系统<R,+,
>的二元运算满足<R,+>是Abel群,<R,>是半群,乘法在加法上可分配,则称代数系统<R,+,>是环

若代数系统<F,+,>满足<F,+>是Abel群,<F-{0},>是Abel群,乘法在加法上可分配,则称之为域
同理,元素数量有限的集合对应的域称为有限域,元素个数称为域的阶
若q是素数的幂即q=p^r,其中p为素数r为自然数,则阶为q的域称为伽罗华(Galois)域,记为GF(q)或F(q)

所有实数作为系数的多项式集合R(x)在多项式加法和乘法运算下构成环
同理任意域F上的(系数属于F)多项式集合F(x)在多项式加法和乘法运算下构成环

F(x)中不可约多项式和整数中的素数类似,指的是F上仅能被非0常数或自身的倍数除尽,但不能被其他多项式除尽的多项式
两个多项式的最高公因式为1时,称他们之间互素

多项式系数取自以素数p为模的域F时,这样的多项式集合记为Fp[x]
若m(x)是Fp[x]上的n次不可约多项式,将Fp[x]上多项式加法和乘法改为以m(x)为模的加法和乘法,此时多项式集合Fp[x]/m(x)记为GF(p^n),集合中元素个数为p^n,它是一个有限域

4.1.2 素数 互素

也就是质数和互质,这个相对简单,小学二年级学过
若a,b是两个整数,b不为0,存在另一个整数m使得a=mb,则称b整除a记为b|a,称b为a的因子
整数性质:
a|1 –> a=1 || a=-1
a|b && b|a –> a = b || a = -b
对任意b!=0,b|0
b|g, b|h –> b|(mg+nh), 其中m,n为任意整数
证明:显然存在g1,h1使得g=bg1,h=bh1
mg + nh == mbg1 + nbh1 == b(mg1 + nh1)
因此得证b|(mg+nh)

如果p的因子只有p,-p,1,-1称p为素数或质数,否则称之为合数。(p>1)
任意整数a都能唯一被分解为质数之间的乘积(a>1),也就是小学学过的质因数分解(这个不是玩梗,是真的小学学的)

如91=713,11011=711^2*13
11011可表示为{a7=1,a11=2,a13=1},其中an是素数n的指数

若c同时是a,b的因子,则c是a,b的公因子。
若同时a,b的任意公因子均是c的因子,则称c为a,b的最大公因子,记为c=gcd(a,b)
因最大公因子为整数,因此定义gcd(a,b) == gcd(a,-b) == gcd(-a,b) == gcd(-a, -b)
一般gcd(a,b)==gcd(|a|,|b|)。
因a|0可得gcd(a,0)=|a|,其中a!=0

300 = 2^2 * 3^1 * 5^2
18 = 2^1 * 3^2
gcd(18 * 300) == 2^1 * 3^1 * 5^0 == 6

若gcd(a,b)=1则称a,b互素或互质
如果d是a的倍数也是b的倍数,则称之为公倍数
a和b的任意公倍数若都是d的倍数,则称之为最小公倍数,记为d=lcm(a,b)

若a,b互素,则lcm(a,b) = a * b

4.1.3 模运算

也是小学学过的除法相关的运算
若a == qn + r,其中a是整数,n是正整数,若用n/a,商q余r(其中0<=r<n, q=floor(a/n))
floor是像负无穷方向取整
若 a % n == b % n 称a和b模n同余,记为 a===b mod n,[a]为同余类集合,a为代表元素

明天继续第四章公钥密码,一个小时才看了4页,可见这节的信息量密度极大。横穿高数和离散大量的内容
mark当前73页

 

20220609现代密码学读书笔记

 

 

 

20220609现代密码学读书笔记

3 分组密码

3.1 概述

将明文以长度n分组,各组用独立密钥加密,加密结果长度为m
特性:
1.分组长度n要足够大防止明文穷举攻击,当n=64时用2^32成功率为1/2存储需要2^15MB,无法穷举
2.密钥空间要足够大,防止穷举密钥攻击。但不能太长不便于管理
书上认为30-40年内80bit足够安全,还是低估了硬件性能的发展hhhh
3.由密钥确定的置换算法要足够复杂,充分实现扩散和混淆,没有简单的关系。使对手除了穷举以外无捷径
4.加解密运算简单易于软硬件实现
5.数据扩展尽可能小。一般无扩展,使用同态置换和随机化加密技术时可引入
6.差错传播尽可能小

代换
分组代换如果太小则等价于古典密码,容易通过统计暴露规律。所以分组长度n要大一些,但这样带来的问题就是密钥需要很长。所以需要把n再分段做子代换,每个子代换称之为代换盒,简称S盒。
例如DES种将48bit->32bit的代换用8个S盒实现,每个S盒输入6输出4

扩散和混淆
打乱统计规律,扩散是将明文的统计规律散布到密文中,让密文的1位由明文的多位产生。
混淆是指将密文和明文之间的统计关系变得尽可能复杂

Feistel加密结构
利用乘积密码可获得简单的代换密码,也就是连续执行多个基本密码系统使得结果的强度高于单独的密码系统
Feistel网络中每轮结构都相同,每轮右半数据被作用于函数F后与左半做异或(置换)后交换左右两半数据(代换),这种结构是Shannon提出的SPN(Substitution-Permutation NetWork)的特有形式

3.2 数据加密标准(DES)

DES分组长度64bit,密钥长度56bit。加密过程如下
1.初始置换IP
2.16轮相同的变换,每轮包含置换和代换。每轮密钥使用初始密钥移位产生子密钥
3.执行IP的逆置换
除了1、3之外DES结构和Feistel密码结构完全一致

S盒有8个,这个S盒和IP置换表的来源没有任何理由,传说它们是有隐藏规律的,但貌似至今无人发现hhhh 需要查查文献才知道最新的进展了

DES一轮不够可以搞多轮继续复杂这个加密过程

3.3 差分密码分析与线性密码分析

差分密码分析是至今为止对迭代密码已知的攻击中最有效的方法,通过分析明文对儿的插值对密文对儿的插值的影响来恢复某些密钥bit

线性密码分析是对迭代密码的一种已知明文攻击,利用密码算法中的不平衡的线性逼近

3.4 分组密码的运行模式

ECB(Electronic CodeBook) 每个明文组独立的用同一个密钥加密
CBC(Cipher Block Chaining) 加密算法的输入是当前明文组与前一密文组的异或运算
CFB(Cipher FeedBack) 每次只处理输入的j比特位,将上一次的密文用作加密算法的输入来产生干扰值,以此干扰值与当前明文异或作为密文输出
OFB(Output FeedBack) 与CFB类似,输入的是前一次加密算法的输出

3.5 IDEA(International Data Encryption Algorithm)

明文密文都是64bit,密钥128bit
过程比Feistel更加复杂
64bit拆分为16bit4
进行8轮迭代,每轮使用16bit
6个子密钥
输出变换使用16bit*4个子密钥

3.6 AES(Advanced Encryption Standard)

Rijndael最终获选,设计策略为Wide Trail Strategy,针对差分分析和线性分析的抵抗
数学基础是GF(2^8)域内的运算,还是抽象代数的概念,在这个域上定义了几种常用运算
设计思想
1.抵抗所有已知攻击
2.多个平台上速度快,编码紧凑
3.设计简单

使用3个不同的可逆均匀变换,每个变换完成自己的目标
1.线性混合层确保多轮之上的高度扩散
2.非线性层确保输出在最坏情况下具有非线性特征,并行使用满足这个特性的S盒
3.密钥加层,单轮的子密钥异或到中间状态上

明天继续第四章公钥密码
mark当前69页

 

20220608现代密码学读书笔记

 

 

 

20220608现代密码学读书笔记

2 流密码

2.1 基础概念

分组密码的滚动密钥无状态,不受输入明文的影响
流密码的滚动密钥有状态,会受输入过明文影响

根据密钥流发生器的状态是否依赖于输入的明文,可分为同步和自同步。
GF域为也就是伽罗华域(Galois Field)
域的概念欢迎复习下离散数学和抽象代数…

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

一种逻辑结构可用硬件实现,输出的内容受之前输入的影响
因状态最多有2^n个,寻找合适的反馈函数可使状态周期最大,此时的序列称之为m序列

2.3 线性移位寄存器的一元多项式表示

为了找到m,进行数学表达后求证,证明过程看不懂。。。

2.4 m序列的为随机性

因为总状态空间是有穷的,因此一定有周期,但只要周期足够长,相对的小范围内看不出规律就可以,这种序列称为伪随机

若01序列{ai}=(a1a2a3)为00110111,前两个0称之为0的2游程,后面是1的2游程,0的1游程和1的3游程

期望良好的特性
1.01出现概率基本相同
2.01出现的位置概率相同
3.对序列和平移后的序列比较不能得出任何信息
4.序列的周期要足够大
5.序列的计算要容易
6.由密文和相应的明文部分信息,无法确定整个随机序列

这里外个楼,之前某游戏公司数据库出问题回档后,有人发现抽卡结果没有任何变化hhhhh。也就是说随机种子和账号是强相关的,一个账号是非还是欧都已命中注定

2.5 m序列密码的破译

列多元方程,使用矩阵求逆可反推寄存器连续的n+1个状态。条件要求比较多,所以理论上可行

2.6 非线性序列

既然线性序列可能被攻破,那组合多个线性生成器的结果让最终输入的线性特征被破坏就ok了
Geffe序列生成器:使用三个LFSR组合实现输出
J-K触发器:使用J-K触发器输出的特性打乱输出规律。输出依赖于前一个输入
Pless生成器:组合使用LFSR和J-K触发器
钟控序列生成器:组合两个LFSR和时钟的脉冲,第一个LFSR的输出会和脉冲信号作为第二个LFSR的输入,打乱第二个的输出

密钥流生成器的不可预测性基本原则
1.周期长
2.高线性复杂度
3.统计性能良好
4.足够“混乱”
5.足够“扩散”
6.抵抗不同形式的攻击

明天继续第三章分组密码
mark当前30页

 

20220607现代密码学读书笔记

 

 

 

20220607现代密码学读书笔记

1.引言

1.1 背景知识

攻击分类
被动攻击:监听破坏保密性
主动攻击:中断破坏可用性、篡改破坏完整性、伪造破坏真实性

恶意程序分类
需要宿主程序:陷门、逻辑炸弹、木马、病毒
不需要宿主程序:蠕虫

安全业务分类
保密业务:保护通信种的各种信息
认证业务:确认通信的真实性
完整性业务:保证选定范围的数据不被篡改、重排序、重放、
不可否认业务:防止通信双方对传输信息的否认
访问控制:简单理解就是授权

1.2 信息安全模型

通信双方使用安全传输技术通过逻辑信道传递消息
安全传输技术:
1.消息的安全传输包括对消息的加密和认证
2.通信双方共享的某些秘密信息

1.3 基本概念

1.3.1 保密通信系统

特性
1.系统即使达不到理论上不可破,也应当认为实际上不可破。从截获的密文或已知的明文和密文对来反推密钥和明文是不可行的
2.系统的保密性不依赖加密体制和算法,而依赖密钥。这是著名的Kerckhoff原则
3.加解密算法适用于密钥空间内的所有元素
4.系统便于实现和使用

1.3.2 密码体制分类

单钥体制:加解密使用一个密钥。两种加密方式:流密码按字符逐个加密,分组密码按多个字符为一组加密
双钥体制(公钥体制):加解密使用不同的密钥,1976年由Diffie和Hellman引入。公钥可以公开,加解密分离。可以做到多个用户加密的消息只有私钥可解密,或者由一个用户加密的消息多个用户可解读。前者用于保密通信、后者用于验证身份
这里有个误区,很多人以为只有公钥可以加密,实际上都可以,使用公钥加密的过程就是常见的加密解密,而使用私钥加密公钥解密的用法通常叫做签名和验签

1.3.3 密码攻击

攻击类型
1.纯密文攻击
2.已知明文攻击
3.选择明文攻击
4.选择密文攻击

两个准则,满足则认为计算上的安全性
1.破译密文的代价超过被加密信息的价值
2.破译密文所花的时间超过信息的有效期

1.4 古典密码

单表代换
凯撒密码:偏移量固定
移位变换:偏移量不固定
仿射变换:偏移关系为线性函数

多表代换为单表代换的变体,每次都换表

这本书包含大量高数和数论基础知识,头疼
书不厚但信息量巨大,要不是当年听过一次课了完全看不懂。。。
往后面随便翻了翻,居然还发现了疑似我的笔迹???我居然看过这本书,但是完全没印象hhhh
mark当前第一章结束,12页
明天继续第二章
书是杨波老师的《现代密码学(第3版)》 清华大学出版社
CIP数据:
现代密码学/杨波编著. –3 版. –北京:清华大学出版社,2015 (2016.3 重印)