【问题标题】:Store password for passing to another service存储密码以传递给另一个服务
【发布时间】:2019-06-25 08:20:20
【问题描述】:

我编写了一个应用程序来查询需要我通过基本身份验证(标头中的 base64)提供的身份验证的 Jira API。密码存储在代码中,现在必须停止,因为我要交出代码。

当用户因密码计划更改密码时,应用应提示用户输入新的 Jira 密码,安全保存,并通过基本身份验证将其传递给 Jira API。

最好的方法是什么?

通常情况下,我们会对其进行散列,但这是不可能的,因为散列是单向的,我们需要将真实密码而不是散列传递给 Jira。

【问题讨论】:

  • 您要将密码存储在数据库中,对吗?如果是这样,有可能在您的代码上使用带盐的散列来散列并将密码转换回普通字符串。
  • 散列是一种单向“加密”,因此不可能将散列转换回字符串。使用像 AES 这样的对称加密,你所说的是可能的,但是任何有权访问代码的人都可以解密所有密码,因为程序必须有权访问加密密钥。
  • 我认为大多数常见的应用程序都将加密密钥存储在代码中。您可以做的是将加密密钥存储在数据库中并配置表安全性,以便只有应用程序有权读取它。您可以使用行级安全性来执行此操作(例如 sqlshack.com/…

标签: java security passwords jira password-storage


【解决方案1】:

如果存储需要保护的字符串以防出现泄露或作为一般软件数据安全问题,则应进行加密。例如,在您的情况下,当用户获取密码时,应在存储前由软件对其进行加密。检索时,密码被解密并转换为 Jira 接受的用于登录握手的哈希值(或 base64)。

除了简单的加密和解密之外,更好的方法是在加密时使用盐,并在循环中使用多重加密以避免暴力尝试。

伪代码:

unsafe_password = getPasswordFromUser()
salt = getRandomString();
safePassword = encrypt(unsafe_password, salt, key)

// Store the password
putEntryInDB(user, safePassword, salt)

// Retrieve password
[passwordSalt, encryptedPassword] = getSaltAndEncryptedPasswordFromDB()

unsafePassword = decrypt(encryptedPassword, passwordSalt, key)

// Now login into Jira with the actual user's password (unsafePassword)

P.S. You'll be needing to store a key in the code or in some software's configuration.

来源:尝试 4&5 https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/

【讨论】:

  • 在对称加密中添加盐似乎是一种有用的做法。
  • 当然,我同意。另外,我现在觉得我们确实需要更新的方法,因为量子计算即将飞得更高!
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多