《四个原语》里我说身份在协议范围之外。这篇说"之外"是什么意思。
密码学原语能证明一个签名来自某把特定的密钥。不能证明这把密钥属于某个特定的人。第二个问题比密码学老得多,回答它的领域已经做了四十年。一个试图重做这些工作的患者主权协议,从立项就错了。
一套体系,不是一个函数#
医疗系统里的每个声明,都在某套体系里被验证。签名用数学检查。审计链用哈希重放检查。这两样都在密码学体系里——真值条件是数学的,证据是可计算的,任何诚实的、持有材料的一方都能得出相同答案。
"Alice Chen 持有这把密钥"不是这种声明。它是关于世界的声明。证据是护照、生物特征、公证人的印章。你能审计流程,但你算不出答案。
不是更难的数学。是完全不同的问题。
协议可以用一套体系的输出——一个身份断言、一个质量等级、一个结果标签。但它造不出这个输出。
签名说不了什么#
签名确认持有密钥的人签了这条消息。它什么都没说谁持有密钥。这个缺口会在三种情况下咬你:
密钥被盗。 密钥泄露给 Bob 之后,来自 Alice 密钥的签名跟真正的 Alice 签的一模一样。数学不在乎谁在敲键盘。
密钥共享。 Alice 把密钥给女儿用来管 Alice 的病历。每个同意授权看起来都像 Alice 签的。女儿可以授权 Alice 不会批的访问,协议看不出来。
女巫账户。 一个人开十个患者身份,每个密钥不同。签名都验证。贡献都像不同的人。密码学在结构上对此毫无办法1。
身份验证就是让这些变得代价高昂的东西。密码学是协调原语——让互不信任的各方就"什么被签了"达成一致。它故意不确定"各方是谁"。那由上游决定。
"验证"到底意味着什么#
NIST 800-63-42 是美国联邦身份验证标准,2024 年最后修订。它定义了三个身份保证级别——IAL1、IAL2、IAL3——每一级说明什么证据把凭证绑定到真人。比医疗行业开始单独琢磨这件事早了好多年。联邦政府、金融行业、大部分受监管行业都在用。
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
-
Douceur, J.R. "The Sybil Attack." 国际点对点系统研讨会(IPTPS),2002。抵御女巫攻击,需要把身份带外绑定到某个代价高昂的现实世界凭证上。 ↩
-
NIST 特别出版物 800-63-4:数字身份指南。 国家标准与技术研究院,2024。定义了 IAL(身份保证级别)、AAL(认证器保证级别)、FAL(联合保证级别)三条正交轴。这篇只讨论 IAL。 ↩
-
21 世纪治愈法案,公法 114-255(2016);ONC 互操作性规则 85 FR 25642(2020 年 5 月),89 FR 1437(2024 年 1 月)。患者访问 API 在相当于 NIST IAL2 的身份验证下运行。 ↩
-
ONC 健康 IT 认证计划 §170.315(d)——对认证健康 IT 凭证访问的身份验证要求。 ↩
-
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., Mortimore, C. OpenID Connect Core 1.0,OpenID 基金会,包含勘误集 2(2014 至今)。基于 OAuth 2.0(RFC 6749)的联合认证。 ↩
-
W3C 去中心化标识符(DID)v1.0,W3C 推荐,2022 年 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。 ↩
-
eIDAS 欧盟条例 910/2014,2016 年生效;eIDAS 2.0(欧盟条例 2024/1183)用欧洲数字身份钱包扩展框架。保证级别(低 / 实质性 / 高)与 NIST IAL1/2/3 对齐。 ↩
-
HAVEN 白皮书 v2.0,§9,"我们不试图做什么"。DOI: 10.5281/zenodo.18701303。 ↩