system: [SYSTEM]

user: 4. 一个全新设计的基于秘密共享的理性安全多方计算协议 假设要计算的函数为只有一个输出的函数，对于多个输出的可在此基础上扩展。协议中涉及的安全多方计算协议都是传统的基于不经意传输协议的，在基础知识部分介绍过其计算的过程，这里不再给出。 本文所设计的协议也是分为2个阶段 ，即秘密分发阶段和秘密重构阶段。我们假定参与者是2名，多名参与者同理也可以推出。 1) 秘密分发阶段 假设S为待共享的秘密( S ← f ( x 1 ， ⋯ ， x n ) )， S = s 1 ⊗ s 2 。分发者参照分布概率为b的几何分布选择一个整数 r * 为真实轮。M为总轮数， r * < M − 1 。 分发者选择 G e n ， G e n ′ 、 E v a l ， E v a l ′ 、 P r o o f ， P r o o f ′ 和 V r f y ， V r f y ′ 函数，其中 G e n ， G e n ′ 、 P r o o f ， P r o o f ′ 和 V r f y ， V r f y ′ 、 E v a l ， E v a l ′ ∈ { 0 ， 1 } l ，都属于VRF。由 G e n ( 1 k ) 生成 ( p k 1 ， s k 1 ) ， ( p k 2 ， s k 2 ) ，由 G e n ′ ( 1 k ) 生成 ( p k ′ 1 ， s k ′ 1 ) ， ( p k ′ 2 ， s k ′ 2 ) 。 分发者选择一个多项式 f A ( x ) = a 0 + a 1 x + ⋯ + a t − 1 x t − 1 ，其中 f A ( 0 ) = s 1 ， r * > t ，分发者计算 { ( 1 ， f A ( 1 ) ) ， ⋯ ， ( t ， f A ( t ) ) } ，这些点值为真实有效点值，可以凭借这些点值恢复出多项式 f A ( x ) ，然后分发者生成随机混淆函数 f D A ( x ) ，这个函数可以是任意函数，因为不会影响到结果，因此x可以是任何数，最终形成由真实点值和虚假点值组合成的影子份额队列 F S h a d o w A = { ( 1 ， f A ( 1 ) ) ， ( x ， f D A ( x ) ) ， ⋯ ， ( 2 ， f A ( 2 ) ) ， ⋯ ， ( t ， f A ( t ) ) ， ⋯ ， ( x ， f D A ( x ) ) } ，x可以为任意值。并且对影子份额队列做出承诺 S h a d o w A 。根据真实点值对在影子份额中的位置可以生成一个二进制串 b i t A ，其中二进制位为1的位置为真实点值对在影子份额中的位置。分发者计算 F S h a r e A = E v a l s k 2 ( r * ) ⊕ b i t A 及 。然后分发者将 F S h a d o w A 、 S h a d o w A 、 、 F S i g A 、 ( s k 1 ， s k ′ 1 ) 、 ( p k 1 ， p k ′ 1 ) 及 F S i g A 发送给参与者P A 。 分发者选择一个多项式 ，其中 f B ( 0 ) = s 2 ， r * > w ， t ≠ w ，分发者计算 { ( 1 ， f B ( 1 ) ) ， ⋯ ， ( t ， f B ( t ) ) } ，这些点值为真实有效点值，可以凭借这些点值恢复出多项式 f B ( x ) ，然后分发者生成随机混淆函数 ，这个函数可以是任意函数，因为不会影响到结果，因此x可以是任何数，最终形成由真实点值和虚假点值组合成的影子份额队列 F S h a d o w B = { ( 1 ， f B ( 1 ) ) ， ( x ， f D B ( x ) ) ， ⋯ ， ( 2 ， f B ( 2 ) ) ， ⋯ ， ( t ， f B ( t ) ) ， ⋯ ， ( x ， f D B ( x ) ) } ，x可以为任意值。并且对影子份额队列做出承诺 S h a d o w B 。根据真实点值对在影子份额中的位置可以生成一个二进制串 b i t B ，其中二进制位为1的位置为真实点值对在影子份额中的位置。分发者计算 F S h a r e B = E v a l s k 1 ( r * ) ⊕ b i t B 及 F S i g B = E v a l ′ s k ′ 1 ( r * + 1 ) 。然后分发者将 F S h a d o w B 、 S h a d o w B 、 F S h a r e B 、 F S i g B 、 ( s k 2 ， s k ′ 2 ) 、 ( p k 2 ， p k ′ 2 ) 及 F S i g B 发送给参与者P B 。 2) 秘密重构阶段：在第r轮， r = 1 ， 2 ， ⋯ ，P A 、P B 执行以下算法： P B 将 F S h a d o w B 影子份额队列中的第r个影子份额 、 E v a l s k 2 ( r ) 、 P r o o f s k 2 ( r ) 、 E v a l ′ s k ′ 2 ( r ) 和 P r o o f ′ s k ′ 2 ( r ) 发送给P A 。如果P A 没有收到P B 发送的信息或者P B 发送的影子份额经过验证发现是错误的或者 V r f y p k 2 ( r ， E v a l s k 2 ( r ) ， P r o o f s k 2 ( r ) ) = 0 或者 V r f y ′ p k ′ 2 ( r ， E v a l s k ′ 2 ( r ) ， P r o o f ′ s k ′ 2 ( r ) ) = 0 ，则P A 输出 s 1 ( r − 1 ) 并且退出协议。如果 F S i g A = E v a l ′ s k ′ 2 ( r ) ，P A 知道 s 1 ( r − 1 ) 为真是校验二进制位并且通知P B ；否则 s 1 ( i ) = F S h a r e A ⊕ E v a l s k 2 ( r ) ，然后继续下一轮。 P A 将 F S h a d o w A 影子份额队列中的第r个影子份额 F S h a d o w r A 、 E v a l s k 1 ( r ) 、 P r o o f s k 1 ( r ) 、 E v a l ′ s k ′ 1 ( r ) 和 P r o o f ′ s k ′ 1 ( r ) 发送给P B 。如果P B 没有收到P A 发送的信息或者P A 发送的影子份额经过验证发现是错误的或者 V r f y p k 1 ( r ， E v a l s k 1 ( r ) ， P r o o f s k 1 ( r ) ) = 0 或者 V r f y ′ p k ′ 1 ( r ， E v a l ′ s k ′ 1 ( r ) ， P r o o f ′ s k ′ 1 ( r ) ) = 0 ，则P B 输出 s 2 ( r − 1 ) 并且退出协议。如果 F S i g B = E v a l ′ s k ′ 1 ( r ) ，P B 知道 s 2 ( r − 1 ) 为真是校验二进制位并且通知P A ；否则 s 2 ( i ) = F S h a r e B ⊕ E v a l s k 1 ( r ) ，然后继续下一轮。 在P A 、P B 得知正确的校验位 b i t A 、 b i t B 之后，就能从影子份额队列 F S h a d o w A 、 F S h a d o w B 中找出真实有效的影子份额从而恢复出多项式 f A ( x ) ， f B ( x ) ，从而计算出 s 1 ， s 2 ，然后通过 S = s 1 ⊗ s 2 计算出S从而获得安全多方计算的结果。