为了媳妇,我不得不重构了我的小程序。

2020-10-04 14:03:11 +08:00
 v2lhr

真事。

这个小程序是我大四的时候做的,用于记录自己的各种密码,但是数据只支持保存在本地。我媳妇也一直在用这个小程序,媳妇是做新媒体的,各种账号很多(应该保存了有四五十多个了),最近媳妇要换手机,但是数据没法迁移,因此直接推动了我重构了这个小程序。(当然我自己也一直有重构的想法,因为我自己也在用,且原来界面很丑!)

重构了之后支持云端存储数据。数据存储使用的是腾讯的云开发免费额度,有 2G,对于一个家庭来说完全足够了。数据加密方式支持使用 AES 和国密 SM4,加密密钥是主密码。

欢迎广大 V 友来体验哈!

小程序名称:账号助手。

小程序码:

15774 次点击
所在节点    分享创造
131 条回复
v2lhr
2020-10-05 13:48:22 +08:00
@Stain5 sm4 js 实现代码开源
v2lhr
2020-10-05 13:48:55 +08:00
@nimab 要不你给出不信任的理由?
v2lhr
2020-10-05 13:50:18 +08:00
@coldear 用腾讯服务的人超 10 亿吧,你算啥东西
huoshanhui
2020-10-05 15:32:01 +08:00
感谢楼主分享。
v2lhr
2020-10-05 16:03:49 +08:00
@huoshanhui 谢谢使用哈🥰
chenshaoju
2020-10-05 16:22:26 +08:00
核心问题在于,你没有办法证明你的小程序不会盗用密码。

退一步讲,假设你不会盗用密码,怎么证明你的数据是加密的,而不是明文存储(或者你的私有密钥(密码)加密的),用户的主密码只是登陆的时候判断一下?

再退一步,假设你是使用用户的主密码加密的,有什么东西能保证客户端向服务器提交主密码的时候,腾讯不会记录、拦截或者遭到 MITM ?

说个案例吧,有个网盘叫 MEGA,主打安全加密。

人家怎么证明安全呢?

1.数据在客户端完成加密。( https://help.mega.nz/webclient/security-and-privacy.html
2.开源。( https://github.com/meganz/
3.公司设立在司法体系更加健全的新西兰。

人家拿出了东西证明自己的安全,而不是空口说说而已。

腾讯收集信息是实打实的,去年腾讯旗下一款游戏公开声明会收集包括 SS 配置信息在内的非常多的信息: https://www.solidot.org/story?sid=59369 (这个事情至今很奇怪,发现作弊直接封号就完了为啥要收集这么多信息)。

一个黑箱的系统当然会让注意安全的人怀疑,你相信这个黑箱的系统那是你的事情,但是别人则不一定相信,拿不出干货回应只耍嘴皮子和质疑其他(甚至是开源的)密码管理软件当然会继续被人喷。

Talk is cheap. Show me the code. —— Linus

PS:可能因为这么多人喷你,让你觉得受到打击了,但是国内隐私和数据保护做的确不好,先不说各种黑产,个人数据到处卖也不是什么少见的事情,这都 2020 年了,各种垃圾短信你也没少见吧?

安全这个东西,真的很复杂。
yanqiyu
2020-10-05 16:53:55 +08:00
In reply to #10

Bitwarden 其实也是可以部署私有实例的,并且还开源,全平台,并且支持硬件 key,支持各种自动填充

基于微信小程序除了容易上手(确实是一个大优点)之外没有什么竞争力,让自己的密码在剪切板和微信这样的不安全(指并非为处理密码而加强的设计)的环境走一圈不是什么好事情(读取剪切板不是难事),系统的密码自动填充 API 你又用不了
SKN133
2020-10-05 17:03:03 +08:00
发现这一神贴也是看楼主发的
细思恐极!用 iPhone 备忘录扫描文件竟被识别内容! https://www.v2ex.com/t/696437
v2lhr
2020-10-05 19:44:27 +08:00
@SKN133 这有啥关系吗,想说明外国企业也不太可信? 哈哈哈
v2lhr
2020-10-05 19:53:52 +08:00
@chenshaoju
第一,我的小程序数据加解密密也是在客户端
第二,加密算法实现也是开源

sm4: https://github.com/wechat-miniprogram/sm-crypto/blob/master/src/sm4/index.js
aes: https://github.com/brix/crypto-js/blob/develop/src/aes.js

第三,其实我并不希望用户使用我的小程序,而是希望用户独立拥有一个自己的密码管理小程序
第四,小程序有免费云存储额度(理论上可以存到腾讯倒闭)
第五,用户保存的数据受微信和云存储鉴权保护
第六,微信云开发采用的私有协议传输
foMM
2020-10-05 20:02:18 +08:00
像 lz 脾气这么好的真是少见……

分享自己的劳动成果被喷成这样,一般来说虽不至于恼羞成怒但是也不会好言好语的回复……
v2lhr
2020-10-05 20:05:15 +08:00
@foMM 谢谢你,今天我让我媳妇看了看评论,她也怒了😂
v2lhr
2020-10-05 20:10:09 +08:00
@ochatokori 小程序不支持热更新,每次更新都需要小程序拥有者提交审核
chenshaoju
2020-10-05 21:31:01 +08:00
@v2lhr #90 这两个加密库是否开源和证明你是否使用了这两个加密库(以及使用方法)有什么关系吗……?

我通篇没说这两个加密库是否安全,问题是“怎么证明你的数据是加密的”(客户端加密也看不出来,微信小程序没办法在开发工具里方便的查看)。

说白了,就是没开源,一部分人也不知道你的小程序工作情况如何,提出疑问,另一部分人(和)就是不相信腾讯了。

当然,这不是逼你开源,这就是一个交流过程(“不需要信任我”、“信任腾讯就可以了”,这种没有意义),从安全角度来说,开源离线密码管理器的安全性很大程度上是高于在线第三方托管的闭源管理平台。

最近在看一本零信任网络的书,凑巧看到你的这篇帖子被人推(?)了,忍不住说两句。

如有冒犯,还请见谅。
wevsty
2020-10-05 21:44:29 +08:00
看来楼主还是不明白。

对于密码管理器这种东西,安全体现在 2 个维度上。
1 、数据的保密性
1.1 对于数据的保密性,仅有楼主自称采用了什么算法来保证,并没有任何的证明。
只贴个加密库的开源地址是没办法说明任何问题的。
1.2 对这类产品用户同样需要信任开发者
以目前的言行来看谈不上对开发者的信任。
1.3 对操作环境的信任
就跟大家都知道不应该在不信任的环境下输入密码一样。
微信对于公众来说是黑盒无法指定它内部是怎么样实现并且会做什么,而你的程序完全依赖于微信这个黑盒。
大家的回帖已经充分说明了,显然对于注重安全的群体来说是无法信任的。

2 、数据的储存的可靠性
基于数据是加密保存的前提下,数据储存的可靠是另一个问题。

微信云提供的免费空间始终是免费提供给你的,这种免费服务是随时可以取消,不应该把数据的唯一希望寄托于这种免费的服务。
另外有人问微信封号怎么办?你只回答要正确使用微信。绝大多数人都是没办法接受这种答案的,因为封号不封号是不可控的,应该也不会有人愿意以限制自己为条件来使用这个可替代的产品。

一直纠结究竟是国内还是国外的服务可信是没有意义的,因为任何非自己物理上可控制的设备都不可以彻底的信任,这才是数据必须加密储存的原因。
此外还要要预防数据丢失的问题,任何单一的储存介质都是不可信任的,这是基本原则。数据储存在微信云虽然腾讯保证数据的可用性,但是仍然是不应该信任的。数据能否自己导出这个问题楼主你自己并没有说明,就算可以,用户依然无法不依赖于微信来使用,这是个很大的问题。



最后,无论楼主的产品怎么样,被人拿来和其他产品比较是不可避免的。
对比我使用的 KeePass 来看:
KeePass 开源。楼主的程序没有开源。
KeePass 针对各种两步验证提供了解决方案(比如:TOTP )。楼主的产品对此毫无说明。
KeePass 针对对密码管理器的各种攻击做了足够多的措施(比如:对抗密码穷举)。楼主的产品对此毫无说明。
KeePass 本身只依赖于操作系统,并且在多种操作系统上都有对其协议的实现。楼主的产品必须依赖于微信。
KeePass 的数据可以多地保存(无论是各种云产品还是存在本地的物理介质上),楼主的程序并没有说明这个问题。
所以说对比各类竞品楼主的产品并没有什么优势。
v2lhr
2020-10-05 22:27:01 +08:00
@wevsty 首先很荣幸得到你这么用心的回复。

我对密码安全管理这方面知识比较少,我针对你的回复说明一下吧,但不知道对不对,仅供参考。

第一点,关于开源问题,这个是可以考虑的事情,我的想法是帮用户部署一份代码,当然用户可以看到代码。
第二点,查看到密码需要先登录微信然后输入主密码校验,且云开发还有一套鉴权规则。不知道这可不可以算是两步验证。
第三点,抗穷举问题,小程序的云开发有请求次数限制,应该是每天 3w 请求,超过这个数量会有告警。因此一个小程序只适合家庭用。
第三点,小程序依赖微信,微信依赖操作系统,跟 keepass 直接依赖操作系统,我感觉没啥区别。小程序也可以在 ios, android, win, mac 上运行
第四点,我这个小程序也可以在本地保存,
第五点,加密数据是可以导出的,在小程序开发工具的云管理后台可以看到。

可靠性问题,小程序云开发存储是可以付费的,最低是 30 元每月,家庭用其实也不贵,也有两套云环境。我自个用免费的也足够了。
最后还是会绕回使用者必须信任腾讯服务,就像你信任苹果,windows 和其他密码管理工具和它云服务一样。
v2lhr
2020-10-05 22:34:04 +08:00
@wevsty 想请教下抗穷举的原理,要是能拿到加密数据,现实上没法抗穷举吧
ochatokori
2020-10-05 23:02:29 +08:00
@v2lhr #92 这就是热更新啊。。
就是说,你可以不需要用户同意就能更新小程序的代码,也就是说,你可以更新的时候往小程序里面插桩,私有部署的用户是不容易发现的,所以密码泄露的风险和能不能私有部署其实是没关系的
v2lhr
2020-10-05 23:16:24 +08:00
@ochatokori 自用自用,不建议用户用我的小程序,建议用户自己部署一个,想怎么更新怎么来,还有小程序管理员有权决定用户能否使用云存储
xunco
2020-10-05 23:23:41 +08:00
@v2lhr 你直接依赖微信和操作系统是一回事??操作系统可以更换,微信不行,一旦封号,没有任何补救措施

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

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

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

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

© 2021 V2EX