信息安全基础与密码学综合实验(三)——基于中国剩余定理的秘密共享方案
实验目的(包括实验环境、实现目标等等)
实验环境:
- Window11
- Visual Studio Code v1.105.0
- python v3.12.0a7
实现目标:
实现基于中国剩余定理的$(t, n)$门限秘密共享算法并完成对测试数据的测试与分析。
方案设计(包括背景、原理、必要的公式、图表、算法步骤等等)
背景:
1983年,ASMUTH和BLOOM提出基于中国剩余定理的$(t,n)$门限秘密共享方案,该方案可将一个秘密拆分为n个子秘密,满足特定恢复条件即可恢复秘密,广泛应用于信息安全领域的秘密分发与保护场景。
原理:
(t,n)门限密码共享方案:
将秘密k分成n个子秘密$k₁, k₂, …, kₙ$,满足下面两个条件:
(1) 如果已知任意t个$kᵢ$值,易于恢复出k;
(2) 如果已知任意t-1个或更少个$kᵢ$值,不能恢复出$k$。
公式:
秘密分割:
$(t,n)$门限,选择n个整数$d₁, d₂,⋯, dₙ$,满足:
(1) $d₁
对于某个秘密k,要求$N>k>M$,计算:
则子秘密为$(dᵢ, kᵢ)$。
秘密恢复:
n个子秘密$(dᵢ, kᵢ)$中任意选择t个:$(dᵢ₁, kᵢ₁),(dᵢ₂, kᵢ₂),⋯,(dᵢₜ, kᵢₜ)$
基于中国剩余定理计算下列一次同余方程组:
恢复出秘密$x≡k\pmod{N₁},N₁=dᵢ₁dᵢ₂⋯dᵢₜ$。
算法步骤:
- 读入文件中500位左右的大整数,作为秘密k;
- 输入t和n的值;
- 随机生成5个互素的d值;
- 计算N、M值并完成条件验证;
- 输出中间数据的值;
- 计算子秘密的值;
- 任选2组子秘密,利用中国剩余定理进行恢复;
- 将原秘密与恢复得到的相比,分析是否恢复正确。
方案实现(包括算法流程图、主要函数的介绍、算法实现的主要代码等等)
算法流程图:

主要函数的介绍:
(1)read_secret()
- 功能:读取500位大整数秘密文件(secret1.txt);
- 输入:文件路径;
- 输出:字符串格式的原始秘密k(转为Python大整数类型用于计算)。
(2)generate_d(t,n)
- 功能:生成n个互质的大整数$d₁~dₙ$,范围$10¹⁶⁷到10¹⁶⁸$;
- 输入:t和n的值;
- 输出:排序后的d列表($d₁<d₂<…<dₙ$)。
(3)check_d_conditions(d_list,k,t,n)
- 功能:验证d列表是否满足N>M且N>k>M;
- 输入:d列表、原始秘密k、t、n;
- 输出:布尔值(满足条件返回True,否则返回False)。
(4)split_secret(k,d_list,t,n)
- 功能:拆分秘密为n个子秘密;
- 输入:原始秘密k、d列表、t、n;
- 输出:子秘密列表(每个元素为(d_i,k_i)元组)。
(5)chinese_remainder_theorem(remainders,moduli)
- 功能:求解同余方程组x≡remainders[i] (mod moduli[i]);
- 输入:余数列表(k_i)、模数列表(d_i);
- 输出:方程组的解x(大整数)。
(6)recover_secret(secret_parts,k_original,t)
- 功能:根据输入的子秘密恢复原始秘密并验证;
- 输入:子秘密集合、原始秘密k、t;
- 输出:恢复结果、是否匹配的标记。
算法实现的主要代码:
1 | import random |
数据分析(包括算法测试数据的分析,运行结果截图等等)
测试数据分析:
选取secret1进行测试,测试参数:t=3,n=5,原始秘密k为500位大整数
53823875121815031555991041726961963027167497087379606444752695810921446308620440784282908764903404381700859802589128088582231023318257395900650579969430836361568310072045989148202938122332018094970612150023975385103662839669401286231859032076966069321281804566076496995671875391401767723508755290586711966288915719170263680685765819809015089246767200303041035239107653221933068989117389227123695590846277200135849802429057524011609755858115850472691720432153190744237874436679626434222385571795646340
运行结果:

思考与总结
在基于中国剩余定理的(t, n)秘密共享方案中,少于t个子秘密,是否能够正确恢复出秘密?请简述原因。
答:不能正确恢复出密码,当使用$s(s≤t-1)$个子秘密恢复时,对应的模数乘积$Nₛ=dᵢ₁×…×dᵢₛ$,因$s<t$,$Nₛ≤dₙ₋ₜ₊₁×…×dₙ≤M<k$,即$Nₛ<k$不满足限制条件。
实验过程中还遇到了什么问题,如何解决的?通过该实验有何收获?
答:通过实验实现了基于中国剩余定理的(t,n)门限秘密共享方案,不仅深化了对该方案“秘密分割-恢复”流程、中国剩余定理作用及“t个子秘密可恢复、t-1个及以下不可恢复”核心逻辑的理解,巩固了互质、模运算等密码学基础。





