首页 > 编程语言 >基于拉格朗日插值多项式的Shamir's Secret Sharing 加密算法

基于拉格朗日插值多项式的Shamir's Secret Sharing 加密算法

时间:2024-10-19 10:19:10浏览次数:3  
标签:Sharing 多项式 秘密 Secret 加密算法 Shamir 参与者 密钥

Shamir's Secret Sharing 是一种加密算法,由 Adi Shamir 于 1979 年提出,旨在将一个秘密(如密码、密钥等)分割成多个部分,并分发给不同的参与者。只有当足够数量的参与者(大于等于一个特定的阈值)将他们的份额组合在一起时,秘密才能恢复。少于阈值数量的参与者无法得到任何有用的信息。

核心思想

Shamir's Secret Sharing 基于拉格朗日插值多项式。它通过将秘密嵌入多项式的常数项,然后生成该多项式的多个点,这些点分别分发给参与者。

工作原理:
  1. 设定秘密:设一个秘密 \(S\)。
  2. 定义阈值 \(t\):定义一个阈值 \(t\),即恢复秘密所需的最少参与者数。
  3. 生成多项式:选择一个度为 \(t-1\) 的随机多项式 \(f(x)\),其中常数项 \(f(0) = S\)(即秘密),其余系数为随机生成。 \[ f(x) = a_0 + a_1x + a_2x^2 + \dots + a_{t-1}x^{t-1} \] 其中,\(a_0 = S\)。
  4. 分发份额:计算多项式在不同点的值,如 \(f(1), f(2), \dots, f(n)\),并将这些值作为份额分发给参与者。
  5. 恢复秘密:如果有至少 \(t\) 个份额,可以通过拉格朗日插值恢复多项式 \(f(x)\),并计算 \(f(0)\),从而恢复秘密。

举例:

假设你有一个秘密 \(S = 1234\),你希望至少 3 个人联合起来才能恢复秘密(即 \(t=3\))。你可以生成如下随机二次多项式: \[ f(x) = 1234 + 166x + 94x^2 \] 然后计算该多项式在不同点的值,例如 \(f(1)\), \(f(2)\), \(f(3)\) 分别为每个参与者的份额。只有至少 3 个参与者将他们的份额组合在一起,才能通过插值得到原来的多项式并恢复秘密。

应用场景

  • 密钥管理:Shamir's Secret Sharing 可以用来分发和管理密钥,确保密钥只有在满足一定条件(如一定数量的参与者同意)时才能被恢复。
  • 分布式系统:在分布式系统中,可以通过分发密钥片段来保护重要数据,防止单点故障或单个节点被攻破导致的密钥泄露。
  • 加密投票系统:确保投票秘密只有在满足某个条件(例如,超过一定数量的选民)后才能被揭示。

这种算法非常安全且可靠,广泛应用于各种需要高安全性的场景。

标签:Sharing,多项式,秘密,Secret,加密算法,Shamir,参与者,密钥
From: https://blog.51cto.com/yingnanxuezi/12301885

相关文章

  • 洛谷题单指南-字符串-P2922 [USACO08DEC] Secret Message G
    原题链接:https://www.luogu.com.cn/problem/P2922题意解读:已知M个01串,给出N个01串,对于N个串的每一个,求在M个串中有多少与其有公共前缀,且前缀长度是两个串中较小者。解题思路:用Trie树存储M个01串,用cnt1[]记录某个节点结束的01串个数,cnt2[]记录经过某个节点的01串的数量对于N个0......
  • 【Azure Cloud Service】使用Key Vault Secret添加.CER证书到Cloud Service Extended
    问题描述因为KeyVault的证书上传功能中,只支持pfx格式的证书,而中间证书,根证书不能转换为pfx格式,只能是公钥证书格式cet或者crt,能通过文本工具直接查看base64编码内容。如一个证书链文件中可以看见中间证书,根证书: 当把包含完成证书链的证书PFX上传到KeyVaultcertificate......
  • 【php加密算法】加密算法举例
    原创php中文网课程PHP是一种广泛使用的服务器端脚本语言,用于开发动态网页和应用程序。在PHP中,加密算法是保护数据安全和隐私的重要组成部分。PHP提供了多种加密算法,用于加密和解密数据。本文将介绍一些常用的PHP加密算法。MD5算法:MD5(MessageDigestAlgorithm5)是一种广泛使......
  • 【HITCON-Training】Lab 12 - SecretGarden
    学习于2024-10-0122:00:17星期二心得感想:这次真的把我整笑了,现在是10/2的晚上23点,我都不敢想象自己弄了多久(整整两天国庆的下午......
  • 全同态加密算法概览
    我们前面有谈到《Paillier半同态加密算法》,半同态加密算法除了支持密文加法运算的Paillier算法,还有支持密文乘法计算的RSA算法,早期的PSI(隐私求交)和PIR(匿踪查询)都有使用基于RSA盲签名技术来实现。今天我们来谈谈能够有效支持任意函数密文计算的全同态加密算法(fully......
  • Python中Sha加密算法
    '''DES:Python3.x中的加密在python3的标准库中,已经移除了md5,而关于hash加密算法都放在hashlib这个标准库中,hashlib模块就包括了SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。通常我们的加密,都是对二进制编码的格式进行加密的;而在Python中,使用的是Bytes......
  • 使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    跨各种环境管理api密钥、令牌和凭证等敏感数据可能非常棘手,尤其是在开发和部署应用程序时。确保秘密在需要时安全地存储和获取,而不是将它们硬编码到版本控制中,对于维护安全性至关重要。这就是我创建secretsloader的原因,这是一个bash脚本,可以动态地将awsssm和cloudforma......
  • 使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    跨各种环境管理api密钥、令牌和凭证等敏感数据可能非常棘手,尤其是在开发和部署应用程序时。确保秘密在需要时安全地存储和获取,而不是将它们硬编码到版本控制中,对于维护安全性至关重要。这就是我创建secretsloader的原因,这是一个bash脚本,可以动态地将awsssm和cloudform......
  • 【加密算法基础——AES解密实践】
    AES解密实践AES解密是对使用AES加密算法加密的数据进行恢复的过程。常用的解密方式有三种:在线解密工具:格式比较好控制,但是有些在线工具兼容性不好,有时候无法解出,不知道是自己的密文密钥没找对,还是因为未知原因,比较难判断。而且无法处理key的截断问题。命令行解密:Open......
  • 【加密算法基础——AES CBC模式代码解密实践】
    AES解密实践之代码实现AES解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。实际测试了一下,CBC模式,对于key截断的问题可以解决,但是CFB模式,目前还无法实验......