Cryptdb原理概述(1)

Cryptdb是一种基于同态加密技术的数据库系统,旨在在数据加密状态下执行SQL查询。文章介绍了Cryptdb的系统组成模型,包括Client、MySQL-Proxy和MySQL-SERVER,以及如何在MySQL-Proxy中处理SQL请求,支持加密查询。文章通过实例展示了如何处理加密数据的比较和计算,并引入了洋葱存储模型来支持多种操作。最后,文章总结了Cryptdb的主要特点和安全性考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cryptdb[1]是MIT的CSAIL 在11年sosp上提出的, 其在数据库上实现了同态加密技术. 本文基于一些相关文献, 以及对代码的调研, 对该系统的实现原理以及相关的技术做介绍.

同态加密

加密是一种保证数据安全的方法, 但是数据加密以后, 对于数据进行操作就变的复杂了. 举例来说, 我对两个数字A和B进行了加密存储, 分别变成了A’和B’, 现在我们有一个计算两个数的和的需求, 也就是需要计算A+B.那么一般来说, 我们需要拿到密钥以及密文A’和B’, 然后解密出原始的数据A和B, 进行加法计算, 获得A+B=C, 然后对C进行加密变成C’, 最后对加密结果进行存储.

假设我们的数据存在服务器上, 客户端给服务器发送请求来获取数据. 那么上述的过程就存在问题. 如果我们的数据在服务器端解密并且返回给客户端, 那么服务器段就获取了密钥, 从而存在服务器上的加密数据的安全性不能的到保证. 如果我们把密文拉到客户端, 然后由客户端进行加法计算, 那么就无法利用服务端的计算能力, 服务器只承担存储的功能, 这在计算量比较大的时候, 是无法实现的.

同态加密[3]的出现, 解决了上述问题. 同态加密算法允许对密文直接进行计算, 获得加密的结果. 这样, 对于上述的例子, 我们可以直接从A’,B’获得加密的计算结果C’, 然后把C’返回给用户. 这样, 我们不会把密钥暴露给服务器, 又可以利用服务器的计算能力, 客户端只要负责对数据进行解密就可以了.

09年的时候, Gentry[2]提出了全同态加密算法, 也就是可以对密文进行任意的操作. 这篇文章证明了全同态加密是理论上可行的, 但是全同态加密复杂度很高, 不能在实际系统中使用.

但是, 如果我们只是要求部分的加密操作, 而不是想对加密数据进行任意的操作, 是不是有复杂度低的算法, 可以满足实际系统的需求呢? Cryptdb就是基于这种思想提出的, 对于数据库来说, 常见的操作不多, 如果只是支持一部分的加密操作, 复杂度是可以接受的.

Cryptdb

Cryptdb 希望在数据库系统上实现加密运算, 达到的效果是: 存在数据库中的数据全部是加密的, 但数据库依然可以对加密的数据执行用户的SQL语句, 返回加密的数据给用户, 然后用户可以对返回的结果进行解密, 获得明文的数据. 其基于的思想是, 全同态加密难以实用, 但对于数据库来说, 只要求几种常见的运算, 不需要任意的运算. 举例来说, 对于普通的select 语句中的where条件, 需要比较相等的运算. 对于order by, 需要比较大小的运算, 对于一些函数如SUM, 需要加法运算. 如果只是支持这些常见的操作, 就可以在吞吐量下降20%的开销的情况下, 满足大部分的SQL查询.

系统组成模型

Cryptdb系统可以分为三个部分: Client, MySQL-Proxy, 以及MySQL-SERVER. 其主要逻辑实现在MySQL-Proxy, 对于MySQL-SERVER则是通过UDF来完成一些辅助的功能.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值