本文解释一下安全多方计算技术是如何在不泄露两个机器人未来路径的基础上实现对碰撞预测的

本文解释一下安全多方计算技术是如何在不泄露两个机器人🤖未来路径的基础上实现对碰撞💥预测的

本文是对 2019 ICRA - Coordinated multi-robot planning while preserving individual privacy 中算法的详细解释
文章的解读在 [阅读笔记] 2019 ICRA - Coordinated multi-robot planning while preserving individual privacy一文中。

🙋‍♂️张同学 📧zhangruiyuan@zju.edu.cn 有问题请联系我~

为了解释方便,本文不考虑时间因素,只认为两个机器人🤖路线相交的话,我们就以为两个机器人未来的路线是会发生碰撞💥的。

一、预备知识

1.1 同态加密算法

利用同态加密保护数据私密性的想法最早在1978年由Ron Rivest, Leonard Adleman, Michael Dertouzos等人提出,它的主要思想是通过具有同态性质的加密函数对数据进行加密,从而可以在不对数据进行解密的条件下对已加密的数据进行任何在可以在明文上进行的运算,也就是说,可以对加密后的信息进行一系列复杂的运算和分析而不影响其保密性。

🚗 同态加密算法分类

  • 对于加密算法E,如果满足 E(A)+E(B)=E(A+B), 我们将这种加密函数叫做加法同态
  • 对于加密算法E,如果满足 E(A)×E(B)=E(A×B) ,我们将这种加密函数叫做乘法同态
  • 对于加密算法E,如果一个加密函数同时满足加法同态和乘法同态,称为全同态加密

🚕 Paillier Cryptosystem

同态加密算法的一种实现。

下述展开的三个特性是应用在本文算法上的,需要注意一下(若不清楚表达的含义,可以参考下面的代码部分)。

Paillier 是一种「加法同态」算法,但是它还具备以下3种特性,这三个特性在本文中使用:

  • Encrypted integers can be added together
  • Encrypted integers can be multiplied by an unencrypted integer
  • Encrypted integers and unencrypted integers can be added together

🚙 Paillier的Go代码实现(可以略过)

package main

import (
	"crypto/rand"
	"fmt"
	"math/big"

	"github.com/roasbeef/go-go-gadget-paillier"
)

func main() {
	// Generate a 128-bit private key.
	privKey, _ := paillier.GenerateKey(rand.Reader, 128)

	// Encrypt the number "15".
	m15 := new(big.Int).SetInt64(15)
	c15, _ := paillier.Encrypt(&privKey.PublicKey, m15.Bytes())

	// Encrypt the number "20".
	m20 := new(big.Int).SetInt64(20)
	c20, _ := paillier.Encrypt(&privKey.PublicKey, m20.Bytes())

	// Add the encrypted integers 15 and 20 together.
	plusM16M20 := paillier.AddCipher(&privKey.PublicKey, c15, c20)
	decryptedAddition, _ := paillier.Decrypt(privKey, plusM16M20)
	fmt.Println("Result of 15+20 after decryption: ",
		new(big.Int).SetBytes(decryptedAddition).String()) // 35!

	// Add the encrypted integer 15 to plaintext constant 10.
	plusE15and10 := paillier.Add(&privKey.PublicKey, c15, new(big.Int).SetInt64(10).Bytes())
	decryptedAddition, _ = paillier.Decrypt(privKey, plusE15and10)
	fmt.Println("Result of 15+10 after decryption: ",
		new(big.Int).SetBytes(decryptedAddition).String()) // 25!

	// Multiply the encrypted integer 15 by the plaintext constant 10.
	mulE15and10 := paillier.Mul(&privKey.PublicKey, c15, new(big.Int).SetInt64(10).Bytes())
	decryptedMul, _ := paillier.Decrypt(privKey, mulE15and10)
	fmt.Println("Result of 15*10 after decryption: ",
		new(big.Int).SetBytes(decryptedMul).String()) // 150!
}
Result of 15+20 after decryption:  35
Result of 15+10 after decryption:  25
Result of 15*10 after decryption:  150

1.2 混淆电路

混淆电路(Garbled Circuit),又称姚氏电路(Yao’s GC)是由姚期智教授于1986年针对百万富翁问题提出的解决方案。

它的核心技术是将两方参与的安全计算函数编译成布尔电路的形式,并将真值表加密打乱,从而实现电路的正常输出而又不泄露参与计算的双方私有信息。由于任何安全计算函数都可转换成对应布尔电路的形式,相较其他的安全计算方法,具有较高的通用性,因此引起了业界较高的关注度。

简而言之,利用混淆电路,我们能够实现两个用户均不明示其存款的情况下,比较两个用户存款大小,在本文中也仅仅是使用了这一个小特性,用来比较数值大小。

1.3 正常情况下,我们是怎么判断两个路径是否相交的呢?

节点表示如下图所示:

image-20211221020523585

若上述节点满足下述其中一项,我们就认为这两个路径是相交的。「为什么如此计算就能判断出两个路径是否相交」这个问题不是本文重点,在此不做论述。这里唯一需要注意的是:只需要计算 f A ( u B ) 、 f A ( v B ) 、 f B ( u A ) 、 f B ( v A ) f_A(u_B)、f_A(v_B)、f_B(u_A)、f_B(v_A) fA(uB)fA(vB)fB(uA)fB(vA)​这四个值就能判断是否碰撞💥了
( f A ( u B ) < = 0 )   a n d   ( f A ( v B ) > = 0 )   a n d   ( f B ( u A ) < = 0 )   a n d   ( f B ( v A ) > = 0 ) , ( f A ( u B ) < = 0 )   a n d   ( f A ( v B ) > = 0 )   a n d   ( f B ( u A ) > = 0 )   a n d   ( f B ( v A ) < = 0 ) , ( f A ( u B ) > = 0 )   a n d   ( f A ( v B ) < = 0 )   a n d   ( f B ( u A ) < = 0 )   a n d   ( f B ( v A ) > = 0 ) , ( f A ( u B ) > = 0 )   a n d   ( f A ( v B ) < = 0 )   a n d   ( f B ( u A ) > = 0 )   a n d   ( f B ( v A ) < = 0 ) , (f_A(u_B) <= 0)\ and\ (f_A(v_B) >= 0)\ and\ (f_B(u_A) <= 0)\ and\ (f_B(v_A) >= 0), \\ (f_A(u_B) <= 0)\ and\ (f_A(v_B) >= 0)\ and\ (f_B(u_A) >= 0)\ and\ (f_B(v_A) <= 0), \\ (f_A(u_B) >= 0)\ and\ (f_A(v_B) <= 0)\ and\ (f_B(u_A) <= 0)\ and\ (f_B(v_A) >= 0), \\ (f_A(u_B) >= 0)\ and\ (f_A(v_B) <= 0)\ and\ (f_B(u_A) >= 0)\ and\ (f_B(v_A) <= 0), \\ (fA(uB)<=0) and (fA(vB)>=0) and (fB(uA)<=0) and (fB(vA)>=0),(fA(uB)<=0) and (fA(vB)>=0) and (fB(uA)>=0) and (fB(vA)<=0),(fA(uB)>=0) and (fA(vB)<=0) and (fB(uA)<=0) and (fB(vA)>=0),(fA(uB)>=0) and (fA(vB)<=0) and (fB(uA)>=0) and (fB(vA)<=0),

二、泄露隐私的判断两个机器人的路径是不是碰撞的方法

🚗 假设目前存在两个机器人:A、B

  • A知道自己的路线函数 f A ( x , y ) = 0 f_A(x,y)=0 fA(x,y)=0​​​​​​,A要移动的起点 u A u_A uA​​​​,A要移动的终点 v A v_A vA​​。

  • B知道自己的路线函数 f B ( x , y ) = 0 f_B(x,y)=0 fB(x,y)=0​​,B要移动的起点 u B u_B uB​​,B要移动的终点 v B v_B vB​​​。

🚕 若A将自己的「路线函数 f A ( x , y ) = 0 f_A(x,y)=0 fA(x,y)=0​,A要移动的起点 u A u_A uA​,A要移动的终点 v A v_A vA​​​」发送给B,B就能根据1.3节的函数来计算两个路径是否相撞了。

  • 但是这样的方式,就将A的路线图完全暴露给了B。

三、本文的方法

🚗 使用同态加密,保护A的数据隐私

为了不暴露A的路线图给B:

A将自己的「路线函数 f A ( x , y ) = 0 f_A(x,y)=0 fA(x,y)=0,A要移动的起点 u A u_A uA,A要移动的终点 v A v_A vA」经过1.1节的同态加密后的结果传给B。

假设同态加密函数为 E ( x ) E(x) E(x)​,解密函数为 D ( x ) D(x) D(x)​​​,

请同时考虑Paillier算法的前2个特性,在B中可以计算出来的结果如下:
E ( f A ( u B ) ) 、 E ( f A ( v B ) ) 、 E ( f B ( u A ) ) 、 E ( f B ( v A ) ) E(f_A(u_B))、E(f_A(v_B))、E(f_B(u_A))、E(f_B(v_A)) E(fA(uB))E(fA(vB))E(fB(uA))E(fB(vA))
🚕 添加随机数,避免B的隐私泄露

这个结果需要传给A,由A解密后得到原来的 f A ( u B ) 、 f A ( v B ) 、 f B ( u A ) 、 f B ( v A ) f_A(u_B)、f_A(v_B)、f_B(u_A)、f_B(v_A) fA(uB)fA(vB)fB(uA)fB(vA)​​才能用来判断两条路径是不是能够相交。

但是因为A知道自己路径的起止点 u A 、 v A u_A、v_A uAvA​​,所以A能够据上述B回传的值中推算出B的路径,所以这依旧侵犯了B的路径隐私。

所以B在回传给A的参数中加了4个随机数,分别加在 E ( f A ( u B ) ) 、 E ( f A ( v B ) ) 、 E ( f B ( u A ) ) 、 E ( f B ( v A ) ) E(f_A(u_B))、E(f_A(v_B))、E(f_B(u_A))、E(f_B(v_A)) E(fA(uB))E(fA(vB))E(fB(uA))E(fB(vA))这四个参数中:
E ( f A ( u B ) ) + r 1 、 E ( f A ( v B ) ) + r 2 、 E ( f B ( u A ) ) + r 3 、 E ( f B ( v A ) ) + r 4 E(f_A(u_B))+r1 、E(f_A(v_B))+r2 、E(f_B(u_A))+r3 、E(f_B(v_A))+r4 E(fA(uB))+r1E(fA(vB))+r2E(fB(uA))+r3E(fB(vA))+r4
如此,这个结果需要传给A,由A解密后得到 f A ( u B ) + r 1 、 f A ( v B ) + r 2 、 f B ( u A ) + r 3 、 f B ( v A ) + r 4 f_A(u_B)+r1、f_A(v_B)+r2、f_B(u_A)+r3、f_B(v_A)+r4 fA(uB)+r1fA(vB)+r2fB(uA)+r3fB(vA)+r4(用的是Paillier的第3个特性)。

🚙 使用混淆电路得到最终的结果

总结一下A、B目前的状态:

  • A: f A ( u B ) + r 1 、 f A ( v B ) + r 2 、 f B ( u A ) + r 3 、 f B ( v A ) + r 4 f_A(u_B)+r1、f_A(v_B)+r2、f_B(u_A)+r3、f_B(v_A)+r4 fA(uB)+r1fA(vB)+r2fB(uA)+r3fB(vA)+r4
  • B: r 1 、 r 2 、 r 3 、 r 4 r1、r2、r3、r4 r1r2r3r4

为了应用1.3节的函数判断两个路径是否相交,我们需要判断下述不等式:
( f A ( u B ) + r 1 < = r 1 )   a n d   ( f A ( v B ) + r 2 > = r 2 )   a n d   ( f B ( u A ) + r 3 < = r 3 )   a n d   ( f B ( v A ) + r 4 > = r 4 ) , ( f A ( u B ) + r 1 < = r 1 )   a n d   ( f A ( v B ) + r 2 > = r 2 )   a n d   ( f B ( u A ) + r 3 > = r 3 )   a n d   ( f B ( v A ) + r 4 < = r 4 ) , ( f A ( u B ) + r 1 > = r 1 )   a n d   ( f A ( v B ) + r 2 < = r 2 )   a n d   ( f B ( u A ) + r 3 < = r 3 )   a n d   ( f B ( v A ) + r 4 > = r 4 ) , ( f A ( u B ) + r 1 > = r 1 )   a n d   ( f A ( v B ) + r 2 < = r 2 )   a n d   ( f B ( u A ) + r 3 > = r 3 )   a n d   ( f B ( v A ) + r 4 < = r 4 ) , (f_A(u_B)+r1 <= r1)\ and\ (f_A(v_B)+r2 >= r2)\ and\ (f_B(u_A)+r3 <= r3)\ and\ (f_B(v_A)+r4 >= r4), \\ (f_A(u_B)+r1 <= r1)\ and\ (f_A(v_B)+r2 >= r2)\ and\ (f_B(u_A)+r3 >= r3)\ and\ (f_B(v_A)+r4 <= r4), \\ (f_A(u_B)+r1 >= r1)\ and\ (f_A(v_B)+r2 <= r2)\ and\ (f_B(u_A)+r3 <= r3)\ and\ (f_B(v_A)+r4 >= r4), \\ (f_A(u_B)+r1 >= r1)\ and\ (f_A(v_B)+r2 <= r2)\ and\ (f_B(u_A)+r3 >= r3)\ and\ (f_B(v_A)+r4 <= r4), \\ (fA(uB)+r1<=r1) and (fA(vB)+r2>=r2) and (fB(uA)+r3<=r3) and (fB(vA)+r4>=r4),(fA(uB)+r1<=r1) and (fA(vB)+r2>=r2) and (fB(uA)+r3>=r3) and (fB(vA)+r4<=r4),(fA(uB)+r1>=r1) and (fA(vB)+r2<=r2) and (fB(uA)+r3<=r3) and (fB(vA)+r4>=r4),(fA(uB)+r1>=r1) and (fA(vB)+r2<=r2) and (fB(uA)+r3>=r3) and (fB(vA)+r4<=r4),
最后,再应用1.2节的混淆电路方法,我们就能够实现在A不知道B的未来路径、B不知道A的路径基础上完成路径碰撞的检测工作了。

  • f A ( u B ) + r 1 、 f A ( v B ) + r 2 、 f B ( u A ) + r 3 、 f B ( v A ) + r 4 f_A(u_B)+r1、f_A(v_B)+r2、f_B(u_A)+r3、f_B(v_A)+r4 fA(uB)+r1fA(vB)+r2fB(uA)+r3fB(vA)+r4当做富翁A的存款
  • r 1 、 r 2 、 r 3 、 r 4 r1、r2、r3、r4 r1r2r3r4当做富翁B的存款

四、解释一下本文是不是病态题目

昨天晚上,我认为这个题目不病态的理由是下面的:

比如你是一个小飞机,对面来了一个大飞机。 你两不是敌人,能够通过信号进行通信。你们两个人想要判断接下来的移动会不会相撞,传统的方法需要共享对方的路径;但是你不想告诉对面你未来的路径,对面也不告诉你他的路径(这是出于隐私保护的要求);使用本文的这种安全多方计算的方法能够实现这种判断,且不泄露隐私。

但是,好像一般不会遇见这样的场景,所以表现出这个题目是病态的呢?? 晕😓

本文给出的motivation

This exemplifies our motivating example of shared areas where manned aircraft and small UAVs need to navigate without revealing their path information.

An obstacle to the widespread commercial use of small Unmanned Aerial Vehicles (UAVs) is the potential for collisions, not only against each other but also against larger manned aircraft [1]. As various airborne vehicles are owned and operated by different companies and stake- holders, it would be ideal if one could provide assurances of collision-free paths without mandating the disclosure of information that some parties would be uneasy revealing.

Consider a covert mission against some adversary where multiple robots must coordinate, for example, to ren- dezvous behind enemy lines. In the event of one of the robots being abducted or compromised, we would like guarantees that any information that might be extracted from the captured agent will not make the other robots vulnerable.

我仔细想了一下,我也不确定这个题目是不是病态的了 emmm 晕😓

  • [病态] 一般两个自动驾驶的汽车也主要是通过视觉来判断路径的,很少说是一辆车链接另一辆车,给对方发消息

    [非病态] 但是如果真的能一辆车链接另一辆车的话,是不是能补充视觉判断的不足呢

  • [非病态] 考虑一个多个机器人合作的场景下,这些机器人之间能够协作完成某些任务,这个任务可以超越本文中给出的「路径碰撞判断」,通过用这种安全多方计算的方式,是否能达成某种隐私保护呢。

五、其他

安全多方计算只是隐私计算的一种技术,还有联邦学习、区块链等隐私计算技术还没有调研,所以还不是很着急下结论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值