钟表算术:走到 12 点再走一步回到 1,数字被卷成一个圈。密码学看中的,是这个圈里藏着一类单向门——正着走轻而易举,倒着走却近乎不可能。把两个大素数相乘,一秒钟的事;可拿到那个几百位的乘积,想把它拆回原来的两个因子,全世界的算力一起上也要天文年数。
RSA 就把秘密锁在这道不对称里:相乘是锁门,分解是唯一的钥匙孔。任何人都能照着公开的规则加密(锁门),却只有握着素因子的人能解开——因为只有他绕过了那道分解难题。
取两个大素数 $p,q$,令 $n=pq$。公钥是 $(n,e)$,私钥是 $d$,两者由 $ed\equiv 1\pmod{\varphi(n)}$ 绑定($\varphi(n)=(p-1)(q-1)$ 是欧拉函数)。加密算 $m^e$、解密算 $c^d$,一来一回正好还原明文 $m$——这靠欧拉定理 $m^{\varphi(n)}\equiv 1$ 保证。要害在于:算 $\varphi(n)$ 等价于分解 $n$,而不知道 $p,q$ 就求不出 $d$。公开 $n$ 无妨,它反推不出私钥。
美在加密与解密是同一个操作的两次施行:连乘 $e$ 次、再连乘 $d$ 次,因为 $ed\equiv1$,绕模一圈精准回到原点。一个纯粹的数论事实——欧拉定理——被反过来当作工程的地基。更妙的是这里的「难」并非已被证明的难,而是三百年来无人攻破的经验之难:整个数字世界的信任,悬在一个尚未解决的数学问题之上。
你每次看到浏览器的小锁,背后都有它的血脉:TLS/HTTPS 握手、SSH、PGP 邮件加密。数字签名更是把它反着用——私钥「解密」一段摘要,任何人用公钥「加密」即可验真,于是软件更新、证书、电子合同有了不可抵赖的签名。
先别管公式,看一条对称的光滑曲线。规定一种古怪的「加法」:过曲线上两点 $P,Q$ 画一条直线,它必再穿过曲线上第三点,把那点沿横轴翻到对面,就是 $P+Q$。荒唐吗?可这套规则竟严丝合缝地构成一个群——有单位元、有逆元、可结合。
把一个点 $P$ 自己加 $k$ 次得到 $kP$,如同在曲线上跳 $k$ 步;跳很快。但反过来:只给你起点 $P$ 和落点 $kP$,要问跳了几步——这就是又一道单向门,比分解大数还陡峭。
曲线取 $y^2=x^3+ax+b$(在有限域上离散取点)。点加法如上,重复相加定义标量乘 $kP$。安全建在椭圆曲线离散对数问题(ECDLP):已知 $P$ 与 $kP$,求整数 $k$ 在计算上不可行。因为最快的攻击算法都对它无从下手,ECC 用 256 位密钥就达到 RSA 3072 位的安全强度——同等安全,钥匙短一大截。
美在几何与代数的合一:一条你能用铅笔画出的曲线,「画直线取交点」这个纯视觉动作,恰好就是一个抽象群的运算律。看得见的作图与看不见的代数结构,原来是同一件事的两张面孔。而它的实用之美同样惊人——把安全塞进更短的密钥,正合手机、芯片卡、物联网这些锱铢必较的场景。
比特币与以太坊的每一笔签名都跑在曲线 secp256k1 上;现代 TLS 的密钥交换(ECDHE)、苹果/安卓的安全芯片、Signal 的端到端加密,几乎全面用 ECC 取代了 RSA。短密钥 = 快握手 + 省电,这是移动时代的刚需。
坏消息先说:Shor 算法让理想量子计算机能高效分解大数、破解离散对数——RSA 与 ECC 的两道单向门,在量子面前同时坍塌。密码学需要一个量子也撬不动的新难题。
答案藏在高维「格」里:想象空间中无限延展的规则网格点。给你一个乱糟糟的坐标基,要找离某点最近的格点——维度一高,这就成了大海捞针;可若你手里有一组「漂亮」的基,同样的问题瞬间可解。那组好基,就是陷门。量子计算机对这道高维几何难题,至今束手无策。
主力难题是带误差学习(LWE):给定随机矩阵 $A$ 与向量 $\mathbf b$,其中 $\mathbf b$ 由秘密 $\mathbf s$ 经线性变换、再掺入一点小噪声 $\mathbf e$ 得到,求回 $\mathbf s$。没有噪声,这是中学解方程;加了噪声,问题就等价于在高维格里找最近点——已知的最难问题之一。关键是它可归约到格的最坏情况难度:破解平均实例,不比破解最难实例更容易。
美在那一撮噪声:仅仅往干净的线性方程里撒一把小误差,就把一道小学生能解的题,抬升成量子计算机也翻不动的高墙。「难」不再是运气好没人破,而是被牢牢钉在最坏情况上——这种从平均到最坏的安全归约,是密码学梦寐以求的严谨。数论的门被量子撞开后,几何接过了守夜的火把。
2024 年 NIST 正式标准化了格密码 Kyber(密钥封装)与 Dilithium(签名),全球开始「后量子迁移」。更远处,格还撑起了全同态加密——让云端在不解密的前提下直接对密文做计算,为隐私 AI 与机密数据托管打开大门。
阿里巴巴的环形山洞,深处有一道咒语才能开的门。你想让朋友相信你会咒语,又一个字都不肯泄露。怎么办?让他站在洞口,你先随便走进左道或右道;他再喊「从右边出来」。若你真会咒语,无论进的哪条道都能应命而出;若你在蒙,只有一半概率恰好站对边。
喊一次,你蒙对的概率 $1/2$;重复二十次,蒙混的概率跌到百万分之一。他确信你会咒语,却始终没听到咒语半个音节——证明了「我知道」,泄露的知识量是零。
一个零知识证明须同时满足三条:完备性(命题为真,诚实证明者总能说服验证者)、可靠性(命题为假,任何骗子都只有极小概率蒙混过关)、零知识(验证者除了「命题为真」这一比特,学不到任何别的东西)。第三条怎么严格证明?靠模拟器:若验证者不与真证明者交互、单凭自己就能伪造出一段以假乱真的对话,那么真实对话里显然也没藏任何有用信息——因为假的和真的无从分辨。
美在它把「证明」与「知识」干净地剥离:我们向来以为,要让你信服,就得把理由摊给你看;零知识证明却说服你「我有答案」而不交出答案分毫。这近乎悖论的能力,最终由一个反直觉的论证坐实——能被凭空模拟出来的东西,不可能携带真信息。密码学在此触到了认识论的深水:说服,原来可以与揭示彻底分家。
隐私币 Zcash 用 zk-SNARK 证明「这笔转账合法」却不暴露收付款人与金额;以太坊的 zk-Rollup 把成千上万笔交易压成一个简短证明,链上只验证书、不重算,一举扩容。更广地,它让你证明「我已成年 / 我有资格」而不交出身份证——隐私身份认证的基石。