本发明属于云服务安全领域,为保证云服务器日志隐私安全,设计并提出了一种基于区块链的云服务日志匿名系统及匿名方法。
背景技术:
近年来,云计算由于在成本和管理等方面显著优于传统计算模式,已吸引了大量企业将计算服务迁移上云。然而,随着云计算的普及,它的缺点也逐渐显露,用户对物理设备没有直接控制权,导致问题发生时责任界定不清晰。此时,服务器的日志将成为分析过错的主要证据,但是日志易遭到恶意篡改,尤其是日志控制权在负有责任的一方,如云服务提供商。因此,保证日志的完整性极为重要。现有方法将日志哈希记录在区块链上,从而利用区块链的不可篡改性来保护日志的完整性。然而,由于区块链的伪匿名性,在区块链上记录日志哈希时,用户的身份可能会暴露,从而导致用户隐私泄露。因此,如何保证云服务日志系统中日志的完整性和用户隐私安全性,成为云服务安全领域密切关注的课题。
技术实现要素:
本发明克服了现有云服务日志系统中存在第三方审计机构篡改日志和用户隐私泄漏问题,提供了一种保护用户隐私安全的基于区块链的云服务日志匿名系统及匿名方法。
本发明的一种基于区块链的云服务日志匿名系统,包括:
区块链日志模块:将经过匿名化处理的云服务日志存储在区块链中;
zokrates模块:用于生成零知识证明,构造密钥,生成零知识证明代码;
智能合约模块:自动对区块链中存储的云服务日志进行验证,通过零知识证明验证匿名化日志的正确性,对验证过的日志进行标记,并存储在区块链上;
云服务提供商端:按用户的操作指令提供相应的云服务,在完成用户下达的指令后,云服务提供商反馈操作的执行结果以及操作产生的日志给用户,并将此日志和与用户交互产生的附加数据一并存储到日志数据库;
用户端:与云服务提供商和区块链系统进行交互,负责密钥对的生成和导入导出、用户注册、发出云服务请求操作。
本发明还提供一种基于区块链的云服务日志匿名方法,包括:
s1:在云服务提供商按照用户需求为用户提供云服务后,云服务提供商对日志哈希值进行哈希运算处理得到日志哈希值k,并通过zokrates模块生成零知识证明π、零知识证明的验证密钥vk和零知识证明代码,将k、π、vk存储到区块链上,构建验证合约,将零知识证明代码导出到验证合约,并部署到区块链上用于之后的验证;
s2:调用验证合约通过零知识证明对存储日志进行验证;
s3:对验证过的云服务日志进行标记,并存储在区块链上。
例如,本发明的实施例提供的一种基于区块链的云服务日志匿名方法,其中,步骤s1的具体步骤包括:
s11:用户和云服务提供商分别设置密钥对,其中,设置密钥对方法为:选择一个秘密的随机数作为私钥,对私钥使用带初始向量的哈希算法,将私钥的哈希值作为公钥,用于零知识证明;
s12:用户请求云服务前,首先产生一个随机数作为本次云服务请求操作的标识,并对操作码和随机数进行数字签名,将此签名、云服务操作码、随机数发送给云服务提供商以请求云服务,同时签名可作为用户对操作的不可抵赖证据;
s13:云服务提供商完成用户下达的操作指令后,然后云服务提供商将会返回操作执行的结果和相应日志记录到云服务器,并同时发送给用户;
s14:云服务提供商计算哈希值k,计算公式为:k=h(h(h(pkc,pku),h),r),其中,pkc是云公钥,pku是用户公钥,h是日志哈希值,r是随机数,h(x)是哈希函数;
s15:将生成零知识证明所需要的参数pkc、pku、h、r传递给zokrates模块;
s16:zokrates模块利用参数pkc、pku、h、r构造零知识证明π和其对应的零知识证明的验证密钥vk,其中,构造的零知识证明π如下:(1)知道云公钥pkc对应的云私钥skc,(2)用户公钥pkc被包括在k的计算中,vk是与π对应的验证密钥,将k、π、vk存储到区块链上;
s17:将零知识证明代码导出到验证合约,并对验证合约添加构造函数和审计方法,形成的最终验证合约部署到以太坊私有链上,最后将合约地址返回给用户,便于用户进行验证操作。
例如,本发明的实施例提供的一种基于区块链的云服务日志匿名方法,其中,步骤s2的具体步骤包括:
s21:用户从本地数据库中取出本次日志记录并计算本次日志记录的哈希值hu,取出之前获得的云服务提供商的公钥,以及用户自己的公钥和生成的随机数r再次计算哈希值,其值记为k_1;
s22:从云服务提供商返回的合约地址处提取出根据本次日志记录产生的哈希值,其值记为k_2,将双方哈希值进行对比,若k_1=k_2则认证成功,否则拒绝本次认证;
s23:通过获得的合约地址调用合约,并将随机数r、日志哈希hu以及云服务提供商哈希公钥pkc和用户的哈希公钥pku作为验证合约验证函数参数输入,验证此用户是pku的所有者,且云服务提供商向区块链发送了当前需要被审计的记录(证明pku和pkc之间的服务关系),函数返回布尔值结果,若结果为真则该日志记录了该用户和云服务提供商间的云服务过程,并且用户日志未被篡改,否则日志已被篡改过。
例如,本发明的实施例提供的一种基于区块链的云服务日志匿名方法,其中,步骤s3具体步骤包括:
s31:验证通过后,用户利用自己的rsa公钥产生一个对k的签名,作为对本次记录的认可,发送给云服务提供商,云服务提供商收到此签名后存储在数据库中,作为保证用户不可抵赖的证据;
s32:将通过验证的日志进行编号,记录在区块链日志模块,并将编号反馈给用户,已验证通过的区块不必进行二次验证,通过查询区块中编号记录确认是否验证通过。
例如,本发明的实施例提供的一种基于区块链的云服务日志匿名方法,还包括:
审计阶段,当用户对云服务提供商给出的异常服务的原因有异议时,可以要求云服务提供商提供原始日志,用户发起日志完整性审计,第三方机构通过调取合约的审计函数,对日志认证哈希值等参数进行对比检查,以向第三方证明日志是否曾受到篡改。
与现有技术相比,本发明基于区块链的云服务日志匿名方法及系统具有以下优点:1.采用非交互式简洁零知识证明,证明区块链上日志的完整性同时,保证了匿名性,降低用户隐私泄露的风险;2.在不破坏匿名性的情况下,也实现了审计功能,让用户能够在恶意篡改发生时向第三方证明日志被篡改过;3.使用智能合约实现了日志记录和审计,提高了自动化程度。
该云服务日志匿名方法主要解决了两个问题:1.通过零知识证明,解决了区块链上日志完整性问题,保证匿名性的同时降低用户隐私泄露风险;2.通过设计智能合约,自动实现云服务日志的验证和审计工作。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本发明的一些实施例,而非对本发明的限制。
图1为本发明实施例提供的基于区块链的云服务日志匿名方法流程示意图;
图2为本发明实施例提供的基于区块链的云服务日志匿名系统结构示意图;
图3为本发明实施例提供的结合零知识证明实现的云服务日志匿名方案与provchain方案、群签名bppcf方案的在不同用户规模下的匿名度比较曲线;其中,细实线
图4为本发明实施例提供的结合零知识证明实现的云服务日志匿名方案与provchain方案、群签名bppcf方案已公开记录对未公开记录匿名度的影响变化曲线;其中,细实线
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例,基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
在传统的云日志系统中,引入了第三方审计机构来保证一定的日志完整性。但在这种方案中,第三方审计机构可以看到用户的日志,虽然日志数据库中存储于的是用户名的哈希值,但同一个用户名总是对应着同一个哈希,通过大量日志关联,仍然存在用户隐私泄露的风险。此外,完全可信的第三方审计机构是不存在的,在利益的诱惑下审计者可能与云服务商协同作弊,增加虚假日志或修改已有日志。
具有不可篡改性的区块链技术被引入用来解决日志完整性的问题,通过将哈希计算后的日志记录到区块链上,可以有效抵御针对完整性的攻击。但现有基于区块链的日志系统大多使用公有链,没有考虑用户的匿名性,用户和云服务提供商均使用不变的公钥直接在区块链上记录信息,仍然存在用户隐私泄漏问题。
验证匿名化日志正确性成为关键问题。零知识证明常被用于验证问题。零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
本发明的实施例提供的基于区块链的云服务匿名日志系统,使用非交互式简洁零知识证明,在证明区块链上日志的完整性的同时,保证匿名性,降低用户隐私泄露的风险。在不破坏匿名性的情况下,也实现了审计功能,使得用户能在恶意篡改发生时向第三方日志被篡改证明。
如附图1所示,本发明实施例提供的基于区块链的云服务匿名日志方法包括以下步骤:
s1:用户和云服务提供商分别设置密钥对,
其中,设置密钥对方法为:
选择一个秘密的随机数作为私钥,对私钥使用带初始向量的哈希算法,将私钥的哈希值作为公钥,用于零知识证明;
用户请求云服务前,首先产生一个随机数作为本次云服务请求操作的标识,并对操作码和随机数进行数字签名,签名可作为用户对操作的不可抵赖证据;用户发出post请求,将此签名、云服务操作码、随机数发送给到云端http的监听端口以请求云服务;
云端服务器接收到请求后开始处理一次请求,服务器从post请求的data字段中提取用户要执行的命令,比如注册register、操作operate和认证validate等操作;
云服务提供商完成用户下达的操作指令后,然后云服务提供商将会返回操作执行的结果和相应日志记录到云服务器,并同时发送给用户;
云服务提供商对日志哈希值进行哈希运算处理得到哈希值k,用于之后的认证操作计算公式为:k=h(h(h(pkc,pku),h),r),其中,pkc是云公钥,pku是用户公钥,h是日志哈希值,r是随机数,h(x)是哈希函数,并将生成零知识证明所需要的参数pkc、pku、h、r传递给zokrates模块,zokrates模块利用参数pkc、pku、h、r构造零知识证明π和其对应的零知识证明的验证密钥vk,其中,构造的零知识证明π如下:(1)知道云公钥pkc对应的云私钥skc,(2)用户公钥pkc被包括在k的计算中,vk是与π对应的验证密钥,将k、π、vk存储到区块链上;
将零知识证明代码导出到验证合约,并对验证合约添加构造函数和审计方法,形成的最终验证合约部署到以太坊私有链上,最后将合约地址返回给用户,便于用户进行验证操作。
s2:调用验证合约通过零知识证明对存储日志进行验证;
首先,用户从本地数据库中取出本次日志记录并计算本次日志记录的哈希值hu,取出之前获得的云服务提供商的公钥,以及用户自己的公钥和生成的随机数r再次计算k,其值记为k_1;
从云服务提供商返回的合约地址处提取出根据本次日志记录产生的k,其值记为k_2,将双方哈希值进行对比,若k_1=k_2则认证成功,否则拒绝本次认证;
通过获得的合约地址调用合约,并将随机数r、日志哈希hu以及云服务提供商哈希公钥pkc和用户的哈希公钥pku作为验证合约验证函数参数输入,验证此用户是pku的所有者,且云服务提供商向区块链发送了当前需要被审计的记录(证明pku和pkc之间的服务关系),函数返回布尔值结果,若结果为真则该日志记录了该用户和云服务提供商间的云服务过程,并且用户日志未被篡改,否则日志已被篡改过,通过使用零知识证明,有效证明区块链上日志的完整性同时,保证了匿名性,降低用户隐私泄露的风险。
s3:验证通过后,用户利用自己的rsa公钥产生一个对k的签名,作为对本次记录的认可,发送给云服务提供商,云服务提供商收到此签名后存储在数据库中,作为保证用户不可抵赖的证据;将通过验证的日志进行编号,记录在特定区块,并将编号反馈给用户,已验证通过的区块不必进行二次验证,通过查询区块中编号记录确认是否验证通过,降低系统验证时间开销。
如附图2所示,本发明实施例提供的基于区块链的云服务匿名日志系统包括以下模块:
区块链日志模块:将所有经过匿名化处理的云服务日志存储在区块链中;
zokrates模块:主要用于生成零知识证明,构造密钥,生成零知识证明代码;
智能合约模块:自动对区块链中存储的云服务日志进行验证,通过零知识证明验证匿名化日志的正确性,对验证过的日志进行标记,并存储在区块链上;
云服务提供商端:按用户的操作指令提供相应的云服务,在完成用户下达的指令后,云服务提供商反馈操作的执行结果以及操作产生的日志给用户,并将此日志和与用户交互产生的附加数据一并存储到日志数据库;
用户端:与云服务提供商和区块链系统进行交互,负责密钥对的生成和导入导出、用户注册、发出云服务请求操作。
如附图3所示,分别比较了provchain方案,群签名bppcf方案,和本发明实施例提供的结合零知识证明实现的云服务日志匿名方案三种方案在三种规模条件下的匿名性表现。其中,csp数量为单个用户同时使用的不同云服务提供商的服务个数。小规模:用户人数为1000,csp数量为1;中规模:用户人数为10000,csp数量为5;大规模:用户数量为100000,csp数量为10。此外,日志数量为单个用户与他的每个云服务提供商各产生的记录的数量,这三种规模下日志数量范围均设置为5000-10000。横轴表示出于审计需要所公布的记录的比例,纵轴表示整个系统的匿名度。如图3所示,在bppcf中,匿名度也线性减少,由于同一个用户组中的用户的匿名程度受限于其所在组的大小,其剩余信息总是少于未被公开的记录的总信息。在provchain中,系统匿名度并非线性减少,其变化率逐渐降低。在此系统中用户-csp关系对被公开时损失的信息与其被公开的时机有关。对于同一个用户-csp对所记录的多个信息,最先被公开的记录会让系统损失这个关系对所包含的所有信息。本系统总匿名度随被公开记录数量增加而线性减小,且剩余信息恰等于未被公开的记录所含的总信息,即剩余记录仍然完全匿名。
如附图4所示,将本方案与provchain方案、群签名bppcf方案中已公开记录对未公开记录匿名度的影响变化曲线。在本系统中,已公开记录不会影响未公开记录匿名度。bppcf方案未公开记录匿名度在被公开记录增长的情况下基本保持不变,但低于本方案匿名度。provchain记录被公开时损失的信息量与被公开时机有关,同一个服务对不同记录之间会相互影响,被公开的记录比例越高,未公开记录匿名度越低。本方案能在不同规模下,都能拥有良好的记录匿名性,能够更好的保护用户隐私。