scql icon indicating copy to clipboard operation
scql copied to clipboard

三方联合计算SCQL出现逻辑问题

Open JiPZou opened this issue 1 year ago • 12 comments

我们这边存在如下的业务场景:

存在两个数据方A和B,使用方C,购买了A和B的数据权限执行SCQL。

但是在实际的操作过程中,如果A方仅把数据授权给C方,B方也仅把数据授权给C方,在C方无法执行SCQL运算,会显示CCL的授权错误。

仅当将A方的数据授权给了B和C,B方的数据授权给了A和C的情况下,C方才能执行SCQL运算。

我想请问这是否存在一定的逻辑问题呢?为什么A方和B方,不需要互相使用数据,却需要互相授权才能在C方执行运算。

JiPZou avatar May 24 '24 09:05 JiPZou

C 会有自己的数据参与运算吗?

tongke6 avatar May 24 '24 12:05 tongke6

C中没有数据,他只是被A和B分别授权了数据,它使用A和B的数据进行计算

JiPZou avatar May 24 '24 12:05 JiPZou

你使用的是 SCQL 哪种部署模式呀? p2p 还是 中心化的 SCDB ?

tongke6 avatar May 24 '24 12:05 tongke6

中心化的方式

JiPZou avatar May 24 '24 12:05 JiPZou

能否提供下具体的query(注意脱敏),以及CCL授权信息,报错信息。以帮助我们进一步确认问题?

jingshi-ant avatar May 29 '24 03:05 jingshi-ant

具体的实例是这样的: 注:下述2代表参与方B,3代表参与方A,1代表参与方C 首先: A和B分别使用如下指令将自身数据库内容授权给C: grant select PLAINTEXT_AFTER_GROUP_BY(zzdmc), select PLAINTEXT_AFTER_AGGREGATE(hznl),select PLAINTEXT_AFTER_COMPARE(hzxbmc),select PLAINTEXT_AFTER_COMPARE(hzxbdm),select PLAINTEXT_AFTER_COMPARE(abo_xxmc),select PLAINTEXT_AFTER_COMPARE(zzddm),select PLAINTEXT_AFTER_COMPARE(abo_xxdm) on feddb.cardiac_surgery_set1 to 1;

grant select PLAINTEXT_AFTER_GROUP_BY(zzdmc), select PLAINTEXT_AFTER_AGGREGATE(hznl),select PLAINTEXT_AFTER_COMPARE(hzxbmc),select PLAINTEXT_AFTER_COMPARE(hzxbdm),select PLAINTEXT_AFTER_COMPARE(abo_xxmc),select PLAINTEXT_AFTER_COMPARE(zzddm),select PLAINTEXT_AFTER_COMPARE(abo_xxdm) on feddb.cardiac_surgery_set2 to 1;

此时,在C方执行下述代码: SELECT zzdmc AS '诊断', MAX(hznl) AS '最大年龄', MIN(hznl) AS '最小年龄', AVG(hznl) AS '平均年龄', COUNT(*) AS '患者人数', (SUM(CASE WHEN hzxbdm = 1 THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) AS '男性患者占比', (SUM(CASE WHEN hzxbdm = 2 OR hzxbdm = 9 THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) AS '女性患者占比' FROM ( SELECT zzddm, zzdmc, hznl, abo_xxmc, abo_xxdm, hzxbmc, hzxbdm FROM feddb.cardiac_surgery_set2 WHERE abo_xxmc IN ('1','2') AND zzddm in ('1','2','3','4','5') UNION ALL SELECT zzddm, zzdmc, hznl, abo_xxmc, abo_xxdm, hzxbmc, hzxbdm FROM feddb.cardiac_surgery_set1 WHERE abo_xxmc IN ('1','2') AND zzddm in ('1','2','3','4','5') ) AS combined GROUP BY zzdmc;

出现如下报错: failed to submit FATE job: failed to check union ccl: ccl of child 0 is ({ccl level: 1->PLAINTEXT_AFTER_GROUP_BY,2->PLAINTEXT,3->UNKNOWN,}) ccl of child 0 is ({ccl level: 1->PLAINTEXT_AFTER_GROUP_BY,2->UNKNOWN,3->PLAINTEXT,})

但是如果此时,A将数据授权给B: grant select PLAINTEXT_AFTER_GROUP_BY(zzdmc), select PLAINTEXT_AFTER_AGGREGATE(hznl),select PLAINTEXT_AFTER_COMPARE(hzxbmc),select PLAINTEXT_AFTER_COMPARE(hzxbdm),select PLAINTEXT_AFTER_COMPARE(abo_xxmc),select PLAINTEXT_AFTER_COMPARE(zzddm),select PLAINTEXT_AFTER_COMPARE(abo_xxdm) on feddb.cardiac_surgery_set1 to 2; B将数据授权给A: grant select PLAINTEXT_AFTER_GROUP_BY(zzdmc), select PLAINTEXT_AFTER_AGGREGATE(hznl),select PLAINTEXT_AFTER_COMPARE(hzxbmc),select PLAINTEXT_AFTER_COMPARE(hzxbdm),select PLAINTEXT_AFTER_COMPARE(abo_xxmc),select PLAINTEXT_AFTER_COMPARE(zzddm),select PLAINTEXT_AFTER_COMPARE(abo_xxdm) on feddb.cardiac_surgery_set2 to 3;

此时C再次执行上述sql查询,即可得到结果。

JiPZou avatar May 29 '24 08:05 JiPZou

这里的报错和UNION有关,因为UNION ALL了A/B的数据,在代码实现上增加了UNION后的数据对所有参与方不为UNKNOWN的要求,因此报错了。 另:可以尝试下,A给B、B给A都设置ENCRYPTED_ONLY绕过校验试试(后面可能别的推导环节也会卡住。。)

jingshi-ant avatar May 29 '24 09:05 jingshi-ant

我们稍后试一下,这样去做,但是这样的逻辑感觉还是不太对的样子。

为什么在代码实现上增加了UNION后的数据对所有参与方不为UNKNOWN的要求,这个仅针对计算方不行吗?因为只有计算方能拿到数据呀。

此外,这部分校验的代码的位置在哪里呢?

JiPZou avatar May 29 '24 09:05 JiPZou

仅针对计算方也会报错,因为A对B或B对A在UNION后也是UNKNOWN。 当然,CCL的校验规则比较保守,也存在比直觉更严格的情况,如果场景合理后续迭代可以优化。 出错的位置:https://github.com/secretflow/scql/blob/9cbd51534e9dbb2c1cdb4709a5fbc03963bceeed/pkg/interpreter/translator/build_ccl.go#L489

jingshi-ant avatar May 29 '24 09:05 jingshi-ant

好的,后续我们这边再测试一下

JiPZou avatar May 29 '24 09:05 JiPZou

您好,请问一下,咱们scql的执行过程中,是否使用SPU进行隐私计算,是根据CCL判断的吗?如果去掉了CCL判断,是不是默认就是明文的方式进行计算了。

JiPZou avatar Jun 06 '24 01:06 JiPZou

SCQL 密态引擎包含了 SPU 和 HEU,密态相关的计算会委托给 SPU 和 HEU 进行。

CCL 是做 Query 之前行的约束校验的,不过当前的实现和密态图的翻译有点耦合。是否可以明文计算,或者 reveal 成明文,其实上是根据参与运算的数据属于哪个参与方决定的,以及算子的结果是否是降维的,比如 aggregate 操作。如果没有 CCL,应该全部在密态下执行。

tongke6 avatar Jun 06 '24 05:06 tongke6