近日,火山引擎安全研究團隊對外開源了Jeddak-DPSQL(項目地址:https://github.com/bytedance/Jeddak-DPSQL),這是基于差分隱私的SQL代理工具,適用于數據管理者可信的場景模式,以中間件的形式接收SQL統計查詢請求,返回滿足差分隱私的查詢結果。
據悉,火山引擎對于用戶敏感數據尤為重視,在火山引擎提供的數據分析產品中,廣泛采用差分隱私技術對用戶敏感信息進行保護。此類數據產品通常構建于 ClickHouse 等數據引擎之上,以 SQL 查詢方式來執行計算邏輯,且查詢邏輯往往較為復雜,因此對差分隱私的應用提出了以下要求:
零改造、零感知:最大程度避免影響業務現有查詢方式,最好做到業務零感知、零改造;
良好、靈活的適配性:能夠適配不同數據引擎的查詢語法,以及能夠處理包含多層嵌套、多重計算、多表連接等情形的復雜 SQL 語句;
安全性與可用性平衡:能夠根據業務數據質量要求,計算合理的隱私預算,在安全性和數據可用性之間保持平衡;
為更好解決數據安全和隱私合規治理相關問題,火山引擎安全研究團隊進行了產品調研,目前市面上在SQL查詢場景下加入差分隱私能力的產品,發現這些產品大多都沒有提供SQL 的自動化分析能力,需主動調用 API 或是在 SQL 中調用 UDF 來引入差分隱私能力,接入成本較高。其中OpenDP產品限定了輸入 SQL 的方言,僅支持 SQL 92標準,難以在 Hive、ClickHouse 等主流數倉引擎中透明應用。
同時,火山引擎安全研究團隊也注意到云服務廠商在To B場景下會提供多款數據分析產品,部分產品的模式面臨泄漏用戶隱私、法律合規的風險,該類產品通常是通過數據庫引擎使用面向實時分析的 clickhouse,計算邏輯用SQL查詢的方式執行,因此考慮結合差分隱私技術提供隱私保護的SQL查詢能力。
基于上述挑戰,火山引擎安全研究團隊自主研發了Jeddak-DPSQL ,希望能夠為同樣面臨該類問題的企業和個人提供一定參考和幫助,同時也希望能夠有更多的外部開發者能夠一起對該開源項目進行共建,完善 Jeddak-DPSQL 產品功能,共同構建更完備的應用生態。
據了解,Jeddak-DPSQL 能夠兼容多種數據引擎和SQL方言,內嵌多種差分噪聲擾動算法,具備隱私預算管理能力,并且能夠與底層數據引擎結合,在數據分析師無感的情況下,對 SQL 語句進行自動化分析和結果加噪處理。同時,Jeddak-DPSQL 已經在抖音集團相關業務中得到了普遍應用與驗證。
一、全面了解 Jeddak-DPSQL
1、 Jeddak-DPSQL介紹
Jeddak-DPSQL采用中心化差分隱私(Centralized Differential Privacy,簡稱CDP,適用于數據管理者可信的場景)模式,以中間件的形式接收SQL統計查詢請求,返回滿足差分隱私的查詢結果。一個典型的查詢請求處理流程如下:
●首先,核心服務接受客戶提交的SQL查詢語句,對該語句進行解析和重寫,以便于計算隱私噪聲(如將AVG計算改為SUM/COUNT);
●然后,核心服務調用元數據管理服務,計算重寫后的SQL查詢所對應的數據表敏感度,同時在數據庫上執行重寫后的SQL查詢,得到原始的查詢結果;
●最后,核心服務調用隱私預算管理服務得到為該查詢分配的隱私預算,并結合敏感度在原始的查詢結果中添加噪聲并返回。
2、 Jeddak-DPSQL解決的問題
案例背景
假設有一個數據庫 business,存儲用戶消費數據,使用 clickhouse 引擎,其中一個表 user 存儲用戶信息,表中存在以下列:uid,name,age,sex,city,代表用戶id、姓名、年齡、性別、城市。
查詢需求
假設要查詢用戶數量和平均年齡的城市分布,使用 SQL 語句 1:
風險
如果不應用隱私保護技術,可能面臨差分攻擊的風險,比如攻擊者通過某渠道得知張三的 uid 為 803719,構造下面的 SQL 語句 2:
#FormatImgID_2#
通過執行上面的 SQL語句1 和 SQL 語句2,可分別得到兩個查詢結果:
那么就可以通過比較兩次查詢結果得知張三所在的城市是北京,年齡大約 61 歲(120008*49.3276 = 5919706.62,120007*49.3275 = 5919645.29,5919706.62 - 5919645.29 約等于 61)
以上是一個簡單的例子,現實場景中,攻擊者可能通過背景知識構造更多樣、更復雜的查詢語句達到竊取隱私的目的。
因此,在上述SQL查詢場景下,可以通過接入Jeddak-DPSQL對SQL進行分析和重寫,最終執行重寫后的SQL能夠保證返回給使用者的數據滿足差分隱私要求,進而達到對個人隱私保護的效果。
3、 Jeddak-DPSQL在火山引擎的應用驗證
1.Jeddak-DPSQL已接入火山引擎的增長分析(finder)、A/B 測試等產品,間接服務300+外部客戶,日均處理查詢請求 200+。Jeddak-DPSQL服務不僅幫助業務滿足了隱私保護和業務合規的需求,同時也成為創新型隱私計算技術應用的典范案例。
2.開放隱私計算OpenMPC對外公布了“隱私計算2021年度優秀應用案例TOP10”。火山引擎云安全憑借“融合差分隱私的火山引擎DPSQL服務”案例,成功入選TOP10。
二、如何使用Jeddak-DPSQL
GitHub 開源項目地址:https://github.com/bytedance/Jeddak-DPSQL
1. 下載
#FormatImgID_4#
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. 正式使用
完成Jeddak-DPSQL部署后,按照README中的快速開始部分可以進行功能體驗,整個過程如下:
●選擇要測試的數據源(Hive或ClickHouse),導入要進行查詢測試的原始數據集
●初始化metadata和隱私預算
○生成 metadata
啟動dpsql服務后, 調用接口 /api/v1/metadata/generate,生成metadata,可參考:
○確認metadata 生成完成
調用 /api/v1/metadata/get 接口,確認 metadata 生成完成
●調用隱私保護查詢接口,獲得經過差分隱私保護的查詢結果
更多接口使用方式可以參考項目README中的API documentation部分。
三、后續計劃
火山引擎安全研究部門相關負責人表示,Jeddak-DPSQL會長期維護,歡迎大家使用。他也指出,近期開源的Jeddak-DPSQL是首個版本,因此還存在很多不完善的地方,也希望有更多的外部開發者能夠一起對該開源項目進行共建,完善產品功能,構建更完備的應用生態。(作者:崔世高)