做了一个密码加密的小工具, 用于加密密码生成器的密码(大家平时会用密码管理器管理密码不)

2020-04-25 09:31:53 +08:00
 zackZhong

大家都知道,由于账号越来越多,密码记忆变得越来越困难。许多人(我自己也是😂,直到上周发现我的印象笔记再在陌生设备登录)。为了方便记忆,偷懒的在多个网站使用同一个密码,这将导致一个账户密码泄露后,其它账号将面临泄露的风险。

当然,许多人就开始使用密码管理器来生成,记忆密码了。比较著名的有 1PasswordLastPassKeePassEnpass 等等。

但我觉得,如果都直接存明文,万一密码管理器的主密码泄露,或者加密算法被黑客破解(虽然可能性很低),但一旦出问题,里面的所有账号就都裸奔了。

于是想到先对密码加密,然后将加密后的密码存放到密码管理器上,这样,即使被泄露,密码也是被加密的,对我们几乎没有影响。

基于此,我做了一个小的工具,效果如下:

密码加密,基于 AES-CTR-256

大家觉得有没有必要对密码管理器的密码进行加密后保存呢? 虽然我明白密码管理器存的时候可能是加密了存的。

其次就是,如果所有的账号密码都用密码管理器来管理,你们平时会备份账号密码不?是使用什么方式备份的呢?

欢迎大家留言讨论,注册以来第一发帖😂。

PS (我上周末花了一整天的时间把之前所有的账号修改了密码,部分重要的账号用了此工具加密密码, 以后应该会轻很多了吧~)

最后,贴下仓库地址:encrypt-password

欢迎 star ~

4427 次点击
所在节点    分享创造
29 条回复
geelaw
2020-04-25 10:03:20 +08:00
这个不能真的用来管理密码,因为它实际上就是 multi-time pad,非常不安全。

你的加密算法(不是说密钥生成算法)没有任何随机性,同一个密码的加密多次总是相同的,这表示你的加密方法不具有选择明文攻击下的安全性。默认情况下,使用的加密算法应该具有选择密文攻击下的安全性。

如果你知道密码 A 和密码 B 的密文,你可以算出 A xor B 。一个非常严重的推论是:如果你知道密码 A 、密码 A 的密文和密码 B 的密文,如果 B 的长度不超过 A,则可以完整还原密码 B 。假设你在网站 A 的密码因为网站 A 的失误泄露了,而你的密码的密文也泄露了,好巧不巧,网站 A 的密码还是最长的,那么你所有网站的密码就都泄露了。
zackZhong
2020-04-25 10:17:07 +08:00
同一个密码的加密多次的结果总是相同的 ,md5 不也是一样的? 加密同一个字符串 得到的结果就是一样的。

> 如果你知道密码 A 和密码 B 的密文,你可以算出 A xor B , 但是我的密码和账号都是存在密码管理器上了的呀

我做的事情是对密码管理器生成的密码进行二次加密,然后每次输入密码的时候 先从密码管理器里拿到 加密后的密码,然后再解密,再粘贴到制定位置。

这样难到不是更安全一些吗
zackZhong
2020-04-25 10:17:54 +08:00
贴个链接,你可以进去试一下:
[在线地址]( https://itboos.github.io/project/encrypt-password/)
koswu
2020-04-25 10:28:35 +08:00
创造的精神值得鼓励,但是想法有漏洞
密码管理器的主密码泄露----这个加密工具的 key 泄露也会被解开
加密算法被破解------要这都行的时候,这个工具的加密算法一样也会被破解
想不到有什么实用的点诶
stanl
2020-04-25 10:59:08 +08:00
我还是选择记在脑子里,我密码基本都是,网站或者 APP 的名称做前缀加一串固定的密码,这样会不会也有风险?
toan
2020-04-25 11:00:02 +08:00
安全性都是相对的,密码管理工具也是为了方便,一个密码用在密码管理工具上,然后工具管理一堆密码。
自己加密解密,其性质都差不多,一个密码设在加密工具上,工具加密一堆密码。可能好处就在于可以用不同密码串加密不同密码,但又有新的问题,这么多密码串又要怎么管理?😂
maolaohei
2020-04-25 11:05:22 +08:00
@stanl 如果有人获取了你的密码,就知道规律了
geelaw
2020-04-25 11:11:05 +08:00
@zackZhong #2 > MD5...
我没说过 MD5 是选择明文安全的加密算法。实际上单纯 MD5 三个字符并不代表任何一种加密算法。

> 但我的密码存在密码管理器上。
如果你认为存在密码管理器里面就安全了,为什么还要先加密再存呢?如果密码管理器本身是安全的,无论你对送入密码管理器的东西做什么都不会让它变得不安全(理论情况下,也假设你做的事情都是高效的),但是是否“更安全”并不是明显的事情,尤其是你做的额外操作并没有什么特别的安全性的时候。

@koswu #4 这个想法的问题在于这个加密工具的 key 不泄露也很容易攻击,不需要等到 AES 被破解的一天。
yzwduck
2020-04-25 11:16:56 +08:00
#2
你的设想是在密码管理工具的基础上,再提供一层保护,即使密码管理工具发生信息泄露,也能保护密码安全。
但是用 AES-CTR 模式加密是一个严重问题,如果不用随机的初始向量 /值,它加密的效果相当于给明文 xor 一个*固定*的随机数据。一旦多个密文泄露,就可以根据密文推算出明文的 xor 关系。如果还知道或推测出一个明文的话,所有的密文都能及其简单地算出对应的明文。

示例,用 password 为密码:
加密 123456 的结果是 0ef3e887bea1,明密文异或为 3fc1dbb38b97 ;
加密 m2DaUG 的结果是 52f39fd2ded0,明密文异或为 3fc1dbb38b97 ;
看出问题了吗?破译密文根本就不用算 AES 。

TL;DR: 这工具无法在密码管理软件发生泄露的前提下,保护密码的安全。
nvkou
2020-04-25 11:19:56 +08:00
等等。chrome 密码同步为啥就不能用了?反正要么谷歌全家桶,要么苹果全家桶。密码管理的核心不就是授权的同时足够方便吗。我自己谷歌账号有多种二次验证,保障主账号安全。chrome 密码同步有单独密码。剩下的就是设备管理而已,这一点也不难。选购硬件加密产品,手机开启设备追踪。你偷我设备可以,别妄想我数据。
zackZhong
2020-04-25 11:27:08 +08:00
@geelaw @yzwduck 谢谢两位的回答,看来你们安全知识比我懂多的多

#9 对的,你的设想是在密码管理工具的基础上,再提供一层保护,即使密码管理工具发生信息泄露,也能保护密码安全

然后,基于这种设想,有没有更好的 加密模式 或者其它加密算法 推荐呢

感觉的思路应该是没问题的,就是实现上有问题
FS1P7dJz
2020-04-25 11:34:43 +08:00
如果我是恶意作者
这个工具我认为是用来记录彩虹表
zackZhong
2020-04-25 11:35:55 +08:00
@nvkou mac Chrome 在登录的状态下,进入密码管理界面,输入 电脑 的密码就可以查看各个账号的密码了。
电脑开机密码 一般 都不会设置的很复杂吧,不能自动填入
nvkou
2020-04-25 11:44:29 +08:00
@zackZhong 这是原始问题。你也不能不记住银行卡密码吧。或者不能丢失你的软件的密钥吧。反正设备硬盘是 TPM 加密的。无法拆下来读原文件。这才显得你登录密码有意义
oott123
2020-04-25 12:09:39 +08:00
#8 说得很对,如果密码管理器本身是安全的,无论你对送入密码管理器的东西做什么都不会让它变得不安全。

所以你的思路也是有问题的。如果你想更安全一些,我认为可以:

* 换用没有云存储的密码管理软件,离线存储密码库,避免密码库泄露
* 定期更换主密码,避免主密码泄露
* 选择更长的主密码,避免暴力破解
oott123
2020-04-25 12:10:16 +08:00
更正:上文的「避免」应为「缓解」
reself
2020-04-25 12:35:09 +08:00
串联起来的安全系统,安全性取决于最薄弱的环节。安全领域造轮子风险很大。
reself
2020-04-25 12:36:39 +08:00
@reself fix: 不管串不串联,只要归为同一个安全系统,都取决于最薄弱的环节
ITJoker
2020-04-25 13:25:55 +08:00
我之前也搞过,Python 版本的,三次加密,第一次和第三次都是 rsa 加密的,第二次自己搞了个加密方法。然后同步到 git 。感觉破解难度挺大的😂
sexb
2020-04-25 15:47:41 +08:00
加个私钥就很安全了吧,私钥记在脑子里,知道算法不知道私钥也不行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX