V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zackZhong
V2EX  ›  分享创造

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

  •  
  •   zackZhong · 2020-04-25 09:31:53 +08:00 · 4667 次点击
    这是一个创建于 1703 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    • 支持对字符串进行加密
    • 支持对加密后的串进行解密
    • 生成的串支持一件复制
    • 支持自定义 AES key

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

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

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

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

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

    欢迎 star ~

    29 条回复    2020-04-29 07:47:33 +08:00
    geelaw
        1
    geelaw  
       2020-04-25 10:03:20 +08:00   ❤️ 9
    这个不能真的用来管理密码,因为它实际上就是 multi-time pad,非常不安全。

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

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

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

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

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

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

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

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

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

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

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

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

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

    * 换用没有云存储的密码管理软件,离线存储密码库,避免密码库泄露
    * 定期更换主密码,避免主密码泄露
    * 选择更长的主密码,避免暴力破解
    oott123
        16
    oott123  
       2020-04-25 12:10:16 +08:00 via Android
    更正:上文的「避免」应为「缓解」
    reself
        17
    reself  
       2020-04-25 12:35:09 +08:00 via Android
    串联起来的安全系统,安全性取决于最薄弱的环节。安全领域造轮子风险很大。
    reself
        18
    reself  
       2020-04-25 12:36:39 +08:00 via Android
    @reself fix: 不管串不串联,只要归为同一个安全系统,都取决于最薄弱的环节
    ITJoker
        19
    ITJoker  
       2020-04-25 13:25:55 +08:00 via Android
    我之前也搞过,Python 版本的,三次加密,第一次和第三次都是 rsa 加密的,第二次自己搞了个加密方法。然后同步到 git 。感觉破解难度挺大的😂
    sexb
        20
    sexb  
       2020-04-25 15:47:41 +08:00
    加个私钥就很安全了吧,私钥记在脑子里,知道算法不知道私钥也不行。
    zooo
        21
    zooo  
       2020-04-25 15:55:14 +08:00
    。。。一个密码管理软件就够了,你们有那么机密的东西需要加密的很很安全吗?我没有。。
    Zien
        22
    Zien  
       2020-04-25 16:25:22 +08:00
    算了,我还是用 keepass 吧
    eason1874
        23
    eason1874  
       2020-04-25 16:35:50 +08:00
    有点意思,我也做一个看看
    chendl111
        24
    chendl111  
       2020-04-25 17:24:25 +08:00
    用 LastPass
    koswu
        25
    koswu  
       2020-04-25 18:05:20 +08:00
    @geelaw CTR 模式。。这还真没注意到。。。没有 IV 。。但是换成 CFB 也挺简单的
    styletjy
        26
    styletjy  
       2020-04-25 21:38:37 +08:00   ❤️ 1
    @yzwduck 竟然碰到熟悉的头像, lol ;-)
    zackZhong
        27
    zackZhong  
    OP
       2020-04-25 21:41:09 +08:00
    @oott123 老哥的意见很有建设性,👍
    nonrk
        28
    nonrk  
       2020-04-26 10:51:21 +08:00
    直接用基于网址算法,你的头脑固定码就是私钥,网址就是公钥,然后给予的私钥公钥计算出密码,无需管理工具
    Kazetachinu
        29
    Kazetachinu  
       2020-04-29 07:47:33 +08:00 via iPhone
    😉😉加密后放在密码管理器里,实在不放心,就再多套几次娃。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2447 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:52 · PVG 23:52 · LAX 07:52 · JFK 10:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.