基于ABY框架,类似于单边,同样可设计出(纯)混淆电路(`ABY\_Y^P` )和混合电路(`ABY\_(AY)^P` )的两种多边近邻检测协议。
我们明确多边形位置近邻度的概念:回顾单边情形,近邻是一种对称关系 (当A与B邻近时,B与A亦然);而在多边情形下,近邻是非对称的,一方作为被检测者,向协议提供自己的位置坐标,而另一方则作为检测者,维护并向协议提供一个自己的多边形范围坐标。近邻度的判定容易定义为:被检测点是否位于多边形内。
下面考虑有一个n边形`P`,按照逆时针方向将其顶点表示为`P_1,P_2,...,P_n`。被检测方提供自身位置`p`坐标`x_p,y_p` ;而检测方提供上述多边形各点的坐标。为判定`p`是否落在多边形`P`中,我们定义有序三元组`<P_(i+1),p,P_i>`方向为:
(1)正(方向):当三点呈逆时针方向
(2)零(方向):当三点共线
(3)负(方向):当三点呈顺时针方向
当对多边形所有边的端点与待检测点构成的三元组都呈现逆时针方向(都为正值)时,可以判定点`p`位于`P`内。
(1)多边检测中需要与固定阈值 比较以判断正负性,而由于ABY框架只支持无符号数,因此要考虑数学意义上的正负区间;
(2)只考虑效率,类似PL中与或运算符短路的设计(惰性求值),可以让协议在找到第一处 OR 返回1时将其作为最终的返回并退出,然而这种情形下存在遭到计时攻击的隐患。处于安全上的考虑,总是计算相对于各个边的邻近性;
(3)多边形的维护方(检测者)向协议输入的并不是直接的坐标值,而是一些行列因子,这些因子是可被检测者预计算以减少交互通信的复杂度.
`n(2MUL(σ)+2ADD(σ)+GT(σ))+(n-1)OR(σ)`
与前面采用一致的参数预设,总共需要
`n(4*σ^2+l)+(n-1)AND gates=526336*n-1024 bytes`
行列式的计算部分采用算术共享、局部近邻性的析取(OR)部分采用姚共享。
`η(2MUL\_A(σ)+A2Y(σ)+GT(σ)+(η-1)or(σ))`
总共需要`(σ*η(4*σ+10*κ+384))/8-2048=15360*η-2048bytes`