秘密共享方案-中国剩余定理
文章目录
- 题目
- 环境
- 方案设计
- 背景
- 原理
- 算法步骤
- 方案实现
- 流程图
- 主要函数
- C代码
- 测试
- 注意问题
- 说明
题目
一个秘密?,被分割成?个子秘密(??,??),从?个子秘密(??,??)中任意选择大于等于?个,能够恢复出秘密?,少于t个则不能恢复出秘密?。
环境
Windows10,MinGW-W64-builds-4.3.5,miracl 7.0.1
方案设计
背景
中国剩余定理
原理
- (?,?)门限,一个秘密?,被分割成?个子秘密 (??,??)
对于某个秘密 ?,计算
{k1≡k(modd1)k2≡k(modd2)kn≡k(moddk)\begin{cases} k_1 ≡ k (mod \, d1) \\ k_2≡ k (mod \, d2)\\\\\\ k_n ≡ k (mod \, dk) \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧k1≡k(modd1)k2≡k(modd2)kn≡k(moddk)则子秘密为 (??,??)
要求一: 选择?个整数??,??,⋯,??,满足
(1)?? < ?? < ⋯ < ??;
(2) (??,??) = ?,? ≠ ?;
(3)? = ??×?? ×⋯×??
? = ??−?+? ×??−?+? ×⋯×??,有? > ?
要求二: ? > ? > ?
- ?个子秘密中任意选择?个,(???,???), (???,???),⋯, (???,???),恢复出秘密 ?,计算{ki1≡k(moddi1)ki2≡k(moddi2)kit≡k(moddit)\begin{cases} k_{i1} ≡ k (mod \, di1) \\ k_{i2}≡ k (mod \, di2)\\\\\\ k_{it} ≡ k (mod \, dit) \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧ki1≡k(moddi1)ki2≡k(moddi2)kit≡k(moddit)恢复出秘密 ? ≡ ? ??? ??,?? = ??? ⋯???。
任意选择?−? 个子秘密不能恢复出秘密:(???,???), (???,???), ⋯, (???−?,???−?)
? ≡ ? ???? ,?? = ?????? ⋯???−?
N1> N > k > M > M1
算法步骤
(3,5)门限,一个秘密?,被分割成5个子秘密 (??,??)。
- 随机生成300 bits的大整数K
- 在2300/3和2300/(5-3)之间取5个素数作为di,?? < ?? < ?3 < ?4< ?5
- 计算 ? = ?? ×?? ×?3 ,? = ?4 ×?5
- 计算 ki ≡ K (??? di)
- 恢复:随机选择3个di,利用中国剩余定理计算x {ki1≡k(moddi1)ki2≡k(moddi2)kit≡k(moddit)\begin{cases} k_{i1} ≡ k (mod \, di1) \\ k_{i2}≡ k (mod \, di2)\\\\\\ k_{it} ≡ k (mod \, dit) \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧ki1≡k(moddi1)ki2≡k(moddi2)kit≡k(moddit)? ≡ ? ???? ,?? = ?????? ⋯???。
- 比较x与K是否相等。
方案实现
流程图
主要函数
- bigdig(int b, int t,big w) 生成b位t进制的大数w
- expint(int t, int b, big z)求z=tb
- isprime(big v)判断v是否素数
- incr(big v, int t, big w)计算w = v + t
- mr_compare(big a, big b),如果a>b,函数返回值为1;如果a=b,函数返回值为0;如果a<b,函数返回值为-1;
- fft_mult(big x, big y, big z) z=x*y
- divide(big x, big y, big z) z=x/y;如果y==z,x=x mod y
C代码
#include"miracl.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define T 3
#define S 5
#define RCV 3
#define OFFSET 7
#define BITS 300int main(void)
{miracl *mip = mirsys(1000,16);int i = 0, j = 0, seed[RCV];big K, k[S], d[S], N, M, v;big D[S], D_1[S], n, x;K = mirvar(0); N = mirvar(1); M = mirvar(1);v = mirvar(1); n = mirvar(1); x = mirvar(0);for (i = 0; i < S; i++) {k[i] = mirvar(0); d[i] = mirvar(0);D_1[i] = mirvar(0); D[i] = mirvar(0);}irand(time(NULL));puts("secret K:");//generate K// bigdig(BITS, 10, K);bigbits(BITS, K); cotnum(K, stdout);// expint(10, BITS/T + OFFSET, v);expb2(BITS/T + OFFSET, v); incr(v,1,v); // find 5 d[i]for (i = 0; i < S; i++) {while (1) {incr(v, 2, v);if (isprime(v)) {printf("d[%d]: ",i);cotnum(v, stdout);copy(v, d[i]);break;}}}puts("N: ");for (i = 0; i < T; i++) {fft_mult(d[i], N, N);} cotnum(N, stdout);puts("M: ");for (i=1; i < T ; i++) {fft_mult(d[S-i], M, M);} cotnum(M, stdout);for (i = 0; i < S; i++) { //compute k[i]copy(K, k[i]);divide(k[i], d[i], d[i]);printf("k[%d]: ",i);cotnum(k[i], stdout);}srand(time(NULL));//generate RCV random differente numbersfor (i = 0; i < RCV; i++) {seed[i] = rand() % S; do {for (j = 0; j < i; j++) {if (seed[i] == seed[j]) break;}if (i != j) {seed[i] = rand() % S; }else {break;}}while(1);} // chinese remainder theory recover Kfor (i = 0; i < RCV; i++) {fft_mult(n, d[seed[i]], n);} printf("\nchoose %d k:\n", RCV);for (i = 0; i < RCV; i++) {printf("k[%d]:",seed[i]); cotnum(k[seed[i]], stdout);copy(n, v);divide(v, d[seed[i]], D[seed[i]]);invmodp(D[seed[i]],d[seed[i]],D_1[seed[i]]);fft_mult(k[seed[i]], D[seed[i]], d[seed[i]]);fft_mult(d[seed[i]], D_1[seed[i]], d[seed[i]]);divide(d[seed[i]], n, n);add(d[seed[i]], x, x);}divide(x, n, n);putchar('\n'); printf("x= "); cotnum(x, stdout); printf("K= "); cotnum(K, stdout);!mr_compare(x, K)?puts("x == K"):puts("x != K");mirexit();return 0;
}
测试
2.
注意问题
因为要求选择?个整数??,??,⋯,??,满足 ?个最小的??的乘 积严格大于?−? 个最大的??的乘积且? > ? > ?,又由于k是300位的数所以di应该在100到150位之间。在100到150位之间取5个素数即可满足条件。
说明
课程作业,仅作记录
秘密共享方案-中国剩余定理相关推荐
- 秘密共享方案介绍SS
秘密共享 概念 Shamir秘密共享方案 秘密拆分 秘密恢复 补充 网页参考链接 概念 问题1:保险柜中存放有10个人的共有财产,要从保险柜中取出物品,必须有半数以上的人在场才可取出,半数以下则不行. ...
- 基于中国剩余定理的(t, n)门限秘密共享方案
基于中国剩余定理的(t, n)门限秘密共享方案 目录 实验目的 实验环境 实现目标 方案设计 背景 实验原理 算法步骤 方案实现 流程图 主要函数介绍 主要代码 数据分析 数据1 数据1运行结果 数据 ...
- 基于Miracl库的中国剩余定理C语言实现
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/tch3430493902/articl ...
- 信息安全基础综合实验-中国剩余定理
最近没有什么事情,打算把之前的作业整理一下发出来,有需要的学弟学妹们可以参考一下. 相关:某电的密码学实验,信安专业必选实验 实验题目:中国剩余定理 实验目的 (包括实验环境.实现目标等等) 实验环境 ...
- 中国剩余定理matlab程序,中国剩余定理即孙子定理的五种解法
中国剩余定理即孙子定理的五种解法 -- 学习初等数论心得笔记 2013-10-04 博文2015-12修改 "中国剩余定理"是公元5-6世纪.我国南北朝时期的一部著名算术著作< ...
- CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...
- 初等数论--同余方程--同余方程组:中国剩余定理
初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...
- 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法
打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...
- 信奥中的数学:孙子定理 中国剩余定理
孙子定理 中国剩余定理 孙子定理 中国剩余定理_Dreamer Thinker Doer-CSDN博客 中国剩余问题(简介+详解) 中国剩余问题(简介+详解)_dreamzuora的博客-CSDN博客 ...
最新文章
- 移动端省际联动插件mobiscroll
- 2019年猪年海报PSD模板-第四部分
- 导购的路上,媒体向左,社区向右
- sql server 2012远程链接的方法及步骤
- oracle销售服务器吗,oracle 服务器 版本
- FileZilla软件下载使用简易教程
- quartz获取缓存中所有运行中的Job
- openstack初探
- 小心那些年末还在努力的狠人!
- 组件化开发Android应用及SDK
- 32岁了,我有机会转行做程序员吗?——Leo网上答疑(1)
- 开放源代码不得不知的一些事情
- 管理系统中计算机er图怎么画,使用PowerDesigner绘制ER图的详细教程
- msys2+mingw64+ragel安装
- 企业微信4.0:上下游功能上线,用一款APP连接所有企业组织和用户
- 学生上课睡觉班主任怎么处理_学生上课睡觉,老师该怎么处理? | 实操课103
- python web 开发从入门到精通 pdf_Python Web开发从入门到精通
- 使用jq来封装一个瀑布流插件
- [usaco3.2.4]ratios
- 银联进件渠道教程-云闪付收银台最新方法(可对接易支付)
热门文章
- 7.3结构体是纸老虎,旧知识新用法
- App Store审核条款(2016.06.21更新)
- 实习之家 - 专注于实习生招聘的平台。找实习职位,发布实习信息,就上实习之家!...
- void* shu_zu_ming[n][m] 传参的函数定义写法 【C++】
- wps中删除我的设备(已经不使用的)
- 【Scrum】守、破、离(shu ha ri)
- 递归组件(简单介绍)
- Python入门之元组-元组的定义和操作
- 如何删除无效的网络驱动器
- uniapp 固定首行和固定列的表格