Prometheno博客联系 ↗

身份缺口

身份验证是另一套验证体系。Prometheno 用它,不重造它。

管子元
管子元
11 分钟阅读

《四个原语》里我说身份在协议范围之外。这篇说"之外"是什么意思。

密码学原语能证明一个签名来自某把特定的密钥。不能证明这把密钥属于某个特定的人。第二个问题比密码学老得多,回答它的领域已经做了四十年。一个试图重做这些工作的患者主权协议,从立项就错了。

一套体系,不是一个函数#

医疗系统里的每个声明,都在某套体系里被验证。签名用数学检查。审计链用哈希重放检查。这两样都在密码学体系里——真值条件是数学的,证据是可计算的,任何诚实的、持有材料的一方都能得出相同答案。

"Alice Chen 持有这把密钥"不是这种声明。它是关于世界的声明。证据是护照、生物特征、公证人的印章。你能审计流程,但你算不出答案。

不是更难的数学。是完全不同的问题。

四层堆栈:结果验证、临床真相、身份验证、密码学验证。身份验证层高亮。
协议依赖的四套体系。密码学在底层,身份验证在它上面一层,是这篇的主题。

协议可以用一套体系的输出——一个身份断言、一个质量等级、一个结果标签。但它造不出这个输出。

签名说不了什么#

签名确认持有密钥的人签了这条消息。它什么都没说谁持有密钥。这个缺口会在三种情况下咬你:

密钥被盗。 密钥泄露给 Bob 之后,来自 Alice 密钥的签名跟真正的 Alice 签的一模一样。数学不在乎谁在敲键盘。

密钥共享。 Alice 把密钥给女儿用来管 Alice 的病历。每个同意授权看起来都像 Alice 签的。女儿可以授权 Alice 不会批的访问,协议看不出来。

女巫账户。 一个人开十个患者身份,每个密钥不同。签名都验证。贡献都像不同的人。密码学在结构上对此毫无办法1

身份验证就是让这些变得代价高昂的东西。密码学是协调原语——让互不信任的各方就"什么被签了"达成一致。它故意不确定"各方是谁"。那由上游决定。

"验证"到底意味着什么#

NIST 800-63-42 是美国联邦身份验证标准,2024 年最后修订。它定义了三个身份保证级别——IAL1、IAL2、IAL3——每一级说明什么证据把凭证绑定到真人。比医疗行业开始单独琢磨这件事早了好多年。联邦政府、金融行业、大部分受监管行业都在用。

三级台阶:IAL1(自我声明,无验证)上升到 IAL2(远程或当面验证,强证据)再到 IAL3(当面加监督采集生物特征)。
NIST 800-63-4 身份保证级别。协议的保证上限是实现系统能提供的 IAL。

IAL1 是自我声明的。 你打你的名字,系统就信了。订新闻通讯够用。绑定临床数据资产不行。

IAL2 是医疗的底线。 政府颁发的证件加实时生物特征,远程或当面。治愈法案患者访问规则3实际上假设 IAL2。ONC 认证健康 IT 也要求对齐4

IAL3 加一步有监督的当面环节。 授权代理人当面核验证据和出示证据的人。联邦福利、国防许可、部分临床研究用这个。

一个处处要求 IAL3 的协议,把自己挡在人口规模之外。一个接受 IAL1 却装作不是的协议,把自己挡在可信度之外。HAVEN 不做选择——实现系统选,同意授权继承系统能提供的保证级别。

Prometheno 用什么#

一条同意证明命名一个授予者和一个被授予者。协议不说这两者怎么解析到人。实现系统挂载现有基底。

OpenID Connect5——基于 OAuth 2.0 的联合身份。"用你的医院门户登录"走的就是这套标准。令牌进来,身份出去,在提供商支持的任何 IAL 上。

去中心化标识符6——由可验证凭证支持的自主权身份的 W3C 标准。当患者跨机构携带身份时有用。它本身不产生 IAL;依赖凭证颁发者。

电子病历颁发的身份——医疗机构在就诊时就对患者做了验证。SMART on FHIR7 通过 Patient 资源把这个身份暴露给应用。大部分美国静默试点从这里开始,因为验证已经在诊所里发生过了。

欧盟的 eIDAS8——国家级电子身份,有保证级别(低 / 实质性 / 高),能清晰映射到 IAL1/2/3。当欧盟患者池进入范围时会用到。

白皮书 §9 写得很明确:"你怎么验证患者是他们说的那个人由你决定。"9 这不是推卸。这跟 SMTP 对机构目录、OAuth 对现有账户、OIDC 对 OAuth 做的范围界定一样。把身份验证建进 HAVEN,就像要求 HTTP 开一个护照办公室。

HAVEN 继承什么#

基底里的每一个弱点都会传导到协议里。

如果基底是 IAL1,每一个签名的同意都是 IAL1 同意。链条完整,签名验证,审计日志成立。但"患者"就是点击通过的那个人。密码学可以让这个虚构防篡改,但它不能让它为真。

如果凭证恢复是个安全漏洞,猜到答案的攻击者就能接管凭证,签任何他想签的东西。协议会把它记成合法会话。修复不在更多密码学里。修复在身份层里。

如果基底对患者是高保证的、但对被授予者——研究者、AI 供应商、实验室——是低保证的,这个不对称是隐藏的。一条链只和它的身份链接一样强。

诚实的做法:记录协议假设什么(授予者的 IAL、被授予者的 IAL),在同意记录里把这些假设写明,拒绝基底提供不了保证的授权。

为什么这是单独一篇文章#

把身份验证建进同意。选一个 IAL。强制采集生物特征。发布。这条路的结局只有两种:被每一个已经有身份基底的系统拒绝,或者漂成一个跟它本该消费的基底竞争的准身份提供商。

所以边界保持原位。Prometheno 用实现系统挂载的任何东西。代价是真实的——协议的主权声明取决于上游的身份验证——但这跟 SMTP 不运营邮件服务器、OAuth 不运营用户数据库付出的代价一样。

接下来讲什么#

第二个缺口更难,因为它在另一套认识论里。密码学能证明一个值没被改过。身份验证能证明一把密钥属于一个人。两者都不能证明这个值反映临床现实。那在医学经验主义里。下一篇讲这个。

References

  1. Douceur, J.R. "The Sybil Attack." 国际点对点系统研讨会(IPTPS),2002。抵御女巫攻击,需要把身份带外绑定到某个代价高昂的现实世界凭证上。

  2. NIST 特别出版物 800-63-4:数字身份指南。 国家标准与技术研究院,2024。定义了 IAL(身份保证级别)、AAL(认证器保证级别)、FAL(联合保证级别)三条正交轴。这篇只讨论 IAL。

  3. 21 世纪治愈法案,公法 114-255(2016);ONC 互操作性规则 85 FR 25642(2020 年 5 月),89 FR 1437(2024 年 1 月)。患者访问 API 在相当于 NIST IAL2 的身份验证下运行。

  4. ONC 健康 IT 认证计划 §170.315(d)——对认证健康 IT 凭证访问的身份验证要求。

  5. Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., Mortimore, C. OpenID Connect Core 1.0,OpenID 基金会,包含勘误集 2(2014 至今)。基于 OAuth 2.0(RFC 6749)的联合认证。

  6. W3C 去中心化标识符(DID)v1.0,W3C 推荐,2022 年 7 月。

  7. SMART App Launch Framework v2.0。Mandel, J.C., et al. SMART on FHIR: A standards-based, interoperable apps platform for electronic health records. JAMIA 23(5):899-908, 2016。

  8. eIDAS 欧盟条例 910/2014,2016 年生效;eIDAS 2.0(欧盟条例 2024/1183)用欧洲数字身份钱包扩展框架。保证级别(低 / 实质性 / 高)与 NIST IAL1/2/3 对齐。

  9. HAVEN 白皮书 v2.0,§9,"我们不试图做什么"。DOI: 10.5281/zenodo.18701303

邮件订阅更新

无跟踪,无推销。每篇文章一封邮件,随时退订。