ABE:实现零信任的访问权限控制
ABE:实现零信任的访问权限控制
在当前的数据安全保护领域,基于角色的访问控制(RBAC)已经显露出其局限性。本文将介绍一种更先进的访问控制方法——基于属性的访问控制(ABE),并探讨其在实现零信任环境中的应用。
1. 引言
总体而言,在网络安全方面,需要认识到基于角色的访问安全 (role-based access security,RBAC) 通常不是保护数据和服务的明智解决方案。虽然RBAC简化了事情,但其无法有效地跨多个域扩展,最终可能会成为访问权限的乱套。
RBAC的工作方式是:
- 用户根据被授予的角色获得访问数据或服务的权限。
这些角色往往涉及范围相当广,如:
GP 角色可以访问 GP 需要的所有内容。即使:
他们可能只需要在特定时间访问特定内容。
一个 GP 可能实际上需要比另一个 GP 更多的权限,因此通常会为特定的额外任务添加另一个角色。
然后,这一切都变成了一个错综复杂的角色网络,如果某人获得某人帐户的访问权限,其将继承所分配给该角色的所有权限。
一种改进的方法是:
- 定义一个zero-trust零信任环境,其中每个用户都必须提供他们拥有访问服务或数据的正确属性。
如,可定义访问特定患者需要证明“某人在某个位置,已使用可穿戴设备验证身份,并且时间在上午 9 点到下午 5 点之间”。为此,需要基于属性的访问控制 (Attribute-Based Access Control,ABCL),且用户必须获得正确的属性/声明集(attributes/claims)才能访问服务/数据。
有2种主要的访问控制分类:
1)基于角色的访问控制 (Role-Based Access Control,RBAC)。定义访问数据的角色,如 Policy = Subject (AND/OR) Role –> Permissions。
2)基于属性的访问控制 (Attribute-Based Access Control,ABCL)。定义属性,如 Policy = User (role, nationality) AND/OR Resource (department, owner) AND/OR Action AND/OR Context (time, IP, location) -> Permissions。
有2种主要的Attributed-Based Encryption(基于属性的加密方法):
1)密钥策略基于属性的加密(Key-policy attribute-based encryption ,KP-ABE):基于包含属性的策略生成密钥。
2)密文策略基于属性的加密(Ciphertext-policy attribute-based encryption,CP-ABE):使用具有不同密钥的树结构来访问给定的属性。
2024年11月16日,与 ABE 的共同发明人、该领域的全球领袖Brent Waters的交谈见:
- Youtube视频World Leaders in Cryptography: Brent Waters
2. 权利问题
人们通常不擅长正确集成安全性,并且经常使用覆盖模型来克服缺乏嵌入式安全性的问题。其安全模型通常也来自旧操作系统,并且无法保护数据(因为它们旨在保护文件和目录而不是数据)。因此,人们经常无法正确加密数据,并且依靠操作系统来提供文件权限。之前的总体政策侧重于文档而不是数据。
人们创建了一个开放的数据世界,然后:
为了保护它,设置了边界。但发现,有内部人员躲在防火墙后面,可以访问大家的数据。
然后,使用加密密钥进行加密,但这通常应用在相当大的规模上。
那么,当使用基于云的存储时,如何控制对敏感数据的访问?
需要寻找更好的方法来保护数据,同时仍然能够处理数据。
之前创建的系统是通过操作系统安全性发展起来的,并应用了基于角色的安全性。在 Linux 系统中,可以拥有:
User: bob
Group: gp
并且拥有以下访问权限:
User=rwx Group=rwx Everyone=rwx
此时,Bob 将根据他对文件的所有权或他所在的组拥有访问权限——这被定义为基于角色的安全性。在 Active Directory 基础设施中,Bob 还可以成为多个组的成员,这将使他获得权限。但是,成为组的成员并不能正确应用安全性,因此通常必须覆盖安全模型来检查 Bob 访问给定文件的权限。
真正想要的是能够定义访问权限是基于其他因素的,如:他的位置,或者他是否是与患者相关的临床医生。这些被定义为他的访问权限的属性,并定义基于属性的安全性。
将安全性嵌入数据的最佳方法之一是 ABE(Attributed-based Encryption,基于属性的加密),可以在其中定义对解密过程的细粒度控制。如,可以定义某些敏感的健康信息只有在患者和临床医生都经过身份验证并处于可证明的位置时才可访问。因此,在加密过程中,应用了一项策略:
Policy = ((user=GP and location=Edinburgh) or
(user=Patient and location=Scotland)
在这种情况下,将根据爱丁堡的全科医生或苏格兰患者的用户身份来允许访问文件。这样,就可以根据实际属性而不是操作系统权限来授予访问权限。
3. ABE实现
下面提供了ABE的基本演示,其中使用基于pairing的加密。
使用 CP-ABE,将定义基于时间和位置等属性的策略(如下图所示)。然后,这些属性将用于创建公钥,当公钥添加到策略中时,将加密数据。当生成属性以供访问时,这些属性将生成关联的私钥,该私钥将解密数据。
该策略对阈值树的后序遍历进行编码。对于“foo bar fim 2of3 baf 1of2”,得到两个阈值门和四个叶子。如:
“fim bar baf 2of3 foo 1of2”
“foo bar baf 2of3 fim 1of2”
相应代码示例见:
CP-ABE (Cipher Policy - Attributed-Based Encryption) with Kryptology(Go)
此时,CP-ABE加密过程有几个阶段:
1)Setup:生成公共参数(PK)和主密钥(MK)。
2)Encrypt(PK, M, A):采用 PK 和一条消息(M),以及所有属性(A)的访问结构。输出将是一些嵌入 A 的密文(CT),这样当用户满足所需的属性时,就能够解密密文。
3)Key Generation(MK, S):采用主密钥(MK)和定义密钥(S)的多个属性,并输出私钥(SK)。
4)Decrypt(PK, CT, SK):获取公共参数(PK)、密文(CT——其中包含访问策略)和密钥(对于给定的一组属性 S),并尝试解密密文。如果成功,将再次获得消息(M)。
5)Delegate(SK, S˜)。如果需要,可以使用委托人,委托人将获取私钥 (SK) 并返回给定属性集 (S˜) 的私钥 (SK˜)。
如尝试使用策略“staff csn09112 admin 2of3”以及属性“staff”、“csn09112”和“csn90101”来访问 CP-ABE 数据:
可解密所加密的数据。
但若假设是一名正在学习“csn09112”和“csn09101”的学生:
可发现没有足够的属性来匹配策略。
若以“root”身份登录,并使用策略“staff csn09112 csn09110 2of3 root 1of2”,有:
因此,可创建一个可以根据策略动态加密数据的系统。对数据的访问将不再由操作系统控制,而是嵌入到数据中。这样,数据就可以存在于开放的地方(如云端),在那里有值得信赖的属性提供者。
如果要重新开始数据基础设施,肯定不会从当前开始。当前所创建的大多数系统(电子表格、Word 文档、数据库等)几乎没有嵌入式安全性,因此必须覆盖当前安全模型。这使得基础设施变得复杂,难以管理。CP-ABE 提供了一种更简单的解决方案,能够确保数据得到妥善保护
4. 结论
当前的安全模型已经过时,不得不使用覆盖方法,然后将其扩展到混合系统。这产生了复杂的安全策略,并且通常依赖于操作系统和域控制器对文件的访问权限做出判断。在云计算的世界里,必须假设数据可以被任何人访问,因此越来越需要将安全性嵌入到数据中。
未来必须通过在数据中嵌入策略来构建,并通过提供各种属性来定义claims声明,以支持用户访问该数据。
参考资料
[1] 2024年11月博客
[2] John Bethencourt、Amit Sahai 和 Brent Waters2007年论文《Ciphertext-Policy Attribute-Based Encryption》