如何看待编程连语言都整不明白却大喊数学重要的人的心态?
About
我是学习密码学的,在很多人眼中这应该是编程和数学最近的一个领域了吧。
但注意,往往只有外行人高估了数学的重要性。
我们举一个最简单的例子吧,RSA。
事实上,它的理论基础包括各种运算加速方法早在18世纪的欧拉时代就全部完成了。
密码学是一门有着几千的历史,但是在理论基础已经全部完成了的200年内都没有人提出来RSA算法,但一旦RSA提出来后,各种公钥算法便如雨后春笋一般冒出来。
我们来提几个问题:
1.R,S,A三人发明RSA算法发明了新的数学定理吗?
2.后面的公钥算法为什么不在RSA之前发现,却在RSA之后被大家相继发现?
我们回答第一个问题:是不,RSA并没有发现新的数学定理,而且数学上并没有完全证明RSA破解的困难度等价大素数乘积整数分解的困难度和p?np。
第二个问题更为重要,这一点体现了计算机自己的独有的思想:单向陷门函数思想的提出,才使得公钥密码学蓬勃发展。
后面的公钥算法不是因为同年代发现了什么新的数学公式,而是密码学学家开始有意识地去寻找单向陷门函数。
所以很多人误会了密码学,他们认为是欧拉的数学基础造就了RSA,事实上只是R,S,A选择这个算法。他完全可以不去选择这个,但这不妨碍他去创造出公钥密码学,也许在另外一个时空第一个公钥密码学会首先是elgamal。
在比如双线性配对在密码学的应用,这很明显在完善了密钥空间,明文空间,密文空间提出的自然而然地应用,是我们选择了它,而不是有了它才创造出了我们。
回到计算机上来,计算机领域有着各种区块链,我拿其中比较复杂的filecoin来说,里面使用了不少zk的知识。
但归根结底还是我们的需求的提出,然后通过信息论证明它可以存在,然后再去找数学方法来适配它。
再举个例子,首先提出需求:我们要保证云服务商可以正常保管我们的数据,不会篡改,丢失它。
信息论分析:假如云存储商改变了它存储的数据,那么它的信息就发生改变了。我们要做的就是把这个信息映射过来,而且传过来的数据量不能太大。
数学方法:使用随机数拼接随机原文块计算hash值。
这是最简单的方法,我们后面提出了更多的需求,才会设计更复杂的方案。
所以数学是重要,但并不是真正的重要,真正重要的是计算机领域自己的一种独有发现问题,解决问题的知识。