自从微信公众号里发了我在2015年写的博文“给博士生的话”后,许多研究生问如何学习全同态加密,以及全同态加密的必看的三篇文章是什么。在这里为大家统一答复。
学习全同态加密需要三部分知识:数学基础,格密码基础,全同态加密。
许多研究生在学习全同态加密时,以为只是学习全同态加密,所以看第一篇文章时,从入门直接到放弃。
这是因为任何知识都需要其它的知识作为基础,而全同态加密属于公钥密码学,所以首先它是一个加密算法,然后具有同态属性。
因此,必须熟悉格加密算法,以及相关的数学知识。下面我们分别说说这三部分。
数学基础
因为目前全同态加密都是构建在格密码算法之上的,所以格密码需要哪些数学知识,以及全同态加密本身需要哪些数学知识就构成了整个学习所需的数学基础。
格密码需要哪些数学基础呢?
主要需要线性代数和抽象代数的基础。线性代数一般理工科都学过,例如矩阵,行列式等计算,向量空间的基等。格加密算法里的计算都是矩阵行列式计算。
抽象代数估计不是数学专业的,有可能没学过。抽象代数里的群、环、域等知识非常重要,尤其是环,是格加密的数学基础。抽象代数中一般还会涉及到数论一些知识,也在全同态加密中会使用,例如模计算等。
初学者可以看:An Introduction to Mathematical Cryptography 补充相关数学知识。
当然公认的最好的密码学教材当属Jonathan Katz的INTRODUCTION TO MODERN CRYPTOGRAPHY。如果你想全面而深入的学习密码学可以看这本书。里面都有相关的数学知识。
格密码
学习全同态加密必须熟悉格密码,这是绕不开的。因为本身全同态加密就是格密码算法上进行构造的。
那么如何学习格密码呢?
应该从LWE加密算法开始学习,然后过渡到环LWE加密算法上。一定要把LWE加密算法的过程搞清楚,这样学习全同态加密会轻松许多。
如何学习LWE加密算法呢?
建议看Oded Regev的一篇综述文章:The Learning with Errors Problem 。这篇文章相对写的轻松一些。不过不要忘了,如果想一下看懂是不可能的。需要反复看。注意LWE加密中的各个参数的意义。
Oded Regev本身就是提出LWE归约问题的作者,也写过一个格密码讲义,但是非常理论,不适合初学者看。
全同态加密的学习
学习全同态加密只需要看3+2篇文章。因为看完了前3篇文章,才能看最后这2篇文章,否则根本不知道最后这篇文章讲的是什么。然而,最后这篇文章恰好是目前最火的全同态加密方案。
第一篇文章:BV11:Efficient Fully Homomorphic Encryption from (Standard) LWE
全同态加密的转折点就是从BV11开始,能够建立在LWE这种标准格上困难问题之上。使得全同态加密比以前简单多了。
而且BV11这篇文章写作风格非常好,易于理解。
第二篇文章:BGV12:(Leveled) fully homomorphic encryption without bootstrapping
BGV就是HElib基于的方案。模交换就来源于这篇文章。使得无需Boostrapping就能够建立层次型FHE。
第三篇文章:Bra12: Fully Homomorphic Encryption without Modulus Switching from Classical GapSVP
Bra12就是微软SEAL库基于的方案。比BGV简单了很多,因为不需要模交换就可以构建层次型FHE。
以上三篇文章直接奠定了全同态加密的基础。值得反复阅读。
第四篇文章:GSW13:Homomorphic Encryption from Learning with Errors: Conceptually-Simpler, Asymptotically-Faster, Attribute-Based
GSW13是全同态加密文章里最短的,方案简单到和一般LWE加密算法差不多。
GSW13导致了后面很多全同态加密的理论结果,让全同态加密的理论研究持续发展了好一阵。但是该方案在应用中不实际,所以只在了理论中大放光彩。
我们对GSW进行过深度分析,其实GSW方案中将约减噪音和保持同态性都放在一个密文中。具体可以看我们的文章。(为什么格上能够构造全同态加密-1,2,3)
第五篇文章:CKKS17: Homomorphic encryption for arithmetic of approximate numbers
CKKS17能够支持浮点数的计算,而且效率很高,直接用于机器学习中。其实CKKS17的思想都来源于前面的方案。如果对前面的方案理解了,对该方案才能吃透。