Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何保护你的主密码

如何保护你的主密码

作者头像
用户1880875
修改于 2021-09-15 09:33:59
修改于 2021-09-15 09:33:59
48100
代码可运行
举报
运行总次数:0
代码可运行

很多人使用密码管理器来保密存储自己在用的各种密码。密码管理器的关键环节之一是主密码,主密码保护着所有其它密码。这种情况下,主密码本身就是风险所在。任何知道你的主密码的人,都可以视你的密码保护若无物,畅行无阻。自然而然,为了保证主密码的安全性,你会选用很难想到的密码,把它牢记在脑子里,并做所有其他你应该做的事情。

但是万一主密码泄露了或者忘记了,后果是什么?也许你去了个心仪的岛上旅行上个把月,没有现代技术覆盖,在开心戏水之后享用美味菠萝的时刻,突然记不清自己的密码是什么了。是“山巅一寺一壶酒”?还是“一去二三里,烟村四五家”?反正当时选密码的时候感觉浑身都是机灵,现在则后悔当初何必作茧自缚。

当然,你不会把自己的主密码告诉其它任何人,因为这是密码管理的首要原则。有没有其它变通的办法,免除这种难以承受的密码之重?

试试 Shamir 秘密共享算法(Shamir's Secret Sharing),这是一种可以将保密内容进行分块保存,且只能将片段拼合才能恢复保密内容的算法。

先分别通过一个古代的和一个现代的故事,看看 Shamir 秘密共享算法究竟是怎么回事吧。

这些故事的隐含前提是你对密码学有起码的了解,必要的话,你可以先温习一下 密码学与公钥基础设施引论.

一个古代关于加解密的故事

古代某国,国王有个大秘密,很大很大的秘密:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def int_from_bytes(s):
    acc = 0
    for b in s:
        acc = acc * 256
        acc += b
    return acc

secret = int_from_bytes("terrible secret".encode("utf-8"))

大到连他自己的孩子都不能轻易信任。他有五个子女,但他知道前路危机重重。他的孩子需要在他百年之后用这个秘密来保卫国家,而国王又不能忍受自己的孩子在他们还记得自己的时候就知道这些秘密,尤其是这种状态可能要持续几十年。

所以,国王动用大力魔术,将这个秘密分为了五个部分。他知道,可能有一两个孩子不会遵从他的遗嘱,但绝对不会同时有三个或三个以上会这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from mod import Mod
from os import urandom

国王精通 有限域随机 魔法,当然,对他来说,使用巨蟒分割这个秘密也是小菜一碟。

第一步是选择一个大质数——第 13 个 梅森质数2**521 - 1),他让人把这个数铸造在巨鼎上,摆放在大殿上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
P = 2**521 - 1

但这不是要保密的秘密:这只是 公开数据

国王知道,如果 P 是一个质数,用 P 对数字取模,就形成了一个数学 :在场中可以自由进行加、减、乘、除运算。当然,做除法运算时,除数不能为 0。

国王日理万机,方便起见,他在做模运算时使用了 PyPI 中的 mod 模块,这个模块实现了各种模数运算算法。

他确认过,自己的秘密比 P 要短:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
secret < P
TRUE

将秘密转换为 P 的模,mod P

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
secret = mod.Mod(secret, P)

为了使任意三个孩子掌握的片段就可以重建这个秘密,他还得生成另外两个部分,并混杂到一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
polynomial = [secret]
for i in range(2):
    polynomial.append(Mod(int_from_bytes(urandom(16)), P))
len(polynomial)
3

下一步就是在随机选择的点上计算某 多项式 的值,即计算 polynomial[0] + polynomial[1]*x + polynomial[2]*x**2 ...

虽然有第三方模块可以计算多项式的值,但那并不是针对有限域内的运算的,所以,国王还得亲自操刀,写出计算多项式的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def evaluate(coefficients, x):
    acc = 0
    power = 1
    for c in coefficients:
        acc += c * power
        power *= x
    return acc

再下一步,国王选择五个不同的点,计算多项式的值,并分别交给五个孩子,让他们各自保存一份:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shards = {}
for i in range(5):
    x = Mod(int_from_bytes(urandom(16)), P)
    y = evaluate(polynomial, x)
    shards[i] = (x, y)

正如国王所虑,不是每个孩子都正直守信。其中有两个孩子,在他尸骨未寒的时候,就想从自己掌握的秘密片段中窥出些什么,但穷极所能,终无所获。另外三个孩子听说了这个事,合力将这两人永远驱逐:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
del shards[2]
del shards[3]

二十年弹指一挥间,奉先王遗命,三个孩子将合力恢复出先王的大秘密。他们将各自的秘密片段拼合在一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
retrieved = list(shards.values())

然后是 40 天没日没夜的苦干。这是个大工程,他们虽然都懂些 Python,但都不如前国王精通。

最终,揭示秘密的时刻到了。

用于反算秘密的代码基于 拉格朗日差值,它利用多项式在 n 个非 0 位置的值,来计算其在 0 处的值。前面的 n 指的是多项式的阶数。这个过程的原理是,可以为一个多项式找到一个显示方程,使其满足:其在 t[0] 处的值是 1,在 i 不为 0 的时候,其在 t[i] 处的值是 0。因多项式值的计算属于线性运算,需要计算 这些 多项式各自的值,并使用多项式的值进行插值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from functools import reduce
from operator import mul

def retrieve_original(secrets):
    x_s = [s[0] for s in secrets]
    acc = Mod(0, P)
    for i in range(len(secrets)):
        others = list(x_s)
        cur = others.pop(i)
        factor = Mod(1, P)
        for el in others:
            factor *= el * (el - cur).inverse()
        acc += factor * secrets[i][1]
    return acc

这代码是在太复杂了,40 天能算出结果已经够快了。雪上加霜的是,他们只能利用五个秘密片段中的三个来完成这个运算,这让他们万分紧张:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
retrieved_secret = retrieve_original(retrieved)

后事如何?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
retrieved_secret == secret
TRUE

数学这个魔术的优美之处就在于它每一次都是那么靠谱,无一例外。国王的孩子们,曾经的孩童,而今已是壮年,足以理解先王的初衷,并以先王的锦囊妙计保卫了国家,并继之以繁荣昌盛!

关于 Shamir 秘密共享算法的现代故事

现代,很多人都对类似的大秘密苦不堪言:密码管理器的主密码!几乎没有谁能有足够信任的人去完全托付自己最深的秘密,好消息是,找到至少有三个不会串通起来搞鬼的五人组不是个太困难的事。

同样是在现代,比较幸运的是,我们不必再像国王那样自己动手分割要守护的秘密。拜现代 开源 技术所赐,这都可以使用现成的软件完成。

假设你有五个不敢完全信任,但还可以有点信任的人:张三、李四、王五、赵六和钱大麻子。

安装并运行 ssss 分割密钥:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ echo 'long legs travel fast' | ssss-split -t 3 -n 5
Generating shares using a (3,5) scheme with dynamic security level.
Enter the secret, at most 128 ASCII characters: Using a 168 bit security level.
1-797842b76d80771f04972feb31c66f3927e7183609
2-947925f2fbc23dc9bca950ef613da7a4e42dc1c296
3-14647bdfc4e6596e0dbb0aa6ab839b195c9d15906d
4-97c77a805cd3d3a30bff7841f3158ea841cd41a611
5-17da24ad63f7b704baed220839abb215f97d95f4f8

这确实是个非常牛的主密码:long legs travel fast,绝不能把它完整的托付给任何人!那就把五个片段分别交给还比较可靠的伙伴,张三、李四、王五、赵六和钱大麻子。

  • 1 给张三。
  • 2 给李四。
  • 3 给王五。
  • 4 给赵六。
  • 5 给钱大麻子。

然后,你开启你的惬意之旅,整整一个月,流连于海边温暖的沙滩,整整一个月,没碰过任何电子设备。没用多久,把自己的主密码忘到了九霄云外。

李四和王五也在和你一起旅行,你托付给他们保管的密钥片段保存的好好的,在他们各自的密码管理器中,但不幸的是,他们和你一样,也忘了自己的 主密码

没关系。

联系张三,他保管的密钥片段是 1-797842b76d80771f04972feb31c66f3927e7183609;赵六,一直替你的班,很高兴你能尽快重返岗位,把自己掌握的片段给了你,4-97c77a805cd3d3a30bff7841f3158ea841cd41a611;钱大麻子,收到你给的跑腿费才将自己保管的片段翻出来发给你,5-17da24ad63f7b704baed220839abb215f97d95f4f8

有了这三个密钥片段,运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ssss-combine -t 3
Enter 3 shares separated by newlines:
Share [1/3]: 1-797842b76d80771f04972feb31c66f3927e7183609
Share [2/3]: 4-97c77a805cd3d3a30bff7841f3158ea841cd41a611
Share [3/3]: 5-17da24ad63f7b704baed220839abb215f97d95f4f8
Resulting secret: long legs travel fast

就这么简单,有了 开源 技术加持,你也可以活的像国王一样滋润!

自己的安全不是自己一个人的事

密码管理是当今网络生活必备技能,当然要选择复杂的密码,来保证安全性,但这不是全部。来用 Shamir 秘密共享算法,和他人共同安全的存储你的密码吧。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
若通过验证可颠覆美国后量子密码设计,清华陈一镭预印论文破解格密码
在计算机领域,解决格上的近似最短向量问题(Approximate Shortest Vector Problems in Lattices。Lattice Problems)以及与之等价的容错学习问题(Learning with Errors,LWE)是经典的算法难题,科学界普遍认为它们超出了传统计算机的能力范围。
机器之心
2024/04/12
1360
若通过验证可颠覆美国后量子密码设计,清华陈一镭预印论文破解格密码
秘密共享—隐私计算和区块链共识中的榫卯
2018年5月正式生效的GDPR是欧盟“史上最严”条例,是数十年来数据安全和数据隐私法规方面最重要的一次变化。随后,2019年生效的加州CCPA,对个人数据及信息保护提出了严格的界定和保护要求。至此,GDPR和CCPA对欧美国家在数据安全和隐私行业的立法产生了持续的影响。在我国,2021年6月10日,中华人民共和国第十三届全国人民代表大会常务委员会第二十九次会议正式表决通过了《中华人民共和国数据安全法》。历经三次审议和修改通过的《数据安全法》将于2021年9月1日正式施行。在数据安全和隐私保护方面,企业合规性是一个迫在眉睫的事情。
绿盟科技研究通讯
2021/09/06
3.9K0
密码学[2]:群 环 域
一个集合 G 和该集合上的某种二元运算。群 G 中的两个元素通过某种二元运算可得到该群中的另一个元素。群要满足一些性质,比如交换律、结合律、元素存在逆等。
谛听
2023/10/18
8200
《深入浅出密码学》——读书笔记(更新中)
h1 { text-align: center } h2 { text-align: center } .picture { text-align: center } thead th, tfoot th { text-align: left; background: grey; color: white } tbody th { text-align: left; background: Gainsboro; color:white }
Homqyy
2023/03/06
1K0
《深入浅出密码学》——读书笔记(更新中)
密码学原理与实践笔记 - wuuconix's blog
移位密码。和凯撒密码原理类似。只不过移动的key不是3而可以是0~25中的任何值。所以Caesar Cipher是Shift Cipher的一种特例。
wuuconix
2023/03/13
9670
密码学原理与实践笔记 - wuuconix's blog
详解零知识证明的四大基础技术,如何与以太坊发生反应
雷锋网按:原文标题为《zkSNARKs in a nutshell》,作者是以太坊智能合约语言Solidity的发明人Christian Reitwiessner。译者杨文涛,授权转载自作者知乎专栏。 摘要: zkSNARKs(zero-knowledge succint non-interactive arguments of knowledge)的成功实现让我们印象深刻,因为你可以在不执行,甚至在不知道执行具体内容的情况下确定某个计算的结果是否正确——而你唯一知道的信息就是它正确地完成了。但是不幸的是,
企鹅号小编
2018/01/22
1.6K0
详解零知识证明的四大基础技术,如何与以太坊发生反应
椭圆曲线加密与NSA后门考古
本文主要介绍椭圆曲线的基本原理以及基于椭圆曲线的密码学实现,包括ECC加密、ECDH秘钥交换以及ECDSA签名算法,并介绍其中潜在的一些安全问题。其中分析了两个ECC实现相关的真实案例,分别是索尼PS3的签名问题和美国国家安全局NSA留下的椭圆曲线后门。
evilpan
2023/02/12
1.3K0
椭圆曲线加密与NSA后门考古
不可区分混淆被实现,计算机科学家摘得这颗密码学「皇冠上的明珠」
机器之心报道 编辑:魔王、小舟 iO(Indistinguishability Obfuscation,不可区分混淆)是密码学中黑科技一样的存在,但很多人认为它并不存在。最近,一些研究人员提出了新的 iO 协议。 2018 年,加州大学洛杉矶分校博士生 Aayush Jain 前往日本演讲,介绍他和同事正在开发的一款强大的加密工具。在他陈述团队在 iO 方面的努力时,有观众提问:「我认为 iO 不存在。」 当时,这种看法较为普遍。如果 iO 确实存在,它不仅可以隐藏数据集合,还可以隐藏计算机程序的内部工作机
机器之心
2023/03/29
4360
不可区分混淆被实现,计算机科学家摘得这颗密码学「皇冠上的明珠」
开源密码存储引擎 Vault 的安装与使用
vault 是一款 HCP 推出的密钥管理引擎,用来集中存储集群运行过程中所需要的秘密信息,例如数据库的访问凭证、密码、密钥等。它保证了存储与通信过程的保密性,这对于我们无处不在的敏感信息的数据安全显然是十分必要的。
用户3147702
2022/12/21
3.7K0
开源密码存储引擎 Vault 的安装与使用
我的Android进阶之旅------&gt;Android采用AES+RSA的加密机制对http请求进行加密
作者:欧阳鹏 来源:http://blog.csdn.net/ouyang_peng/article/details/50983574(点击文末阅读原文前往) 前言 最近维护公司APP应用的登录模块,由于测试人员用Fiddler抓包工具抓取到了公司关于登录时候的明文登录信息。虽然使用的是HTTPS的方式进行http请求的,但还是被Fiddler抓到了明文内容。因此,需要对之前未加密的登录信息进行加密。在网上搜到一篇关于AES+RSA加密方案的文章,如下面链接所示,按照该方案成功解决了加密问题,在这里记录一下
java达人
2018/01/31
2.2K0
我的Android进阶之旅------&gt;Android采用AES+RSA的加密机制对http请求进行加密
2023年西湖论剑
图片 前言 图片 WP WEB 扭转乾坤 大写一个F即可 图片 得到flag DASCTF{407a13a21a6b85b1236b003479468c82} unusual php phpi
故里[TRUE]
2023/04/21
8220
2023年西湖论剑
网络安全&密码学—python中的各种加密算法
数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露、篡改或滥用。加密后的数据(密文)可以通过解密过程恢复成原始数据(明文)。数据加密的核心是密码学,它是研究密码系统或通信安全的一门学科,包括密码编码学和密码分析学。
小羽网安
2024/07/02
6000
网络安全&密码学—python中的各种加密算法
读《图解密码技术》(三):密钥、随机数和应用技术
最后一篇了,如果还没看过前两篇的,最好先翻回去看看,因为这最后一篇的内容是建立在前两篇的基础之上的。本篇的内容包括密钥、随机数、PGP、SSL/TLS,最后再讲讲密码技术的现状和局限性,以及简单介绍一下量子密码和量子计算机。
Keegan小钢
2018/08/10
2K0
bWAPP练习
虚拟机下载地址: https://www.vulnhub.com/entry/bwapp-bee-box-v16,53/
全栈程序员站长
2022/11/09
1.2K0
bWAPP练习
Python实现各种加密,接口加解密不再难
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种加密,接口加解密再也不愁。
可可的测试小栈
2021/12/17
7K0
Python实现各种加密,接口加解密不再难
NumPy 基础知识 :1~5
在过去的十年中,Python 已成为科学计算中最受欢迎的编程语言之一。 其成功的原因很多,随着您着手本书,这些原因将逐渐变得明显。 与许多其他数学语言(例如 MATLAB,R 和 Mathematica)不同,Python 是一种通用编程语言。 因此,它为构建科学应用并将其进一步扩展到任何商业或学术领域提供了合适的框架。 例如,考虑一个(某种)简单的应用,该应用要求您编写软件并预测博客文章的受欢迎程度。 通常,这些是您要执行此操作的步骤:
ApacheCN_飞龙
2023/04/23
5.8K0
NumPy 基础知识 :1~5
多方安全计算(6)MPC中场梳理
诚为读者所知,数据出域的限制约束与数据流通的普遍需求共同催生了数据安全计算的需求,近一两年业界又统将能够做到多方数据可用不可见的技术归入隐私计算范畴。粗略来说,隐私计算可分为以联邦学习为代表的机器学习类升级方案、以可信硬件为基础的可信执行环境类方案和以密码学相关技术为核心的多方安全计算类方案。
绿盟科技研究通讯
2023/02/22
1.9K0
多方安全计算(6)MPC中场梳理
蚂蚁区块链第7课 零知识证明隐私保护原理和蚂蚁BAAS接口调用实现
本文试图普及隐私保护和零知识证明的相关技术知识,尝试使用更简单的描述来理解复杂的数学算法和技术原理。同时,也提供了蚂蚁区块链已经实现的隐私保护的接口函数说明。 本文涉及的专业知识有零知识证明,zk-SNARKs和 BulletProofs(防弹证明),佩德森承诺等。
辉哥
2019/04/01
1.9K0
蚂蚁区块链第7课 零知识证明隐私保护原理和蚂蚁BAAS接口调用实现
Python 密码破解指南:20~24
有两种方法可以破解维吉尼亚密码。一种方法使用强力字典攻击来尝试将字典文件中的每个单词作为维吉尼亚密钥,只有当该密钥是英语单词时才有效,如 RAVEN 或 DESK。第二种更复杂的方法是 19 世纪数学家查尔斯·巴贝奇使用的,即使密钥是一组随机的字母,如 VUWFE 或 PNFJ,它也能工作。在本章中,我们将使用这两种方法编写程序来破解维吉尼亚密码。
ApacheCN_飞龙
2023/10/13
1.6K0
Python 密码破解指南:20~24
密码学小白必知必会
本文是以介绍密码学基本概念为目的,面向密码学小白或者新人的文章。包含的内容主要是一些课本知识,个人理解,还有一些实例及代码。下面,将从密码学的基础,应用,及实例等几个方面对密码学进行简单的介绍。
zenlu
2024/02/20
6720
密码学小白必知必会
推荐阅读
相关推荐
若通过验证可颠覆美国后量子密码设计,清华陈一镭预印论文破解格密码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验