编程语言研究书库

访问控制与密码学 — 谁可以做什么的判定,与操作系统管不到的地方

21 访问控制与密码学 — 谁可以做什么的判定,与操作系统管不到的地方

1. 这一章讲什么

五级台阶的后两级。访问控制:认证回答了「你是谁」,这一步回答 「你能不能做这件事」——把第 20 章写的策略变成每个系统调用前的 一次判定。两种对偶的数据结构(名单 vs 钥匙)各有死穴,UNIX 的 九位权限位是资源极度受限下的工程取舍。密码学:操作系统只控制 「它自己那台机器」的资源,数据一旦离开(磁盘被偷、网络被窃听、 别的机器不可信),就轮到密码学出场——这一章只讲用法与工程教训, 一步数学不进。

2. 顶层全景

  访问控制(把策略变成判定):
    判定两问:请求者是谁(主体)/ 请求什么(客体),策略给出 是/否
    两种数据结构:
      ACL ── 每个资源挂一张名单(城堡门口的对照表)
      能力 ── 每个主体持钥匙(电影票:带票进场,不问你是谁)
    UNIX 九位权限位 = ACL 的极简解(owner/group/other × rwx)
      9 bit 的来历:inode 里只腾得出这么多
    setuid = 最小权限原则的经典反例(一整段 root 权力借给普通程序)
        │
  密码学(OS 管不到的地方):
    对称加密:一把钥匙,快(AES);难点 = 密钥分发
    公钥:私钥签 → 认证;公钥加密 → 保密
    数字签名 = 私钥加密 + 公钥验;证书 = 把「公钥属于谁」也签名
    铁律1:别自造算法(全世界的顶级密码学家都造出过烂算法)
    铁律2:真正的难点从来不是算法,是密钥管理

图说:上半是「判定」的数据结构之争,下半是「管不到」时的外包方案。

3. 核心原理

3.1 访问控制:名单与钥匙的对偶

判定的骨架(书里以 open("/var/foo", O_RDWR) 为例): 主体(User X 的进程)发起请求,策略决定放行与否1。 两种实现(计算机科学家给出的两个基本答案)2:

ACL(访问控制列表):每个资源挂一张名单——「城堡门口站着 保安,对照准入名单」。查 /tmp/foo 的 ACL 上有没有 X、 X 的条目里有没有 rw3。优点:回答「谁能访问这个资源」 一句话的事,改权限也只需动这张名单4。工程问题:名单要持久化 (存哪?——UNIX 把它塞进 inode)、不能给每个文件预分配 「所有用户每人一位」(太贵)、查一次访问要跟着名单读一次。

UNIX 九位权限位就是这场资源危机的解法。设计者们算了算: inode 里只腾得出 9 位给 ACL。于是他们赌「大多数策略用 三个条目就够」:owner / group / other,各配 rwx 三位—— rw-r--r-- 就是这张压缩名单的全部5。代价写进了历史: 「组之外再细分谁可以」做不到,于是后来所有系统又都加了 「更一般 ACL」的扩展——书里把它当作过度优化 (9 位当时还是太省了)的教训6。

能力(capability):每个主体持钥匙——电影票模式: 检票只看票,不问你是谁。想读 /tmp/foo?把该文件的 capability 交给系统。优点直接长在死穴对面:委托 (把票递给别人就行)与按最小权限构造(每把钥匙只开一扇门); 缺点对称:撤销一把发出去的钥匙很难(票已经送人了), 回答「谁都能访问 X」要翻遍所有人的口袋7。

能力落在操作系统里是什么样子?书里把实现展开成了一段 推理8。能力说到底只是一串位——而任何一串位都有 两条要命的性质:谁都能造出任意位模式(等于自己伪造一张票), 持有者可以无限复制(等于票送出去就收不回、想转给谁就转给 谁)。这两条正对着访问控制的两大要求:能力必须不可伪造, 权限必须收得回。

解法是把钥匙从用户手里收走:操作系统在每个进程的进程 控制块里挂一张能力表(表存在内核受保护的内存里), 进程对能力的任何操作——出示、转交——都只能走系统调用、 由 OS 代办;A 想把 /tmp/foo 的读写权给 B,不能直接把 位串发过去,必须请 OS 转交,OS 当场查策略,不该给就拒绝 9。规模也有讲究:一个用户可能对几千个文件各持一条能力, 全挂在进程上太贵,所以系统把能力存在安全的地方、按需取挂 ;另一条路是根本不放 OS 里——用强密码学造出够长的、 防伪造的密码学能力,交给用户自己拿着(分布式里最合用, 第 22 章再续)10。

能力还有两个长在结构里的顺手处:列出「这个主体能碰什么」 翻它自己的能力表就行(ACL 要翻遍全系统);收回权限 只要从表里删一条(OS 独占能力时易如反掌)。最漂亮的是 造受限的子进程:父进程持 X、Y、Z 三把钥匙,只想给子进程 X、Y——创建时只传这两把就行;同样的要求在 ACL 系统里, 得造一个新主体、再改一串名单,狼狈得多11。

Linux 的 open() 是两种机制混用的活样本。 open 时 查一次 ACL;通过后,OS 往进程控制块上挂一个能力状 结构——「这个进程对那个文件有读写权」;之后的 read/write 一律只看这个结构,不再碰 ACL;close 时删掉, 再想访问就得重新过一遍 ACL12。设备、IPC 通道同理 (UNIX 把什么都当文件)。这场混用两头占便宜:最贵的 ACL 查找每个文件只付一次;从没被打开过的文件, 连能力结构都不必造。

图说:名单与钥匙是一组对偶——一个擅长安内,一个擅长攘外; 现实系统大多混用(文件用 ACL,进程句柄天然是能力)。

setuid:最小权限原则的经典反例。 普通用户偶尔需要 一件特权小事(改自己的密码 = 写 /etc/shadow)。 UNIX 的解法:setuid 程序临时整段获得 root 来干这件小事。 按最小权限原则衡量,这是把一整串钥匙交给一个只需要开一扇门的 程序——于是每个 setuid 二进制都成了攻击者的标的 (缓冲区溢出拿下它 = 拿下 root)。书里把它作为「违反原则」 的现成教案13。

3.2 谁有权定规则:自主、强制与角色

上面所有机制都默认一件事:资源的访问规则由资源的所有者定 ——你的文件你说了算,这叫自主访问控制(DAC)。书里用 军方反例戳破了这个默认值:就算你获准看绝密文件,你也没权把 你自己写的、引用了绝密资料的报告随便给人看——信息安全的 总负责人必须能推翻资源所有者的意愿。这种至少部分决策 由权威自上而下强加的模型叫强制访问控制(MAC):它与 用名单还是钥匙正交,系统里通常仍留 DAC 的口子,只是只能 往更严收、不能放松14。书里的态度很坦白:多数人永远不会 碰到 MAC,这里只立边界,不深讲。

现实里更常用的是基于角色的访问控制(RBAC):医院里 医生、药剂师各持一套权限,人比职位流动快,所以把权限授予 「角色」、把人登记进角色。RBAC 比「组」强在:一个人可以 同时或轮流持多个互不相交的角色,换角色通常要重新认证, 并且放下旧角色的特权——经理切到「测试」角色去验同事的 代码,此刻他能碰代码库、碰不了绩效表;就算代码里藏着想 偷看工资的恶意逻辑,也借不到超出角色的权限。规则还能细到 操作类型(销售员能往某文件加采购记录、不能加补货记录), 这一层细控叫类型强制15。

Linux 上没有原生 RBAC,但可以用 ACL 和组搭一个最小版: 每个角色造一个虚拟用户、把特权配给它,再让程序 setuid 到该用户;sudo -u 角色 命令 是通用件——谁能借、借哪个 身份,由系统维护的名单控制,通常还要重新认证一次16。 代价书里没有粉饰:攻击者刚拿下系统时只有一个低权限 落脚点,他的第一要务就是四处找提权路径,终极目标是 root—— 所以任何一条通往 superuser 的提权通道,都是防守方的要害。 新文件的默认权限同理:创建时可以指定、可以用 umask 统一 收窄,但经验是几乎没人会去改默认值——默认值选宽选严, 本身就是安全决策(八原则的「默认安全」在这里又出现了一次) 17。

3.3 密码学:三层包装与两条铁律

第一层:对称加密。 明文 P + 密钥 K → 密文 C;同一把 K 解回来。 代表 AES——精心设计、公开审查过的标准算法18。 性质:快,适合大量数据;死穴是密钥分发: 通信双方怎么先安全地共享 K?这个问题把对称加密卡了几千年 (直到公钥出现才部分解套)19。完整性校验的配合: 解密后再对明文做一次哈希比对,防「传输中被改」20。

第二层:公钥(public key)。 一对钥匙:私钥只有本人知道, 公钥随意分发。两个方向的用法恰好对上两个安全性质21:

谁加密谁能解得到什么
公钥加密私钥保密性(只有收件人能读)
私钥加密(=签名)公钥认证 + 不可抵赖(只有你能造出它,人人可验)

图说:Alice 要又保密又认证地发信给 Bob:先用自己的私钥签、 再用 Bob 的公钥加密;Bob 先用自己的私钥解、再用 Alice 的 公钥验——两对钥匙各尽其职22。死穴挪了位置:公钥是公开的,那「这个公钥真的属于 Bob 吗」 成了新问题。书里的措辞值得原样记住:「公钥加密的美妙魔法, 建立在密钥分发的肮脏而不确定的地基上」——这条路「漫长而阴森」, 连最有准备的先行者都常在此翻船;原书把它整体留给下一章 (分布式系统安全)处理,此处只立一条铁律:私钥绝不外泄、 绝不共享23。

两条铁律(书里用近乎咆哮的措辞反复强调)24:

  1. 别自造算法。 凯撒移位那样的玩具不算密码学;全世界最好的 密码学家造出的算法都常常有洞,他们靠互相当对手互相拆台才 练出强度——「你以为你造的算法很强,只是因为你找不到破法」。 用 AES 这类公开标准的强项恰恰在于公开设计原则 (八原则之一):经得起所有人看。
  2. 密钥管理才是真正的难点。 算法是公开的、现成的、免费的; 难的是生成、分发、存储、轮换、吊销——以及人(把密钥写在 便利贴上,或把私钥交给不该交给的「云服务」)。 书里对应全章开头的判词:OS 只管得住自己机器上的资源, 保护离开这台机器的数据,要靠预先备好(密钥),而不是事后追悔25。

加密哈希:只保完整性的最便宜原语。三条性质撑起全部用处: 找两个哈希到同一值的输入,算不动;改输入一位,哈希输出 完全不可预测地变;只看哈希值,推不出输入的任何性质26。 于是「保完整性」有个省钱的配方:只对明文算哈希、只加密 这个哈希,加密后的哈希和明文一起发——对方解密哈希、 对收到的明文重算,对不上就是途中被改了。注意哈希自己也得 加密:哈希算法人人会跑,不加密的话,攻击者改了明文、重算 一个新哈希一起换掉,你照样对得上27。同一个原语还有三个 家常用途:存盐化密码(第 20 章)、像 Tripwire 那样定期 检查文件有没有被改动、以及工作量证明——要求提交一个 「哈希到某指定值」的请求,逼提交者老老实实花掉计算时间 (垃圾邮件防护、区块链都靠这一招)28。

「破解密码学」的真相:没人硬拆算法,都在偷钥匙。用了 标准算法,数学上基本安全;真实的破口几乎全在钥匙管理和 周边软件上29。穷举是明码标价的对抗:AES 钥匙至少 128 位、真随机选取,平均要猜 2^127 次;可一旦软件缺陷 把候选缩到 32 种,穷举立刻变得微不足道。所以钥匙必须 随机选:任何确定性选法都把「找钥匙」降级成「猜你的方法」; 随机选取还顺手带来一个性质——攻破这一把,帮不了攻击者 猜下一把。真随机不好造,OS 的办法是从硬件操作的低阶位里 收集熵(Linux 下读 /dev/random)30。书里的翻车案例 排成一列:无线网 WEP 只听一分钟流量就能算出钥匙;Netscape 浏览器拿当天时间和进程号当随机种子,研究者 30 秒猜出钥匙; 某厂商的全部嵌入式设备共用同一把私钥,2016 年一次研究 找到 450 万台;Heartbleed 更冤——算法、实现、选钥全对, 只是内存管理的一个洞,让攻击者从远端服务器的内存里掏出 正在用的钥匙31。

**钥匙和密文同机,OS 就永远解得开。**这是密码学在操作系统 语境里的头号威胁模型:密文所在机器的 OS 若也握着钥匙, 它就能解密,不论你愿不愿意;你不信任的云,把明文交给它 「帮你加密」毫无意义——它见过明文、留得住钥匙。所以 密码学真正的用武之地只有三个:单向哈希存密码(但用户向 已被攻陷的 OS 输密码那一刻照样泄露)、数据离开本机 之前加密(网络上传输、送进不可信的云),以及下面这种 静态数据加密32。

静态数据加密以整盘加密为代表:开机时向用户要一次钥匙 (或派生钥匙的口令),之后完全透明——写入即加密、读出即 解密,应用和用户再也见不到密文,直到下次重启;软件实现 多付几个百分点的磁盘延迟,硬件实现不损标称速度33。 它的威胁模型是全书最实用的一张清单。不防四种攻击: 越权访问(访问控制本该管这件事,管不住等于钥匙人手一把)、 应用漏洞(注入、溢出照拿明文)、作恶的特权用户(root 能 冒充你)、OS 自身的洞(钥匙一交出去就归 OS 管)。只防 一种,但很关键:盘被偷走插到另一台机器——新机器的 OS 根本不认旧盘上的访问控制名单,可没有钥匙,它拿到的只是 一堆加密块34。手机丢失、旧硬盘转卖,防的都是这一种。

4. 作者的判断与证据

书里给了证据的判断:

  • ACL 与能力的对偶优劣是教材级共识(谁容易撤销 vs 谁容易委托);
  • 九位权限位是「只腾得出 9 位」的资源约束产物,书里明确把它 定性为过度压缩后又要回头补的教训6;
  • 「别自造算法」的论证不靠数学,靠历史(顶尖专家的自造算法 都被拆过)+ 八原则里的公开设计24。

作者的判断(立场):

  • 对 setuid 的态度接近定罪:最小权限原则被系统性违反, 是整个生态长期带病运行的原因之一13。
  • 「学者说的安全与现实有差距」(第 54 章自嘲)在本章再次出现: 密钥管理的问题一半是工程一半是人性,教科书只能点到。

5. 边界与局限

  • 本章零数学:AES/RSA 的内部构造、椭圆曲线、AEAD 模式 (GCM)等一概未讲——读者得到的应是用法与决策框架,不是 实现能力;真要选型,书末文献(及今天的标准文档)是起点。
  • 证书体系只给了「链到可信根」的轮廓;真实 PKI 的失效案例 (被入侵的 CA、证书透明度日志)超出本书年代与范围。
  • MAC 与 RBAC 都只立了边界:书里明说不深讲(多数人碰不到 MAC),要部署时回到各自的文献(Loscocco 的 SELinux 论文、 Ferraiolo 与 Kuhn 的 RBAC 论文)。
  • 能力系统在主流 OS 上未成主流,但它是浏览器权限模型 (每个站点持自己的 capability)、以及各类 API key 设计的 实际祖先——本章没把这层后裔关系点破(补充,不在书里)。

6. 可带走的

  1. 每个访问控制问题先分两步:主体是谁(认证)与 策略放不放(访问控制);混在一起设计必出洞。
  2. ACL 与能力按你的高频问题选型:常问「谁能进」选名单, 常做「转交权限」选钥匙。
  3. 权限默认值是攻击面:rwx 默认给宽 = 把门虚掩。
  4. setuid 思维(整段特权借出)在应用层比比皆是 (sudo 一切、全权服务账号)——最小权限永远在和方便打架。
  5. 私钥签 = 我是谁;公钥加密 = 只有你能看。两句话管住 公钥用途的全部方向感。
  6. 自造加密算法 = 自造锁具还不上测试——用标准件,把精力 花在钥匙的保管上。

7. 原文地图

主题原书章原文位置
判定两问与策略55. Access Controltext/57-ch55-55-access-control.txt:20(搜「yes or no」)
ACL 与能力两方案55. Access Controltext/57-ch55-55-access-control.txt:103(搜「two basic approaches」)
ACL 的工作方式55. Access Controltext/57-ch55-55-access-control.txt:167(搜「ACLs For Access Control」)
九位权限位的来历55. Access Controltext/57-ch55-55-access-control.txt:244(搜「nine bits」)
「太省了」的教训55. Access Controltext/57-ch55-55-access-control.txt:271(搜「more general ACLs」)
能力的委托与撤销55. Access Controltext/57-ch55-55-access-control.txt:140(搜「keys」)
能力只是位:伪造与复制问题55. Access Controltext/57-ch55-55-access-control.txt:379(搜「unforgeable」)
能力表挂 PCB、系统调用中介55. Access Controltext/57-ch55-55-access-control.txt:402(搜「protected capability list」)
能力的规模与密码学能力55. Access Controltext/57-ch55-55-access-control.txt:409(搜「thousands of capabilities」)与:415(搜「cryptographically protected」)
能力造受限子进程55. Access Controltext/57-ch55-55-access-control.txt:441(搜「subset of the parent」)
Linux open() 的 ACL+能力混用55. Access Controltext/57-ch55-55-access-control.txt:456(搜「amounts to a capability」)
DAC 与 MAC55. Access Controltext/57-ch55-55-access-control.txt:492(搜「Top Secret」)与:501(搜「discretionary access control」)
RBAC 与类型强制55. Access Controltext/57-ch55-55-access-control.txt:603(搜「Role-Based」)与:644(搜「type enforcement」)
setuid/sudo 搭 RBAC、提权危险55. Access Controltext/57-ch55-55-access-control.txt:675(搜「first order of business」)与:693(搜「sudo -u Programmer」)
默认权限与 umask55. Access Controltext/57-ch55-55-access-control.txt:577(搜「users rarely do」)
setuid 与最小权限55. Access Controltext/57-ch55-55-access-control.txt:651(搜「setuid」)
凯撒移位与密文定义56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:83(搜「cipher」)
AES 与公开算法56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:131(搜「AES」)
「别自造算法」56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:174(搜「flawed ciphers」)
公钥两方向用法56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:245(搜「public key」)与:265(搜「encrypt with the private key」)
Alice 与 Bob 的双重加密56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:271(搜「Alice」)
加密哈希三性质与配方56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:332(搜「computationally infeasible」)与:344(搜「Why do we need to encrypt」)
哈希的其他用途56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:374(搜「Tripwire」)与:375(搜「amount of work」)
穷举、随机选钥与熵56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:430(搜「127 guesses」)与:453(搜「perfect forward secrecy」)与:459(搜「/dev/random」)
钥匙管理翻车案例56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:468(搜「as little as a minute」)与:473(搜「around 30 seconds」)与:501(搜「4.5 million」)与:419(搜「Heartbleed」)
密码学与 OS 的信任边界56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:535(搜「Either you trust your operating system」)
整盘加密的机制与开销56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:604(搜「full disk encryption」)与:639(搜「a few percent」)
整盘加密防什么、不防什么56. Protecting Information With Cryptographytext/58-ch56-56-protecting-information-with-cryptography.txt:665(搜「moved from」)

Footnotes

  1. 出处:「55. Access Control」第 30–102 段(text/57-ch55-55-access-control.txt:20,搜「yes or no」)。原文:判定归结为「请求合不合策略——放行,还是不做」。 ↩

  2. 出处:「55. Access Control」第 103–166 段(text/57-ch55-55-access-control.txt:103,搜「two basic approaches」)。 ↩

  3. 出处:「55. Access Control」第 167–220 段(text/57-ch55-55-access-control.txt:178,搜「each file has its own」)。 ↩

  4. 出处:「55. Access Control」第 273–290 段(text/57-ch55-55-access-control.txt:274,搜「who is allowed」)。 ↩

  5. 出处:「55. Access Control」第 244–272 段(text/57-ch55-55-access-control.txt:244,搜「nine bits」)。原文:每个文件的 ACL 只负担得起约 9 位;三个条目(owner/group/other)× 三种访问(rwx)恰好用满。 ↩

  6. 出处:「55. Access Control」第 271–272 段(text/57-ch55-55-access-control.txt:271,搜「more general ACLs」)。 ↩ ↩2

  7. 出处:「55. Access Control」第 140–166 段(text/57-ch55-55-access-control.txt:142,搜「keys」)。能力像钥匙/电影票:带票进场、可转交;撤销与「谁都能访问 X」两个方向的困难见该章能力小节(:361,搜「obvious questions」)。 ↩

  8. 出处:「55. Access Control」第 361–382 段(text/57-ch55-55-access-control.txt:379,搜「unforgeable」)。原文:任何人能造任意位模式、持有人能无限复制——所以要求能力不可伪造。 ↩

  9. 出处:「55. Access Control」第 385–406 段(text/57-ch55-55-access-control.txt:402,搜「protected capability list」)。原文:OS 为每个进程维护受保护的能力表(经 PCB 挂指针),进程经系统调用请求转交能力,OS 可拒绝。 ↩

  10. 出处:「55. Access Control」第 407–418 段(text/57-ch55-55-access-control.txt:409,搜「thousands of capabilities」)与密码学能力(:415,搜「cryptographically protected」)。原文:能力持久存于安全处、按需取挂;够长且强密码学保护的能力可交给用户持有。 ↩

  11. 出处:「55. Access Control」第 419–448 段(text/57-ch55-55-access-control.txt:441,搜「subset of the parent」)。原文:父只传 X、Y 不给 Z 即造出受限子进程;ACL 下要造新主体、改一串名单。 ↩

  12. 出处:「55. Access Control」第 449–474 段(text/57-ch55-55-access-control.txt:456,搜「amounts to a capability」)。原文:open() 成功后挂能力状结构于 PCB,后续读写不再查 ACL,close 即删;用户态访问控制用 ACL,底层大量用能力。 ↩

  13. 出处:「55. Access Control」setuid 小节(text/57-ch55-55-access-control.txt:651,搜「setuid」)。原文:setuid 让程序以超出调用者的特权运行;:697 补一句——并非所有 setuid 程序都写得小心。 ↩ ↩2

  14. 出处:「55. Access Control」第 476–522 段(text/57-ch55-55-access-control.txt:492,搜「Top Secret」)与 :503(搜「restrictive case」)。原文:所有者定规则 = 自主访问控制;权威可推翻所有者 = 强制访问控制;两者与 ACL/能力正交,MAC 可含 DAC 成分(只收不放)。 ↩

  15. 出处:「55. Access Control」第 591–647 段(text/57-ch55-55-access-control.txt:603,搜「Role-Based」)与类型强制(:644,搜「type enforcement」)。原文:换角色要重新认证并放下旧角色特权;RBAC 比组更强(一人可持多个互不相交的角色);类型强制把细粒度规则绑到对象的安全上下文。 ↩

  16. 出处:「55. Access Control」第 648–704 段(text/57-ch55-55-access-control.txt:693,搜「sudo -u Programmer」)。原文:每角色一虚拟用户 + setuid 即最小 RBAC;sudo 由系统维护的名单控制谁能以何身份运行,通常要重新认证。 ↩

  17. 出处:「55. Access Control」提权危险旁注(text/57-ch55-55-access-control.txt:675,搜「first order of business」)与默认权限(:577,搜「users rarely do」;umask 见 :534,搜「umask」)。原文:攻击者拿下落脚点后的第一要务是提权、终极目标是 root;可调默认值实践中几乎无人改,所以默认值即安全决策。 ↩

  18. 出处:「56. Protecting Information With Cryptography」第 83–140 段(text/58-ch56-56-protecting-information-with-cryptography.txt:131,搜「AES」)。 ↩

  19. 出处:「56. Protecting Information With Cryptography」第 238–255 段(text/58-ch56-56-protecting-information-with-cryptography.txt:251,搜「distributing」)。 ↩

  20. 出处:「56. Protecting Information With Cryptography」第 160–165 段(text/58-ch56-56-protecting-information-with-cryptography.txt:162,搜「hashing」)。 ↩

  21. 出处:「56. Protecting Information With Cryptography」第 238–268 段(text/58-ch56-56-protecting-information-with-cryptography.txt:267,搜「encrypt with the private key」)。 ↩

  22. 出处:「56. Protecting Information With Cryptography」第 270–276 段(text/58-ch56-56-protecting-information-with-cryptography.txt:271,搜「Alice」)。 ↩

  23. 出处:「56. Protecting Information With Cryptography」第 284–317 段(text/58-ch56-56-protecting-information-with-cryptography.txt:297,搜「long and shadowy road」)。原文:公钥分发的基建问题「漫长而阴森」,放在分布式安全一章再谈;:308 强调私钥保密是公钥密码学的全部根基。 ↩

  24. 出处:「56. Protecting Information With Cryptography」第 174–195 段(text/58-ch56-56-protecting-information-with-cryptography.txt:174,搜「flawed ciphers」)。原文:世界级密码学家的算法都常有缺陷;「你自己破不了」不等于「别人破不了」。 ↩ ↩2

  25. 出处:「56. Protecting Information With Cryptography」第 1–82 段(text/58-ch56-56-protecting-information-with-cryptography.txt:16,搜「limited domain」)。原文:假设我们会丢数据、对手会拿到数据,提前把它准备好(加密)。 ↩

  26. 出处:「56. Protecting Information With Cryptography」第 329–337 段(text/58-ch56-56-protecting-information-with-cryptography.txt:332,搜「computationally infeasible」)。原文:找碰撞算不动;改一位输出不可预测;只看哈希推不出输入性质。 ↩

  27. 出处:「56. Protecting Information With Cryptography」第 338–349 段(text/58-ch56-56-protecting-information-with-cryptography.txt:344,搜「Why do we need to encrypt」)。原文:哈希不加密,攻击者改明文后重算哈希一并替换,校验照样通过。 ↩

  28. 出处:「56. Protecting Information With Cryptography」第 369–388 段(text/58-ch56-56-protecting-information-with-cryptography.txt:374,搜「Tripwire」)与 :375(搜「amount of work」)。原文:密码哈希还用于文件完整性检查(Tripwire)与工作量证明(垃圾邮件防护、区块链)。 ↩

  29. 出处:「56. Protecting Information With Cryptography」第 390–423 段(text/58-ch56-56-protecting-information-with-cryptography.txt:419,搜「Heartbleed」)。原文:用了现代标准算法,基本不会被「破解」;破口在密钥管理和周边软件。 ↩

  30. 出处:「56. Protecting Information With Cryptography」第 424–461 段(text/58-ch56-56-protecting-information-with-cryptography.txt:430,搜「127 guesses」)、:433(搜「thirty two possible AES keys」)、:453(搜「perfect forward secrecy」)与 :459(搜「/dev/random」)。原文:AES 至少 128 位、平均 2^127 次猜测;确定性选钥把问题降级成猜方法;随机选钥带来完美前向保密;熵从硬件低阶位收集。 ↩

  31. 出处:「56. Protecting Information With Cryptography」第 436–506 段(text/58-ch56-56-protecting-information-with-cryptography.txt:468,搜「as little as a minute」)、:473(搜「around 30 seconds」)、:501(搜「4.5 million」)。原文:WEP 听一分钟即得钥;Netscape 以时间与进程号为随机种子、30 秒可猜;同型号嵌入式设备共用私钥、450 万台沦陷。 ↩

  32. 出处:「56. Protecting Information With Cryptography」第 511–587 段(text/58-ch56-56-protecting-information-with-cryptography.txt:535,搜「Either you trust your operating system」)。原文:密文与钥匙同机,OS 必能解密;不信任的云,给它明文请它代加密毫无意义。 ↩

  33. 出处:「56. Protecting Information With Cryptography」第 589–643 段(text/58-ch56-56-protecting-information-with-cryptography.txt:604,搜「full disk encryption」)与 :639(搜「a few percent」)。原文:开机要钥匙(或口令),之后透明;软件全盘加密多付约几个百分点磁盘延迟,硬件实现不损标称速度。 ↩

  34. 出处:「56. Protecting Information With Cryptography」第 644–685 段(text/58-ch56-56-protecting-information-with-cryptography.txt:665,搜「moved from」)。原文:不防越权访问、应用漏洞、作恶特权用户、OS 自身的洞;防的是盘被移到另一台机器——新 OS 不认旧 ACL,无钥只得加密块。 ↩

On this page