线程本地存储:编译器、链接器与内核的十五年共舞
一个全局变量的"分身术" 1979年,Unix V7引入了一个特殊的全局变量——errno。当系统调用失败时,它会将错误码写入这个变量,供后续代码检查。这在单线程时代完美运作。但到了1990年代,多线程编程成为主流,问题出现了:如果两个线程同时执行系统调用,它们会覆盖彼此的errno值。 ...
一个全局变量的"分身术" 1979年,Unix V7引入了一个特殊的全局变量——errno。当系统调用失败时,它会将错误码写入这个变量,供后续代码检查。这在单线程时代完美运作。但到了1990年代,多线程编程成为主流,问题出现了:如果两个线程同时执行系统调用,它们会覆盖彼此的errno值。 ...
1976年,Whitfield Diffie和Martin Hellman发表了一篇划时代的论文,提出了公钥密码学的概念。在此之前,任何想要秘密通信的双方都必须预先共享密钥——这是一个困扰密码学家数千年的难题。然而,公钥密码学在解决密钥分发问题的同时,也带来了一个新的困境:它太慢了。 ...
2014年4月,Heartbleed漏洞震惊全球。这个OpenSSL库中的缓冲区越界读取漏洞可能导致服务器私钥泄露,理论上需要立即撤销并重新签发所有受影响的证书。然而,马里兰大学的研究团队在三周后发现:超过73%的易受攻击证书未被重新签发,超过87%未被撤销。更令人担忧的是,撤销率在周末会显著下降——仿佛攻击者也会休息。 ...
2011年8月28日,一名伊朗用户在访问Gmail时发现浏览器显示的证书异常。这条看似微不足道的线索,揭开了一场影响超过30万人的大规模中间人攻击。攻击者不是破解了加密算法,也没有入侵Google的服务器——他们只是拿到了一张合法的证书。 ...
2014年,IETF TLS工作组收到了一份来自Eric Rescorla的提案。这份题为《draft-rescorla-tls13-new-flows》的文档开宗明义地提出了TLS 1.3的两大设计目标:减少往返次数、移除不安全特性。四年后,RFC 8446正式发布,TLS 1.3将握手延迟从2-RTT压缩到1-RTT,会话恢复场景更是达到了0-RTT。 ...