为了充分了解加密算法,需要哪些数学知识领域?

是基础代数,还是有专门用于加密的“高等教育”数学领域?我知道有密码学领域,但是密码学家需要什么知识子集?

评论

取决于您想了解加密的哪些部分。对于非对称密码,您需要数字理论,对于对称密码,您需要概率理论和密码学特定知识的结合。对于密码协议,您只需要很少的数学运算,主要是逻辑思考和不同基元具有的属性知识。

相关我如何学习密码/数学符号

经验法则:解决方案越远离信息理论的安全性而转向用户便利性,所需的折衷和相关数学就越复杂和微妙。

如果更多的人问这个问题,那真是太棒了。

@Nemo并非如此,那些将作为重复项关闭。 ;)

#1 楼

大多数加密很大程度上基于数论,其中大多数是抽象代数。微积分和三角学并不常用。另外,应该很好地理解其他主题;特别是概率(包括基本组合学),信息论和算法的渐近分析。作为一名优秀的程序员,还有很多数学值得知道,如果您真的想成为专家,那么这是关键。数论在理解非对称加密方面更重要,但在对称加密中也确实存在(例如,在AES中,如何得出S-box和MixColumns与理解Galois字段有关)。

首先,您需要学习一些符号。诸如逻辑运算符之类的东西,最重要的是用于加密XOR(有时表示为圆加:⊕),其中0 XOR 1 = 1 XOR 0 = 1,0 XOR 0 = 1 XOR 1 =0。这也有助于理解抽象数学和集合论的符号和语言;例如,{0,1} 128表示由128个二进制数字组成的所有字符串的集合(每个数字为0或1)。同样,F:{0,1} 64→{0,1} 128表示F是将64位输入映射到128位字符串输出的函数。您将必须学习函数,双射,置换等之间的区别,但这又主要只是相对简单概念的术语。

最重要的主题之一是模块化算术。例如,1 ≡ 64 (mod 21),其中(mod N)表示您仅关心除以N的余数(因为64/21 = 3,余数为1;模为1)。需要学习的一个重要符号(这可能是造成混乱的原因)是,(mod N)适用于等式的两边。所以您可以等效地说8^2 ≡ 1 (mod 21)。许多编程语言(例如C,Java,python,javascript)都使用%进行模除-例如64 % 21给出1。关于模块化算术的一个很酷的事情是,您可以执行常规算术(加法和乘法)并在最后(或中间的任何一步)进行归约,因为模块化算术形成了一个有限域。例如8×29×50(mod 21),因此从8*8 ≡ 64 ≡ 1 (mod 21)开始,我们也知道29*8 = 232 ≡ 29*50 = 1450 ≡ 1 (mod 21)。使用模块化算法时,8、29、50代表的数字完全相同。

您需要了解费马小定理,欧拉定理(基于totient),欧几里得最大算法常用分母(特别是用于生成乘法逆的Euclid扩展算法),Carmichael数,Fermat素数检验,Miller-Rabin素数检验,模幂和离散对数。

如果想走的更远,您可能想了解诸如有限域(特别是伽罗瓦域),多项式环,椭圆曲线等之类的东西。例如,密码学(以及对密码学的攻击)并不一定限于这些数学类型。例如,NUTRUEncrypt基于晶格/最短向量问题,而McEliece密码系统则基于Goppa代码,但同样,您仍然需要学习上述数学才能理解该数学。

然后,您将具有学习密码学的基本数学背景,这不仅是数学,而且还涉及以安全方式使用数学。 (例如,出于各种原因,教科书RSA c = m^e mod p q是不安全的-您应对邮件使用安全的随机填充方案,并可能对长邮件使用对称加密)。

免费电子参考书


《应用密码学手册》第2章为高级学习者对这些概念进行了不错的介绍-它非常快速,紧凑地介绍了这些概念,最好作为参考或第二/第三篇尝试材料。
DPV的算法第1章(特别是第1.2至1.4节)对RSA背后的数学作了较温和的介绍。 (2015年更新:这本书的预印本似乎已从作者的学术网站之一中撤下。好的教材可以在亚马逊上购买。我相信您仍然可以通过Google搜索免费找到该书“ Dasgupta Papadimitriou Vazirani算法pdf”,但我没有直接链接,因为我不确定版权持有人是否有权共享该书,以合法地分享该书。)
Shoup-数字理论和代数的计算性介绍-从序言“数字理论和代数在计算和通信中起着越来越重要的作用,这一点在密码学和编码理论等领域的惊人应用就证明了这一点。我写这本书的目的是对数字进行介绍。理论和代数,重点是算法和应用程序,将为广大读者所熟悉。”非常详细且相当容易使用。
对AES进行了简单的数字化介绍,并显示了数字理论的应用范围。
Udacity应用加密课程。
Dan Boneh的Coursera密码学课程比密码学背后的数学更多,但是在必要时介绍了数学。扎实的密码学介绍,必要时再次介绍数学。


评论


$ \ begingroup $
第二本书的链接位于cs.berkeley.edu/~vazirani/algorithms.html
$ \ endgroup $
–起搏器
2015年12月8日在10:58



#2 楼

@dr jimbob给出了一个非常可靠的答案,所以让我总结一下:有限域。无论您对密码学感兴趣的领域是什么,对于RSA / DH / DSA /某些椭圆曲线,Z2及其扩展名(GF(2m))总是会遇到有限域,尤其是Zp(带p素数)用于对称密码学和其他类型的椭圆曲线(当您说“ S-box的线性近似”时,您必须知道这是什么意思:这都是关于以Z2为基域的向量空间)。

这本书不错;并不是真正的介绍,但是,如果您能通过它,那么您足够了解加密。如果您不这样做,那么它将显示您仍需要练习的区域。

#3 楼

所需的最低数学要求是诸如XOR运算符之类的二进制数学。如果您能理解的话,那么您就可以理解在数学上坚不可摧的一次性垫。

密码学的其他大多数领域都集中在使用户的生活更加方便上。对所有通信使用单个密钥,但会牺牲信息理论的安全性。军人和政府虽然在安全性上不妥协,但仍使用一次性垫纸,这是有原因的。如果您还希望得到这些政府的任何隐私,则应该使用一次性垫。

如果您看一下这份基本的AES简笔图指南,您会发现它起步很简单,但很快就结束了它开始解释其背后的复杂数学。即使拥有所有复杂的数学运算,仍然存在对AES的攻击,并且它远不及一次性填充垫那么强大。我的观点是,您可以花一生来学习jimbob博士所发表的文章中的所有复杂数学,但仍然无法发明比一次性记事本更强大的东西。尽管有很多有趣的领域需要研究和改进,但不要因此而灰心!

评论


$ \ begingroup $
是的,XOR很小(但是它对加密有“很好的理解”吗?)。 OTP的完美安全性在实践中并不重要,因为OTP需要安全地存储与文本大小相同的密钥(并且只能使用一次),因此在实践中很少使用(为什么不安全地存储文本)?但是我提到的数学并不需要全力以赴。如果您花时间消化每个部分并尝试一些玩具示例,则学习模块化算法以了解RSA最多需要几天的时间。是的,在那之后还有很多东西要学习,但是它很容易上手。
$ \ endgroup $
– jimbob博士
13年9月20日在21:45

$ \ begingroup $
您可能需要详细说明除XOR和OTP之外还需要什么其他数学运算。
$ \ endgroup $
–起搏器
2015年12月8日,11:02

#4 楼

首先是一本有趣的书,涉及到数论方面的内容:

http://www.amazon.com/Friendly-Introduction-Number-Theory-4th/dp/0321816196/ref=sr_1_2? ie = UTF8&qid = 1326998078&sr = 8-2

由于数学上的倾向,这是很容易实现的,但是由于任何原因,他们都没有获得大学应有的接地。

我还没有找不到关于概率的很好的入门书籍,但是我认为其中的一部分是我上大学时就读过,所以我还没有真正尝试过。我很想听听一些好的建议,我可以轻松地复习(数学很难找到。.数学家似乎认为所有内容都应该作为练习留给读者,即使您被困住了。那些能够克服这种自负的人对我来说是真正的数学神..)

#5 楼

这取决于您对哪种加密感兴趣。AES,DES,MD5,SHA-1以及基本上所有其他哈希/对称块密码都可以在没有数学背景的情况下理解,只要您了解基本的编程结构即可。例如异或和移位。参见例如《简笔画的AES指南》。此外,只要您接受加密算法依赖于广告宣传的密码,就可以在没有数学背景的情况下理解加密模式,TLS(SSL)协议和Mental Poker之类的东西。

A仅凭模块化算术的基础知识,就可以理解数量惊人的数学密码算法。几年前,我写了一系列博客文章介绍不对称密码RSA的工作原理,可以在这里找到。 Blum-Blum-Shub对称流密码和无处不在的Diffie-Hellman密钥交换协议也只需要基本的模块化算术。

诸如椭圆曲线密码术和Shamir的秘密共享之类的东西涉及到更深入的知识。有限域,有点像模块化算术的抽象。