你有没有想过一个问题——你在淘宝下单的时候,银行卡号是怎么安全地传到服务器的?路上有无数个路由器在转发你的数据,任何一个节点都能看到你在发什么。但你的钱没被盗刷。为什么?
答案是加密。而今天最经典的加密算法之一,叫RSA。它不靠复杂的密码本,不靠暗号接头,只靠一个数学事实:两个大素数相乘很容易,但把乘积分解回原来的两个素数,难如登天。
这个故事从两个数学家说起。
1977年,Ron Rivest、Adi Shamir和Leonard Adleman在MIT试图解决一个看起来不可能的问题:两个人从没碰过面,也没提前约定过密码,能不能在一条完全公开的信道上安全通信?如果他们之前没有共享过任何秘密,任何加密方式都是徒劳的——这个直觉曾经统治了密码学界几千年。
但三个人找到了突破口。他们的想法看似疯狂:把锁公开,任何人都可以用这把锁锁上消息,但只有你有钥匙能打开。
这就是非对称加密的核心——加密和解密用的是不同的钥匙。你公开一把锁(公钥),人人可以用来加密消息。你自己留一把钥匙(私钥),只有你能解密。别人哪怕拿到了你的锁,也造不出你的钥匙。
那数学是怎么做到的?
先选两个大素数,比如p和q。(在真实的RSA里,这两个数每个都有几百位,是真正的天文数字。)把p和q乘起来得到n。这个n就是公钥的一部分,公开出去也没关系,因为要把n分解回p和q——在现有计算机的算力下——需要几亿年。
接下来RSA利用欧拉函数和模幂运算,生成一对密钥。当你要加密一条消息m时,只需要做一次模幂运算:
c = m^e mod n
得到的c就是密文。而解密用的钥匙d,只有知道p和q的人才能算出来。攻击者虽然知道n和e,但不知道p和q,所以算不出d。
整个系统建立在一条悬崖边上:走一步(乘法)花几毫秒,走回来(因式分解)花几亿年。
这就是单向函数。
现实中的RSA比你想象的更无处不在。每次你访问以https开头的网站,浏览器和服务器之间都会进行一次RSA握手。你的浏览器拿到服务器的公钥,用它加密一个临时对称密钥传过去,之后双方用这个对称密钥高效通信(RSA只用来传递初始密钥,因为纯RSA加密太慢了)。
SSH远程连接、数字签名、软件更新验证、电子合同……几乎所有你认为是"安全"的事情,底层都有RSA或它的亲戚(如ECC椭圆曲线加密)在干活。
但RSA不是无敌的。
第一个问题是密钥长度。1999年,一个512位的RSA密钥被成功分解。2010年,768位被分解。今天,RSA推荐使用2048位以上——每次密钥长度加一位,分解难度呈指数级增长,但加密和解密的速度也会变慢。这像是一场军备竞赛:计算机更快了,我们的密钥就得更长。
第二个问题更致命——量子计算。1994年,Peter Shor提出了一种量子算法,能在多项式时间内分解大整数。如果一台足够大的量子计算机被造出来,RSA将在一夜之间变成废纸。这不是遥远未来的科幻,IBM、Google、中国科技大学的量子计算机正在逐年缩小与那个"足够大"的距离。
已经有后量子密码学在研究对抗方案。格密码、哈希签名、多元多项式密码——这些新方案不需要大整数分解,它们依赖的是另一种数学难题,量子计算机暂时拿它没办法。NIST(美国国家标准与技术研究院)已经在2024年正式发布了首批后量子密码标准。RSA的时代终有一天会落幕。
但无论如何,RSA改变了世界。它第一次证明了:在从未见面的两个人之间,秘密可以安全传递。这个想法在1977年是革命性的——它让数字世界里的信任不再是人与人之间的事,而是人与数学之间的事。
你每次打开那个绿色小锁的时候,其实就是在一个两千多年都没有人解决过的问题上说了一句:我相信数学。