安全存储访问令牌

问题描述 投票:0回答:1

我应该采取哪些安全措施来确保,如果我的数据库受到损害,长寿命访问令牌不会被盗?

长寿命的访问令牌与特定服务的用户名和密码一样好,但从与其他人的交谈来看,似乎大多数人(包括我自己)都以纯文本形式存储访问令牌。这似乎与以纯文本形式存储密码一样糟糕。显然,人们无法对令牌进行加盐和哈希处理。

理想情况下,我想对它们进行加密,但我不确定执行此操作的最佳方法,尤其是在开源项目上。

我想这个问题的答案与存储支付信息和 PCI 合规性的答案类似,但我还想问为什么没有对此进行更多讨论?也许我错过了一些东西。

security encryption oauth access-token
1个回答
13
投票

您只是想验证其他人提供的令牌吗?如果是这样,请将其视为密码。 使用字节派生算法,如基于密码的密钥派生函数 2 (PBKDF2)(也在 RFC 2898 中进行了描述),进行 10,000 次迭代,并在收到令牌时存储前 20 个字节左右。它实际上是不可逆的。

您想将令牌出示给其他人进行身份验证吗?如果是这样,这就是一个挑战,因为如果您的应用程序可以解密或以其他方式访问令牌,那么攻击者也可以。想想 Shannon 的 Maxim,攻击者了解系统,尤其是对于开源项目。

在这种情况下,最好的方法是使用强大的算法(例如 AES256)加密令牌,使用强大的加密标准随机数生成器生成密钥,并将密钥安全地存储在与数据不同的位置,例如在上例中数据库外部的权限保护文件中。后者意味着 SQL 注入攻击不会泄露密钥。

© www.soinside.com 2019 - 2024. All rights reserved.