线程本地存储:编译器、链接器与内核的十五年共舞

一个全局变量的"分身术" 1979年,Unix V7引入了一个特殊的全局变量——errno。当系统调用失败时,它会将错误码写入这个变量,供后续代码检查。这在单线程时代完美运作。但到了1990年代,多线程编程成为主流,问题出现了:如果两个线程同时执行系统调用,它们会覆盖彼此的errno值。 ...

9 min · 4315 words

为什么非对称加密比对称加密慢1000倍:从数学原理到混合加密的工程智慧

1976年,Whitfield Diffie和Martin Hellman发表了一篇划时代的论文,提出了公钥密码学的概念。在此之前,任何想要秘密通信的双方都必须预先共享密钥——这是一个困扰密码学家数千年的难题。然而,公钥密码学在解决密钥分发问题的同时,也带来了一个新的困境:它太慢了。 ...

10 min · 4631 words

被吊销的HTTPS证书为何仍然可信?从软失败陷阱到CRLite的二十年技术突围

2014年4月,Heartbleed漏洞震惊全球。这个OpenSSL库中的缓冲区越界读取漏洞可能导致服务器私钥泄露,理论上需要立即撤销并重新签发所有受影响的证书。然而,马里兰大学的研究团队在三周后发现:超过73%的易受攻击证书未被重新签发,超过87%未被撤销。更令人担忧的是,撤销率在周末会显著下降——仿佛攻击者也会休息。 ...

10 min · 4865 words

信任链的二十年困局:为何HTTPS安全建立在一百多个单点故障之上

2011年8月28日,一名伊朗用户在访问Gmail时发现浏览器显示的证书异常。这条看似微不足道的线索,揭开了一场影响超过30万人的大规模中间人攻击。攻击者不是破解了加密算法,也没有入侵Google的服务器——他们只是拿到了一张合法的证书。 ...

11 min · 5032 words

TLS握手为何需要两轮往返:从协议设计到性能优化的十年演进

2014年,IETF TLS工作组收到了一份来自Eric Rescorla的提案。这份题为《draft-rescorla-tls13-new-flows》的文档开宗明义地提出了TLS 1.3的两大设计目标:减少往返次数、移除不安全特性。四年后,RFC 8446正式发布,TLS 1.3将握手延迟从2-RTT压缩到1-RTT,会话恢复场景更是达到了0-RTT。 ...

7 min · 3463 words