katz密码学教材v3阅读笔记
本篇笔记用于记录阅读 introduction to modern cryptography (3rd Edition) 一书的阅读
重点在于公钥密码部分
本文尽量通俗讲解,但是不能代替阅读原著
目录
第一章介绍了一些引入,包括公钥加密,历史和现代密码学设计原则
第二章介绍了一些完美加密,也算引入部分(还有信息论的香农定理,很前段时间读论文在[OB22]遇到了)
以上是第一部分,用于引入
第三章介绍了对称加密,然后我打算跳了~
第四章讲消息认证码MAC(等我有钱了也要买MAC(不是这个mac))
第五章讲CCA安全,CCA也就是选择明文攻击
第六章讲哈希函数,目录看起来是区块链的基础(有默克尔树之类的)
第七章讲流密码之类的~不懂,后面再看看
第八章是 好的我不懂,后面看了再来补目录
以上是第二部分,主要是对称加密
后面开始是核心内容,我也会从这里开始看
第九章讲数论和数学困难问题假设之类的,RSA啊什么的是基础,重中之重
第十章讲基于离散对数的加密,然后我突然想起导师发我了一篇相关论文我好像还没看(光速逃)
第十一章讲密钥管理分发,就是DH密钥交换那一类
第十二章开始上正菜了,标题的公钥密码加密,但是实际上里面有很多重要概念
第十三章讲数字签名,难度下降,但是更偏应用
第十四章讲后量子,加油加油加加油~
第十五章也就是最后一张,讲公钥密码的高级操作,嘻嘻后面再细看
以上是第三部分,是最重要的公钥密码
好的,开始干活~
第九章 数论和密码学困难问题
本章可以学到的东西:密码学基础需要的数论,为后续学习奠定基础
9.1 前置知识和基础数论
9.1.1 素数和可除性
整除:a*c=b
,则称a
能整除b
,写作a|b
,否则a∤b
因子:a|b
,则a
是b
的一个因子,若a≠1
且a≠b
,则a
是b
的一个非平凡因子
素数:没有非平凡因子的数(又称质数)
合数:有非平凡因子的数
算数基本定理:任何大于1
的整数都可以唯一的表示为质数的乘积
带余除法:a=bq+r
且0≤r<b
||N||
表示二进制长度,||N||=⌊log N⌋+1
(⌊⌋表示向下取整)
gcd(a,b)
表示a
和b
的最大公约数
欧几里得定理:存在整数X
和Y
,满足Xa+Yb=gcd(a,b)
(证明在第308页开头,自己去看)
欧几里得引理:若c|ab
且gcd(a,c)=1
,则c|b
进一步的:若p
是质数,且p|ab
,则p|a
或p|b
9.1.2 模运算
就是取余,自己看书吧(光速逃)
真正有意思的都在后面呢
9.1.3 群
讲的是群运算,很多基础知识
具体的可以自己看书,我说下我的理解:就是一个自动取模的机器
举个例子,c语言最大是2147483647
,再加一就爆内存了,变成-2147483648
了,这就是个群,然后再从-2147483648
加加加不断加
加到厌倦,然后再到2147483647
,再加,又变回-2147483648
了
群运算,我愿称之为自动取模机~
当然这只是一种加法群,后面还有乘法群啊啥的,不过本质一样,一样的哈
阶:对于群
阶可以完成很多很厉害的运算(就行FFT,一种将乘法的时间复杂度从我的研究方向是密码学,刚刚学习了群的阶的相关概念,你能不能为我通俗讲解:阶在密码学中还有什么应用。由于我是初学者,请一定要通俗,最好举例
后面还有一些推论和证明,请自行阅读;如若不懂可以跳过,不影响咱橙味觅马靴糕守~
9.1.4 群
哎呦呦,鸡汤来喽~
这个群
也就是这盆鸡汤,是在
但是里面有很多元素没有乘法逆元,所以只需要将他们剔除,剩下的就构成了这个乘法群。这个群在后面很常见,尤其是在密码学中种种构造中~
什么?你问我乘法逆元是什么?别问我,去问AI,它讲的比我讲的好
什么?你说打不开?那你去问问学长吧(别问为什么不去问学姐,我要想要学姐>.<)
就是说,
也就是欧拉函数,怎么计算呢?来自己看吧:
欧拉函数有很多很好玩的特征,就想满足对于任意
(在模运算中,等于号一般写作
特别的,你看上面的式子,如果
诶?这不是著名的费马小定理嘛,就这样被咱推出来了(傲娇
COROLLARY 9.22 是和 后面的RSA有关联的,可以看一下,也可以等后面会遇到的
9.1.5 同构和中国剩余定理
啊啊啊这一章不想写了,窝补药学基础数论,算了先跳一下,读者感兴趣可以继续往后读,中国剩余定理RCT就是求一元线性方程组的,没啥东西感觉,不过也挺重要的;感觉后面用到的不多?主要是RSA的共模攻击(来猜猜为什么没人用RSA进行同态加密),还有可能可以构造门限?不懂没用过
好的直接跳到RSA P322
9.2 素数 分解 RSA
好帅的标题~
就,简单说下吧
p
和q
都是大质数,然后n=p*q
,已知n
无法倒推p
和q
然后 p
和q
,也没法算n
的欧拉函数
欧拉函数可以用来计算逆元,也就是使算法可逆的key
也就是基于大数分解数学困难问题的加密算法:加密是正向,谁都可以加密;解密是逆向,需要逆元,但是不能分解n
就没有逆元,所以解密只能有私钥的人进行
然后看几个很常见的术语吧:
按我的理解就是:算法
9.2.1 生成随机素数
如何生成随机大素数
大致过程就是随机生成随机数然后再check
诶呀呀,我还以为是很优雅的生成方式
不过有一说一这个确实够用,只不过有点安全隐患罢了(尽管安全隐患很小,基本上是可忽略的)
下面证明:随机roll出来的数,很容易roll到素数
结论 9.32 n
位的数中,素数的占比不低于
好的,下面我们进行一个很nb的操作,不妨设
误区:这里的 n
指的是位数,如果遍历(不随机)选择素数的话,时间复杂度是线性的(即
即对于1024位的n
:如果使用朴素算法(遍历),大概需要计算
额外说一点,对于具体实现,使用python,不推荐使用random
库——因为它不安全,是可预测的。除非你进行其他额外的操作
在离散对数中,需要两个素数(取模用的),可以直接
但是在RSA里头,需要roll两个素数的,千万别用!因为:
在知道了随机roll出来可以很快得到素数后,紧接着到来的是质数检测
9.2.2 素数检测
这一章讲一个叫做Miller–Rabin素数检测的算法,它不能绝对证明一个数是素数,但是可以极高概率地判断一个数是不是合数,快得飞起
传统算法:直接试除法?线性时间复杂度,炸缸了~
米勒罗宾:也是基于概率的,芜湖起飞
出发点——费马小定理:如果
也就是说,可以随机roll这个a,如果很多次都不符合费马小定理,那么就是合数,否则就是素数
初步算法如下:
进一步的,我们再把这个算法变厉害变快一点:
第一步:拆解
例如:
第二步:随机选择
用这个
第三步:检查条件是否成立
计算:
如果
否则就开始连续平方:把
如果从头到尾都没有出现过
这里的
通常运行20~40次,误判率即可忽略不计
从第326页下半部分到第330页上半部分,看起来兜售对算法正确性的证明,这里不再赘述(实际上是我看不懂),感兴趣的读者可以自行阅读(学会后教我(伸手))
然后最终的米勒罗宾筛法如下(前面已经说过了,这里的是原文的内容)
9.2.3 分解假设
引入了一个名叫 GenModulus 的算法,为了说明大数是难分解的(不能在多项式时间复杂度里进行分解)
感觉这一章没什么好讲的,这里就解释一下多项式时间复杂度是什么意思叭
就是
就像直接分解大数,枚举算法时间复杂度大概是
更广义的,多项式指的是
值得注意的是:这里的指数级和多项式级是对于二进制下位数进行讨论的,如果是数字本身,需要集体降低一个量级
9.2.4 RSA假设
RSA困难假设是基于大数分解数学困难问题的,所以本质和前面是一样的
这一块块就很偏理论计算了,群啊什么的,你们加油,我开始看下一章了~
这一章新东西不多,感觉就是把前面的整合起来
9.3 循环群密码学假设
这一章强度上来了哈,稍微一不留神就跟不上了哈
9.3.1 循环群和生成元
前面已经讲过了生成元,这里正式介绍一下
对于群
这一章是大量的定理和证明练习,不再赘述(我有时间再回来补罢
(逃~