隐私计算 2.3 基于中国剩余定理的秘密共享方案

1 简介

  • 作者:Asmuth和Bloom;
  • 时间:1983年;
  • 理念:基于中国剩余定理(CRT)。

2 具体实现

I 秘密分割算法

  • (1)选择nnn个整数d1,d2,…,dnd_1, d_2, \dots, d_nd1,d2,,dn, 满足:
    d1<d2<⋯<dn;//严格递增(di,dj)=1,i≠j;//两两互素N=Πi=1tdi,M=Πi=n−t+2ndi,N>S>M\begin{array}{l} d_1 < d_2 < \dots < d_n; //严格递增 \\ (d_i, d_j) = 1, i \neq j; //两两互素\\ N = \Pi_{i = 1}^{t} d_i, M = \Pi_{i = n - t + 2}^{n} d_i, N > S > M \\ \end{array} d1<d2<<dn;//(di,dj)=1,i=j;//N=Πi=1tdi,M=Πi=nt+2ndi,N>S>M

  • (2)分别计算:
    S1=Smodd1S2=Smodd2…Sn=Smoddn\begin{array}{l} S_{1}= S \bmod d_1 \\ S_{2}= S \bmod d_2 \\ \dots \\ S_{n}= S \bmod d_n \\ \end{array} S1=Smodd1S2=Smodd2Sn=Smoddn

  • (3)第iii 个参与者计算SiS_iSi作为其分享的秘密。

II 秘密重构算法

  • (1)收集任意ttt个参与者的钥匙;

  • (2)分别计算:
    S1=Smodd1S2=Smodd2…Sn=Smoddn\begin{array}{l} S_{1}= S \bmod d_1 \\ S_{2}= S \bmod d_2 \\ \dots \\ S_{n}= S \bmod d_n \\ \end{array} S1=Smodd1S2=Smodd2Sn=Smoddn

  • (3)根据中国剩余定理,求解得到SSS

3 实例

设秘密S=117S = 117S=117n=5n = 5n=5, t=3t = 3t=3
I 秘密分割

  • (1)生成nnn个互质的随机数,要求其中的ttt个最小的随机数相乘的结果大于秘密SSSt−1t - 1t1个最大的随机数相乘的结果小于秘密SSS。例如:

    d1=4d_1 = 4d1=4d2=5d_2 = 5d2=5d3=7d_3 = 7d3=7, d4=9d_4 = 9d4=9, d5=11d_5 = 11d5=11

    其中d1d2d3>S>d4d5d_1d_2d_3 > S > d_4d_5d1d2d3>S>d4d5

  • (2)分别计算

S1=117mod4=1S2=117mod5=2S3=117mod7=5S4=117mod9=0S5=117mod11=7\begin{array}{l} S_{1}= 117 \bmod 4 = 1 \\ S_{2}= 117 \bmod 5 = 2 \\ S_{3}= 117 \bmod 7 = 5 \\ S_{4}= 117 \bmod 9 = 0 \\ S_{5}= 117 \bmod 11 = 7 \\ \end{array} S1=117mod4=1S2=117mod5=2S3=117mod7=5S4=117mod9=0S5=117mod11=7

(3)将(Si,i)(S_i, i)(Si,i)作为钥匙分发给第iii个参与者。

II 秘密重构

(1)收集任意t=3t = 3t=3个参与者的钥匙,例如第1个人的(1, 4),第2个人的(2, 5),第5个人的(7, 11);

(2)列出方程组
Smod4=1Smod5=2Smod11=7\begin{array}{l} S \bmod 4 = 1 \\ S \bmod 5 = 2 \\ S \bmod 11 = 7 \\ \end{array} Smod4=1Smod5=2Smod11=7

  • (3)按照中国剩余定理,计算S=117S = 117S=117

2.2.4 代码

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "miracl.h"
#include <Windows.h>
#define SECRET_BITS 500		//秘密的位数 
#define N 5					//子秘密的个数n
#define T 3					//恢复秘密所需要的最少子秘密个数t
#define D_DIGBITS (((SECRET_BITS/T)+(SECRET_BITS/(T-1)))/2)	//di的位数,di的长度在B/t与B/(t-1)之间,使N(最小的前t个数的乘积)>k>M(最大的前t-1个数的乘积)
#define MAX_D ((N)*(D_DIGBITS)+(N))							// 定义大数系统的最大位数(稍微比N倍的d大就可以) 
big ki[N], di[N];
void zhongguo(big secret){int i, num[N];big x = mirvar(0);big one = mirvar(1);big m = mirvar(1);	//m是di连乘的乘积big Mit[N];			//Mibig Mit_1[N];		//Mi的逆big g1[N];			//中间变量,计算Mi*Mi的逆*ai(a1即Ki)printf("\n                                                     秘密恢复");printf("\n请选择%d个子秘密,输入序号1 - %d\n", T, N);for (i = 0; i < T; i++){scanf_s("%d", &num[i]);num[i]--;//使序号从1 - t ,转化为 0 - t-1,符合数组下标的实际情况}//of for i//初始化for (i = 0; i < N; i++){Mit[i] = mirvar(0);Mit_1[i] = mirvar(0);g1[i] = mirvar(0);}//of for i//m=di[num[i]]连乘for (i = 0; i < T; i++){multiply(m, di[num[i]], m);//di[num[i]]表示的就是中国剩余定理中的mi}//of for i//Mit[t]=m/di[num[i]],即计算Mifor (i = 0; i < T; i++){fdiv(m, di[num[i]], Mit[i]);//除法}//of for i//Mit_1为Mit的逆for (i = 0; i < T; i++){xgcd(Mit[i], di[num[i]], Mit_1[i], Mit_1[i], Mit_1[i]);//求逆运算,Mit_1为Mit在模di[num[i]]下的逆}//of for i//g1 = Mi t* Mit_1 * ki[ num[i] ]for (i = 0; i < T; i++){multiply(Mit[i], Mit_1[i], g1[i]);multiply(g1[i], ki[num[i]], g1[i]);}//of for i//x=g1[1]+g1[2]+...+g1[t]for (i = 0; i < T; i++){add(x, g1[i], x);}//of for ipowmod(x, one, m, x);// x = x^1 mod mprintf("\n");printf("秘密: \n");cotnum(x, stdout);printf("\n");//判断恢复的秘密与原秘密是否相同if (mr_compare(x, secret) != 0){printf("恢复的秘密与所给秘密不同!");}else{ printf("恢复的秘密与所给秘密相同!");}//of ifprintf("\n");
}//of zhongguoint main(){FILE* fp;char fpname[] = "s.txt";//文件名miracl* mip = mirsys(MAX_D, 10);//初始化大数系统,最大位数和进制big secret = mirvar(0);//秘密big one = mirvar(1);//big型数值1big a= mirvar(1);//代表D_DIGBITS位的10进制随机数big n= mirvar(1);//代表N=d1*d2*...*dtbig m = mirvar(1);//代表M=d(n-t+2)*d(n-t+3)*...*dnint i;for (i = 0; i < N; i++){ki[i] = mirvar(0);//对每一个ki[]进行初始化di[i] = mirvar(0);//对每一个di[]进行初始化}//of for i//从文件中读秘密if ((fp = fopen(fpname, "r")) == NULL){printf("Fail to open the file\n");return -1;}else{cinnum(secret, fp);//从fp文件中把大数赋值给big型变量secretprintf("                                                     秘密读取\n");cotnum(secret, stdout);//打印secret内容//挑选出五个素数,满足严格递增。只需要产生相邻的素数即可。printf("                                                     秘密分割");printf("\n产生的di:\n");bigdig(D_DIGBITS,10, a);//产生一个D_DIGBITS位的10进制随机数ai = 0;while (i != N) {add(a,one, a);//a=a+1if (isprime(a)){ //判断大数a是否为素数,为素数返回TRUE,否则返回FALSEabsol(a, di[i]);//di=|a| cotnum(di[i], stdout);printf("\n");i++;}//of if}//of while//求出子秘密printf("\n产生的子秘密为:\n");for (i = 0; i < N; i++) {ki[i] = mirvar(1);powmod(secret,one, di[i], ki[i]);//模幂运算,ki[i]=secret^1(mod di[i])printf("\n第%d个子秘密k%d为:\n", i + 1,i+1);cotnum(ki[i], stdout);}//of for i//打印N=d1*d2*...*dtfor (i = 0; i < T; i++){multiply(di[i], n, n);}//of for iprintf("\nN的值为:\n");cotnum(n, stdout);//打印M=d(n-t+2)*d(n-t+3)*...*dnfor (i = N-1; i >(N-T); i--){multiply(di[i], m, m);}//of for iprintf("\nM的值为:\n");cotnum(m, stdout);printf("\n");//进行秘密复原zhongguo(secret);}//of ifreturn 0;
}//of main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器基线加固脚本_Linux 基线检查,安全加固脚本

#!/bin/bash# Author:韩伟# Date: 2019-12-29# 实现对用户密码策略的设定&#xff0c;如密码最长有效期等datedate %Y-%m-%dread -p "是否设置密码策略[y/n]:" Yif [ "$Y" "y" ];thenread -p "设置密码最多可多少天不修改&#xff1a;&quo…

前端websocket获取数据后需要存本地吗_是什么让我放弃了Restful API?了解清楚后我全面拥抱GraphQL!...

背景REST作为一种现代网络应用非常流行的软件架构风格&#xff0c;自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性&#xff0c;可扩展性&#xff0c;伸缩性受到广大Web开发者的喜爱。REST 的 API 配合JSON格式的数据交换&#xff…

隐私计算 2.4 Brickell秘密共享方案

1 简介 作者&#xff1a;Brickell&#xff1b;时间&#xff1a;1989年&#xff1b;理念&#xff1a;Shamir秘密共享方案的推广&#xff0c;由一维方程转向多维向量。 2 具体实现 I 秘密分割算法 &#xff08;1&#xff09;首先确定可以掌握钥匙的人数nnn&#xff0c;以及模数…

fabric shim安装合约_智能合约简介_智能合约开发_Hyperledger Fabric_开发指南_区块链服务 BaaS - 阿里云...

概述在 Hyperledger Fabric 中&#xff0c;链码(Chaincode)又称为智能合约(下文中我们统一称为链码)&#xff0c;是用Go&#xff0c;node.js或Java编写的程序&#xff0c;主要用于操作账本上的数据。用户的应用程序通过链码与 Fabric 账本数据进行交互&#xff0c;交互关系如下…

子集和问题 算法_LeetCode刷题实战90:子集 II

算法的重要性&#xff0c;我就不多说了吧&#xff0c;想去大厂&#xff0c;就必须要经过基础知识和业务逻辑面试算法面试。所以&#xff0c;为了提高大家的算法能力&#xff0c;这个公众号后续每天带大家做一道算法题&#xff0c;题目就从LeetCode上面选 &#xff01;今天和大家…

隐私计算 2.5 Blakley秘密共享方案

1 简介 作者&#xff1a;Blakley&#xff1b;时间&#xff1a;1979年&#xff1b;理念&#xff1a;基于高斯消元法。 2 具体实现 I 秘密分割算法 II 秘密重构算法 3 实例 设秘密S(3,10,5)S (3, 10, 5)S(3,10,5)&#xff0c;n5n 5n5, t3t 3t3。 I 秘密分割 &#xff0…

webconfig的解决方案怎么添加_解决在Web.config或App.config中添加自定义配置的方法详解...

解决在Web.config或App.config中添加自定义配置的方法详解本篇文章是对在Web.config或App.config中添加自定义配置的方法进行了详细的分析介绍&#xff0c;需要的朋友参考下.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持…

conda如何升级pytorch_Google Cloud TPUs 支持 Pytorch 框架啦!

在2019年PyTorch开发者大会上&#xff0c;Facebook&#xff0c;Google和Salesforce Research联合宣布启动PyTorch-TPU项目。项目的目标是在保持PyTorch的灵活性的同时让社区尽可能容易地利用云TPU提供的高性能计算。团队创建了PyTorch/XLA这个repo&#xff0c;它可以让使PyTorc…

隐私计算 2.6 秘密共享的同态特性

1 秘密共享的同态性 秘密共享的同态性&#xff1a;秘密份额的组合等价于组合的秘密共享份额。 假设A、B两方分别有秘密SAS^ASA和SBS^BSB&#xff1b;他们的值被随机拆分为S1A,…,SnAS_1^A, \dots, S_n^AS1A​,…,SnA​和S1B,…,SnBS_1^B, \dots, S_n^BS1B​,…,SnB​&#xff…

chromiumwebbrowser 使用_用Tchromium替换webbrowser

用惯了EmbeddedWB,不想换&#xff0c;但是IE内核一直存在内存泄漏问题&#xff0c;没办法&#xff0c;只有寻找替代品了。要把用习惯的EmbeddedWB换成完全不一样的TChromium&#xff0c;有点挑战&#xff0c;特别是在资料不多&#xff0c;英语没过三级的情况下。未来趋势是这样…

python是在linux系统下运行的吗_Linux系统下python代码运行shell命令的方法

方法一&#xff1a;os.popen #!/usr/bin/python#-*- coding: UTF-8 -*- importos, sys#使用 mkdir 命令 a lsb os.popen(a,w,1)print b 方法二&#xff1a;os.system #!/usr/bin/python#-*- coding: UTF-8 -*- importos, sys arg0"121.429015"arg1"31.245255&q…

隐私计算 2.7 Shamir门限秘密共享的加法同态性

1 Shamir门限秘密共享的加法同态性 Shamir门限秘密共享方案具有(,)(, )(,)同态的性质&#xff0c;即&#xff1a; SASBFI(S1A,…,StA)FI(S1B,…,StB)FI(S1AS1B,…,StAStB)\begin{array}{l} S^A S^B && F_I(S_1^A, \dots, S_t^A) F_I(S_1^B, \dots, S_t^B)\\ &&a…

pageable设置size_分页工具一Pageable与Page

import org.springframework.data.domain.Pageable;import org.springframework.data.domain.Page;1.Pageable概述Page findByAge(int age, Pageable pageable);Pageable 是Spring Data库中定义的一个接口&#xff0c;用于构造翻页查询&#xff0c;是所有分页相关信息的一个抽象…

二阶龙格库塔公式推导_带你走进最美数学公式

同学们&#xff0c;我们先来跟老师欣赏一下数学中最优美的式子吧&#xff1f;是什么魔力让以上几个似乎毫不相干的数学中最特殊的数字能如此优美的写在同一个式子呢&#xff1f;是欧拉&#xff0c;是数学。0和1——老师就不用介绍啦&#xff0c;e是自然常数(natural constant)&…

python如何做辅助线_角平分线如何做辅助线,学霸总结了4种模型,轻松应付中考...

角平分线2大辅助线思路4种基本模型对称形思路包括3种基本模型&#xff0c;思想都是为了构造全等三角形&#xff0c;然后转换图像中的角度和线段关系。平行线思路则是为了构造一个等腰三角形&#xff0c;通常是为了转移线段关系。双角平分线夹角公式记住这个结论&#xff0c;在选…

隐私计算 2.8 Shamir门限秘密共享的乘法同态性

1 Shamir门限秘密共享的乘法同态性 Shamir门限秘密共享方案具有(,)(\times, \times)(,)同态的性质&#xff0c;即&#xff1a; SASBFI(S1A,…,StA)FI(S1B,…,StB)FI(S1A⊗S1B,…,StA⊗StB)\begin{array}{l} S^A \times S^B && F_I(S_1^A, \dots, S_t^A) \times F_I(S_…

备份数据库的expdp语句_【ORACLE语句备份】数据库表同步 ——定时任务管理器(EXPDP导出,IMPDP导入)...

1、C:\Users\Administrator>sqlplus sys/xxxxxx as sysdba;2、SQL> create directory dbbak4 as e:\app\temp4;3、SQL> grant read,write on directory dbbak4 to xxx;--xxx:源数据库用户名4、SQL> exit;5、备注&#xff1a;还需手动创建目录&#xff0c;否则报错C…

python的setting怎么找_django项目的配置文件settings.py详解

1.2.1 ABSOLUTE_URL_OVERRIDES&#xff1a;默认值:{} 一个字典映射“app_label_module_name”字符串到一个函数&#xff0c;该函数接收一个Model对象作为参数并返回它的url&#xff0c;这是一个安装上覆盖get_absolute_url()方法的方式 1.2.2 ADMIN_FOR&#xff1a;默认值&…

隐私计算 2.9 秘密共享应用于横向联邦学习

1 简介 1.1 横向联邦学习 横向联邦学习也称为按样本划分的联邦学习&#xff0c;主要应用于各个参与方的数据集有相同的特征空间和不同的样本空间的场景&#xff0c;例如两个地区的城市商业银行可能在各自的地区拥有非常不同的客户群体&#xff0c;所以他们的客户交集非常小&a…

array js 二分法_JS常见的算法

虽说我们很多时候前端很少有机会接触到算法。大多都交互性的操作&#xff0c;然而从各大公司面试来看&#xff0c;算法依旧是考察的一方面。实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的。如果将来当我们面对较为复杂的问题&#xff0c;这些基础知识的积累…