基于区块链的医疗数据系统

基于区块链的医疗系统去中心化 问责与自主主权

引言

可穿戴医疗设备的最新涌入有望为医疗利益相关者带来丰厚的回报。可穿戴医疗设备是配备传感器的联网计算设备,用于跟踪患者的生命体征和身体活动。这些数据和分析还可以与电子健康记录(EHR)关联,从而帮助患者监控其个人健康,并协助医生开具个性化药物,以及帮助保险提供商深入了解提供医疗服务的成本。

然而,由于安全和隐私问题,据报道,医疗器械制造商仅对 20%至30%的联网设备进行了配置以供医院使用。已有多起关于医疗设备漏洞的报告。例如,ICS‐CERT报告称,医疗机构使用的Hospira的Symbiq输液泵(Matt 2015年)存在漏洞,该设备原本用于根据护理人员指定的剂量自动给予患者药物。此漏洞允许攻击者更改处方药剂量,从而影响患者安全。2017年,美国食品药品监督管理局报告了圣犹达医疗心脏设备(Matt 2015年)的漏洞。显然,联网医疗设备将长期存在,而医疗设备被攻击的风险正呈指数级增长。当前用于身份管理的网络安全解决方案效率低下,且缺乏立即追踪故障和问责的能力。

除了医疗设备可能被破坏外,从可穿戴设备和电子健康记录系统收集的健康数据也存在多种隐私问题。患者担心医疗保健利益相关者在访问其数据以及使用其数据方面缺乏透明度。当前的医疗网络安全解决方案主要侧重于提高数据提供者的责任,以检测数据披露行为;然而,保护数据访问并立即通知不当数据泄露风险同样重要。此外,超过300个电子健康记录系统采用容易出现单点故障的集中式架构,并且由于缺乏互操作性,导致无法获得全面完整的个人健康视图。Harris(2016)的报告指出,62% 的有保险的成年人依赖医生管理其健康记录,这限制了他们与其他医疗服务提供者互动的能力。此外,尽管许多医疗保健提供者应遵守HIPAA(1996年健康保险可携性和责任法案)等规则或法律,但仍有许多实体不受任何法律约束。因此,任何能够访问对数据进行操作的人员应对其在数据上的操作负责,且任何对数据的操作都需要被审计。

区块链捕获数据溯源的能力将有助于对医疗设备从生产到持续使用的安全追踪。编码在区块链中的溯源信息提供了不可变且可靠的流程以及可信的真实基础。当设备意外发生故障或因安全攻击导致问题时,该真实基础可用于实现透明性、可追溯性和问责。这一能力还将有利于医疗设备的自主监控和预防性维护。与现有的网络安全防御解决方案相比,区块链的分布式共识协议、密码学技术以及去中心化控制将降低医疗设备面临的网络威胁风险。其他优势还包括简化医疗设备的安全追踪、成本节约,以及通过安全且有针对性地访问患者数据来提升患者隐私保护。

区块链依赖于伪匿名性(用标识符替换姓名)和公钥基础设施,以保护用户隐私。由国家卫生信息技术协调办公室(ONC)和美国国家标准与技术研究院(NIST)联合举办的研讨会(2016)聚焦于区块链在医疗保健和研究中的应用,旨在阐明区块链作为医疗用例基础设施的意义,包括预测建模中的隐私保护、大规模提升机构间的互操作性、健康记录的不可篡改性、医疗保险理赔流程的改进、健康信息交换、基于人工智能的医疗服务模式、身份管理、货币化策略以及数据来源要求。

鉴于当前电子健康记录系统中存在的数据所有权、数据孤岛、缺乏问责制以及高隐私风险等问题,患者对其个人健康数据的控制权十分有限(Kish和Topol 2015年),Clippinger(2017年)提出的自我主权理念在应对医疗数据问题方面获得了广泛关注。为了更好地实现这一理念,我们采用两项新兴技术——英特尔SGX和区块链,构建一个以患者为中心、具备问责制和去中心化的PHDM系统。英特尔SGX提供了一种匿名

示意图0

系统架构

为PHDM系统设计了一种用于问责和隐私保护的三层架构。数据共享层使用户能够完全控制其个人健康数据,并处理来自第三方的数据请求。支持SGX的硬件层在云中提供可信执行环境,生成数据访问令牌,并负责可靠的数据存储和处理。区块链网络层是分布式且非受信的,用于记录数据操作和各种数据访问请求,以实现不可篡改性和完整性保护。图5.1 是以患者为中心的 PHDM系统的通用场景。个人可穿戴设备收集原始健康数据,例如步行距离、睡眠状况和心率,用户可将这些数据与其在线账户同步,该账户关联到云服务器和云数据库。每一条健康数据都可以被哈希并上传至区块链网络,用于记录保存和完整性保护。

原始数据则保存在由支持SGX的可信平台托管的云数据库中。用户拥有个人健康数据,维护访问令牌,并负责授权、拒绝或撤销任何其他方的数据访问请求。例如,寻求医疗治疗的用户会向医生授予一次性的数据访问令牌。同样的场景也适用于用户与保险公司交互。此外,用户还可以根据特定的医疗治疗手动记录日常活动,例如药物使用情况,并频繁地与医生共享这些信息。

医生等医疗保健提供者可以进行医学检测、给出建议或提供医疗治疗,并向患者请求访问以往的医学治疗记录。数据请求及相应的数据访问将记录在区块链上,以实现分布式验证。此外,用户可向保险公司请求健康保险报价,以选择健康保险计划。保险公司也可以请求访问来自可穿戴设备和医学治疗历史的用户健康数据。区块链网络用于三个目的:对于从可穿戴设备和医疗服务提供者收集的健康数据,每个哈希数据条目都将上传到区块链网络

示意图1

系统实体

用户
系统用户从可穿戴设备收集健康数据,例如步行距离、睡眠状况和心率。这些数据随后通过移动应用上传到可信平台上的云数据库。用户是个人健康数据的所有者,负责向其他方(如医疗服务提供者和保险公司)授予、拒绝和撤销数据访问权限。如果用户正在接受医疗治疗,会与指定的医生共享健康数据。治疗结束后,将撤销数据访问权限,以拒绝医生进一步访问。同样的情况也适用于用户与保险公司的关系。此外,用户还可以根据特定的医疗治疗记录日常活动,例如药物使用情况,以便与治疗提供者共享,从而进行调整和改进。

可穿戴设备
可穿戴设备用于将原始健康信息转换为人类可读格式,然后由用户将其数据同步到他们的在线账户。每个账户都关联有一组可穿戴设备和可能的医疗设备。当生成健康数据时,该数据将被上传到区块链网络以进行记录保存和完整性保护。

医疗保健提供者
医生等医疗服务提供者由特定用户指定,以进行医学检测、提供建议或实施医疗治疗。同时,在用户许可下,医疗治疗数据可上传至区块链网络,与其他医疗服务提供者进行数据共享。当前的医疗服务提供者可向用户请求访问其既往健康数据和医疗治疗记录。每次数据请求及相应的数据访问均被记录在区块链上。

健康保险公司
用户可向健康保险公司或代理人申请健康保险报价,以选择合适的健康保险计划。为了提供更优的保险政策,保险公司会请求访问用户的健康数据,包括来自可穿戴设备的个人健康数据和医学治疗历史。有既往医疗治疗史的用户可能需要支付更高的费率,并且不能否认其治疗历史,以防止保险欺诈。由于隐私问题,用户可以选择不共享运动信息,但大多数情况下他们愿意共享,因为规律的运动可以降低保险支付费率。然而,用户无法隐藏或修改医学治疗历史数据,因为这些数据已永久记录在区块链网络上,确保了数据的完整性与可信性。此外,保险理赔也可以记录在区块链上。

区块链网络
区块链网络用于三个目的。对于从可穿戴设备和医疗保健提供者收集的健康数据,每一个哈希数据条目都会被上传至区块链网络,以实现完整性保护。对于医疗保健提供者和健康保险公司对个人健康数据的访问,需要通过去中心化权限管理方案获得数据所有者的授权。

云数据库
云数据库存储用户健康相关数据、医疗保健提供者和保险公司的数据请求、数据访问记录以及数据访问控制策略。数据访问可问责且可追溯。一旦检测到数据泄露,即可识别出恶意实体。

密钥建立

在以患者为中心的数据管理系统中,用户需要注册在线账户以参与系统,并生成数据加密密钥对来加密其云数据,以确保机密性。对于密钥管理,我们假设系统开发者采用安全钱包服务。每个密钥的建立描述如下。

用户注册密钥 KUR
用户需要创建一个在线账户,以将从可穿戴设备和其他来源收集的健康数据存储在云数据库中。我们将用户注册密钥表示为 KUR。每次用户想要操作其云健康数据时,都需要使用该注册密钥。此密钥是通过Intel SGX AKS从平台身份密钥生成的,因此与用户绑定。即使用户的注册密钥被盗或遭到破坏,若没有用户认证,也无法在其他地方使用。类似地,医疗保健提供者和医疗保险公司的注册密钥分别为 KHR 和 KIR。

数据加密密钥 KDE
注册后,用户生成一个加密密钥 KDE 用于加密存储在云数据库中的所有健康数据。当创建健康数据条目时,用户可以选择加密该数据条目,这将仅允许密钥所有者进行数据访问,并且哈希数据条目将立即上传到区块链。

数据共享公钥/私钥对(PKDS,PRDS)
对于健康数据共享,将生成一个公钥/私钥对,表示为(PKDS,PRDS)。在某些情况下,数据共享活动需要记录在区块链上,用户使用私钥生成签名以表明健康数据所有权,而其他人则使用公钥来验证该所有权。当用户希望与医疗保健提供者或保险公司共享其健康数据时,他们会共享用于数据访问的私钥以及使用该私钥生成的相应令牌。

平台身份密钥KPID
每个可信平台都拥有一个平台身份密钥KPID,该密钥同样由平台身份生成使用 Intel SGX AKS 的密钥。在特定平台上,每次健康数据请求和数据访问都会生成一条由 KPID 签名的活动记录,以实现问责制,同时保持匿名性。不同实体的密钥分别表示为:用户的 KPIDu ,医疗服务提供者的 KPIDp ,以及保险公司的 KPIDi 。

PHDM 程序

在系统中,PHDM 包含五个阶段:用户注册、健康数据生成与同步(由用户、医疗服务提供者和保险公司生成的数据)、健康数据访问管理、健康数据访问记录上传以及健康数据访问审计。

用户注册
在系统中,用户需要创建一个在线账户,通过建立在线ID,将来自可穿戴设备和其他来源的健康数据存储到云数据库中。系统中的其他实体无法将该在线ID与其真实身份关联,从而在注册阶段保护用户隐私。个人健康数据来源于活动追踪器或智能手表等可穿戴设备、起搏器或除颤器等医疗设备,以及用于治疗跟踪的用户手动输入,如药物使用和训练情况。为了将个人数据同步到云端以便于访问和进一步处理,用户可首先向云服务提供商注册以获取具备足够存储能力的在线账户。图 5.2 展示了数据收集与同步架构。

健康数据生成与同步
健康数据包含四类:收集自可穿戴设备的数据、收集自医学检测的数据、患者自行记录的治疗详情数据,以及由医疗服务提供者和保险公司记录的数据。注册后,用户可以从可穿戴设备收集健康数据,这些设备会监控其日常活动,例如步行、骑自行车和睡眠,并可选择将这些数据与其在线账户进行同步。所收集的数据使用KDE加密,并存储在云数据库中。这保护了用户隐私在数据生成和存储阶段的安全。

同步步骤会在系统中触发一个事件,该事件将被转化为区块链上的一笔交易。每次创建健康数据条目时,用户都可以选择加密该数据条目并将记录上传到区块链。

健康数据访问管理
用户可以与医疗服务提供者共享数据以获取医疗服务,也可以与保险公司共享数据以获得保险政策报价并进行投保。系统采用基于令牌的访问控制机制来控制个人健康数据的访问和暴露。健康数据存储在云数据库中,访问控制策略以去中心化的方式存储在区块链上,以确保完整性并消除对可信第三方的需求。医疗服务提供者和保险公司均可向数据所有者(即系统中的注册用户)提出数据访问请求。用户可以授予、拒绝或撤销来自任一方的访问权限。每次发生数据请求时,用户将生成一个访问令牌发送给请求方。该访问令牌与可信平台绑定,以实现问责。

健康数据访问记录上传
如上所述,一旦系统监控到数据请求或数据访问事件,该事件将被捕获为一条数据访问记录,用作未来验证和监管的系统日志。该记录经过哈希处理并最终转换为Merkle树节点(Merkle 1980),使用Tierion API(Tierion 2016)。Merkle树的根节点将根据Wayne等人提出的 Chainpoint 2.0协议锚定到区块链交易中(2016)。对于区块链节点,医疗服务提供者和保险公司均可参与区块链挖矿过程,以换取从个人健康数据库中获取的大规模数据集作为挖矿奖励。针对隐私问题,该数据集已移除姓名和位置等敏感信息,并进行了匿名化处理。保险公司可以从病史和健康数据中获取更多信息,从而根据客户特征制定特定政策。医疗服务提供者可以借鉴以往的医疗治疗经验,为未来的医疗案例提供参考,提升医疗水平。

健康数据访问审计
当法定监管机构需要调查系统安全时,用户可授予系统审计员访问区块链网络上数据记录的权限。每个数据记录均可通过检查记录签名进行验证。同时,通过识别签名中使用的平台密钥,可对可信平台进行追责。

基于令牌的访问控制

为了匿名性和验证目的,我们采用基于令牌的访问控制机制来处理数据管理过程。如图5.2所示,云服务器负责发行和验证令牌,并维护数据记录数据库和数据访问日志数据库。用户可以向数据请求方请求和共享访问令牌。潜在的数据请求方包括医疗服务提供者、保险公司甚至系统审计员。每次数据和令牌操作都会记录在区块链中,从而得到验证。用户注册后,云服务器可根据用户提供的人信息发放令牌。要访问数据,需向云服务器出示所需令牌并进行验证。服务器的发放操作、用户的令牌出示及验证过程均会省略系统日志,这些日志将存储在日志数据库中,以及数据请求和来自第三方的访问。

基于U‐Prove的令牌生成

用户注册基于U‐Prove(Paquin和Zaverucha 2011),Chen和 Li(2013)已证明其可集成到可信平台模块2.0中。U‐Prove(Paquin 2013)包含三个实体,即签发方、证明方和验证者。在我们的PHDM系统中,签发方和验证者是同一实体,即云服务器。PHDM系统中的用户对应U‐Prove模型中的证明方实体。在用户注册阶段,证明方和签发方均需进行一些参数定义。

  • 令牌信息字段的值(TI) :TI ∈ (0, 1)*
  • 证明方信息字段的值(PI) :PI ∈ (0, 1)*
  • 应用属性(AA) :(A₁,…,Aₙ), TI(A₁,…,Aₙ) 表示来自应用程序本身的 n 个属性。
  • 签发方参数(IP) :UIDp,Gp的描述,UIDH,(g₀,g₁,…,gₙ,gₜ),(e₁,…,eₙ),S
  • UIDp 是此特定 IP 在 PHDM 系统中唯一的应用专用标识符,
  • desc(Gp) 指定用于后续验证步骤中离散对数计算的、阶为 p 的群 (Gp)。
  • UIDH 是安全哈希算法的标识符。
  • (g₀, g₁,…,gₙ, gₜ) 是签发方的公钥。
  • (e₁,…,eₙ) 由 AA 生成,表示每个应用属性的格式。
  • IP 的哈希 (P) : P = H(IP)
  • 设备保护的布尔值 (DB) : d
    这表示该协议是否受设备保护。PHDM 采用可信执行环境,因此默认值为 true。
  • 设备参数 : gd, xd, hd
    设备生成器 gd 满足 gd ∈ Gq。xd 是设备私钥,而 hd 是公钥。

根据提供的上述信息,我们选择发放协议版本号0x01。用户平台标识密钥 KPIDu 用于生成设备私钥。令牌生成协议如下。云服务器使用签名(σz₁, σc₁, σr₁)向用户签发令牌。出于隐私问题,AA在生成基于U‐Prove的令牌时被哈希。在某些情况下,签发方能够一次性生成多个令牌以提高性能。

令牌出示协议

使用令牌私钥生成对包含在令牌中的某些消息或属性的所有权的出示证明,该证明是访问云数据库中用户数据所必需的。在访问数据之前,数据请求方需要进行自我认证,并说服用户其正在 SGX 支持环境下的隔离飞地中运行。SGX 认证由数据请求方发起,其将使用平台相关密钥向数据所有者发送签名报价以供验证。双方平台之间的远程认证将在英特尔认证服务(Anati等2013)的协助下完成。验证通过后,用户将请求一个带新生成的私钥 PRDS 的一次性U‐Prove令牌,并将其共享给数据请求方。数据请求方随后将该令牌转发给云数据库的验证者。

验证后将授予访问权限。用户可以做出不同的决定,例如授予、拒绝和撤销访问权限。展示证明具有两个目的:一方面,它证明了属性值的完整性和真实性;另一方面,它确认了与令牌本身相关联的私钥的所有权,从而进一步防止令牌重放攻击。

去中心化问责与完整性保护

如图 5.2 所示,每次数据和令牌操作都会被记录在区块链中,从而以去中心化且永久的方式进行验证,确保数据完整性。此外,每一次操作都在由英特尔SGX支持的可信平台上发起,使得操作记录可信且不可否认。事件记录可用一个元组表示为 <数据哈希, 所有者, 接收者, 时间, 位置, 过期日期, 签名> ,其中签名具有平台依赖性,以实现问责。随后该元组被提交至区块链网络,并经过多个步骤将一系列记录转化为一笔交易。一组交易将被用来形成一个区块,该区块由区块链网络中的节点通过共识算法进行验证。

经过一系列处理后,记录的完整性得以保持,并可对与此记录相关的区块和交易进行后续验证。每次对个人健康数据进行操作时,都会创建一条记录并锚定到区块链上。这确保了对个人健康数据的每一次操作都可问责。不同参与方有不同的操作类型,如表 5.1 所列。SGX平台标识密钥KPID用于生成签名,从而使每条记录具有平台依赖性,并确保对个人健康数据的每一次操作都可问责。令牌生成与发放也以相同方式记录,以便追踪数据请求和授权情况。

出于可扩展性的考虑,我们采用基于Merkle树的架构(Merkle 1980)来处理大量数据记录。每个叶节点表示一条记录,中间节点由两个叶节点的哈希计算得出。Merkle根以及从当前节点到根的树路径共同构成完整性证明和验证,即Merkle证明。基本的Merkle证明如图5.3所示。首先,我们需要确定记录位置,即目标哈希B。目标哈希和到Merkle根的路径(即绿色节点)共同构成该哈希数据记录的Merkle证明。

示意图2

操作者 操作 健康数据
User 更新,查询 个人健康数据
医疗保健提供者 查询 个人健康数据
保险公司 查询 个人健康数据
医疗保健提供者 更新,查询 病史
User 查询 病史
保险公司 查询 病史
保险公司 更新,查询 保险信息
User 查询 保险信息
医疗保健提供者 查询 保险信息

表5.1 医疗协作系统中的操作类型

该信息存储在JSON‐LD文档中,用于通过密码学方法验证记录是否已锚定到区块链。通过计算不同树层级的哈希值,可以快速便捷地获得锚定在区块链交易中的根哈希,该根哈希由一些分布式节点见证并维护。这证明了数据在锚定时的状态即为创建时的状态。每个Merkle树的Merkle根与区块链网络中的一笔交易相关联,这意味着一笔区块链交易代表了Merkle树所包含的一系列数据记录,从而实现了数据完整性保护和验证的可扩展性与高效性。基于树的架构保护了每条操作记录自身的完整性,可通过遍历树节点进行验证。同时,它隐式地表明了所有节点的完整性,因为任何单个节点的修改都会导致根的修改,从而以极小的成本保护了整个树结构的完整性(图5.4和5.5)。

示意图3

示意图4

系统评估

我们的系统采用以用户为中心的模式,利用区块链网络处理个人健康数据,确保个人的数据所有权以及数据完整性。对数据记录的操作具有高度的互操作性和与现有系统的兼容性。通过实施访问控制策略,用户可以管理其个人数据,而无需担心隐私问题。同时,医疗服务提供者和健康保险公司发出的每一次请求和更新都会被记录并锚定到区块链网络中,使针对个人健康数据的操作具有可追溯性。

在第一节中提出的所有安全目标均已实现的基础上,评估系统在数据完整性证明生成和数据验证过程方面的可扩展性和效率至关重要。我们测试了从1到10,000不等数量的并发记录。图5.6和5.7展示了平均时间开销。从这两幅图中可以看出,该系统能够以低延迟处理大规模数据集,表明数据处理具有良好的可扩展性和效率。通过采用Merkle树方法对数据进行批量处理,我们实现了一种计算复杂度为O(log₂n)的算法。当数据记录以高频率采集时,这一特性具有重要意义。未来,我们将进一步研究医疗保健数据处理中的延迟容忍能力,并相应改进数据协作流程。

示意图5

对于基于U‐Prove的令牌生成,我们选择五个预先定义并包含在每个令牌中的属性,其中有两个属性是获取数据访问令牌所必需的。在令牌颁发过程中,数字签名主要有两种密码学方法:子群和椭圆曲线密码学。图5.4a、b展示了这两种方法在令牌颁发和出示阶段的评估结果。可以得出结论:基于椭圆曲线密码学的令牌生成比基于子群的方法更高效。这可以解释为:椭圆曲线密码学相较于等效安全级别的子群,使用了更短的密钥长度,且在较小的域中计算速度更快。采用基于椭圆曲线密码学的U‐Prove协议用于令牌颁发和出示,分别为系统带来的平均开销是8.1%和9.4%(图 5.8)。

使用Intel SGX缓解区块链攻击面

所提出的PHDM系统将部署在医疗机构的网络基础设施内的许可区块链平台中。然而,许可区块链平台容易受到攻击。在本节中,我们将介绍英特尔SGX如何减轻PHDM系统中的攻击面。

区块链漏洞与攻击

由于P2P通信模型和无需信任的节点参与,大多数区块链服务和基于区块链的应用可能容易受到某些难以检测或防范的攻击。这可能导致网络节点被破坏,从而对挖矿过程或共识过程产生负面影响。在本节中,我们提出并分析了分布式账本可能存在的漏洞。

区块扣留攻击(A1)

区块链节点通常会加入一个矿池,与其他节点共同挖矿。一旦新区块被挖出,奖励将在所有矿池成员之间共享。然而,一些恶意节点虽然加入矿池,但从不发布已挖出的区块,从而降低整个矿池的收益(Rosenfeld 2011)。这种攻击难以检测,因为挖矿过程由挖矿平台的所有者控制。即使平台找到了新区块的解,其他节点也无法知晓这一事实。分析(Courtois 和 Bahack 2014)表明,区块扣留攻击使得恶意矿工无需付出努力即可获利。

区块丢弃攻击(A2)

区块丢弃攻击(Bahack 2013)发生在某个节点控制了与其他节点的大部分网络连接时。一个被挖出的区块需要得到大多数节点的确认,并被添加到区块链中。如果网络被单一实体控制,且该实体意图丢弃某个正常节点挖出的区块,则该攻击将阻止受控网络中的节点确认此区块。这样一来,若其他节点挖出的区块比该正常节点的区块更早被确认,则后者将被视为无效。

重放攻击(A3)

重放攻击通常发生在P2P网络中,这类网络存在频繁的消息交换和传播。攻击者可能会尝试重复或延迟已拦截的数据传输,从而阻止诚实方与消息来源方正常通信。(Dua 等人 2013)。区块链网络中的重放攻击在多个场景中被讨论,例如智能电网(Kim 等人 2016)和物联网环境(Lee 和 Lee 2017年),以及基于区块链的大数据认证协议(Abdullah 等人 2017年)。当恶意节点窃听区块确认消息并延迟该消息的即时传播时,重放攻击还可作为发起区块扣留攻击的一种手段。对于拥有大量分布式节点的区块链应用而言,由于大多数消息交换是在同步会话和并发方式下进行的,因此使用传统的时间戳服务来缓解此类攻击具有挑战性。

中间人攻击 (A4)

中间人攻击(Callegati 等人 2009)与重放攻击类似,攻击者试图拦截两个诚实方之间的消息,可能篡改消息后再传递虚假消息。通常,攻击者会将自己插入到客户端与服务器之间的信息流中,向双方注入伪造的消息,从而冒充任意一方。由于客户端和服务器都以为自己正在与经过认证的实体通信,因此可能向对方泄露敏感信息。在区块链网络中,这种情况可能发生在某个节点加入区块挖矿过程时,从另一个节点窃取挖矿结果(即工作量证明区块链中谜题的解),然后将其发送给其他参与者进行确认。尽管存在检测此类攻击的方法,但时机至关重要。当解的发现者意识到解被窃取时,可能为时已晚,因为奖励已经被分配。

潜在隐私风险 (A5)

区块链的一个主要担忧是由于节点连接的分布式特性所带来的隐私问题。每个节点积极参与网络,广播消息并获取奖励。每个节点进行的交易可被其他节点追溯。这也涉及到匿名性问题,这一点在比特币交易中已被认可。交易将永久记录在公共账本中,所有人都可以查看详细的交易余额和公钥地址。一些场景(如金融机构和军事通信)需要在防篡改区块链基础上构建隔离的交易。如果隐私问题得以解决,用户便可以在不暴露敏感信息的情况下安全通信,同时仍可利用区块链优势实现完整性保护。

多数哈希率攻击 (A6)

为了获得大量利润,一些矿工使用特殊的挖矿设备来控制大量的算力。当攻击者控制了超过50%的全部算力时,他可以在控制期间逆转自己发出的交易,甚至有很大可能阻止某些交易被确认。这就是为什么多数哈希率攻击也被称为51%攻击。这种攻击还可能导致区块链的去中心化特性丧失,因为网络的大部分被一个强大实体所控制。有人提出了一种两阶段工作量证明(Bastiaan 2015)来防止此类攻击,但该模型并未充分考虑硬件因素。

SGX功能

英特尔SGX提供飞地,即用于可信程序运行的隔离区域,以减少攻击面并最小化可信计算基。我们以下阐述SGX采用的三个关键概念,即飞地、远程认证和密封。

飞地

创建飞地时,敏感的代码和数据将存储在名为飞地页面缓存(EPC)的受保护内存区域中。EPC 区域经过加密,可确保高度的机密性。飞地内的代码无权访问飞地之外的内存边界。如果一个飞地内的代码访问另一个飞地的内容,将导致终止的页面访问错误。飞地页面缓存映射是一种硬件结构,用于存储EPC中每个页面的安全性和访问控制信息。在飞地配置了适当的内存内容后,飞地度量将存储在两个寄存器MRENCLAVE和MRSIGNER中。MRENCLAVE提供了一种称为飞地身份的飞地代码身份,它是通过ECREATE指令对飞地日志生成的 SHA‐256摘要。飞地日志包含飞地页面的内容、相对位置以及一些安全标志(英特尔2013)。MRSIGNER标识了创建飞地时签名者的身份,称为密封身份。在MRSIGNER内部存储了签名者公钥的哈希。飞地初始化后,可通过调用EGETKEY指令和EREPORT指令获取飞地身份和密封身份。

每个飞地都有一个由飞地作者以 SIGSTRUCT 格式签发的证书。在 SIGSTRUCT 中,有三个元数据字段用于确定飞地的身份:用于签署证书的 RSA 密钥的模数(MODULUS)、飞地的产品 ID(ISVPRODID)以及安全版本号(ISVSVN)。飞地作者可以使用相同的 RSA 密钥签发多个飞地证书,以表示同一软件的不同模块。

远程认证

远程认证是一个实体向另一个实体证明其运行在可信平台之上的过程。英特尔SGX提供两种类型的证明,包括本地证明(在同一平台上运行的两个飞地)和远程证明(将本地证明扩展到平台之外)。本地证明可以在两个飞地之间进行:目标飞地和挑战者飞地。首先,挑战者飞地向目标飞地发送验证请求以及挑战者飞地的MRENCLAVE值。然后,目标飞地使用EREPORT指令以及接收到的MRENCLAVE值为目标飞地创建一个签名的报告并将其发送回去。挑战者飞地接收报告并提取报告密钥以计算消息认证码。如果消息认证码与目标飞地报告上的值匹配,则挑战者飞地可以确认目标飞地运行在同一可信平台上。然后挑战者飞地可以为目标飞地创建一个报告,并将其发送给目标飞地,以便目标飞地以类似方式确认挑战者飞地也在同一平台上。

在某些情况下,不同平台上的两个飞地需要相互验证。英特尔SGX支持一种称为报价飞地的第三方飞地来协助启动远程证明。报价飞地采用英特尔增强隐私ID(EPID)(Brickell 和 Li 2011)作为密钥,对同一平台上目标飞地的报告进行签名,生成报价,并将该报价发送给远程飞地以供验证。类似于本地证明,此处有一个挑战者飞地请求验证目标飞地。这里的目标飞地位于与挑战者飞地不同的平台上。目标飞地将创建一个报告并将其发送给报价飞地。报价飞地使用EPID密钥对该报告进行签名,生成报价,并将报价返回给目标飞地。目标飞地将报价连同其他一些用户数据一并转发给挑战者飞地以进行身份认证。挑战者飞地使用EPID公钥来验证报价。通过这种方式,目标平台得以验证,并可建立进一步通信。

封装

当飞地程序运行结束后,飞地内的代码和数据将消失。为了将来使用而存储数据,英特尔SGX提供了一个密封密钥来加密数据并确保数据完整性。密封数据只有在本地恢复可信环境后才能被解封(Anati et al. 2013)。通过调用EGETKEY指令,当前飞地可以访问密封密钥,对数据进行密封,并将数据导出到飞地外的内存区域。英特尔设计了两种密封策略,包括密封至飞地身份和密封至密封身份。根据飞地应用程序的访问控制策略,可采用不同的密封策略。密封至飞地身份可生成仅该特定飞地可用的密钥实例。如果需要在相同密封身份下的不同飞地实例之间共享密钥,可采用密封到密封身份(密封授权机构)的策略来实现。

根据上述安全概念,SGX的安全能力可总结如下:

  • 飞地执行 (C1) :能够抵抗飞地外部的软件攻击(McKeen 等人 2013)。
  • 基于硬件的随机性 (C2) :为加密密钥生成和保护提供了宝贵的来源。tRTS(可信运行时系统)库在英特尔CPU中提供了一个真随机函数(Aumasson 2016)。
  • 远程证明 (C3) :允许客户端平台向远程方证明自身正在可信环境中运行,从而确保客户端和服务器端代码执行的完整性。
  • 可信流逝时间 (C4) :提供了用于可信时间戳服务的硬件辅助度量,这对于时间敏感的场景至关重要。
  • 保密性保证 (C5) :防止敏感交易和商业合同泄露。飞地身份密钥和供应密钥可用于秘密保护和远程认证。
  • 密封与解封 (C6) :有助于将机密信息存储在飞地之外,以便在系统关机后未来访问。
  • 单调计数器(C7) :可用于防御重放攻击。

考虑到上述攻击,我们利用英特尔SGX建立可信执行环境,这将大大减少攻击面并最小化可信计算基。同时,可以选择大多数SGX功能来有效防御表5.2中所示的全部六种攻击,以实现可靠的分布式账本。

可信执行可在飞地区域(C1)中建立,该区域提供了一个隔离环境,从而减小了攻击面,在防御全部五种攻击中发挥着重要作用。飞地内部的代码和数据受到完整性保护。启用SGX的区块链挖矿可确保挖矿过程在飞地内部隔离进行。即使平台和操作系统被恶意实体控制,挖矿过程仍能免受破坏。这保证了一旦区块被挖出,将立即提交到区块链网络而不会延迟,从而使区块扣留攻击无法实现。基于硬件的随机性 (C2) 有助于密钥管理协议中使用的随机数生成,有利于区块链节点间交易中的消息交换,并能够抵抗重放攻击。该功能 sgx_read_rand() 通过 RDRAND 指令调用英特尔CPU中可用的基于硬件的伪随机数生成器(PRNG)。远程证明 (C3) 在客户端与服务器之间的通信过程中用于密钥协商以及交换将在后续交互中使用的共享密钥。通过远程证明建立的共享密钥可能具有平台相关性,从而有效抵御中间人攻击,因为该密钥绑定于无法被中间人伪造的平台相关身份。为了为消息提供可信时间戳,可调用架构飞地服务中的SGX能力可信流逝时间 (C4) sgx_get_trusted_time 来实现。此可信时间可通过设置特定的过期时间,有效防止重放攻击。保密性保证 (C5) 保护交易过程中的点对点通信,确保身份和交易的机密性。飞地能够对双方共享的密钥(C6)进行密封与解封,特别是当该密钥被多次使用时。单调计数器(C7)通过调用 sgx_create_monotonic_counter 函数提供一个可信计数器,用于在通信期间保证消息的真实性,从而增强对重放攻击和中间人攻击的防御能力。

潜在攻击 Intel SGX能力
区块扣留攻击(A1) 飞地执行 (C1)
区块丢弃攻击(A2) 飞地执行 (C1),远程证明 (C3),单调计数器(C7)
重放攻击(A3) 基于硬件的随机性 (C2),远程证明 (C3),可信流逝时间 (C4)
中间人攻击 (A4) 基于硬件的随机性 (C2),远程证明 (C3),保密性保证 (C5)
潜在的隐私风险 (A5) 飞地执行 (C1),保密性保证 (C5),密封与解封 (C6)
多数哈希率攻击 (A6) 飞地执行 (C1)

表5.2 支持SGX的区块链设计原理

结论

在本章中,我们设计并实现了一个移动医疗系统,用于个人健康数据的收集,以及个人与医疗服务提供者和保险公司之间的数据共享与协作。该系统还可扩展以支持将健康数据用于研究目的。通过采用区块链和SGX技术,该系统以分布式和无需信任的方式实现,从而确保个人健康数据的存储与共享具有强健性。处理数据记录的算法能够同时保护完整性和隐私。

通过在自主医疗系统中利用区块链技术,我们能够分担维护数据操作和代币生成的可信记录的责任。同时,得益于区块链共识机制和去中心化架构,以及由英特尔SGX提供的可信执行环境和平台依赖配置,记录通过可信时间戳和冗余机制得以锚定,从而保障了医疗数据和操作的可用性与问责性。我们还提出了基于U‐Prove的协议用于权限管理。我们实现了一个PHDM系统的原型,评估结果表明其性能可接受。

关于未来工作,我们将把PHDM系统与基于区块链的访问控制方案的增强相结合,以提供更好的数据保护和用户隐私。我们将探索如何将个人健康数据和医疗数据结合起来,并在身份管理和电子健康记录管理方面为医疗用途提供更优的解决方案。

### 设计和实现基于区块链医疗数据管理系统 #### 1. 医疗数据管理系统的架构概述 为了确保医疗数据的安全性和隐私保护,采用联盟链形式构建医疗数据管理系统是一个理想的选择。这种架构允许医疗机构作为验证节点加入网络,共同维护账本的一致性[^2]。 #### 2. 区块链数据结构定义 在设计具体的区块链数据结构时,可以借鉴比特币的设计理念,创建一种包含多个区块链接而成的数据链条。每个区块记录了一定时间内发生的全部交易详情,并通过哈希指针连接前后两个相邻区块形成一条完整的链表结构。对于医疗场景而言,这些“交易”则代表患者诊疗过程中产生的各类信息交换活动[^1]。 ```python class Block: def __init__(self, index, timestamp, data, previous_hash): self.index = index # 当前块的位置编号 self.timestamp = timestamp # 时间戳 self.data = data # 存储的具体内容(如诊断报告) self.previous_hash = previous_hash # 前一块的哈希值 self.hash = self.calculate_hash() # 计算当前块自身的哈希 def calculate_hash(self): sha = hashlib.sha256() hash_str = str(self.index) + \ str(self.timestamp) + \ json.dumps(self.data) + \ str(self.previous_hash) sha.update(hash_str.encode('utf-8')) return sha.hexdigest() ``` #### 3. 实现智能合约机制 利用智能合约自动执行预设条件下的操作逻辑,比如当医生上传新的病历资料到系统中时触发相应事件;或是授权特定人员访问敏感信息之前先经过多重身份认证程序确认合法权限等。这不仅简化了传统纸质文件流转流程中的繁琐手续,同时也提高了工作效率并减少了人为错误的可能性[^4]。 ```solidity pragma solidity ^0.8.0; contract MedicalRecord { struct Record { string patientID; uint date; bytes fileHash; // 文件指纹用于校验完整性 address uploader; } mapping (string => Record[]) private recordsByPatientId; event NewMedicalRecordAdded(string indexed _patientID); function addRecord( string memory _patientID, uint _date, bytes memory _fileHash ) public returns(bool success){ require(bytes(_patientID).length != 0,"Invalid Patient ID"); Record memory newRec = Record({ patientID:_patientID, date:_date, fileHash:_fileHash, uploader:msg.sender }); recordsByPatientId[_patientID].push(newRec); emit NewMedicalRecordAdded(_patientID); return true; } } ``` #### 4. 构建安全可靠的传输通道 考虑到医院内部信息系统之间可能存在异构平台差异的情况,在实际部署过程中还需要考虑跨网关通信协议兼容性问题。为此建议引入IPFS分布式存储解决方案配合Hyperledger Fabric框架搭建P2P通讯环境,从而保障不同机构间能够高效稳定地传递加密后的电子健康档案副本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值