Jeddak-DPSQL 首次开源!基于差分隐私的 SQL 代理保护能力

news2024/11/25 11:28:18

动手点关注

f8de5d3387ec91e319a79b6c04dc6593.gif

干货不迷路

‍1. 背景

火山引擎对于用户敏感数据尤为重视,在火山引擎提供的数据分析产品中,广泛采用差分隐私技术对用户敏感信息进行保护。此类数据产品通常构建于 ClickHouse 等数据引擎之上,以 SQL 查询方式来执行计算逻辑,且查询逻辑往往较为复杂,因此对差分隐私的应用提出了以下要求:

  • 零改造、零感知:最大程度避免影响业务现有查询方式,最好做到业务零感知、零改造;

  • 良好、灵活的适配性:能够适配不同数据引擎的查询语法,以及能够处理包含多层嵌套、多重计算、多表连接等情形的复杂 SQL 语句;

  • 安全性与可用性平衡:能够根据业务数据质量要求,计算合理的隐私预算,在安全性和数据可用性之间保持平衡;

针对以上需求,火山引擎安全研究团队开发了 Jeddak-DPSQL:一种基于差分隐私的 SQL 代理工具。Jeddak-DPSQL 能够兼容多种数据引擎和SQL方言,内嵌多种差分噪声扰动算法,具备隐私预算管理能力,并且能够与底层数据引擎结合,在数据分析师无感的情况下,对 SQL 语句进行自动化分析和结果加噪处理。作为数据安全和隐私合规治理的标准能力之一,Jeddak-DPSQL 已经在抖音集团相关业务中得到了普遍应用与验证。

在实际解决公司内部面临的问题风险后,我们决定对 Jeddak-DPSQL 进行开源,希望能够为同样面临该类问题的企业和个人提供一定参考和帮助,同时也希望能够有更多的外部开发者能够一起对该开源项目进行共建,完善 Jeddak-DPSQL 产品功能,共同构建更完备的应用生态。

2. 全面了解 Jeddak-DPSQL

2.1 Jeddak-DPSQL 介绍

Jeddak-DPSQL 采用中心化差分隐私 (Centralized Differential Privacy,简称 CDP,适用于数据管理者可信的场景) 模式,以中间件的形式接收 SQL 统计查询请求,返回满足差分隐私的查询结果。一个典型的查询请求处理流程如下:

  • 首先,核心服务接受客户提交的 SQL 查询语句,对该语句进行解析和重写,以便于计算隐私噪声(如将 AVG 计算改为 SUM/COUNT);

  • 然后,核心服务调用元数据管理服务,计算重写后的 SQL 查询所对应的数据表敏感度,同时在数据库上执行重写后的 SQL 查询,得到原始的查询结果;

  • 最后,核心服务调用隐私预算管理服务得到为该查询分配的隐私预算,并结合敏感度在原始的查询结果中添加噪声并返回。

e9f83e4222f4d8e9b3ef533cfcf894f2.png

2.2 Jeddak-DPSQL 解决的问题

案例背景

假设有一个数据库 business,存储用户消费数据,使用 clickhouse 引擎,其中一个表 user 存储用户信息,表中存在以下列:uid,name,age,sex,city,代表用户id、姓名、年龄、性别、城市。

查询需求

我们要查询用户数量和平均年龄的城市分布,使用 SQL 语句 1:

SELECT  COUNT(*) AS cnt,AVG(age) as agev, city
FROM business.user
group by city

风险

如果不应用隐私保护技术,可能面临差分攻击的风险,比如攻击者通过某渠道得知张三的 uid 为 803719,构造下面的 SQL 语句 2:

SELECT  COUNT(*) AS cnt,AVG(age) as agev, city
FROM business.user
WHERE uid != 803719
group by city

通过执行上面的 SQL 语句1和 SQL 语句2,可分别得到两个查询结果:

9267ca4e3cf8aa23f1ae1ee8a426bfec.png

那么就可以通过比较两次查询结果得知张三所在的城市是北京,年龄大约 61 岁(120008x49.3276 = 5919706.62,120007x49.3275 = 5919645.29,5919706.62 - 5919645.29 约等于 61)

以上是一个简单的例子,现实场景中,攻击者可能通过背景知识构造更多样、更复杂的查询语句达到窃取隐私的目的。

因此,在上述 SQL 查询场景下,可以通过接入 Jeddak-DPSQL 对 SQL 进行分析和重写,最终执行重写后的 SQL 能够保证返回给使用者的数据满足差分隐私要求,进而达到对个人隐私保护的效果。

2.3 Jeddak-DPSQL 在火山引擎的应用验证

  1. Jeddak-DPSQL已接入火山引擎的增长分析(finder)、A/B 测试等产品,间接服务300+外部客户,日均处理查询请求 200+。Jeddak-DPSQL服务不仅帮助业务满足了隐私保护和业务合规的需求,同时也成为创新型隐私计算技术应用的典范案例。

  2. 开放隐私计算 OpenMPC 对外公布了“隐私计算 2021 年度优秀应用案例 TOP 10”。火山引擎 云安全凭借“融合 差分隐私 的火山引擎 DPSQL 服务”案例,成功入选 TOP 10。

3. 如何使用 Jeddak-DPSQL

git 开源项目地址: https://github.com/bytedance/Jeddak-DPSQL

3.1 下载

git clone https://github.com/bytedance/Jeddak-DPSQL

3.2 快速部署

完成 Jeddak-DPSQL 下载后,按照 README 中的部署引导部分完成服务部署,整个部署过程包括以下步骤:

  • 服务依赖包安装:进入项目根目录,使用 pip install -r requirements.txt 安装服务所需完整 pip 包

  • MetaData 存储准备:在使用DPSQL 时,需要维护源数据表的 MetaData 信息,为后续加噪计算敏感度作准备。Jeddak-DPSQL 使用 Mysql 对相应元数据信息进行存储,因此需要用户提前在自己的Mysql数据库中创建相应的表

  • 隐私预算消耗存储准备:使用 Jeddak-DPSQL 系统过程,可以记录对表级别的数据查询时的隐私预算消耗。主要通过Mysql进行记录,因此需要用户提前在自己的Mysql数据库中创建相应的表

  • 数据库连接配置:Jeddak-DPSQL 中使用数据库主要有 Mysql 和 Redis,因此需要对这两个数据库连接地址进行配置

  • 服务启动:完成上述配置后可以在项目根目录运行 bootstrap.sh 脚本启动服务

3.3 正式使用

完成 Jeddak-DPSQL 部署后,按照 README 中的快速开始部分可以进行功能体验,整个过程如下:

  • 选择要测试的数据源(Hive 或 ClickHouse),导入要进行查询测试的原始数据集

  • 初始化metadata和隐私预算

    1. 生成 metadata

   2. 启动dpsql服务后, 调用接口 /api/v1/metadata/generate,生成metadata,可参考:

def meta_generate():
  args = {
      "db_config": {
          "host": <hive_host>,
          "database": <hive_dbname>,
          "username": <hive_username>,
          "password": <hive_password>
      },
      "table_name": "us_accidents_dec21_updated",
      "db_type": db_type
  }
  route_path = "/api/v1/metadata/generate"# local service,  host:127.0.0.1, port:5000url = "http://%s:%s/%s" % (host, port, route_path)
  headers = {"content-type": "application/json"}
  r = requests.post(url, json=args, headers=headers)

if __name__ == '__main__':
   meta_generate()

3. 确认metadata 生成完成

4. 调用 /api/v1/metadata/get 接口,确认 metadata 生成完成

def meta_get():
    args = {
        "prefix": <hive_host>,
        "db_name": <hive_dbname>,
        "table_name": "us_accidents_dec21_updated"
    }
    route_path = "/api/v1/metadata/get"# local service,  host:127.0.0.1, port:5000url = "http://%s:%s/%s" % (host, port, route_path)
    headers = {"content-type": "application/json"}
    r =  requests.get(url, json=args, headers=headers)
    print(r.text)
  •  调用隐私保护查询接口,获得经过差分隐私保护的查询结果

def query_sql_noise(sql, data_source):
      key = {
          "sql": sql,
          "dbconfig": {
              "reader": data_source,
              "host": <hive_host>,
              "database": <hive_dbname>,
              "port": <hive_port>
          },
          "queryconfig": {
             "traceid": "traceid",
          }
      }
      route_path = "/api/v1/query"url = "http://%s:%s/%s" % (host, port, route_path)
      headers = {"content-type": "application/json"}
      r = requests.post(url, json=key, headers=headers)
      return res
if __name__ == "__main__":
      sql = "select count(severityc) from menu_page group by severity"
      section = "hivereader"
      res = query_sql_noise(sql, section)
      print(res)

更多接口使用方式可以参考项目 README 中的 API Documentation 部分

4. 后续计划

由于当前是 Jeddak-DPSQL 的首个开源版本,因此还存在很多不完善的地方,希望大家能够多多谅解。Jeddak-DPSQL 计划进行长期维护,欢迎大家使用,也希望有更多的外部开发者能够一起对该开源项目进行共建,完善产品功能,构建更完备的应用生态。

5. 关于安全研究

火山引擎安全研究部门的愿景是创新突破前沿安全理论技术,赋能数字经济。部门当前以数据安全中心私有化单品-可信隐私计算产品 Jeddak 为载体,从可信计算、联邦学习、多方安全计算、差分隐私、密文计算、共识计算等方向着手,开展隐私计算技术的前沿研究和应用探索。基于这些领域最新前沿理论技术,创新研发、突破瓶颈,实现数据全生命周期安全与隐私保护,以及可信隐私计算等应用服务落地:赋能业务、保驾护航;更进一步打破数据孤岛,推动数据多源融合与流通交易,发挥数据价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络复习】第六章 关系数据理论 1

关系模式的设计 按照一定的原则从数量众多而又相互关联的数据中&#xff0c;构造出一组既能较好地反映现实世界&#xff0c;而又有良好的操作性能的关系模式 ●冗余度高 ●修改困难 ●插入问题 ●删除问题 ★产生问题的原因 属性间约束关系&#xff08;即数据间的依赖关系&…

【JavaSE】Java基础语法(十):构造方法

文章目录 ⛄1. 构造方法的格式和执行时机⛄2. 构造方法的作用⛄3. 构造方法的特点⛄4. 构造方法的注意事项⛄5. 构造方法为什么不能被重写 在面向对象编程的思想中&#xff0c;构造方法&#xff08;Constructor&#xff09;是一个特殊的函数&#xff0c;用于创建和初始化类的对…

“数字”厨电成新宠?“传统”厨电如何凭实力年销破百亿?|厨房电器SMI社媒心智品牌榜

Social Power 核心解读 AI加持&#xff0c;数字厨电新物种持续走红 传统厨电发力社媒&#xff0c;“有范儿”实力吸睛 4月中下旬的“魔都”可谓热闹非凡&#xff0c;上海车展喧嚣未落&#xff0c;隔壁2023AWE&#xff08;中国家电及消费电子博览会&#xff09;的群雄逐鹿紧随…

Electron 小白介绍,你能看懂吗?

目录 前言一、Electron是什么1.官网介绍2.小白介绍 二、Electron开发了哪些应用三、Electron的优势在哪里1.优势2.带给我们什么优势 四、Electron如何学习1.前置知识2.学习建议 五、Electron的乐趣总结 前言 在最近的学习中&#xff0c;我接触了 Electron 这个前端框架&#x…

总结加载Shellcode的各种方式(更新中!)

1.内联汇编加载 使用内联汇编只能加载32位程序的ShellCode&#xff0c;因为64位程序不支持写内联汇编 #pragma comment(linker, "/section:.data,RWE") //将data段的内存设置成可读可写可执行 #include <Windows.h>//ShellCode部分 unsigned char buf[] &qu…

Hadoop的基础操作

Hadoop的基础操作 HDFS是Hadoop的分布式文件框架&#xff0c;它的实际目标是能够在普通的硬件上运行&#xff0c;并且能够处理大量的数据。HDFS采用主从架构&#xff0c;其中由一个NameNode和多个DataNode NameNode负责管理文件系统的命名空间和客户端的访问DataNode负责存储实…

企业为什么要做数字化转型,应该如何进行转型?

企业需要数字化转型才能在当今快速发展的商业环境中保持竞争力和相关性。数字化转型涉及利用数字技术和战略从根本上改变企业的运营方式、为客户创造价值并实现他们的目标。以下是企业进行数字化转型的一些关键原因&#xff1a; 提高运营效率&#xff1a;数字技术可实现自动化、…

如何使用ArcGIS标注上下标

&#xff08;本文首发于“水经注GIS”公号&#xff0c;关注公号免费领取地图数据&#xff09; 在某些情况下除了需要普通的标注之外还需要上下标注&#xff0c;对于这一需求&#xff0c;ArcGIS是支持的&#xff0c;这里为大家介绍一下ArcGIS标注上下标的方法&#xff0c;希望能…

初阶数据结构之栈的实现(五)

文章目录 &#x1f60f;专栏导读&#x1f916;文章导读&#x1f640;什么是栈&#xff1f;&#x1f640;画图描述 &#x1f633;栈的代码实现及其各类讲解&#x1f633;栈的初始化代码实现及其讲解&#x1f633;栈的初始化 &#x1f633;栈的销毁代码实现及其讲解&#x1f633;…

【面试题】2023vue面试题

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 1、说说你对 SPA 单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f; SPA&#xf…

【运维知识进阶篇】集群架构-Nginx高可用Keepalived

高可用是指2台机器启动着完全相同的业务系统&#xff0c;一台机器宕机后&#xff0c;另一台可以快速启用&#xff0c;用户是无感知的。高可用硬件通常使用F5&#xff0c;软件通常使用keepalived。keepalived软件是基于VRRP协议实现的&#xff0c;VRRP虚拟路由冗余协议&#xff…

详解Node.js开发中不可或缺的7个库

在Node.js开发中&#xff0c;选择合适的库对于提高开发效率和优化应用程序性能至关重要。本文将介绍七个备受关注的Node.js库&#xff0c;它们在各自的领域中展现了出色的功能和性能。这些库分别是&#xff1a;Config、Fetch、Ioredis、Multer、Cache、Fast-xml-parser和Cron。…

一图看懂 pkg_resources 模块:包资源API,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pkg_resources 模块&#xff1a;包资源API&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#x1f9ca;类关系图&#x1f9…

JavaEE(系列15) -- 多线程(JUC中常见的类)

JUC----- java.util.concurrent(并发) 1. ReentrantLock 1. 可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全. 2. ReentrantLock 也是可重入锁. "Reentrant" 这个单词的原意就是 "可重入". 1. ReentrantLock 的用法: lock():…

【花雕学AI】微软 Bing 图像魔法师:让你的描述变成图像,让你的图像变成现实

你有没有想过&#xff0c;如果你能够用语言来创造图像&#xff0c;那该有多么神奇和有趣&#xff1f;你有没有想过&#xff0c;如果你能够看到你想象中的图像&#xff0c;那该有多么震撼和美妙&#xff1f;现在&#xff0c;这一切都可以实现了&#xff0c;因为微软 Bing 图像魔…

NetApp EF 系列全闪存阵列——性能极佳,性价比优势突出

NetApp EF 系列全闪存阵列——性能极佳&#xff0c;性价比优势突出 如果您需要为实时分析、HPC 和数据库等性能敏感型工作负载提供强劲动力&#xff0c;NetApp EF 系列全闪存阵列的性价比优势不言自明。其可为要求最苛刻的应用程序提供微秒级响应&#xff0c;最大限度地延长正…

电源方案对比

电源 1.方案选择&#xff1a;1 LM2596 2 MP1584 3&#xff1a;TPS54301LM25962.MP1584&#xff1a;3.TPS5430 2.1输出2A电流的纹波2.2 输出3A电流的纹波3.动态响应4.发热5.电源转换效率6.综合指标reference 1.方案选择&#xff1a;1 LM2596 2 MP1584 3&#xff1a;TPS5430 1LM…

Unity之ShaderGraph节点介绍 Channel通道

目录 Channel&#xff08;通道&#xff09;  1、Combine&#xff08;合并&#xff09;  2、Flip&#xff08;反转&#xff09;  3、Split&#xff08;拆分&#xff09;  4、Swizzle&#xff08;通道调配&#xff09; Channel&#xff08;通道&#xff09; 1、Combine&am…

win可以上网,但是右下方显示“无internet链接“

使用了下面链接的方法&#xff0c;成功解决 Win10可以联网但右下角显示无法连接到Internet怎办 首先&#xff0c;打开控制面板(control)&#xff0c;右上角&#xff0c;将查看方式切换为小图标 调整计算机的设置下&#xff0c;找到并点击网络和共享中心 网络和共享中心窗口&a…

即时通讯软件(企业IM)对企业的作用

随着网络时代的来临&#xff0c;即时通讯软件也开始逐渐在企业中流行起来&#xff0c;甚至很多公司都已经将即时通讯软件作为内部沟通的主要工具&#xff0c;那么这种情况下&#xff0c;即时通讯软件对企业究竟有什么作用呢&#xff1f; 首先&#xff0c;即时通讯软件对于企业内…