前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《人物》第一期:刘巍然

《人物》第一期:刘巍然

作者头像
学弱猹
发布2022-03-16 15:32:35
1K0
发布2022-03-16 15:32:35
举报

前言

作为知乎中极为罕见的密码学大V,即使已经到了而立之年,巍然学长依然保持着自己的初心,像二十出头的年轻人一样有说有笑,对自己的密码学事业依然保持着热忱与不断的进取。作为密码学的博士,他是如何走进这个领域的,又如何在进取中依然保留着大孩子一般的笑容与快乐?猹哥觉得,或许是一开始的机缘巧合,“上了贼船”,意外的发现了自己的兴趣,并努力坚持了下去。他似乎对一切工作都抱有热情,但又对很多年轻人的迷茫点感同身受。他自诩自己因为为了理想的事业而有点“卷”,又毫不掩饰自己躺平睡大觉的意愿。一个多小时采访下来,或许无法让读者一夜暴富,但知道有些成就要看缘分,有些成就是可以通过随性的坚持与努力得到,也算是一个不小的收获了吧。

人物自我介绍《人物》第一期很快就要开始啦!

若通过采访稿对人物有了更大的兴趣,欢迎知乎/公众号私信猹哥,我们会考虑进行续更

采访稿经过采访者与被采访者两次修改而发布,全文共11920字,认真阅读大约需要24-31分钟。

采访正文

学弱猹:Hello巍然学长!最近过得咋样?上次应该是 7 月份还是 8 月份那个时候我们聊了一次?

刘巍然:上次应该是知乎图书直播的时候,后面就没怎么好好聊过。我现在忙死了,太忙了。

学弱猹:有多忙,忙成啥样哈哈哈?

刘巍然:没看我现在在家里吗,把家弄得跟工位一样,刚才我还在写代码。

学弱猹:你们现在还是远程办公吗?

刘巍然:没有,国内一直都是现场办公。

学弱猹:然后加班加得比较严重是吧哈哈哈?

刘巍然:倒是不怎么加班,主要是我最近要改几篇论文、实现几个新的技术,属于实现个人理想。

学弱猹:可以的哈哈。那反正就是因为我们第一次,所以没有什么固定的流程。不像他们就真正的访谈节目,他们可能会有按流程的提问。我们不拘束这种细节。虽然还是可能会有这么一个框架,可能聊起来会至少看起来不尴尬一点是吧哈哈哈。

刘巍然:哈哈哈是。

做密码学是一种机遇巧合?

学弱猹:我这边摘下来两个问题,基本上都是跟学长专业是有关系的。所以我们先从读者问题出发。第一个问题可能说是知乎当时找学长直播的时候问的一个问题,就是为什么选择做密码学,应该有接触差不多十年这么长时间了吧?就做这么长时间下来自己的体会和感受什么的。然后包括对于那些学密码学的那些后辈,比方说现在在学的一些还在学校的同学什么的,会有什么职业上的发展的建议。这第一个问题还问得挺细的,足够咱聊一段时间了。

刘巍然:我先简单介绍我做密码学和数据安全领域的整体流程。我第一次接触密码学是2010年,离现在差不多11年了。如果是做通信、电子领域的本科生可能会知道国内有一个叫全国大学生电子设计竞赛的比赛。奇数年,这个竞赛主要是设计电路,编写FPGA、单片机、ARM等电路上的软件,从而实现滤波器、调制解调等比较基础的功能。偶数年,这个竞赛会变成两个邀请赛。第一个竞赛叫全国大学生电子设计竞赛嵌入式邀请赛。当时智能机还没那么普及,市面上刚刚有了Android,嵌入式是非常火的领域。此竞赛要在嵌入式设备上设计硬件、变现软件,实现移动端设备的应用,就像IoT一样。第二个竞赛叫全国大学生电子设计竞赛信息安全技术邀请赛,现在好像已经取消了。顾名思义,这个竞赛与信息安全技术相关。2010年我刚大二,此竞赛刚刚举办到第二届。在当时,信息安全技术没有那么火爆,很少有本科生有学习密码学的机会。因此,参赛选拔并不考察密码学,而是考察计算机网络方面的知识,比如IP地址、子网掩码等的简单概念。

学弱猹:三次握手,四次握手?

刘巍然:还没到那个深度,就是给定IP地址、子网掩码,区分网络号和设备号这样的深度。大一本科生基本上刚开始学C语言,大家对计算机网络都没什么概念。机缘巧合的是,我在大一时选学了一门《计算机网络》的选修课。这门选修课的教材是谢希仁老师的《计算机网络》,一个蓝色封面的书。这门选修课的考试还挺严格,在考试之前我还专门好好复习了一下,结果参赛选拔的时候刚好考的就是计算机网络的知识,所以就比较顺利地通过了。选拔上后,我就开始去准备竞赛。那时,我对密码学一点都不了解,对于DES、AES、Diffie-Hellman密钥协商、椭圆曲线等完全没有概念。经过一个暑假,我大概了解了密码学的基本概念,以及Diffie-Hellman密钥协商协议,用这个协议实现了一个很简单的Ad Hoc网络加密通信,获得了一等奖。

学弱猹:哇,厉害厉害!

刘巍然:竞赛结束后,学院有一位做网络安全的老师觉得我还不错,问我要不要继续做密码学的研究。经过这一系列机缘巧合,我就走上了密码学之路。当时,我也没有考虑密码学火不火,毕业后是否好就业,直接就上了贼船。

刘巍然:大四毕业的时候有一个决策:读硕士还是直博?我也是脑子一热,家里也不是特别穷,也不是特别着急找工作,直博5年很快就能毕业,最后就直博了。读博期间我就做应用密码学,发了一些论文。现在看来,那当时发的论文原没有到顶级的状态,只能说马马虎虎。读博时我开始在知乎上写答案和文章。之所以写知乎,实际上是我研究遇到一些瓶颈,无法继续突破了。读博的时候,有瓶颈是很痛苦的一件事情,你肯定得找点什么事干。当时我遇到的瓶颈是因为自己的数理基础不够,现在我的数理基础又有了一些提高,当时那些看不懂的地方都可以理解了。

刘巍然:知乎上我写的一个比较有名的文章是一篇全同态加密的科普。这篇文章发布后,有个前辈在微博上私信我,说我知乎上写的文章内容不做,有没有兴趣来企业一起做?我是在2015年6月时收到的这个消息,最终我也加入了这个企业。

刘巍然:这位前辈非常有前瞻意识。实习入职后,他让我研究一个叫做差分隐私的技术,让我实现一个PoC。我进企业后最开始做的不是密码学,而是差分隐私。我是在2015年12月实习的。那个时候根本没有现成的差分隐私算法库,只有微软开源了一个用C#写的算法实现。为了完成PoC,我就研究C#的实现,并改成了Java版本。2017年6月毕业正式加入企业后,一直到2018年年底,我做的工作都是差分隐私。

刘巍然:2018年年底,隐私增强计算开始有火的苗头。隐私增强计算与密码学强相关,属于我的老本行。那个时候我觉得,隐私增强计算肯定会火的。企业互联互通肯定不能直接以原始数据的方式进行。从合规角度、隐私保护角度、企业诉求角度,直接用原始数据完成数据互联互通看起来都不太合理。我在 2018 年年底开始研究安全多方计算,即MPC。我大概花了半年多的时间,重新捡起老本行,做应用密码学,一直到现在。我现在的工作,一个是MPC的研究与实现,一个是差分隐私的研究与实现,以及如何将两者结合起来。简单来说,我当时并不是看到密码学方向好,就选择了这个专业,而是一个很机缘巧合的选择过程。就像2012 年,机器学习逐渐成为热门,各个公司都在招聘相应的人才,但那个时候进入机器学习领域工作的人基本都是在2008年甚至更早的时间开始研究机器学习的,但2008年机器学习肯定不算是一个非常火热的研究方向。2019年开始,密码学逐渐成为热门,现在进入到此领域做出贡献的人基本都是2015年甚至更早前开始研究密码学的。

刘巍然:有关第二个问题,我也介绍一下我密码学的入门课程。很多机器学习领域的人入门机器学习基本都是先从Andrew Ng在Coursera上的Machine Learning开始学起的。Machine Learning是Coursera上最早开设的课程之一。Compiler、Cryptology I也是Coursera最早开设的课程。Cryptology I这门课程的主讲人是斯坦福大学著名的密码学家Dan Boneh。我就是看着Dan Boneh的公开课和他的2篇论文入门的密码学。如果你在知乎上搜索密码学入门的问题,会看到包括我在内的多个答主都会力推这门课程,这门课是带我进入密码学领域非常好的一门公开课

刘巍然:第三个小问题是做密码学有什么心得。密码学最开始可以说是数学领域的一个分支,非常理论。现在,密码学已经不是理论研究了,很多方案都可以在实际中落地。我这里想说的心得是,做密码学不光要了解密码学领域本身的知识,还要了解其他计算机领域的知识。举例来说,如果想实现安全多方计算协议,就需要解决计算机之间的通信问题,这就涉及到计算机网络的知识。如果想研究隐私保护机器学习,就需要学习机器学习领域的知识。如果想让方案支持千万级以上的数据量,就需要把方案改造成分布式实现,这就涉及到分布式计算领域的知识。密码学领域下的计算都是密文运算,如果直接让用户调用密码学算法,则开发和应用成本就会变得很高,此时可能需要设计一个领域特定语言,使用户可以更平滑地使用密码学工具,这就涉及到编译原理的知识。用直观的方法实现密码学方案,其性能可能都不尽如人意,此时就可能涉及到应用SIMD进行计算加速。

学弱猹:让我想想,register吗?

刘巍然:是的,SIMD一种通过调用指令集来操作寄存器,实现运算加速的方法。例如对两个byte[]做XOR运算,传统方法是逐个byte完成运算,但用SIMD就可以用一条CPU指令一次完成16个byte的运算。不过,这样的实现方法会降低代码可读性。如果我们想修改已有的实现,起码要理解SIMD的基本原理和实现方法。我认为密码学领域的门槛很高,能把这些知识都融会贯通需要长时间的积累,时间甚至可能是以年为单位,过程会比较辛苦。但这也是我一直喜欢做密码学的原因,密码学或隐私计算是少有的需要基本上把已有的实现推导重来,重新搭建的领域,而这个过程可以引出很多新的问题,诞生出很多新的想法

学弱猹:确实整个过程下来,我一开始预计的说可能只会介绍像至少在我理解中的密码学的一些内容。但是最后是没有想到,能够把基本上能够把我所学过的计算机知识基本上全部都提到了一遍,这个还是非常大的一个收获。

刘巍然:如果只涉及理论密码学,主要知识点就是数论、计算复杂度,可证明安全和安全归。如果是面向实际应用的应用密码学,那就会涉及到非常多的知识。

学弱猹:对是的,这也其实实际上是我今年上班的时候所得到的一个体会,其实我们上班我们是做 deep learning 对吧?但其实它的所有的卡点都不是在于说你这个模型设计出来之后,它的这个各个 loss 应该怎么计算?然后它的相互之间应该怎么关联?其实那个东西你在一定的时间内都能去掌握或学会什么的。

学弱猹:但实际上大部分的卡点很有可能都在后端,说你的后端中的一个数据怎么样的处理,怎么样的存储,包括你的读取什么的包括可能比方说像采样的时候应该怎么采样。因为大家都知道的可能一点就是尤其像比方抖音采样数据的时候,他抖音拿数据的时候,他那个数据的这个频次是非常高的,所以绝对是不可能直接拿来用的。

学弱猹:那这种情况下就需要做采样,那采样的话应该怎么样采样才能保证你的这个机器学习的时候,训练样本不均衡问题得到缓解,这些都是非常实际的,因为你的这个后台不够强大所导致的出现的一些纯后端的问题。就感觉这种问题在很多那种上层领域,比方说像 AI 然后说像刚刚学长说的密码学里面应该都会有碰到过,所以还是非常 CS based 的东西。

刘巍然:对,我们最近在实现一个安全机器学习算法,就遇到了类似的问题。最开始实现时,我们把数据都加载到内存中,直接在内存中完成采样、计算的工作,这种实现相对比较容易。但在实际应用中,参与训练的数据量级可能是上千万的,内存放不下所有的数据。此时,我们就需要用IO流读取和处理数据,实现方法就变得完全不同。流式实现时,我们需要非常清楚地理解到协议的每一步需要读取多少数据,如何进行小批量数据交换,这非常工程,但也是实现过程中很有趣的问题

学弱猹:是的,我个人感觉也确实是这样。不过我在想一个事情,说关于密码学这一个内容,其实可以从学长的之前的经历看,学长应该本科是EE感觉?

刘巍然:对,我本科是EE的。

学弱猹:我以前一直以为是 CS 结果发现还是EE。

刘巍然:哈哈。

学弱猹:其实我在想,因为 EE 是偏硬件,它会接触偏硬件东西,这种偏硬件的基础会不会对于之后的工作其实反而可能会起到很大的一个帮助。因为之后的工作其实本质上来说也是会涉及到很多这种 OS层面,非常底层的一些东西,这个反而是超脱于可能密码学本身的,这个本科的基础应该会对学长现在的工作还是有很大的增益的。个人感觉。

刘巍然:我认为CS背景的同学入门应用密码学会相对更平滑一些。EE背景的同学想入门应用密码学,需要把CS的知识自学一遍。与CS背景的同学比较起来,即使到现在我也认为我的基础知识仍然很不扎实。不过EE背景的同学做密码学会有一个很大的优势。EE基本是从电路层面进行设计,相应程序都是在芯片或者小型设备上执行,这就需要在实现时非常小心存储和性能问题。这个背景在密码学里也会有很多应用。举个例子,安全多方计算协议里面会涉及到一些编码方案。论文中并没有提及如何对编码方案加速,但开源代码中给出了相应的实现。我研究开源代码时,很快就想到当时做EE时的编码也用到了类似的优化。其实现思路很简单,就是以16比特为单位构造查找表。这样一来,假设数据字有128比特长,直接实现时需要涉及到128次XOR运算,但提前构造查找表就可以把XOR运算次数降低到8次。这里面存在一个存储和计算性能的权衡,查找表越大,编码效率越高,但存储查找表所需的内存空间也会越大。付出努力思考和学习的知识,很可能在未来的某一刻就会用到。因此,我也建议应该认真地学习在校期间的各个课程,说不准未来有个时候这些课程的知识就会帮助到你

学弱猹:对,确实是这样的。

谈谈对互联网面试的理解和要求?

学弱猹:然后我们来回归一下。对,因为不回归的话可能整个这个稿子出来的话它会显得比较散乱。

刘巍然:哈哈哈哈,太长了。

学弱猹:我现在这两天公众号的,粉丝增长速度比之前快了一些。虽然我也不知道是不是微信做了一些处理,年终的时候给你发个福利啥的哈哈哈。所以我们想给受众一个福利。这个福利是这样的,假如我们现在不仅仅是做密码学,而是进入互联网领域,那么关于CS的可能哪些课程是相对比较重要的。刚才其实提到了几个像算法数据结构,然后像计算机网络,然后操作系统其实我现在还没有听到。但是我自己感觉操作系统可能也会有比较重要的一门课。然后还有complier,编译原理对不对?这么几门。然后我有没有漏的?漏的话可以再补充一些。

刘巍然:可以把工作性质大体分成两类:偏业务落地和迭代、篇研究和探索性质。我认为这两种类型工作对人才的要求不太一样。

刘巍然:第一类工作偏向于用已有技术解决业务中的问题。首先,要有扎实的编程能力。不一定要懂所有的编程语言,但建议深入学习两种类型的语言,一种是类似于C/Java的编译型语言,一种是类似于Python的解释型语言。编程是需要代码积累的,需要多写多练。可以刷Leetcode的习题、可以研究并改造开源库。其次,要深入理解算法。很多人都会有疑问:面试时为什么特别关注Leetcode?原因是很多实际问题都离不开对算法的理解。很多实际问题在完成基本功能的基础上,需要快速找到执行时间更短、更省存储空间的实现方法。很多新的协议、新的方法都是基础算法的组合。

刘巍然:第二类工作偏向于解决提出新的技术或方法,我偏向于第二类工作。作为面试官时,我倾向于考察深度。如果校招生提到他在学校期间做过一些项目,我会请他深入介绍项目的背景、设计思想、具体实施的完整过程,从细节判断这位校招生是否对问题有着深入的思考,是否在追求“Can we do better”。举例来说,如果校招生提到掌握RSA算法,我就会展开问RSA算法的细节,例如:RSA中的质数选取有什么要求?如何用中国剩余定理实现快速解密、公钥e的取值有什么要求?私钥d的取值有什么要求?Plain RSA是不是安全的?如何把Plain RSA改造为安全算法?这些问题的难度不小,有的问题涉及到目前最前沿的研究方向,从而深入考察基础知识的掌握情况。一般来说,如果可以在某个领域挖掘到一定的深度,就会形成一种思维习惯,即使换做其他领域,也会挖到相应的深度

刘巍然:编程基础甚至算法的要求都可以稍微弱化一点,但专业领域的知识要掌握的非常扎实。当然了,基础的编程能力、基础的算法概念还是需要掌握的,起码具备实现能力。

刘巍然:在校期间具备5万行左右的代码量已经非常了不起了。这5万行代码可以来自于Leetcode,可以来自于Coursera上的作业,也可以来自于自己的项目。这里的5万行是一共撰写的量,包括必要的空格、换行、甚至注释,纯实现的5万行代码还是很有挑战性的。

刘巍然:1千行代码量基本只能实现一个或者多个算法。到1万行时,就需要拆分成效模块,并通过某种形式将各个小模块组合起来,这就可能会引入设计模式了。10万的项目已经有一定规模,需要从功能上进行拆分,并增加大量的单元测试了。百万行项目就需要完备的架构设计。

工作经验 V.S. 自我提升,你的选择是?

学弱猹:这也是非常有意思的回答角度,相当于说从一个研究型和一个工程型的角度的思考。说到工程,有没有想到之前我一个朋友就是反正跟我年纪差不多大,他应该是跟我一级的当时在商汤实习的时候说,入职拿到一个 20 多万行的代码。然后我说这个量级肯定不可能是Python代码,一定是C++代码。

刘巍然:也可能是Java代码。

学弱猹:哈哈哈哈我倾向于C++代码,因为他说经常会遇到一个指针的指针的指针的指针,就经常一个指针可能有三四层的这样的引用。我就特别佩服。为什么呢?就因为我一直面算法知道吧,就是我从那个一开始到最后虽然公司换了有一些,但是岗位一直没变过,一直是干算法。所以为什么不面开发呢?因为面不过。

学弱猹:开发那些这东西对我来说不是特别熟悉。包括对C++特性其实也是讳莫如深吧。因为你知道其实这个就有点相当于一个tradeoff这种感觉。比方 tradeoff 其实尤其在我们统计领域也是非常常见的。一个统计例子就是假设检验,假设检验里面第一类错误和第二类错误,你只有在增大数据量的时候才会同时减少两类错误,否则的话你降低第一类错误就升高第二类错误,这就是个 tradeoff。然后包括还有一个强化学习对不对?你是要 explore 还是要 exploit 对不对?它也会有两个不同的权衡。

学弱猹:其实现在和这个领域,虽然其实我不知道这个领域从哪来,EE也是有这样的一个思考,经济学是一开始第一节课就会讲我们有十个原则,有一个原则,说我们要注意tradeoff。不过说到这里,其实涉及到一个,可能涉及到一个我自己这个问题,不是读者问的这个问题。是我突然想起来的一个问题。就是因为现在其实大家非常清楚,整个行业趋势,不管是在国内还是在美国,转码都是一个大的热潮。在美国确实有很多人会转码,但是其实很多人可能想的说我要抛弃我之前的可能我所有的东西,比方说他学数学的,学商科的,学经济的,直接学习管理的是会计的,不管怎么样,然后他可能就会想说去抛弃之前的一些东西,然后会去刷 leetcode,刷个五六百道,然后就可以进入公司了。

学弱猹:基本上其实大部分人都会以这样的方式,但是其实从我自己的角度来看,我一直不太推荐这样的一个方式,因为我觉得当然排除你自己实在是不想干了,想找个公司,比方说在阿里当个p5,在谷歌当个 L3 就停了,不想干了,到这一步就停了,这种情况我不考虑。

学弱猹:假如说你希望说你自己有一些理想或当 boss 的话,我觉得还需要有一些核心竞争力。这是我自己的想法。然后学长那边可能就是密码和差分隐私这些,因为它毕竟是一个上层领域的一些东西。有了这样的一些基础的知识,有了这样的一些理解,再结合本身的工程上的能力,就会成为相当于说就是一个公司不可或缺的一个存在。然后现在我们统计领域的话,可能就是对应一个博士学位,因为统计里面有非常多的模型,非常多的方法,然后要做很多的项目。当然我们做的项目是不要考虑什么,底层的代码是不是用寄存器的,我们是完全不需要考虑到那一步的。我们更多的是考虑到上层的模型的一些设计,比方说你用什么样的统计模型,然后统计模型跑出来的那个实验是否符合你数据的假设,我们更多考虑这样的一些问题。

学弱猹:所以这个就是我的想法,或者说这也是我想问学长的一点,当前的这个互联网趋势,相当于说其实是两个方面。一个方面就是你在学习中掌握的一些核心竞争力,因为核心经验力其实很多时候都是要在学校里面得到的,在工程中其实很难遇到。另外一方面有可能你的工作经验和工程能力,因为工作时间长了,你的代码量就大了,然后你的工作能力就会很强。那么在这两个方面中,如果一定要选一个你会怎么选,或者说比方说两个方面都选的话,应该如何平衡

刘巍然:我简单的回答一下,不过我觉得我的回答更像是经验分享。首先,我认为刷Leetcode更像是一个门槛。刷Leetcode的过程更像是考察理论层面知识在实际中的应用。通过刷Leetcode,我们可以提高编程的熟练度、掌握算法的基本实现方法等。如果不掌握这些知识,可能和同事都没办法交流。迈过门槛才有核心技术和工作经验的取舍问题。

刘巍然:核心技术和工作经验是项目中磨练出来的,实践出真知。这里我想表达两个观点。第一点:永远不要高估自己的主观能动性。对于包括我在内的绝大多数人,没有考试压力、项目压力的条件下,靠主观能动性学习知识是很困难的。我自认为自己是有工作狂属性的人。我曾有过一段离职间空闲的时间。空闲之前,我一直想着这段时间一定要学几个之前一直想学习的知识,但真到了空闲的时候,我就学不下去了,总想着应该再休息一下。第二点:至少在前中期阶段,我们很难自主选择提高工作经验,因为工作内容是业务、公司发展决定的。我们能选择的是提高自己的核心技术。这里的核心技术不仅指的是专业技术,还有表达、写作等的软实力。对于专业技术,我的观点一直是做的越深越好。对于软实力,我认为应该是创造练习的机会,如抓住团队分享的机会尽可能多讲解,多写技术文章等等。

学弱猹:非常感谢!然后这个相当于是读者的第一个问题,其实我们已经发散了很多了。读者估计发现说你们这就聊一个问题,聊一个多小时,下次有什么可能都不用提问,就两个问题可能我们都可以聊四五个小时,直接聊一下午算了。再泡杯茶,慢慢喝,喝的茶叶都干了。

刘巍然:哈哈哈,主持人很不容易,一不留神节目就超时了。

只知结果不知过程——有趣的零知识证明

学弱猹:是,我也感受到了。好,我们进入第二个问题,这可能是一个非常专业的问题。我也不知道学长懂不懂,反正我是不懂。这个问题是这样,有一个概念,我不知道学长知不知道,叫做零知识证明。

刘巍然:这个我知道。

学弱猹:这位读者想问,一,有没有计划搞零知识证明的科普。二,零知识证明他究竟是一个什么样的一个概念。就是简单来说这里其实之前有人在,这个是群里面问的一个问题,当然后来有人在群里解释过。简单来说,比方说我现在看到一个人,但是我没有给它拍照片。那你要证明我确实见过这个人。因为你现在没有证据,但是你要证明我见过这个人。这个命题你应该怎么样证明?总结一下,相当于两个问题。第一个问题就是有没有计划搞零知识证明的科普。第二个可能是介绍一下零知识证明的概念与应用。

刘巍然:这个问题很专业,我来讲一个零知识证明的例子。假设我是一个红绿色盲症患者,我无法分辨红色和绿色,但我不想让别人知道我是红绿色盲症患者。现在,学弱猹你是一位体检医生,你想判断我到底是不是红绿色盲症患者,怎么办?

学弱猹:看颜色卡片呗。

刘巍然:看颜色卡片就是一种零知识证明。我们来简化一下颜色卡片。你准备红色和绿色两个球,随机给我看一个球,问我球是红色的还是绿色的。如果我不是红绿色盲症患者,我就一定可以准确告诉你球的颜色。但如果我是红绿色盲症患者,我也可以瞎猜答案告诉你,此时我有1/2的概率猜测正确。随后,你再随机给我看一个球,重复执行k次。只要我有一次回答错误,你就知道我是一位红绿色盲症患者。如果我每次都能回答正确,你就知道我有

1 - 1/2^k

的概率不是一位红绿色盲症患者。在这个过程中,我只向你透露了1比特的信息:我能否区分红色和绿色。

学弱猹:是个非常有意思的领域听起来。

刘巍然:零知识证明有什么应用呢?我举两个实际的例子。第一个例子与数据库查询相关。数据库中存储了客户上传的数据。客户提交一条SQL查询语句,数据库返回SQL查询结果。这里存在一个问题:数据库如何证明此查询结果就是这条SQL语句的执行结果呢?可以用零知识证明解决这个问题。数据库返回SQL执行结果后,再返回一个证明。客户通过验证这个证明,就可以判断此结果是否是提交SQL查询语句所返回的结果。第二个例子是零币,这是区块链里面一个非常著名的隐私保护数字货币。考虑现实中的纸币,我们很难造出假钞,但绝大多数人都可以验证某张纸币是不是假钞。零币中就包含一个零知识证明,通过验证此证明,就可以知道此零币当前是否有效。

刘巍然:回到读者的提问。第一,我是否有计划做零知识证明的科普?答案是:我不准备做。零知识证明是安全多方计算的一个特例,但零知识证明已经成为一个重要的密码学分支,我不太了解实际细节,因此我也无法为零知识证明做科普。知乎上面有很多零知识证明的专家,他们可能会有兴趣来做一些科普工作。

学弱猹:OK 我大概明白了。其实说到零知识证明这里,我想到一个例子,就是给你三串乱码,问你哪一串乱码是最有可能是人工写出来的,而不是计算机生成的,这个是个非常有意思的问题。

刘巍然:这个好像就是图灵测试了。

学弱猹:为什么说想到这个呢?是因为想到说尤其是第一个那个球的红球跟绿球的例子,它其实有点像说,我虽然不能告诉你具体的这个方法的规则是什么,但是我可以通过比方说通过概率,我告诉你说我确实会这个东西,只不过我不能告诉你这具体的方法是啥。

学弱猹:为什么他当时就查出来,因为有一串连续的四个同样的数,但是你要是计算机生成的话,生成的概率是小于大概万分之一这样的一个概率。所以这串数最有可能是人工生成的,所以相当于说,人工写的,跟你计算机写的不一样。我就想到这个例子,但我没想到说原来这是这么大的一个领域。我原来以为它是跟我说的拍照片的例子是差不多的,看起来我的理解还是有所偏差。

学弱猹:OK 那零知识证明就聊到这里。两个其实非常学术的问题,没想到我们也聊了一个小时的时间了。因为我知道学长时间很宝贵,所以我们最后可能以闲聊的方式来做结束。

迷茫中去“卷”,你怎么看?

学弱猹:最后其实就是关于信念的问题,聊一点比较大的东西,因为其实听到学长的经历,我们能感受到的一个点就是学长并不是像我们现在有可能比方说现在计算机比较热,我们就冲着这个热度去。学长当时做密码学的时候,其实有可能是对于密码学比较感兴趣,然后就会去希望去做。加上单纯的觉得直博比较快,所以就走了下去。其实当时我估计学长就这么一个想法,我觉得是会抱有一点这种理想主义的这么一个信念,所以如何给当下迷茫的像我们这样的一种后辈,一些比方说支持或者信念,相当于说几句话,支撑一下我们这些当下迷茫的人,说你们应该如何去坚定你们自己的想走的这样道路走下去。

刘巍然:我认为有几个因素。第一,我可能确实是一个比较靠情怀工作的人,有点理想主义的信念,但实际执行是要根据客观情况来决定。忽略客观情况直接上升到情怀是很困难的。当然了,大多数情况下,可能是眼前的事情会越来越多,但这只不意味着不能付出100%的精力去实现自己的理想,不意味着不能实现自己的理想。你可以每周花费1天的时间,比如周六…等下,我好像开始卷了…

学弱猹:价值观不正确哈哈哈。

刘巍然:比如,每天花费一个小时的时间去向自己的理想逐渐买进。这1小时可以是早上8点到9点,也可能是晚上9点到10点。我们来简单计算一下。如果每天拿出1小时的时间,每周就可以多5个小时的时间,一年就可以多出上百个小时。这种积少成多的方法,一方面可以帮助我们完成个人理想,另一方面也不会过多侵占本职工作。我之前在知乎上经常会听译一些视频。那时我每天早上会固定拿出1小时的非工作时间听译,这也帮助我养成了早起的习惯。这一年听译的少了,原因是今年一直在写书出书。今年我也给自己立了个Flag,要听译完一些我之前一直想学的几个系列的视频。这里的难点在于每天坚持。我特别不喜欢如“每天坚持一小时锻炼,就会瘦下来”的说法,每天坚持一小时是非常困难的。

学弱猹:对,太难了。

刘巍然:每天都能坚持一小时,也说明你真的想去做成某件事情。话句话说,也可以通过这种方式来检验出你是不是真的把这件事情当做自己的理想。举个例子,现在做主播很火热,刚看直播的观众可能觉得主播没什么了不起的。但仔细想一想,每天雷打不动的直播,还要准备素材、要裁剪视频、坚持好几年是很难的。更重要的是,最开始直播的时候观众可能非常少,无法得到正向反馈。这种情况下,是否还能够坚持下来?但我相信,专门空出时间来完成自己的理想,经过长年累月的积累,一定会带来变化。

学弱猹:对,所以我可以看出来说一方面其实学长肯定不是那种,像我们像我们现在其实已经很多人躺平了对吧,虽然可能年纪轻轻。但学长可以看出来说还是会有一些理想的少年气。就像现在可能完成自己 KPI 之后还是会抽一些时间去,比方说发一些 paper 什么的,还是想要做一些自己的研究什么的,对于自己可能几年前或者说年轻时候的一些理想还认为有可能实现,相当于说赤子之心仍在,我觉得这一点是非常可贵的。

学弱猹:其实就算我现在可能比学长小那么几岁,就很多时候已经被各种未知磨平棱角了,所以在生活的时候可能就会过得比较迷茫或者比较焦虑这些。像我自己的话,像我自己写知乎今年应该接第六年了,其实有一次很长的一段时间了。所以当然我其实今年应该是输出最少的一年。对这个也比较好理解,因为后面不再是读数学专业了,所以相关的输出会比较少。那不管怎么样,包括我在内的所有读者应该都会去努力地去思考,自己到底想要什么,以及自己到底有没有这种信念和这种毅力能够去坚持做这样的自己的热忱的一个方向。我觉得还是需要去值得每一个人去思考的,值得每一个人去认真对待的。

刘巍然:我可能要纠正几点。第一点是:我也想躺平,哈哈哈。当然了,我所说的躺平是一种心态。躺平的心态更适合完成一些自己想做的一些事情。第二点是:理想是会变的。随着时间的发展、心态的变化,可以去调整理想,但是可以坚持大的方向。例如,我自己比较希望做数据安全的科普工作。知乎、听译、出书会带来一些名声,但核心目的是我认为数据安全领域很有意思,希望有更多的人可以看到这个领域,一起投入到这个领域中来

学弱猹:这是非常好的纠正。对,要不然的话要说躺平,底下的读者问我说你这人怎么这么卷。对,到时候骂的不是学长,肯定骂的是我了,还好纠正之后,就正好把我的意思给表达出来了,因为如果直接按之前的版本表达出来,真有可能会被人误解。

刘巍然:有关卷,我也想补充一些我的观点。需要区分不同情况下的“卷”。一种卷是,看到别人在做什么,自己就也在做什么,要把别人做的事情抢过来,这是一类卷。还有一种卷是,自己喜欢做某件事情,不管别人做不做自己都会做。这种类型的卷更属于实现自己的理想

学弱猹:哈哈哈哈哈,主题升华了!

学弱猹:OK,那我们不发散了,因为一个多小时了应该够写稿的了。然后其实我们刚才其实还会有一些主题的,因为时间关系我们可能比方说留到下一次或者是看读者的反应,因为不排除这读者要是热度高,咱们可能做个续更什么的,这也不好说是吧

学弱猹:比方说学术话题可能就是关于学长最近的研究,然后最近关注什么主题,有没有想给大家分享的。然后生活话题可能就是刚刚提到学长说要布置家庭的,准备备个孕什么的?到这个阶段了对,这个时候肯定事情会很多对吧,这个时候还要去每一天抽一段时间去准备自己工作的时候,肯定会涉及到一个平衡的问题,这样的问题会怎么解决?

刘巍然:对,这些还是比较重要的。

学弱猹:其实年轻人还是很好奇这样的一些问题的。虽然大家现在很多人说没结婚,但正要提到结婚这两个字,有的时候还是会有一些憧憬的。但是我们可能也许看读者反应,可能会留到下一期。这个这期我们就不发散了,因为学长时间也比较宝贵。

学弱猹:非常感谢学长接受这次访谈!我确实自己在这个访谈中也是能够得到不少来自前辈的很多的指导建议,还有一些具体的知识。然后我也非常感谢。零知识证明这个我也是真没想到,因为跟我之前想的好像确实不太一样。

学弱猹:然后希望稿子出来之后,读者能够真正感受到说,我们在这个访谈中能够一方面像大家介绍一些新的知识,另一方面也有相当于介绍关于前辈,在我们可能同样思考的问题上,会有什么样不同的见解。

学弱猹:那今天我们就到这里,祝学长工作愉快,备孕顺利哈哈哈!

刘巍然:好呀,拜拜。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 学弱猹的精品小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 采访正文
  • 做密码学是一种机遇巧合?
  • 谈谈对互联网面试的理解和要求?
  • 工作经验 V.S. 自我提升,你的选择是?
  • 只知结果不知过程——有趣的零知识证明
  • 迷茫中去“卷”,你怎么看?
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档