首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在用户设备上存储登录信息

问如何在用户设备上存储登录信息
EN

Security用户
提问于 2019-02-15 17:55:12
回答 3查看 959关注 0票数 0

我正在开发一个应用程序,它需要存储各种用户名/密码,以便自动登录到第三方服务,这样用户就不必每次打开应用程序时都插入它们。

但是,我面临着安全存储它们的问题:即使它们保存在用户的硬盘上(除了登录到第三部分应用程序(当我通过一些API将它们发送到服务器)之外,它们仍然保存在硬盘上),但没有什么能阻止恶意程序窃取文件。我希望应用程序是开源的,并且文件的位置不会是秘密的(无论如何,通过默默无闻的安全性在我看来不是一个好主意,但恰恰相反)。我认为也许让用户插入一个密码并对文件进行加密可以解决这个问题,但是我发现它有点多余:用户必须插入密码才能访问他的计算机,不是吗?

我想知道管理用户登录信息的程序(如、OneDrive等)如何在HD上安全地存储用户的密码。

EN

回答 3

Security用户

回答已采纳

发布于 2019-02-19 17:49:33

越来越多的操作系统和运行时环境提供数字钱包的API。还有一些网络让组件可以被像hashicorp和数码方舟这样的企业系统所使用。有很多可供选择的地方。

当您编写您自己的密码管理器时,您将负责您的用户的密码。您还可能将许多用户排除在外。

如果是我,我会编写一个接口,从一个单独的过程获取凭据,然后用一些简单的例子捆绑解决方案。

票数 2
EN

Security用户

发布于 2019-02-15 18:13:01

您有一个典型的安全问题,很容易使用和安全级别。如果希望依赖用户的密码,那么选择一个加密密钥并对密码进行加密,并且在存储密钥时设置ACL,这样只有该用户才能读取密钥。如果您想要更好的安全性,并愿意以较少的易用性生活,那么强制用户输入密码。根据数据量的不同,您可以在密码上使用KDF来生成数据加密密钥,或者如果有大量的数据,则只是用于解密数据加密密钥的密钥加密密钥。我的猜测是,您将没有足够的数据来证明做后者的合理性,您可以只使用密码来生成数据加密密钥。

票数 0
EN

Security用户

发布于 2019-02-19 14:22:13

即使它们保存在用户的硬盘上(除了我登录到第三部分应用程序之外,它们仍然保存在硬盘上),

当我通过一些API将它们发送到服务器时,没有什么能阻止恶意程序窃取文件。

  • 这有点不清楚。你在发送密码文件吗?或者这是指当用户从文件中输入密码时吗?
    1. 如果您正在将整个密码文件发送到Internet的某个地方,加密将解决您的问题。由于这些数据在过境时不需要使用,它们在过境期间仍处于静止状态。
    2. 如果您指的是用户从文件中输入密码,则在传输过程中应使用TLS连接保护密码.按照标准程序。

我的意思是:我希望应用程序是开源的,并且文件的位置不会是秘密的。

  • GPG是应用程序开发的好选择。有一个库和一个名为gpgme的API

我认为也许让用户插入一个密码并对文件进行加密可以解决这个问题,但是我发现它有点多余:用户必须插入密码才能访问他的计算机,不是吗?

  • 加密文件一直保持加密,直到用户输入密码以解除该特定文件的加密为止。所以,这两件事不一定是相关的。

我想知道管理用户登录信息的程序(如、OneDrive等)如何在HD上安全地存储用户的密码。

  • 通常,密码数据库是通过对应用程序编写的任何语言的密码原语的库调用来加密的。

来自的源代码片段,显示密码数据库的解密。

代码语言:javascript
复制
browser/components/migration/ChromeProfileMigrator.js:344:      let rows = await MigrationUtils.getRowsFromDBWithoutLocks(loginPath, "Chrome passwords",
browser/components/migration/ChromeProfileMigrator.js:346:        password_element, password_value, signon_realm, scheme, date_created,
browser/components/migration/ChromeProfileMigrator.js:369:            password: crypto.
browser/components/migration/ChromeProfileMigrator.js:370:                      decryptData(crypto.arrayToString(row.getResultByName("password_value")),
browser/components/migration/ChromeProfileMigrator.js:376:            passwordElement: row.getResultByName("password_element"),
票数 -1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/203639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档