28、基于ABE的ICN内容访问控制

基于ABE的ICN内容访问控制

1. 基本系统模型与属性管理

在ICN(信息中心网络)的医疗网络场景中,涉及患者(内容所有者)、可信第三方(TTP)和内容缓存服务器等主体。TTP负责为整个网络设置全局参数。除了唯一标识符(UID)外,网络中的任何实体都可以定义和管理属性,但同一属性的定义和管理过程应由同一实体执行,该实体被称为该属性的权威机构。

例如,属性集合可以包括{医院A,护士,医生,心脏病专家,MRI}。在该网络模型中,多个属性权威机构可以同时存在,网络用户和属性权威机构都是分布式的,这一特性由专门设计的命名方案支持,每个权威机构负责一组独立且不重叠的属性。

内容所有者可以根据此方案为其内容设置访问策略,策略以相关属性通过与(AND)和或(OR)门组合的形式表示。例如,如果内容所有者希望创建一个仅允许在医院A工作的医生或护士访问的文件,策略可以是{A} AND {{医生} OR {护士}}。这样,所有者无需明确知道哪些人应该访问内容,只需确定属性及其组合,只要消费者满足策略,就可以访问内容,不满足策略的实体则无法访问。

2. 属性分类与关系

ICN网络中的属性可分为主体属性和对象属性。如在相关示例中,绿色属性为主体属性,红色属性为报告的对象属性。主体属性和对象属性之间存在一定关系,例如{心脏病学}和{心脏病专家}分别是主体属性和对象属性,由于心脏病专家通常从事心脏病学工作,可将它们视为等同。又如{MRI},多个医学学科(如神经学、心脏病学和肿瘤学)会使用MRI进行诊断,因此{神经学,心脏病学,肿瘤学}被定义为{MRI}的子属性。

内容所有者发布内容时,会决定哪些属性用于访问控制,哪些用于内容搜索和描述,分别称为访问控制属性(ACAs)和描述性属性(DAs)。例如,{医院A,医生,MRI,心脏病学}作为ACAs,{患者x,报告}作为DAs。DAs是公开可搜索的,因此网络实体只能看到该内容是患者x的报告,ACA/DA的分类决策对受保护内容的隐私至关重要,由内容所有者决定。

3. 可比较属性和属性排名

除了上述属性设置,该方案还支持属性之间的比较。以策略{A} AND {{医生} OR {护士}}为例,如果需要修改策略,允许医院A中级别高于护士的所有员工访问文件,传统方法需要枚举所有允许的属性并构建复杂的策略,如{A} AND {{医生} OR {护士} OR…}。但如果设置医生和护士之间的比较关系为医生 > 护士,即医生属性包含护士属性的所有特权且有更多额外特权,那么原策略可以简化为{A} AND {护士},便于管理。

4. 示例说明

在示例中,有护士、医生和患者三个主体。患者将其MRI报告作为内容发布到网络中,并指定了访问策略。当护士尝试访问该内容时,她可以使用{医院A}属性解密第一个节点,但在{医生}属性处受阻,说明该内容不适合她。当医生访问内容时,她可以从叶子节点到根节点逐层成功解密,揭示随机数据加密密钥。这里{MRI}被{心脏病学}替代,因为{心脏病学}是{MRI}的子属性,且在这种情况下{心脏病学}等同于{心脏病专家}。然后,医生使用NR系统获取内容的最近副本,并使用从名称中导出的随机数据加密密钥解密MRI报告。

5. 攻击模型

为保证内容的完整性,内容元数据中包含其所有者签名的数字摘要。攻击者的目标是针对所提出的基于属性的加密(ABE)方案,主要有两个目标:一是获取对受该ABE方案保护的数据的未授权访问权限;二是检索访问策略的构成信息,以获取更多关于内容、所有者和消费者的信息,即破坏策略的保护。对于第一个目标,攻击者需要破坏受保护数据的机密性机制,可行方法包括勾结攻击和利用漏洞;第二个目标对攻击者来说重要性较低,因为成功攻击不会直接揭示受保护的秘密信息,攻击者需要分析所提出的ABE方案以确定揭示策略的可能方法。

6. ABE基础

ABE类型算法的基础是双线性配对计算。采用了特定的代数结构设计,假设有两个群:加法群G0和乘法群G1,它们具有相同的阶n = sp′q′,其中p′和q′是两个大素数。双线性映射e : G0 × G0 → G1具有双线性、非退化性和高效性三个性质。

基于属性的加密(CP - ABE)方案中有三种类型的密钥:主密钥、公钥和私钥。TTP需要生成一组公共参数并安全存储主密钥,且不参与网络通信,可一直离线。CP - ABE方案由四个基本算法组成:设置(Setup)、加密(Encrypt)、密钥生成(KeyGen)和解密(Decrypt)。

在设置阶段,TTP选择两个随机指数α,β ∈ Zp,公钥格式为 < G0, g, h, f, e(g, g)α >,主密钥为 (β, gα),其中h = gβ,f = g^(1/β),公钥在部署前由TTP发布。当一方要加密消息M时,运行加密算法,输入为公钥、消息M和策略树T,输出为密文。密钥生成算法根据主密钥和一组属性为每个网络节点生成私钥。节点接收到密文后,运行解密算法获取加密数据,该算法以密文和节点的私钥为输入。

传统CP - ABE方案中,TTP参与节点加入系统(节点管理)和属性创建与分配(属性管理),当系统规模较大时,TTP会成为性能瓶颈。因此,所提出的方案旨在分离节点管理和属性管理的职责,将属性管理功能卸载到其他实体。

7. 创建内容流程
graph LR
    A[所有者定义策略] --> B[生成随机数据加密密钥]
    B --> C[加密数据]
    C --> D[创建内容名称]
    D --> E[内容发布]
  • 设置全局参数 :最初,TTP为整个网络设置全局参数。
  • 属性分配 :网络中的任何实体都可以创建属性并分配给其他实体。
  • 定义访问策略 :内容所有者为内容创建访问策略,以属性组合形式表示。
  • 生成加密密钥 :所有者生成随机数据加密密钥,用于加密文件,加密过程可使用任何类型的密码系统。
  • 创建内容名称 :所有者使用所提出的方案根据指定策略对随机密钥进行加密,结果作为内容名称。内容名称隐藏了内容访问策略,实际上是经过一系列加密操作后的密文,对任何查看者来说都是随机的比特序列。
  • 内容访问 :需要该文件的消费者可以通过ICN网络根据名称获取内容副本。在检索内容前,消费者可以使用自己的属性解密名称,如果满足隐藏策略,可获得随机数据加密密钥,进而解密内容数据;若无法成功解密名称,则不能访问原始文件。该方案的一个优点是普通用户可以在成功解密内容名称后再下载内容,有助于减少底层网络的工作量。
8. ABE - 基于ICN的命名方案

该方案使用一个复合阶群G0,阶为n = p²q²,其中p和q是两个大素数,复合值s设为pq。选择G0的两个子群Gs和Gt,使得s = pq,t = pq,且Gs与Gt正交。这种复合阶群配置主要是为了支持Gs中的属性排名,其核心思想遵循RSA条件,以强制属性值之间的单向推导。

属性可以是字符串值,在CP - ABE中,这些值通过哈希函数转换为数学值。在该方案中,每个属性字符串Ai对应一个三元组 (Ii, ki, hi),其中Ii, ki, hi ∈ Z∗n′。Si和Ti由TTP分配,其值由每个子群下的生成器和hi的值决定。从字符串到三元组的映射由属性Ai的权威机构确定。

访问策略可以用属性的析取范式(DNF)表示,在DNF的每个合取子句中,属性的顺序由加密方(即内容所有者)决定,加密子句的顺序与解密顺序相反。为了帮助识别解密线索,方案中定义了一个公共属性APub,它与三元组 (SPub, TPub, IPub) 相关联,这些值是公开已知的。对于每个合取子句,加密者在加密顺序的末尾添加APub,即APub在加密过程中总是最后一个属性,在解密过程中总是第一个属性。此外,加密者需要简化DNF以减小属性策略的大小。

该命名方案包括以下算法:
- GlobalSetup算法 :由TTP运行,生成系统的全局参数和全局秘密。

# 算法11.1 GlobalSetup
def GlobalSetup():
    # 选择两个双线性群G0和G1,阶为n = p²q²
    p, q = choose_large_primes()
    n = p**2 * q**2
    G0, G1 = choose_bilinear_groups(n)
    g = G0.generator()
    # 选择子群Gs和Gt
    Gs, Gt = choose_subgroups(G0, p * q)
    # 选择生成器
    phi = Gs.generator()
    psi = Gt.generator()
    # 选择随机值
    alpha, beta = choose_random_values()
    # 定义常量
    ROOT = G1.constant()
    # 选择对称加密函数
    Enck, Deck = choose_symmetric_functions()
    # 定义公共属性
    SPub, TPub, IPub = define_public_attribute(Gs, Gt)
    # 全局参数
    global_parameters = [Gs, Gt, phi, psi, phi**beta, e(phi, psi)**alpha, Enck, Deck, (SPub, TPub, IPub), ROOT]
    # 全局秘密
    global_secrets = [beta, psi**alpha]
    return global_parameters, global_secrets
  • NodeJoin算法 :TTP为每个加入网络的节点运行一次,生成节点的唯一秘密。
# 算法11.2 NodeJoin
def NodeJoin(UID, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    n_prime = Gs.order()
    # 生成随机数
    rUID = choose_random_value(n_prime)
    # 计算DUID
    DUID = psi**((alpha + rUID) / beta)
    rPub = choose_random_value(n_prime)
    # 计算XPub,UID
    XPub_UID = phi**(rUID) * SPub**(rPub)
    # 计算YPub
    YPub = phi**rPub
    # 计算ZPub,UID
    ZPub_UID = e(phi, psi)**(rUID * IPub)
    # 选择随机值
    PUID = choose_random_value(n_prime)
    return [DUID, XPub_UID, YPub, ZPub_UID, PUID]
  • AuthoritySetup算法 :每个管理属性Ai的权威机构运行该算法,设置属性秘密。
# 算法11.3 AuthoritySetup
def AuthoritySetup(global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    n_prime = Gs.order()
    # 选择随机数
    Ii, ki, hi = choose_random_values(n_prime)
    # 生成Si和Ti
    Si = phi**hi
    Ti = psi**hi
    return Ii, ki, hi, Si, Ti
  • KeyGen算法 :属性权威机构为持有该属性的每个节点生成对应属性的私钥。
# 算法11.4 KeyGen
def KeyGen(UID, Ii, Si, Ti, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    n_prime = Gs.order()
    rUID = choose_random_value(n_prime)
    ri = choose_random_value(n_prime)
    # 计算Xi,UID
    Xi_UID = phi**(rUID) * Si**(ri)
    # 计算Yi
    Yi = phi**ri
    # 计算Zi,UID
    Zi_UID = e(phi, psi)**(rUID * Ii)
    # 计算LUID
    LUID = TPub**(1 / PUID)
    return Xi_UID, Yi, Zi_UID, LUID, Ii, ki, hi
  • Encrypt算法 :加密者根据每个子句的加密顺序进行工作。
# 算法11.5 Encrypt
def Encrypt(attributes, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    p = Gs.order()
    s = choose_random_value(p)
    I0 = s
    m = len(attributes)
    # 计算C, C', C''
    C = K * e(phi, psi)**(alpha * s)
    C_prime = phi_beta**s
    C_double_prime = Enck(ROOT)
    C1 = []
    C2 = []
    C3 = []
    for n in range(1, m + 1):
        if n == 1:
            ln = choose_random_value(n_prime)
        else:
            if (C1[n - 2], C2[n - 2], C3[n - 2]) is not None:
                continue
            ln = choose_random_value(n_prime)
        # 计算C1,n
        C1_n = psi**((I0 - attributes[n - 1]) * ln)
        # 计算C2,n
        C2_n = Ti**((I0 - attributes[n - 1]) * ln)
        # 计算C3,n
        C3_n = (kn * ln)**(-1)
        C1.append(C1_n)
        C2.append(C2_n)
        C3.append(C3_n)
    # 计算C1,m+1和C2,m+1
    C1_m_plus_1 = psi**(attributes[m - 1] - IPub)
    C2_m_plus_1 = TPub**(attributes[m - 1] - IPub)
    return C, C_prime, C_double_prime, C1, C2, C3, C1_m_plus_1, C2_m_plus_1
  • Decrypt算法 :解密者根据解密顺序进行工作,解密成功后可获得随机数据加密密钥。
# 算法11.6 Decrypt
def Decrypt(ciphertext, private_keys, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    # 解密过程
    # ...
    if success:
        return random_data_encrypting_key
    else:
        return None

通过以上算法和流程,该ABE - 基于ICN的命名方案实现了高效、安全的内容访问控制和管理。

基于ABE的ICN内容访问控制

9. 算法详细分析
9.1 GlobalSetup算法

该算法由TTP运行,目的是生成系统的全局参数和全局秘密,为后续的操作奠定基础。以下是对其步骤的详细分析:
|步骤|操作|说明|
|----|----|----|
|1|选择两个双线性群G0和G1,阶为n = p²q²|p和q是两个大素数,确保群的安全性和复杂性|
|2|选择子群Gs和Gt|Gs和Gt的阶为p * q,且相互正交,用于后续的属性排名和加密操作|
|3|选择生成器|phi和psi分别是Gs和Gt的生成器,用于生成相关的加密值|
|4|选择随机值|alpha和beta是随机值,增加加密的随机性和安全性|
|5|定义常量|ROOT作为秘密消息的标识|
|6|选择对称加密函数|Enck和Deck用于对消息进行对称加密和解密|
|7|定义公共属性|SPub、TPub和IPub是公共属性的相关值,公开已知|

# 算法11.1 GlobalSetup
def GlobalSetup():
    # 选择两个双线性群G0和G1,阶为n = p²q²
    p, q = choose_large_primes()
    n = p**2 * q**2
    G0, G1 = choose_bilinear_groups(n)
    g = G0.generator()
    # 选择子群Gs和Gt
    Gs, Gt = choose_subgroups(G0, p * q)
    # 选择生成器
    phi = Gs.generator()
    psi = Gt.generator()
    # 选择随机值
    alpha, beta = choose_random_values()
    # 定义常量
    ROOT = G1.constant()
    # 选择对称加密函数
    Enck, Deck = choose_symmetric_functions()
    # 定义公共属性
    SPub, TPub, IPub = define_public_attribute(Gs, Gt)
    # 全局参数
    global_parameters = [Gs, Gt, phi, psi, phi**beta, e(phi, psi)**alpha, Enck, Deck, (SPub, TPub, IPub), ROOT]
    # 全局秘密
    global_secrets = [beta, psi**alpha]
    return global_parameters, global_secrets
9.2 NodeJoin算法

TTP为每个加入网络的节点运行该算法,生成节点的唯一秘密。具体步骤如下:
|步骤|操作|说明|
|----|----|----|
|1|为节点生成随机数rUID|用于后续的加密计算|
|2|计算DUID|基于随机数rUID和全局参数计算得出|
|3|计算XPub,UID、YPub和ZPub,UID|与节点的唯一标识和全局参数相关|
|4|选择随机值PUID|用于后续的密钥验证和更新|
|5|分配节点信息|将计算得到的信息分配给节点|

# 算法11.2 NodeJoin
def NodeJoin(UID, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    n_prime = Gs.order()
    # 生成随机数
    rUID = choose_random_value(n_prime)
    # 计算DUID
    DUID = psi**((alpha + rUID) / beta)
    rPub = choose_random_value(n_prime)
    # 计算XPub,UID
    XPub_UID = phi**(rUID) * SPub**(rPub)
    # 计算YPub
    YPub = phi**rPub
    # 计算ZPub,UID
    ZPub_UID = e(phi, psi)**(rUID * IPub)
    # 选择随机值
    PUID = choose_random_value(n_prime)
    return [DUID, XPub_UID, YPub, ZPub_UID, PUID]
9.3 AuthoritySetup算法

每个管理属性Ai的权威机构运行该算法,设置属性秘密。步骤如下:
|步骤|操作|说明|
|----|----|----|
|1|选择随机数Ii、ki和hi|用于属性的加密和映射|
|2|生成Si和Ti|基于随机数hi和生成器计算得出|

# 算法11.3 AuthoritySetup
def AuthoritySetup(global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    n_prime = Gs.order()
    # 选择随机数
    Ii, ki, hi = choose_random_values(n_prime)
    # 生成Si和Ti
    Si = phi**hi
    Ti = psi**hi
    return Ii, ki, hi, Si, Ti
9.4 KeyGen算法

属性权威机构为持有该属性的每个节点生成对应属性的私钥。详细步骤如下:
|步骤|操作|说明|
|----|----|----|
|1|权威机构传递信息给TTP|将Ii、Si和Ti传递给TTP进行计算|
|2|TTP计算并返回结果|计算Xi,UID、Yi、Zi,UID和LUID|
|3|权威机构分配密钥|将计算结果和相关信息分配给节点|
|4|节点验证密钥|检查LPUID_UID = TPub是否成立,若成立则更新PUID并接受密钥,否则丢弃|

# 算法11.4 KeyGen
def KeyGen(UID, Ii, Si, Ti, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    n_prime = Gs.order()
    rUID = choose_random_value(n_prime)
    ri = choose_random_value(n_prime)
    # 计算Xi,UID
    Xi_UID = phi**(rUID) * Si**(ri)
    # 计算Yi
    Yi = phi**ri
    # 计算Zi,UID
    Zi_UID = e(phi, psi)**(rUID * Ii)
    # 计算LUID
    LUID = TPub**(1 / PUID)
    return Xi_UID, Yi, Zi_UID, LUID, Ii, ki, hi
9.5 Encrypt算法

加密者根据每个子句的加密顺序进行工作,具体流程如下:

graph LR
    A[选择随机值s] --> B[计算C, C', C'']
    B --> C[遍历属性]
    C --> D{计算C1,n, C2,n, C3,n}
    D --> E[计算C1,m+1和C2,m+1]
步骤 操作 说明
1 计算C、C’和C’‘ 基于随机值s和全局参数计算
2 遍历属性 对每个属性进行加密计算
3 计算C1,n、C2,n和C3,n 根据属性值和随机数计算
4 计算C1,m+1和C2,m+1 与最后一个属性和公共属性相关
# 算法11.5 Encrypt
def Encrypt(attributes, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    p = Gs.order()
    s = choose_random_value(p)
    I0 = s
    m = len(attributes)
    # 计算C, C', C''
    C = K * e(phi, psi)**(alpha * s)
    C_prime = phi_beta**s
    C_double_prime = Enck(ROOT)
    C1 = []
    C2 = []
    C3 = []
    for n in range(1, m + 1):
        if n == 1:
            ln = choose_random_value(n_prime)
        else:
            if (C1[n - 2], C2[n - 2], C3[n - 2]) is not None:
                continue
            ln = choose_random_value(n_prime)
        # 计算C1,n
        C1_n = psi**((I0 - attributes[n - 1]) * ln)
        # 计算C2,n
        C2_n = Ti**((I0 - attributes[n - 1]) * ln)
        # 计算C3,n
        C3_n = (kn * ln)**(-1)
        C1.append(C1_n)
        C2.append(C2_n)
        C3.append(C3_n)
    # 计算C1,m+1和C2,m+1
    C1_m_plus_1 = psi**(attributes[m - 1] - IPub)
    C2_m_plus_1 = TPub**(attributes[m - 1] - IPub)
    return C, C_prime, C_double_prime, C1, C2, C3, C1_m_plus_1, C2_m_plus_1
9.6 Decrypt算法

解密者根据解密顺序进行工作,解密成功后可获得随机数据加密密钥。

# 算法11.6 Decrypt
def Decrypt(ciphertext, private_keys, global_parameters):
    Gs, Gt, phi, psi, phi_beta, e_phi_psi_alpha, Enck, Deck, (SPub, TPub, IPub), ROOT = global_parameters
    # 解密过程
    # ...
    if success:
        return random_data_encrypting_key
    else:
        return None
10. 方案优势与应用场景
10.1 方案优势
  • 分布式管理 :属性权威机构和网络用户都是分布式的,避免了集中式管理带来的性能瓶颈,提高了系统的可扩展性和灵活性。
  • 策略灵活性 :内容所有者可以根据需要定义灵活的访问策略,无需明确知道具体的访问者,只需关注属性的组合,便于管理和维护。
  • 属性比较与简化 :支持属性之间的比较和排名,能够简化复杂的访问策略,降低管理成本。
  • 隐私保护 :通过合理分类ACAs和DAs,保护了受保护内容的隐私,只有满足访问策略的用户才能获取敏感信息。
  • 减少网络负载 :普通用户可以在成功解密内容名称后再下载内容,避免了不必要的下载,减少了底层网络的工作量。
10.2 应用场景
  • 医疗领域 :在医疗ICN网络中,患者的医疗数据(如MRI报告)需要严格的访问控制,该方案可以确保只有授权的医生和护士能够访问患者的敏感信息,保护患者的隐私。
  • 企业数据管理 :企业内部的重要文件和数据可以使用该方案进行访问控制,根据员工的职位、部门等属性设置不同的访问权限,提高数据的安全性。
  • 云计算环境 :在云计算环境中,用户的数据存储在云端,需要对数据进行有效的访问控制。该方案可以根据用户的身份和权限,对云端数据进行加密和访问管理。
11. 总结

基于ABE的ICN内容访问控制方案通过合理的属性管理、灵活的访问策略和高效的加密算法,实现了安全、高效的内容访问控制。该方案在分布式管理、策略灵活性、隐私保护等方面具有显著优势,适用于医疗、企业数据管理和云计算等多个领域。通过详细的算法设计和示例说明,为实际应用提供了可行的解决方案。同时,该方案也考虑了攻击模型,采取了相应的措施保证内容的完整性和安全性。未来,随着ICN技术的不断发展,该方案有望在更多领域得到广泛应用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值