开源软件中如何安全存储用户密码?

239 天前
 axy173

我正在开发一款开源的阅读软件,为了实现同步需要让用户输入 WebDAV 账号和密码。

然而账号和密码都需要保存在本地,即使加密后存储,密钥也会在源码中公开。所以这似乎很难保证密码安全。

因此,我希望请教各位有没有什么安全且实用的密码存储方案,能够应对开源软件的这种情况?

1611 次点击
所在节点    问与答
11 条回复
baobao1270
239 天前
用系统的密码管理方案。
Windows 有「凭据管理器」
macOS 有「钥匙串」
Linux……这个碎片化比较严重,不同的 DE 有不同的管理方案
AoEiuV020JP
239 天前
让用户输入密码使用,
chrome Windows 上的做法是,不作为,密码随便拿,能读取 chrome 数据就是 chrome 的主人,
chrome Linux 上的做法,使用桌面提供的 keyring ,默认第一次启动时设置密码,之后每次启动 chrome 都要输入密码,
jifengg
239 天前
不是,“密钥也会在源码中公开”,你源码里的也应该只是一个示例密钥啊,你自己编译的时候肯定换成不公开的密钥啊
lltlo
239 天前
账号和密码组合起来,然后加盐各种变换,再取 hash 值存储起来?
即使是开源的,即使拿到了存储起来的 hash 值,也没法反推出原始账号和密码,必须输入原始的帐号和密码,再走一次计算流程,与存储起来的 hash 值对比,一致才认为帐号和密码是正确的。
axy173
239 天前
@baobao1270 我在用 Flutter 开发,还需要满足移动端的要求,所以希望有一个统一的做法。

@AoEiuV020JP 用户需要提供一个 WebDAV 服务的账号和密码,然后存起来,我的软件需要这个账号和密码来上传、下载文件。

@jifengg 确实是方便有效,但还是想要完整公开所有的内容。

@lltlo 我不需要判断密码是否正确,只是存下来,之后软件需要凭借这个账号密码来向 WebDAV 服务器请求数据,担心的是本地存下来后如何保证不被窃取。
AoEiuV020JP
239 天前
@axy173 #5 就是两种做法,
一种默认能操作 app 私有数据的就是 app 的主人,不设防,
一种是 app 设置“应用密码”,用户通过密码访问其他一切私密数据包括你这里的 webdav 账号密码,都用这个应用密码加密保存,
具体到各端还可以考虑用平台限定的技术加密保存这个“应用密码”以简化操作,比如安卓用指纹加密,ios 用人脸,没有的就不保存这个“应用密码”,用户必须输入密码,
当然也可以结合两者,“应用密码”做成开关,关闭时不设防,
KongLiu
239 天前
第一次启动的时候随机生成一个盐值保存起来,然后账号密码用生成的盐值存储,不过这种办法也只是增加盗取难度
lltlo
239 天前
因为 app 是开源的,所以本地存储的数据必须要有外部数据参与,要么每次登录的时候输入一个管理密码,用这个管理密码来加密、解密数据文件,要么取本地硬件信息来参与加密、解密数据文件,这样只要不在同一台机器,即使数据文件被别人拷贝走,也解密不了。
oneisall8955
239 天前
设计的时候尽量使用浏览器请求(密码存储到浏览器)

如果确实需要后端调用,Demo 站点每日清空&重置数据库

后端存储敏感信息使用非对称加密

私钥公钥作为配置项,Demo 站点的配置项不要暴露在源码
qiaorenzhi
239 天前
1 、使用 OAuth 或 OpenID Connect 等身份验证协议:可以考虑使用第三方身份验证服务,如 Google 、Facebook 等提供的 OAuth 服务,或者使用 OpenID Connect 等开放标准,让用户通过第三方认证,并获取令牌来访问 WebDAV 服务,而无需直接存储用户密码。
2 、使用单向哈希函数存储密码:将用户密码通过单向哈希函数(如 bcrypt 、PBKDF2 )进行哈希,然后将哈希后的值存储在本地。这样即使源代码泄露,也无法直接获取用户的原始密码。在用户登录时,将其输入的密码再次哈希并与存储的哈希值进行比对。但需要注意选择适当的哈希算法和加盐策略来增加安全性。
leonshaw
239 天前
让用户设置一个主密码来加密应用密码,主密码存系统钥匙链或者启动时输入。

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

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

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

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

© 2021 V2EX