CN111831997A - 一种客户端与数据库之间建立可信关系的方法 - Google Patents
一种客户端与数据库之间建立可信关系的方法 Download PDFInfo
- Publication number
- CN111831997A CN111831997A CN202010560596.6A CN202010560596A CN111831997A CN 111831997 A CN111831997 A CN 111831997A CN 202010560596 A CN202010560596 A CN 202010560596A CN 111831997 A CN111831997 A CN 111831997A
- Authority
- CN
- China
- Prior art keywords
- client
- hash
- database
- query
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
- G06F21/33—User authentication using certificates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种客户端与数据库之间建立可信关系的方法,客户端通过一对公私钥实现用户身份的不可伪造,数据库系统在用户数据上维护了一个可验证索引结构,用户数据的每一次更新,索引结构的状态信息都会被同步到客户端,客户端可以通过这些状态信息去判断查询结果的正确性,同时,这些更新操作都会被记录到一个不可篡改的历史表当中,用户可以通过该表实现对数据的追溯。此外,该框架兼容传统数据库,可以在最大限度保证已有的遗产系统不会受到很大影响。
Description
技术领域
本发明属于数据库技术领域,涉及到用户数据在数据库中的安全管理问题,具体是在中心化数据库上实现用户数据的不可篡改和可追溯特性,保证客户端和数据库之间的可信连接。
背景技术
数据库为海量、多样化的数据提供了高效便利的数据存储和数据管理服务,在各个领域都发挥着举足轻重的作用。但是用户将数据存储在非可信的中心化数据库中,会因为数据的使用者和数据的拥有者分离而产生的安全问题,例如,拥有特殊权限的数据库管理员可以通过修改日志记录的方式对其他用户数据进行非法的更新操作,且该行为无法被用户所感知。中心化数据库数据安全问题严重阻碍了信息技术的快速发展。
区块链被认为是一种解决数据安全问题的重要方法。作为一种去中心化的分布式账本,区块链保证了在互不信任的环境下,数据在写入后无法被恶意篡改。但是目前区块链系统存在三个比较严重的问题。首先,区块链的数据管理能力不足,与传统数据库相比,无法提供丰富的查询接口。其次,区块链的性能低,区块链的共识协议会导致大量网络开销,使得系统的吞吐很低。最后,区块链系统不兼容传统数据库,将原先建立在传统数据库平台上的业务迁移到区块链系统上需要的开发代价很大。尽管区块链系统可以严格保证数据安全,但区块链技术却难以完全取代传统数据库提供高效的数据存储和数据管理服务。对此,将区块链所涉及到的部分技术,比如可验证索引结构,非对称加密等,融入到传统数据库中是一种值得探索的解决方案。
可验证索引结构(AuthenticatedData Structure,ADS)是一种既可以提供数据检索功能,又可以为查询结果提供验证信息,支持验证查询结果的正确性和完整性的数据结构。MB树(Merkle B-tree)作为一种常见的可验证索引结构,它与B树的结构十分类似,每一个非叶节点不仅有指向下一层孩子节点的指针信息和关键字信息,如图1所示,还包含了孩子节点的哈希信息,MB树既可以支持单点查询,也可以支持范围查询,可以满足丰富的查询需求。当收到用户的查询需求时,执行器会从MB树的根节点出发依次向下访问到叶子节点,同时取出每一层对应的节点信息加入到验证信息当中,客户端收到验证信息和查询结果时,可以根据这些信息来判断出查询结果的正确性和完整性。
非对称加密是指用不同的秘钥来加密和解密,这对秘钥分别称为私钥和公钥,它们成对出现,通过一个秘钥无法推导出与之对应的另外一个秘钥。用公钥加密的内容只能用对应的私钥解密。为了缩短用私钥加密后的密文长度,通常私钥加密的内容是一段摘要,而摘要是一段内容或者一个文件通过哈希算法计算而得到的一个字符串,摘要经过私钥加密后就可以得到的数字签名,数字签名是和源文件一起发送给接收方的,接收方对文件使用相同的哈希算法算出一个摘要,然后和数字签名中的摘要进行比对,两者不一致的话说明文件被篡改了。
发明内容
针对中心化数据库出现的用户数据安全问题,本发明在不被信任的中心化数据库和客户端之间建立可信关系。在本框架中客户端查询的数据可以进行正确性和完整性验证,数据的更新行为将被记录在一个不可篡改的历史记录表中,以此实现数据库中的数据安全。
本发明的框架针对传统软件系统结构所使用的CS模式做了一些修改,框架包含中心化数据库,客户端和CA中心(证书中心),其中,证书中心是一个专门负责公私钥生成和发放的机构,具体描述为:当客户端想要连接数据库时,它首先要向CA中心发送证书请求,CA中心收到请求后,会生成一对公私钥,同时将私钥返回给客户端,而公钥则广播给数据库系统和其他客户端,经过私钥签名后的消息只有对应的公钥可以解密。此后,客户端每次向数据库发送查询请求时,都会附带上该消息的数字签名。本发明也对中心化数据库的查询引擎和存储引擎做了修改。本发明在数据库的查询引擎上添加了两种新的查询方式——可验证查询和追溯查询,其中,可验证查询使得客户端可以验证查询结果的正确性和完整性,追溯查询则支持追踪某一段时间内数据修改的信息。与两种查询相对应的则是区块链表和历史表,可验证查询针对的对象是区块链表,而追溯查询针对的对象则是历史表。区块链表是带有可验证索引结构的新型表,执行器在访问可验证索引获取元组时会构造一个验证信息集合,通过该集合,客户端就可以验证数据的正确性与完整性,需要注意的是可验证索引信息的每一次更新都会被同步到客户端。历史表是一个存放用户对区块链表操作的日志记录表,如图2所示,表中的记录通过对当前行内容和前一行的哈希值做hash计算链接起来,以此来实现防篡改机制,同时这条哈希链的最新hash值也会被同步到客户端,以供客户端验证。
本发明提出了一种客户端与数据库之间建立可信关系的方法,包括以下步骤:
步骤1:利用公私钥提供安全可靠的身份管理,具体包括:
步骤1-1:客户端向CA中心发送证书申请请求;
步骤1-2:CA中心产生一对公私钥,将私钥返回给客户端,同时将公钥广播给其他客户端以及数据库;
步骤1-3:客户端向数据库发送查询请求之前,对查询语句使用一个哈希算法将其转化为一段哈希摘要,使用私钥对这个摘要加密,生成数字签名;将查询语句和数字签名一同发送给中心化的数据库;
步骤1-4:中心数据库收到查询请求,从消息中解析出查询语句和数字签名;使用数据库中与客户端相对应的公钥解密出摘要内容,由此证明客户端的身份是正确的,接着对查询语句使用hash函数得到一个新的摘要,与刚刚得到的摘要进行对比;如果两者一致,证明该请求未被修改过。
步骤2:在用户数据构建可验证索引结构,针对客户端数据更新请求,动态维护数据库的索引结构以及客户端本地存储的验证信息,客户端通过可验证查询判断数据的正确性;
本发明所述步骤2中动态维护数据库的索引结构以及客户端本地存储的验证信息,数据库在完成用户数据更新后,立即更新可验证索引结构,重新生成一个代表此时索引结构状态的验证信息,最后,数据库将该操作写入历史记录表当中,同时生成一个历史表的状态信息,数据库将索引结构和历史表的验证信息同步到所有的客户端,而原先存储在客户端上的验证信息则被最新的验证信息所替换,而历史表的验证信息不会被替换,而是以一定的间隔存储。
所述步骤2中客户端通过可验证查询判断数据的正确性;进一步包括以下步骤:
步骤2-1:客户端发起可验证查询请求后,将查询语句和数字签名一同发送到数据库。
步骤2-2:中心数据库收到查询请求,从消息中解析出查询语句和数字签名,检验客户端身份是否正确,是否有相应的权限;
步骤2-3:调用数据库查询引擎,生成查询计划,指定查询路径为可验证索引路径,执行器在执行查询计划时,通过可验证索引获取元组,在获取元组的同时,构造一个验证信息集合;将查询的元组和验证信息发送到客户端;
步骤2-4:客户端从连接请求中获取到元组和验证信息后,利用查询结果和验证信息重新计算得到一个表示查询结果状态的值,将该值与存储在客户端本地的验证信息做对比,若两者的值是一样的,则表示查询的结果正确。
步骤3:将记录事务日志的历史表组织成一条哈希链,将哈希链作为验证信息同步到客户端。客户端通过追溯查询追踪数据变化时,通过本地哈希链验证日志记录是否被篡改。
本发明所述步骤3中将记录事务日志的历史表组织成一条哈希链,并同步到客户端;历史表的属性列中包含涉及到事务日志id,操作者、作者内容、操作时间、用户请求的签名、上一行的哈希值和当前行的哈希值相关信息,当前行的哈希值是对当前行的内容和前一行的哈希值做哈希计算得到,通过哈希值这一属性即可将该表组织成一条链,每一次在历史表中添加新的数据行时,哈希链的尾端哈希值会被同步到客户端,而客户端对这些哈希值的存储以一定的事务日志间隔存储。
本发明所述步骤3中客户端通可以过追溯查询追踪数据变化,追溯查询是在历史表中基于时间属性去检索事务日志的方法。具体步骤包括:
步骤3-1:客户根据查询的时间范围,确定客户端本地所存储的哈希间隔中哪些哈希值之间包含了所需要查询的时间范围;查询该哈希区间内的历史表的所有数据;
步骤3-2:将得到的数据按照历史表中计算哈希列的方法重新计算哈希列,以事务日志id为顺序去计算,得到哈希列的首位两个哈希值,将他们分别与刚刚得到哈希区间值进行比较,是否一致,一致则说明历史表的数据正确;
步骤3-3:从正确的数据集中找到符合条件的数据行,返回给用户。
本发明所述步骤2和步骤3中的验证信息的维护过程,进一步包括以下步骤:
步骤4-1:客户端将更新语句和数字签名一同发送到数据库。
步骤4-2:中心数据库收到数据更新请求,从消息中解析出更新语句和数字签名,检验客户端身份是否正确,是否有相应的权限。
步骤4-3:调用数据库查询引擎,生成查询计划,执行器执行查询计划将数据写入区块链表,将数据行组织成一个字符串,计算字符串的哈希值,根据数据行在磁盘的位置信息和数据行的哈希值来更新可验证索引结构,重新生成一个可以代表此时区块链表和索引结构状态的验证信息。
步骤4-4:将客户端的行为信息记录到历史表,这些行为信息中包含客户端身份、操作内容、客户端发送过来的数字签名、索引结构的验证信息(由步骤2-3得到)、表中前一行的哈希值和当前行的哈希值(当前行的哈希值是对当前行的内容和前一行的哈希值做哈希计算得到),操作日期等。
步骤4-5:数据库系统将索引结构的验证信息和历史表中hash列最新的哈希值发送至客户端。
步骤4-6:客户端收到数据库发送来的验证信息和历史表最新哈希值后,更新本地存储的验证信息以及历史表的哈希值。需要注意的是客户端收到的历史表中过期的哈希值不会全部被丢弃,而是以一定的区间存储在客户端本地。
本发明方法的有益效果包括:在客户端与数据库之间建立起了可信的间接,用户不用担心因为数据存储在第三方平台而被破坏,客户端可以支持对用户数据的完整性和正确性验证,用户还可以追溯数据的变化情况,这种数据更新的记录也是不可篡改的,客户端同样可以对其进行验证。另外,本发明框架在兼容传统数据库服务的情况下,具有与区块链类似的特性,提供了对用户数据不可篡改的服务,可以快速实现将业务从传统数据库迁移到本框架所衍生的系统平台上。
附图说明
图1是MB树的非叶节点结构。
图2是历史表的示例图,每一行的hash值都是对当前行内容和前一行哈希值进行哈希计算得到的,通过hash列实现历史表的链式串接。
图3是客户端向数据库发送数据更新的请求时,客户端和数据库的处理流程图。
图4是本实例的框架结构图。
图5是拥有8个叶子节点的MB树结构图,在该树建立在学生表上,查找学号在5到12之间的学生。
图6是在MB上进行查询构造验证信息的伪代码说明。
图7是客户端追溯查询时同步哈希。
具体实施方式
结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
本发明提出了一种基于客户端与数据库之间建立可信关系的框架,可以保证存储在数据库上用户数据的安全。具体包含的步骤如下:
步骤1:客户端在系统中注册安全可靠的身份;具体包括:
步骤1-1:客户端向CA中心发送证书申请请求;
步骤1-2:CA中心产生一对公私钥,将私钥返回给客户端,同时将公钥广播给其他客户端以及数据库;
步骤1-3:客户端向数据库发送查询请求之前,对连接请求内容使用一个哈希算法将其转化为一段哈希摘要,使用私钥对这个摘要加密,生成数字签名;将连接请求内容和数字签名一同发送给中心化的数据库;
步骤1-4:中心数据库收到连接请求,从消息中解析出客户端的连接申请和数字签名;使用数据库中与客户端相对应的公钥从数字签名中解密出摘要内容,由此证明客户端的身份是正确的,接着对连接申请使用hash函数得到一个新的摘要,与刚刚得到的摘要进行对比;如果两者一致,证明该客户端的请求未被修改过。
步骤2:客户端和数据库对验证信息的维护。
基于以上的框架内一些组件的分析,当用户成功连接数据库时,用户向数据库发送数据更新请求时,其中会涉及到客户端和数据库中验证信息的维护过程,如图3所示,该框架内客户端和数据库具体包括以下子步骤:
步骤2-1:客户端将更新语句和数字签名一同发送到数据库。
步骤2-2:中心数据库收到数据更新请求,从消息中解析出更新语句和数字签名,检验客户端身份是否正确,是否有相应的权限。
步骤2-3:调用数据库查询引擎,生成查询计划,执行器执行查询计划将数据写入区块链表,将数据行组织成一个字符串,计算字符串的哈希值,根据数据行在磁盘的位置信息和数据行的哈希值来更新可验证索引结构,重新生成一个可以代表此时区块链表和索引结构状态的验证信息。
步骤2-4:将客户端的行为信息记录到历史表,这些行为信息中包含客户端身份、操作内容、客户端发送过来的数字签名、索引结构的验证信息(由步骤2-3得到)、表中前一行的哈希值和当前行的哈希值(当前行的哈希值是对当前行的内容和前一行的哈希值做哈希计算得到),操作日期等。
步骤2-5:数据库系统将索引结构的验证信息和历史表中hash列最新的哈希值发送至客户端。
步骤2-6:客户端收到数据库发送来的验证信息和历史表最新哈希值后,更新本地存储的验证信息以及历史表的哈希值。需要注意的是客户端收到的历史表中过期的哈希值不会全部被丢弃,而是以一定的区间存储在客户端本地。
步骤3:用户对查询到的数据进行正确性验证。
以客户端从数据库中同步到的验证信息为基础,本发明提供了用户可以检测存储在数据库中的数据是否是正确的查询方法,被称为可验证查询。在该框架内,当涉及到可验证查询时,客户端和数据库相应的处理子步骤如下:
步骤3-1:客户端将查询语句和数字签名一同发送到数据库。
步骤3-1:中心数据库收到查询请求,从消息中解析出查询语句和数字签名,检验客户端身份是否正确,是否有相应的权限。
步骤3-3:调用数据库查询引擎,生成查询计划,指定查询路径为可验证索引路径,执行器在执行查询计划时,通过可验证索引获取元组,在获取元组的同时,也会构造一个验证信息集合。将查询的元组和验证信息发送到客户端。
步骤3-4:客户端从连接请求中获取到元组和验证信息后,根据验证信息和元组计算出一个验证值,将验证值和存储在本地的验证信息进行对比,即可得知数据是否正确。
步骤4:客户端通过追溯查询实现数据变更的追踪,追溯查询是在历史表中基于时间属性去检索事务日志的方法。区块链表的每一次数据变更都会被完整的记录在历史表中,历史表通过hash值属性组织成哈希链,哈希链上的每一次变更信息会被同步到客户端,使得针对历史表的非法篡改操作可以轻易的被检测出来。当追溯某一段时间内的数据变化时,因为当历史表中存放的数据量很大时,将整个历史表都同步过来以供客户端验证需要很大的网络开销,而且客户端重新计算整个历史表去验证哈希链是否正确,这个过程所需要的计算开销很大,因此本发明不会将整条哈希链的数据都同步过来,而是将存储在客户端本地哈希值区间内的记录同步过来,然后重新计算区间内的哈希链,判断哈希链的两端是否和哈希区间的边界哈希值相同即可,若相同,则表示数据未被修改。具体步骤包括:
步骤4-1:客户根据查询的时间范围,确定客户端本地所存储的哈希间隔中哪些哈希值之间包含了所需要查询的时间范围。向数据库发送查询请求,查询该哈希区间内的历史表的所有数据。
步骤4-2:将得到的数据按照历史表中计算哈希列的方法重新计算哈希列,以事务日志id为顺序去计算,得到哈希列的首位两个哈希值,将他们分别与刚刚得到哈希区间值进行比较,是否一致,一致则说明历史表的数据是正确的。
步骤4-3:从正确的数据集中找到符合条件的数据行,返回给用户。
本发明针对数据存在的安全隐患和现有技术的不足,设计了一种安全可靠的框架,在不可信的中心化数据库中为用户提供了可以验证所存数据的正确性的方法,在客户端与数据之间建立起了可信的连接关系。如图4所示,本实例是以PostgreSQL数据库为基础,修改了查询引擎、存储引擎以及客户端协议,在查询引擎中添加了可验证查询和追溯查询的计划,在存储引擎中使用MB树作为可验证的索引结构来检索区块链表中的数据,同时添加了历史表作为一种不可篡改的日志记录表,在客户端协议中添加了验证信息以及签名信息等结构。CA中心负责公私钥的发放,客户端发送消息之前都需要使用私钥加密,且私钥不会被其他人所拥有,加密后的消息只有对应的公钥可以解密,以此实现了用户身份的不可伪造的特性。
1.本实例实现了客户端与数据库的可信关系,具体包括:
步骤1:用户身份的注册管理。
步骤2:在客户端与数据库之间维护验证信息。
步骤3:对数据库上的数据进行可验证查询,客户端验证查询结果的正确性。
步骤4:追溯用户数据的变化情况。
2.其中,第1点中步骤1中所述用户注册管理是指当用户想要将数据存储在该框架内的PostgreSQL数据库时,首先需要完成身份的注册,客户端身份注册包含如下步骤:
步骤1-1:客户端向CA中心发送证书申请请求。
步骤1-2:CA中心产生一对公私钥,将私钥返回给客户端,同时将公钥广播给其他客户端以及PostgreSQL数据库。
3.第1点中步骤2中所述验证信息的维护过程是在客户端取得私钥后,它的身份便会被中心化的数据库所认可,用户此时可以将数据存储到实例中数据库的区块链表中,数据的存储过程涉及到验证信息的维护,验证信息的维护过程包含如下步骤:
步骤2-1:客户端发送数据更新请求,数据更新请求具体包括如下步骤:
步骤2-1-1:对更新语句使用一个哈希算法将其转化为一段哈希摘要。
步骤2-1-2:使用私钥对这个摘要加密,生成数字签名。
步骤2-1-3:将更新语句和数字签名一同发送给中心化的PostgreSQL数据库。
步骤2-2:中心数据库收到数据更新请求,从消息中解析出更新语句和数字签名。使用数据库中与客户端相对应的公钥解密出摘要内容,由此可以证明客户端的身份是合法的,接着对更新语句使用与客户端相同的hash函数,将得到的结果与刚刚得到的摘要进行对比。如果两者一致,就证明这请求未被修改过。
步骤2-3:调用数据库查询引擎,生成查询计划,执行器将数据写入区块链表,将数据落盘的位置信息返回,本实例在学生表的学号字段上创建了MB树索引,系统将插入数据的学号、插入数据的hash值和插入数据的位置信息组织成一个mbt_leaf结构体,插入到MB树中,MB树的插入步骤具体包括以下几个子步骤:
步骤2-3-1:从MB-tree的根节点出发,以学号为关键字,依次向下遍历树中的节点,一直找到叶子节点,比较节点中关键字大小寻找插入位置,将新建的mbt_leaf结构体插入。
步骤2-3-2:判断当前结点中关键字的个数是否小于等于m-1(m表示MB树的阶数),若满足,则重新从当前节点开始回溯到根节点重新计算这条路径上关键字的哈希值;否则需要分裂,则进行步骤3-3。
步骤2-3-3:对整个节点使用hash函数得到一个哈希值,然后以结点中间的关键字为中心分裂成左右两部分,然后将这个中间的关键字插入到上一层的父结点当中,将父节点中该关键字对应的哈希字段替换成刚刚计算得到的哈希值,这个关键字的左子树指向分裂后的左半部分,这个关键字的右子树指向分裂后的右半部分,然后继续对父节点进行步骤3-2。
步骤2-4:将客户端的行为信息记录到历史表,这些行为信息中包含客户端身份、操作内容、客户端发送过来的数字签名、表中前一行的哈希值和当前行的哈希值(当前行的哈希值是对当前行的内容和前一行的哈希值做哈希计算得到)。
步骤2-5:数据库系统将步骤3中的得到的MB树根哈希和历史表hash列最新的哈希值发送至客户端。
步骤2-6:客户端收到数据库发送来的MB树根哈希和历史表的最新哈希值,更新客户端本地的MB树根。对于原先存储在本地历史表的哈希值,系统不会将过期的信息全部删掉,而是根据事务id以一定的间隔存储。
4.第1点中步骤3中所述可验证查询的过程具体包括:
步骤3-1:将要发送的查询语句使用hash函数生成哈希摘要,使用客户端的私钥对这个摘要进行加密,生成数字签名。客户端将查询语句和刚刚得到的数字签名一同发送到数据库。
步骤3-2:中心数据库收到查询请求,从消息中解析出查询语句和数字签名。使用数据库中与客户端相对应的公钥解密出摘要内容,由此可以证明客户端的身份是正确的,接着对查询语句使用hash函数得到一个新的摘要,与刚刚得到的摘要进行对比。如果两者一致,就证明这请求未被修改过。紧接着判断用户是否有权限去读取数据,
步骤3-3:调用数据库查询引擎,生成可验证查询计划,指定查询使用的索引为MB-tree索引,执行器在执行查询计划时,获取元组和MB树上的验证信息具体包括如下几个子步骤:
步骤3-3-1:初始化一个元组表和一个验证对象(VO)。
步骤3-3-2:根据索引列的条件,构造VO,从MB树的根节点出发,直到访问到与索引条件匹配的叶节点,沿着根节点到叶节点的路径上,将未被访问的兄弟节点信息放入VO的验证信息部分。,
步骤3-3-3:获取元组,将满足条件的元组取出,存入元组表中,最后再将元组表中所有元组放入VO的数据集当中。
步骤3-4:修改客户端协议,将查询获取到的VO信息发送到客户端。
步骤3-5:客户端从连接请求中获取到验证对象VO后,从根据VO中对应的层数信息,从最底层的元组开始,依次对每一层的元素做哈希计算,直到根节点,得到一个与查询结果绑定的根哈希值,比较客户端本地存储的MB树根哈希值,如果两者一致,则说明查询的结果是正确的。如果两者不一致,则说明查询到数据存在问题。
5.第1点中步骤4中所述追溯用户数据的变化情况是通过追溯查询实现,区块链表的每一次更新都会被记录到历史表中,而且历史记录表所使用的链式结构支持数据不可篡改。为了让用户更详细的掌握数据的变更情况,本案例在中心化的数据库中添加了追溯查询。客户端和数据库包括以下步骤:
步骤4-1:客户端会在本地存储的哈希区间中查找两个包含查询目标日期的区间哈希值,根据它们对应的日志id为条件,查询在历史表中在两个日志id之间的所有数据。查询请求同样采用数字签名的方式发送给数据库。
步骤4-2:中心数据库收到查询请求,从消息中解析出查询语句和数字签名。将查询语句转化为新的数字签名进行验证,验签正确后,检测用户是否有权限去查看历史表中的事务日志的内容。
步骤4-3:调用数据库查询引擎,生成追溯查询计划,执行器从历史表中获取对应的元组,将元组发送至客户端。
步骤4-4:客户端收到中心数据库发送来的元组,根据这些元组重新计算一条哈希链,将原先在客户端中查找的两个哈希区间值和这个哈希链的链首与链尾进行比较,验证日志记录是否被修改。如果两者相同,说明查询到的日志数据是未被篡改的。
实施例1
本实施例是在数据库和客户端之间建立可信关系的框架内实现可验证查询的方法。
用户在数据库上创建了学生表,该表包含学号、年龄、成绩等其他信息。假设先本发明现在要查询学号为5到12以内的学生信息,数据库系统收到查询请求后,执行器访问内存中的MB树去获取元组,图5是一棵构建在学生表学号属性上的MB树,该索引结构提供了单点查询和范围查询的接口。
在MB树上查询的时,先从根节点出发,依次向下遍历树中的节点,根据查询条件,一直找到最底层的叶节点,构造验证对象,在该对象中包含leftvo,rightvo以及data三部分,将每一层的边界值分别加入到leftvo和rightvo中,将查询的结果集放入到data中,此实施例的leftvo中包含学号为5的学生信息以及MB树上h1..4和h1..8号节点的信息,rightvo中包含学号为12的学生信息,data中则包含学号为6和9的学生信息,在MB上构造验证信息的代码如图6所示。数据库构造完验证信息(VO)之后,通过修改后的客户端协议,将数据发送至客户端。
客户端收到数据从VO结构的底层节点出发,还原出在MB树种查找元组路径的过程,从最底层依次向上层做哈希计算,重新计算出一个根节点,将根节点与本地同步的根节点做对比,若一致,则说明查询的数据是完整正确的。
实施例2
本实施例是在数据库和客户端之间建立可信关系的框架内实现追溯查询的方法。
图7是客户端取得CA中心颁发的私钥之后,在初始时刻连接数据库时,需要同步数据库索引层中MB树的最新树根值以及历史表中部分哈希值,例如某一时刻,历史表的哈希列中的值为(h0,h1,h2,…,h101,h102),此时假设本发明设置客户端存储哈希列是以事务id为10的间隔存储哈希,则客户端会存储(h0,h10,h20,…,,h90,h100,h101,h102)。假设用户想要查询日期在2019-8-8到2020-1-1之间区块链表的变化情况。客户端会在本地存储的哈希区间(h0,h10,h20,…,h100,h101,h102)中查找两个包含这个日期区间的哈希值,假设符合条件的值h20和h40,他们所对应的事务id为20和40,则客户端会发送一条查找历史表中事务id在20和40之间的查询请求。请求发送的方式同样采用数字签名的方式。
客户端收到中心数据库发送来的元组,首先比较事务id为20的元组的哈希值是否与客户端本地所存储对应事务id的哈希值是否相同,相同则说明事务id比20小的事务日志记录没有被篡改。接下来,将收到的元组以哈希列为基础按照历史表的方式重新组织成一条哈希链,而且哈希链是按照事务日志的id进行排序的。采用与历史表中计算哈希值的方式计算每一个事务日志的哈希值,每一次在哈希链上添加一个元组节点时,比较刚刚计算得到的哈希值和元组中包含的哈希值,如果不一致,则说明记录可能被修改,依次下去,直到最终所有元组都加入到新的哈希链中,比较链尾的哈希值与客户端本地所存储事务id为40的哈希值是否相同,相同则说明所查询历史表的这部分数据没有被篡改,将日期在2019-8-8到2020-1-1之间数据呈现给用户。
本发明提出了一种客户端与数据库之间建立可信关系的方法,客户端通过一对公私钥实现用户身份的不可伪造,数据库系统在用户数据上维护了一个可验证索引结构,用户数据的每一次更新,索引结构的状态信息都会被同步到客户端,客户端可以通过这些状态信息去判断查询结果的正确性,同时,这些更新操作都会被记录到一个不可篡改的历史表当中,用户可以通过该表实现对数据的追溯。此外,该框架兼容传统数据库,可以在最大限度保证已有的遗产系统不会受到很大影响。
本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。
Claims (7)
1.一种客户端与数据库之间建立可信关系的方法,其特征在于,包括以下步骤:
步骤1:利用公私钥提供安全可靠的身份管理;
步骤2:在用户数据构建可验证索引结构,针对客户端数据更新请求,动态维护数据库的索引结构以及客户端本地存储的验证信息,客户端通过可验证查询判断数据的正确性;
步骤3:将记录事务日志的历史表组织成一条哈希链,将哈希链作为验证信息同步到客户端;客户端通过追溯查询追踪数据变化时,通过本地哈希链验证日志记录是否被篡改。
2.根据权利要求1所述的客户端与数据库之间建立可信关系的方法,其特征在于,所述步骤1具体包括:
步骤1-1:客户端向CA中心发送证书申请请求;
步骤1-2:CA中心产生一对公私钥,将私钥返回给客户端,同时将公钥广播给其他客户端以及数据库;
步骤1-3:客户端向数据库发送查询请求之前,对查询语句使用一个哈希算法将其转化为一段哈希摘要,使用私钥对这个摘要加密,生成数字签名;将查询语句和数字签名一同发送给中心化的数据库;
步骤1-4:中心数据库收到查询请求,从消息中解析出查询语句和数字签名;使用数据库中与客户端相对应的公钥解密出摘要内容,由此证明客户端的身份是正确的,接着对查询语句使用hash函数得到一个新的摘要,与刚刚得到的摘要进行对比;如果两者一致,证明该请求未被修改过。
3.根据权利要求1所述的客户端与数据库之间建立可信关系的方法,其特征在于,所述步骤2中动态维护数据库的索引结构以及客户端本地存储的验证信息,数据库在完成用户数据更新后,立即更新可验证索引结构,重新生成一个代表此时索引结构状态的验证信息,最后,数据库将该操作写入历史记录表当中,同时生成一个历史表的状态信息,数据库将索引结构和历史表的验证信息同步到所有的客户端,而原先存储在客户端上的验证信息则被最新的验证信息所替换,而历史表的验证信息不会被替换,而是以一定的间隔存储。
4.根据权利要求1所述的客户端与数据库之间建立可信关系的方法,其特征在于,所述步骤2中客户端通过可验证查询判断数据的正确性;进一步包括以下步骤:
步骤2-1:客户端发起可验证查询请求后,将查询语句和数字签名一同发送到数据库。
步骤2-2:中心数据库收到查询请求,从消息中解析出查询语句和数字签名,检验客户端身份是否正确,是否有相应的权限;
步骤2-3:调用数据库查询引擎,生成查询计划,指定查询路径为可验证索引路径,执行器在执行查询计划时,通过可验证索引获取元组,在获取元组的同时,构造一个验证信息集合;将查询的元组和验证信息发送到客户端;
步骤2-4:客户端从连接请求中获取到元组和验证信息后,利用查询结果和验证信息重新计算得到一个表示查询结果状态的值,将该值与存储在客户端本地的验证信息做对比,若两者的值是一样的,则表示查询的结果正确。
5.根据权利要求1所述的客户端与数据库之间建立可信关系的方法,其特征在于,所述步骤3中将记录事务日志的历史表组织成一条哈希链,并同步到客户端;历史表的属性列中包含涉及到事务日志id,操作者、作者内容、操作时间、用户请求的签名、上一行的哈希值和当前行的哈希值相关信息,当前行的哈希值是对当前行的内容和前一行的哈希值做哈希计算得到,通过哈希值这一属性即可将该表组织成一条链,每一次在历史表中添加新的数据行时,哈希链的尾端哈希值会被同步到客户端,而客户端对这些哈希值的存储以一定的事务日志间隔存储。
6.根据权利要求1所述的客户端与数据库之间建立可信关系的方法,其特征在于,所述步骤3中客户端通可以过追溯查询追踪数据变化,追溯查询是在历史表中基于时间属性去检索事务日志的方法,具体步骤包括:
步骤3-1:客户根据查询的时间范围,确定客户端本地所存储的哈希间隔中哪些哈希值之间包含了所需要查询的时间范围;查询该哈希区间内的历史表的所有数据;
步骤3-2:将得到的数据按照历史表中计算哈希列的方法重新计算哈希列,以事务日志id为顺序去计算,得到哈希列的首位两个哈希值,将他们分别与刚刚得到哈希区间值进行比较,是否一致,一致则说明历史表的数据正确;
步骤3-3:从正确的数据集中找到符合条件的数据行,返回给用户。
7.根据权利要求1所述的客户端与数据库之间建立可信关系的方法,其特征在于,所述步骤2和步骤3中的验证信息的维护过程,进一步包括以下步骤:
步骤4-1:客户端将更新语句和数字签名一同发送到数据库;
步骤4-2:中心数据库收到数据更新请求,从消息中解析出更新语句和数字签名,检验客户端身份是否正确,是否有相应的权限;
步骤4-3:调用数据库查询引擎,生成查询计划,执行器执行查询计划将数据写入区块链表,将数据行组织成一个字符串,计算字符串的哈希值,根据数据行在磁盘的位置信息和数据行的哈希值来更新可验证索引结构,重新生成一个可以代表此时区块链表和索引结构状态的验证信息;
步骤4-4:将客户端的行为信息记录到历史表,这些行为信息中包含客户端身份、操作内容、客户端发送过来的数字签名、索引结构的验证信息、表中前一行的哈希值和当前行的哈希值,操作日期;
步骤4-5:数据库系统将索引结构的验证信息和历史表中hash列最新的哈希值发送至客户端;
步骤4-6:客户端收到数据库发送来的验证信息和历史表最新哈希值后,更新本地存储的验证信息以及历史表的哈希值。需要注意的是客户端收到的历史表中过期的哈希值不会全部被丢弃,而是以一定的区间存储在客户端本地。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010560596.6A CN111831997B (zh) | 2020-06-18 | 2020-06-18 | 一种客户端与中心化数据库之间建立可信关系的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010560596.6A CN111831997B (zh) | 2020-06-18 | 2020-06-18 | 一种客户端与中心化数据库之间建立可信关系的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111831997A true CN111831997A (zh) | 2020-10-27 |
CN111831997B CN111831997B (zh) | 2021-07-27 |
Family
ID=72899264
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010560596.6A Active CN111831997B (zh) | 2020-06-18 | 2020-06-18 | 一种客户端与中心化数据库之间建立可信关系的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831997B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699409A (zh) * | 2020-12-31 | 2021-04-23 | 卓尔智联(武汉)研究院有限公司 | 一种数据处理方法、装置和电子设备 |
CN112799957A (zh) * | 2021-02-20 | 2021-05-14 | 携程旅游网络技术(上海)有限公司 | 基于用户行为的故障处理方法、系统、设备和介质 |
CN113114749A (zh) * | 2021-03-01 | 2021-07-13 | 北京信息科技大学 | 一种哈希链构建及文件数据同步方法、装置及系统 |
CN113282967A (zh) * | 2021-06-08 | 2021-08-20 | 湖南思码智链教育科技有限责任公司 | 基于区块链存储的法律文件电子签名方法及系统 |
CN113553332A (zh) * | 2021-09-22 | 2021-10-26 | 深圳时空云科技有限公司 | 去中心化的数据存储访问方法与装置 |
CN113591057A (zh) * | 2021-08-05 | 2021-11-02 | 国民认证科技(北京)有限公司 | 生物特征离线身份识别方法及系统 |
CN114282268A (zh) * | 2021-12-10 | 2022-04-05 | 南京国电南自电网自动化有限公司 | 一种基于sm3算法的数据库完整性校验方法和装置 |
CN117313169A (zh) * | 2023-11-30 | 2023-12-29 | 临沂市中信信息技术有限公司 | 一种成品油流通数据智慧监管系统及其抗篡改方法 |
CN117331964A (zh) * | 2023-12-01 | 2024-01-02 | 成都明途科技有限公司 | 数据查询方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106682530A (zh) * | 2017-01-10 | 2017-05-17 | 杭州电子科技大学 | 一种基于区块链技术的医疗信息共享隐私保护方法及装置 |
CN106844477A (zh) * | 2016-12-23 | 2017-06-13 | 北京众享比特科技有限公司 | 区块链系统、区块查找方法和区块链后向同步方法 |
CN107807951A (zh) * | 2017-09-18 | 2018-03-16 | 联动优势科技有限公司 | 一种区块链生成方法、数据验证方法、节点及系统 |
CN108287661A (zh) * | 2017-12-05 | 2018-07-17 | 兴业数字金融服务(上海)股份有限公司 | 一种在中心权威机构进行验证的链式存储系统 |
CN109347941A (zh) * | 2018-10-10 | 2019-02-15 | 南京简诺特智能科技有限公司 | 一种基于区块链的数据共享平台及其实现方法 |
CN110147686A (zh) * | 2019-04-18 | 2019-08-20 | 阿里巴巴集团控股有限公司 | 一种个人资产变更记录的存储方法、系统、装置及设备 |
CN110362571A (zh) * | 2019-06-25 | 2019-10-22 | 智链万源(北京)数字科技有限公司 | 基于区块链的数据安全追溯方法及装置 |
CN110839015A (zh) * | 2019-10-12 | 2020-02-25 | 深圳壹账通智能科技有限公司 | 基于区块链的日志存储和读取方法、装置、设备及介质 |
-
2020
- 2020-06-18 CN CN202010560596.6A patent/CN111831997B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844477A (zh) * | 2016-12-23 | 2017-06-13 | 北京众享比特科技有限公司 | 区块链系统、区块查找方法和区块链后向同步方法 |
CN106682530A (zh) * | 2017-01-10 | 2017-05-17 | 杭州电子科技大学 | 一种基于区块链技术的医疗信息共享隐私保护方法及装置 |
CN107807951A (zh) * | 2017-09-18 | 2018-03-16 | 联动优势科技有限公司 | 一种区块链生成方法、数据验证方法、节点及系统 |
CN108287661A (zh) * | 2017-12-05 | 2018-07-17 | 兴业数字金融服务(上海)股份有限公司 | 一种在中心权威机构进行验证的链式存储系统 |
CN109347941A (zh) * | 2018-10-10 | 2019-02-15 | 南京简诺特智能科技有限公司 | 一种基于区块链的数据共享平台及其实现方法 |
CN110147686A (zh) * | 2019-04-18 | 2019-08-20 | 阿里巴巴集团控股有限公司 | 一种个人资产变更记录的存储方法、系统、装置及设备 |
CN110362571A (zh) * | 2019-06-25 | 2019-10-22 | 智链万源(北京)数字科技有限公司 | 基于区块链的数据安全追溯方法及装置 |
CN110839015A (zh) * | 2019-10-12 | 2020-02-25 | 深圳壹账通智能科技有限公司 | 基于区块链的日志存储和读取方法、装置、设备及介质 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699409A (zh) * | 2020-12-31 | 2021-04-23 | 卓尔智联(武汉)研究院有限公司 | 一种数据处理方法、装置和电子设备 |
CN112799957A (zh) * | 2021-02-20 | 2021-05-14 | 携程旅游网络技术(上海)有限公司 | 基于用户行为的故障处理方法、系统、设备和介质 |
CN113114749B (zh) * | 2021-03-01 | 2023-06-06 | 北京信息科技大学 | 一种哈希链构建及文件数据同步方法、装置及系统 |
CN113114749A (zh) * | 2021-03-01 | 2021-07-13 | 北京信息科技大学 | 一种哈希链构建及文件数据同步方法、装置及系统 |
CN113282967A (zh) * | 2021-06-08 | 2021-08-20 | 湖南思码智链教育科技有限责任公司 | 基于区块链存储的法律文件电子签名方法及系统 |
CN113591057B (zh) * | 2021-08-05 | 2024-05-14 | 国民认证科技(北京)有限公司 | 生物特征离线身份识别方法及系统 |
CN113591057A (zh) * | 2021-08-05 | 2021-11-02 | 国民认证科技(北京)有限公司 | 生物特征离线身份识别方法及系统 |
CN113553332B (zh) * | 2021-09-22 | 2022-01-25 | 深圳时空云科技有限公司 | 去中心化的数据存储访问方法与装置 |
CN113553332A (zh) * | 2021-09-22 | 2021-10-26 | 深圳时空云科技有限公司 | 去中心化的数据存储访问方法与装置 |
CN114282268A (zh) * | 2021-12-10 | 2022-04-05 | 南京国电南自电网自动化有限公司 | 一种基于sm3算法的数据库完整性校验方法和装置 |
CN117313169A (zh) * | 2023-11-30 | 2023-12-29 | 临沂市中信信息技术有限公司 | 一种成品油流通数据智慧监管系统及其抗篡改方法 |
CN117313169B (zh) * | 2023-11-30 | 2024-04-09 | 临沂市中信信息技术有限公司 | 一种成品油流通数据智慧监管系统的抗篡改方法 |
CN117331964A (zh) * | 2023-12-01 | 2024-01-02 | 成都明途科技有限公司 | 数据查询方法、装置、设备及存储介质 |
CN117331964B (zh) * | 2023-12-01 | 2024-02-27 | 成都明途科技有限公司 | 数据查询方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111831997B (zh) | 2021-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111831997B (zh) | 一种客户端与中心化数据库之间建立可信关系的方法 | |
US11283616B2 (en) | Method for index-based and integrity-assured search in a blockchain | |
US20180285479A1 (en) | Scalable audit analytics | |
JP4991283B2 (ja) | コンテンツベースのアドレシングにおける追加ハッシュ関数 | |
US7765215B2 (en) | System and method for providing a trustworthy inverted index to enable searching of records | |
US7983421B2 (en) | Methods to defend against tampering of audit records | |
US8880905B2 (en) | Methods for processing private metadata | |
Zhang et al. | Efficient dynamic provable possession of remote data via balanced update trees | |
JP6449093B2 (ja) | 秘匿化データベースシステム及び秘匿化データ管理方法 | |
CN103607405B (zh) | 一种面向云存储的密文搜索认证方法 | |
CN109194646B (zh) | 一种基于区块链的安全认证数据存取方法 | |
US20090199301A1 (en) | Methods to defend against tampering of audit records | |
CN104794123A (zh) | 一种为半结构化数据构建NoSQL数据库索引的方法及装置 | |
US11256662B2 (en) | Distributed ledger system | |
CN109634959B (zh) | 一种区块索引方法及区块索引装置 | |
CN112511599B (zh) | 一种基于区块链的人防数据共享系统及方法 | |
US8079065B2 (en) | Indexing encrypted files by impersonating users | |
CN112231283A (zh) | 基于多源异构数据统一实体标识码的生成管理方法及系统 | |
CN109918451B (zh) | 基于区块链的数据库管理方法及系统 | |
Zhu et al. | Fossilized index: The linchpin of trustworthy non-alterable electronic records | |
CN109067849A (zh) | 基于区块的数据同步方法 | |
Buccafurri et al. | Range query integrity in cloud data streams with efficient insertion | |
Singh et al. | Ensuring correctness over untrusted private database | |
WO2021057220A1 (zh) | 一种块链式账本中的权限管理方法、装置及设备 | |
Guo et al. | Blockchain PG: Enabling authenticated query and trace query in database |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |