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

迫于密码遗忘,做了个特别的 密码管理 小程序,希望也能带来便利。

  •  
  •   claymore94 · 37 天前 · 5745 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原因

    • 最早使用同一个密码,会有不同种变形,但是变形多了,自己也想不起来。
    • 需要记的密码太多了,用 txt 记录的,感觉很蠢(但有效)。。
    • 公司要求每个月换密码
    • 有的密码明明当时想着怎么记好记,但是下次登录的时候还是没有试出来

    相关产品

    用过的不是很多,主要是有点疑惑,它存储了我们的密码,是不是很有可能获得解密后的密码?

    1Password, 收费,数据存在本地。拼车的话据说管理员误操作会被删等。

    lastPass, 分免费和收费,数据存在云端。

    他们都很方便,通过浏览器插件等可以一键补全,功能丰富的同时学习成本会高一点

    当然每个产品都有缺点,只是它的优点是不是能够让你不计较它的缺点。

    我的小程序

    输入

    一个表格来输入你的平台,账户,密码:

    键盘右下角的 next 或下一项是可以跳到下个输入框的,相关的键盘反复弹起是小程序官方待修复的问题,我是没找到解。

    加密

    通过手势加密:

    说明:

    • 手势是我可以想到最不容易忘,还比较通用的方式
    • 加密方式我可以说出来,是每触摸键盘锁的每个点会把账户密的 ascii 码 + 相应数字
    • 可以一边滑动一边观察表格中字符的变化

    加密后上传到云端,我只用了腾讯小程序云开发的数据库,没有其他服务器:

    解密

    查看密码时,我们可以解密来查看,解密的手势和加密一致:

    当然解密逻辑是当前 asicc 码减相应数字

    如果其他人用暴力的方式去试解密,尝试后并不轻易这次解密后的字符是不是正确的,因为看起来好像都像正确。 正确的手势只有加密的你自己知道。

    其他

    我只存储加密后的内容,加密手势不会存储,忘了的话只有自己试。 可以多次加密来增加复杂性。 也可以在表格中故意设置几个错误字符,记得就好。 如果自己还是比较谨慎,大家都可以尝试抓该微信小程序的包。

    个人认为最主要的优点是借助微信平台的便利,没有学习成本,安装成本,它只是个记录表格

    todo:

    • 复制表格某内容到剪切板。
    • 解密后导出内容做备份
    • 待补充。。

    如果大家测试出来 bug 向我反映呀。。

    最后

    如果你有需要,欢迎添加我的小程序或提出意见:

    第 1 条附言  ·  36 天前
    各位都觉得不安全。。, 那有何改进的地方么?

    上传个公钥?

    那有什么方式又安全又便捷呢?

    如果你觉得不放心,可以试着放几个错误的字符进去, 我开发的时候想到的只是便捷性,安全方面请大家再此基础上给给高见。

    安全真是口说无凭,什么才能算有效的证明呢?


    图床超流量了,挂了。。。
    第 2 条附言  ·  36 天前
    在小程序上,有输入绝对会涉及到上传云端,云端的数据我要证明给大家看我是怎么存的。

    肯定要加密,加密算法只能是对称的,不然让 你上传公钥,你也得上传私钥解密,既然上传了私钥,怎么证明我又没存你私钥???
    第 3 条附言  ·  36 天前

    加密:

    小程序码:

    我自己用吧,用自己的作品还是很开心的。

    91 回复  |  直到 2019-09-20 11:13:14 +08:00
        1
    geelaw   37 天前 via iPhone   ♥ 6
    我强烈建议任何觉得自己的账户应该保密的人不要用这个软件。

    这个加密方法里安全差十万八千里。
        2
    geelaw   37 天前 via iPhone
    @geelaw *离安全差十万八千里
        3
    noqwerty   37 天前   ♥ 8
    不是打击你的积极性,但是为什么你会觉得这个比 AES-256 更安全呢😂
        4
    Raymon111111   37 天前   ♥ 1
    真的不要尝试自己实现加密算法

    现成推荐使用的加密算法至少是经过考验的
        5
    littlespider89   37 天前   ♥ 3
    加密方法类似于凯撒加密? 因为一般用户名甚至很多密码都是有意义的单词或者纯数字,用穷举法一解密就能很快找出密钥(手势)和原密码,所以感觉安全性有待加强

    即使这样,还是给 LZ 点个赞,支持 LZ 持续更新下去

    好像互联网上的使用同一个密码或者两到三个密码的还是大多数,123456,password 这种密码还处处可见…
        6
    littlespider89   37 天前   ♥ 1
    TODO:生成随机密码,参考 keepass,chrome 表单密码
    TODO:既然上传云,最好连平台这个参数也加密了,当然加密算法一定要有保障
        7
    ZRS   37 天前   ♥ 1
    涉及到安全的问题...最好不要自己造轮子
        8
    polaa   36 天前   ♥ 4
    我学密码学现在唯一还记得的就是: 不要自己造加密算法
        9
    efsg   36 天前 via Android
    推荐自建 Bitwarden
        10
    someonedeng   36 天前
    对称加密这么多,就别造轮子了
        11
    ahhui   36 天前 via iPhone   ♥ 2
    加密安全问题楼上都说了,我就说个,万一微信被盗,这些密码岂不是全都丢了?何况还得单独开微信,再开小程序,再来手势解锁,繁琐程度也不低了。

    不是打击楼主,从安全的角度说,使用 txt 存密码,用 cryptomator 再配合云同步,都比小程序安全。

    楼主的精神可嘉,值得鼓励,只是涉及密码学安全方面的开发,楼主还需要补相关专业知识,切不可想当然。
        12
    wanacry   36 天前 via iPhone
    密码数据放微信上表示可还行
        13
    Nasei   36 天前 via Android
    我把密码放 OneNote 上了,然后分区加上密码,其实只有增加密码的时候才会用,因为基本都能记住
        14
    nullboy   36 天前
    我是用 gpg,自己生成密钥对进行加密。win 上用 Kleopatra 客户端
        15
    winterbells   36 天前 via Android
    推荐使用 zf 婊的钢铁匣[:doge]
        16
    s1th   36 天前 via iPhone
    我 1password 的加密文件放在云上贵州都觉得不安全🐶
        17
    kaesi0   36 天前
    只用 keepass
        18
    avenger   36 天前 via iPhone
    1password 用了好多年,楼主说只能存在本地的观点是哪来了?
        19
    amazingrise   36 天前 via Android
    我一看加密后的是 defabc,就知道这玩意差不多是凯撒密码了
        20
    masker   36 天前 via Android
    todo 不要自己造轮子。
        21
    Varobjs   36 天前 via Android
    和我写的一个差不多,不过我是用 AES256 加密后存储的
        22
    alphatoad   36 天前 via iPhone
        23
    alphatoad   36 天前 via iPhone
        24
    the7   36 天前 via iPhone   ♥ 1
    楼主辛苦了,其实我以前也想做一个来着,但总觉得用小程序管理密码稍显繁琐。

    在 pc 上的话,要打开手机,打开微信,进入小程序,再手势或输入管理密码,才能找到自己存的密码。所以在 pc 端需要操作的步骤有点多。

    而在移动端,我看 1password 这些还有密码自动填充功能,不知道如何实现的,但这种方式确实比去小程序找密码要方便。而且现在还有手机验证码登录,三方登录,生物识别验证登录等,感觉手机端越来越不需要密码了
        25
    smilzman   36 天前   ♥ 1
    我是 Enpass+自己建的 https://tools.mrjooz.com/pwd/
        26
    Davic1   36 天前
    最好的密码管理软件只有 1 个, 叫 Brain
        27
    claymore94   36 天前
    @geelaw 有何改进高见?
        28
    wolfie   36 天前
    @Davic1 #26
    要不是脑子不够用,谁需要密码管理器。
        29
    lastpass   36 天前 via Android
    为何不使用 lastpass??
        30
    claymore94   36 天前
    @ahhui
    @the7
    两位,微信不都是常开的么,忘记密码的时候才看看当时存了啥啊,各位适应了 1pass,不确定这些写 1pass 软件的是怎么存的,有存既有解,它们确实很方便。
        31
    claymore94   36 天前
    @lastpass 我不知道它怎么存的,有存即有解
        32
    learnshare   36 天前
    如何保证个人作品比大厂的服务更可靠,更安全?
    小程序能保证 7*24 可靠服务么,能网页、App 自动填表单么
        33
    liyer   36 天前
    反正我现在是网站密码都自动记在浏览器,多端同步,APP 密码存在华为手机密码保险箱里,银行卡密码是 6 个 8,手机解锁码是 6 个 6。我觉得就很方便啊
        34
    claymore94   36 天前
    @learnshare
    1,大厂不也经常泄露么,如前几年的携程
    2,我说了 我这只是个表格,小程序也是大厂的,可靠服务上最可靠的是你自己。
        35
    claymore94   36 天前
    @liyer 这样好么,这么简单。。
        36
    Yuicon   36 天前
    我自己搞了个网站记密码 还直接明文存储 因为我知道没人攻击。。。
        37
    claymore94   36 天前
    @Yuicon 也会有吧,我的云服务器,日志上经常有人来扫我数据库端口,最好防范一下
        38
    Yuicon   36 天前
    @claymore94 买的云数据库,腾讯云的学生福利 3 年也很便宜
        39
    1340976576   36 天前
    支付宝有一个安全备忘,一直在用
        40
    NextNal   36 天前 via Android
    keeweb 没考虑过么
        41
    ahhui   36 天前
    @claymore94 但是也有可能哪一天因为一句话,或者别的原因,导致账号被锁,或者被封,这时候全在小程序里的密码不都丢了么?起码密码得在本地有个备份吧?
        42
    claymore94   36 天前
    @ahhui 所以 todo 里有个导出功能做备份啊
        43
    phpc   36 天前
    推荐 keepass。开源且数据储存在本地
        44
    shenme   36 天前
    额,一直用 chrome 记密码
        45
    oisc   36 天前
    问一下 asicc 码是什么?
        46
    dingyaguang117   36 天前
    问题在于常用手势太集中了
    相当于密码都集中在 123456,111111,.....
        47
    Davic1   36 天前
    @wolfie #28

    需要的是记住生成密码的规则, 而不是记住每一个密码.
        48
    claymore94   36 天前
    @oisc ascii 吧,你搜下就知道了

    @dingyaguang117 有 4*4 键盘啊, 手势是用来加解密的,原密码是 123456,111111 这种你本身就不安全,就别指望加密了😂
        49
    claymore94   36 天前
    @phpc keepass 好像没 ios
        50
    tesorouo   36 天前
    我怀疑你在钓鱼,可是我没有证据
        51
    ooops   36 天前
    主要的问题还是不安全不便利。
        52
    wolfan   36 天前 via Android
    表示记在便签里
        53
    TristanYang   36 天前
    https://works.yangerxiao.com/strong-password-generator/
    想起来以前做过的一个超强密码生成器。 没啥卵用,但还是用心做到了极致,权当练手了。😀
        54
    surpass7   36 天前 via iPhone
    @claymore94 keepass 有 ios 客户端,去官网上找链接
        55
    baozijun   36 天前
    @alphatoad 2333
        56
    claymore94   36 天前
    @ooops 哦,你给个又安全又便利的高见?

    @tesorouo 现在都有登录次数的,手机绑定啥的,这点放心,怀疑就不用
        57
    JunoNin   36 天前
    keep 被我用来专门记录账号密码
        58
    claymore94   36 天前
    @TristanYang 不错,自己做出来可用就有成就感了
        59
    jinhao7773   36 天前
    直接自己搞个 github 的私库,存放文本文件就行,还顺带了版本记录功能。
        60
    pmispig   36 天前
    为什么你会觉得别人愿意把密码交给你保管呢
        61
    wolfan   36 天前 via Android   ♥ 1
    emmmm
    每月要求更密的话,为什么不用 花密 非常适合你→_→需求啊,站点+年月日,天天换都能记的下😬
        62
    falcon05   36 天前 via iPhone
    操作略繁琐,而且很难集成到浏览器
        63
    claymore94   36 天前
    @falcon05 小程序咋集成到浏览器。。 除非等后续微信 pc 端升级 再看。
    @pmispig 从不觉得,所以我公开出来加密方式和后端存储。那个图挂了,后续没放。
        64
    libook   36 天前
    一直在用 Lastpass,感觉完全满足需求。

    云安全的关键点在于加解密都在本地进行,让云端没有任何解密能力。

    基本思路就是用用户提供的主密码,做不可逆的 Hash 运算,使用生成的 Hash 串以固定算法生成对称加密秘钥,然后对整个密码库进行加密,再上传云端。

    这时候即便云端有解密算法,但没有用户的主密码做为引子是无法解密的。

    解密的时候从云端拉取加密过的密码库,用户输入主密码,做不可逆的 Hash 运算,再用同样的固定算法生成对称加密秘钥,用对称加密的解密算法把密码库解密,取出密码。

    这个应该可以解决云安全的问题,但还有很多其他安全问题需要解决,比如本地安全问题、钓鱼。

    Hash 步骤可有可无,加上可以某种程度上提高安全等级(因为 Hash 串通常都比主密码长很多,增加暴力破解难度,即便暴力破解了也不知道主密码是什么,避免撞库)。

    还要考虑多种解密方式,因为主密码可能会忘记,不清楚 Lastpass 是如何实现的,一种思路是把主密码 Hash 生成的对称秘钥导出来,让用户在安全的地方妥善保存,一旦用户忘记了主密码,就直接使用秘钥来解密密码库+改密码。

    其他的就是便利性,商业的密码管理工具都是提供跨平台密码输入工具的,有的还提供团队共享密码的机制。

    最后:
    不要自己造加密算法!
    不要自己造加密算法!
    不要自己造加密算法!

    除非你自己是个密码学博士,发的 Paper 经过几家顶级安全实验室验证 OK~
        65
    qiutianaimeili   36 天前
    同情楼主,其实楼主只是好心分享,我之前也做过这种类似的密码管理,不过一发出来就是各种讥讽,瞧不上。后来也不敢发了。。。
        66
    HeiXiaoBai   36 天前
    @claymore94 #63 所以明明有现成的多平台终端(Win\Linux\Android\iOS 等),自动输入,多浏览器插件集成,高安全性防爆破的密码管理器,就不需要这个小程序实现了
        67
    ww940521   36 天前
    Google 自带的密码管理多方便。
        68
    claymore94   36 天前
    @libook 不能用手势后的内容做引子 做 salt,因为它的组合情况较少, 算一遍所有 hash 情况就出来了。 按你说这种,主密码的话会涉及用户输入,个人感觉不方便,还是要证明个人没有存储用户的主密码。。。
    @qiutianaimeili 握手, 哎,早知道就不发出来了,自己用就挺好。

    @HeiXiaoBai 那有一些安装和学习成本呀,我说了,它们很好,我这个就是个表格
        69
    annielong   36 天前
    花密就够用了
        70
    geelaw   36 天前   ♥ 4
    @Raymon111111 #4 楼主的错误还没发展到这么高级的阶段,他的错误在于选择一个非主流的 **算法**,而不是选择一个非主流的 **实现**。

    @claymore94 #27 评论是否安全不需要知道怎么做才安全。

    此外,证明一个东西不安全是一件非常容易的事情。
    具体到楼主的方案,你可以参考任何一个本科生密码学课程的前两节课的内容。
    一个简单的提示是这样的:QQ 号码是多位数字,因此可以把位移量缩小到一个非常小的范围内,接下来再结合其他用户名的有意义性就差不多可以算出位移量,因此可以从楼主的密文中还原出所有的密码。
    这是一个惟密文攻击下不安全的方案——现代安全工具通常使用的是选择密文攻击下安全的方案。

    @claymore94 #48 加密算法的安全性不应当依赖于明文(这里就是你需要加密的密码)的随机性,任何选择明文攻击下安全的加密方案,加密 1111111111111 和 s$Kf5%i&e?gfu 之后都是无法辨别的。
    至于密码本身是弱密码容易被攻破,那并不是通过你的密码管理器攻破的,和你的密码管理器没有关系。

    @claymore94 #63 我没有用过任何密码管理器,但我相信几乎所有的密码管理器的算法都是公开的,云端存储并不会包括密钥,加上加密算法的安全性,可以相信厂商并没有解密的能力。

    @libook #64 并不需要是密码学博士,需要的是密码学知识,以及能够在久经考验的假设下形式化证明安全性。

    最后回复附言:
    > 我自己用吧,用自己的作品还是很开心的。

    我在 1 楼的建议也适用于楼主本人。或许用自己写的密码管理器很开心,但是这个密码管理器非常不安全。当然本身的不安全性也不是什么巨大的实际威胁,只要你愿意相信 Tencent 不会偷看你的内容;真正的威胁是虚假的安全感。
        71
    baojie223   36 天前
    佩服楼主,我也想自己做点东西
        72
    ily433664   36 天前
    之前密码基本是某几个常用的字母+数字
    现在的新密码都改成了,当前使用的产品+数字+特殊字符
    只要记住了规律就可以了,实在不行就重置密码
        73
    leeton   36 天前
    我发现我现在最怕撞库了,我各个地方的密码都是一样的,有一天撞库我就完蛋了,唉
        74
    Colis   36 天前
    手机安装软件, 密码保存在本地, 同时禁止这个软件联网
        75
    dingyaguang117   36 天前
    @claymore94 你没懂我说的,问题在于手势密码太复杂自己记不住,太简单被暴力破解概率大大提高,还不如设置一个文本秘钥
        76
    msg7086   36 天前 via Android
    做东西很好啊。
    但是请你自己也不要用。太危险了。

    这就像一个门外汉纯手工打造了一辆跑车,看上去非常酷,但是你敢 200 公里速度飙一把吗?
        77
    msg7086   36 天前 via Android
    (如果对自己的安全措施有自信的话,不妨把你自己密码库的密文信息贴出来。我们用的 AES 根本不怕暴露密文,你怕吗?
        78
    zpvip   36 天前
    @claymore94 建议把你加密后的密码库发出来,看看多久被攻破。当然要真实的密码库,用户名是 Email 或 V2EX 这种字母数字组合。
        79
    mdb   36 天前
    自己写了一个 winform 版的加密工具,原理就是把账号密码相关信息用 AES 加密然后保存到一个文件里,目前只在 PC 端上用,接下来想把它弄成多端同步的,因为密码都是加密后的字符,所以存到哪都不用怕,当然自己写的工具安全性怎么样只有自己知道...
        80
    mozutaba   35 天前
    掏个笔记本写下来也比你这个方便可靠啊
        81
    wolfie   35 天前
    @Davic1 #47
    有几个情况比较难记

    - 注册多个账号(需要记录多个账号,可能是自己手机,也可能是云短信注册)

    - 银行卡( 6 位)、手机银行(打电话登录的)、网银密码、银行 APP、银行 APP 支付(这几项可能存在不允许相同)

    - 加密文件密码,比如存放 github recovery code 文件的加密密码
        82
    Davic1   35 天前
    @wolfie #81 这些属于比较重要的密码了.. 还是不太信任任何云. 还是找个小本本写下来藏好好了哈哈
        83
    sunmker   35 天前
    我以前也做过一个安卓的密码本,为了记密码,完全存在手机本地支持备份,自己觉得还行。

    直到我刷机国际版发现有 Google 自动填充 之后,再也没有更新过自己的密码本 App。
        84
    Eugene1024   35 天前
    @TristanYang 使用了你这个生成器的密码,如果忘记了是不是只能重置密码了
        85
    TristanYang   35 天前
    @Eugene1024 哈哈 我这个工具没啥卵用 用过之后绝对让你想不起来密码是啥 当然我可以做本地保存使用的密码 但就安全性而言 这样做就没啥意义了
        86
    ahhui   35 天前   ♥ 1
    @claymore94 楼主真要想把这个工具完善起来,增加安全性的话,我建议楼主读一下这个文档,了解一下里面提到的 RFC,以及加密方案的选择和细节,自己琢磨一下:
    https://docs.cryptomator.org/en/latest/security/architecture/
        87
    libook   35 天前   ♥ 1
    @claymore94
    Lastpass 也不是每次都需要使用主密码,如果用户愿意信任设备环境,用降低安全性来换取提升便利性也是可以的,比如本地缓存主密码,然后使用环境提供的其他可靠机制来控制主密码缓存的使用,像浏览器扩展运行的沙盒环境、手机系统提供的手势密码、指纹、虹膜、人脸识别等,环境厂商会负责保障这些的安全性,如果用户信任这些的话,可以让用户自愿选择将主密码缓存至本地,这样就不需要每次输入主密码了。但换设备就一定得输入主密码了,毕竟新设备本地没有缓存。
    安卓系统上的手势解锁的安全性主要不是在于位数,而是在于本身是封闭的,输入手势和解密是一起哈成的,用户不可能绕过输入手势的环节直接输入手势的每一位对应的代码来暴力破解(假设没有程序失误),但如果输入手势和解密是两个独立阶段且对外暴露的话,就肯定会产生暴力破解的风险;这么讲可能过于抽象,我举个例子吧,我们日常生活中的锁,之所以具备较好的安全性,主要是因为锁外面的一层厚厚的铁壳,使得锁内部的机械成为一个封闭系统,如果它是开放的、可以任意操作里面的机械,那么安全性就肯定下降了很多。另外手势解锁的封闭系统内也有超过错误次数上限就禁止尝试这种机制,同样也是无法绕过的(假设没有程序失误)。

    其实并没有泼冷水的意思,只是发现了一些问题,不希望楼主因为这些问题而造成损失,所以就及时提出来了。
    有极客精神是非常可贵的,也希望楼主不要有负能量。
    不过任何产品都是需要不断打磨不断迭代的,我相信很多人也都是希望自己提供的建议能够被采纳于改进产品,知识不足可以学,设计不完善可以再慢慢琢磨。
        88
    shyghsd   35 天前
    @s1th +1,云上贵州...
        89
    chengkai1853   35 天前
    看到 Keepass,借楼我自己就写了个 Keepass 的 ios 端的客户端(奇密)

    https://apps.apple.com/cn/app/fantasypass-ikeepass/id1357961740
        90
    summer20100514   34 天前
    安全无小事,最近面小米的感想。
        91
    Valid   33 天前
    9102 年了,ui 还这样吗
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1136 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 18:24 · PVG 02:24 · LAX 11:24 · JFK 14:24
    ♥ Do have faith in what you're doing.