问题标签 [password-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 对密码存储文件进行重放攻击的有效解决方案是什么?
如何有效地阻止对包含用户名及其密码的密码文件的重放攻击?我有兴趣防止的攻击如下:
- 爱丽丝的密码是 A。
- Mallory 知道密码 A。
- Alice 将她的密码更改为 B。
- Mallory 将密码文件替换为 Alice 的密码为 A 时使用的密码文件。
- Mallory 使用密码 A 验证为 alice。
显然,仅依靠操作系统读/写权限是不够的,或者将未散列的密码存储为明文也足够了。
真实系统是如何做到的?如果我用旧的替换我的 /etc/shadow 怎么办?
unicode - 散列时适合密码的 Unicode 规范化(和其他处理)是什么?
如果我接受完整的 Unicode 密码,我应该如何在将字符串传递给哈希函数之前对其进行规范化?
目标
如果没有规范化,如果有人ma\u00F1ana
在一台计算机ma\u006E\u0303ana
上将他们的密码设置为“mañana”(这是在用户代理或其操作系统的控制之下。
- 我想确保这些哈希值相同。
- 我不关心诸如Α、А 和 A(希腊语、西里尔语、拉丁语)之类的同形文字。
参考
Unicode 规范化形式:http ://unicode.org/reports/tr15/#Norm_Forms
注意事项
- 任何标准化过程都可能导致冲突,例如
"office" == "office"
。 - 规范化可以改变字符串中的字节数。
进一步的问题
- 如果服务器接收到无效的 UTF-8(或其他格式)的字节序列会发生什么?拒绝,因为它不能被规范化?
- 如果服务器接收到在其 Unicode 版本中未分配的字符会怎样?
node.js - 使用 pbkdf2 的 SALT 和 HASH
我正在使用以下方法从 nodejs 中的加密库创建一个加盐和散列的密码:
对于 randomBytes 调用(创建 SALT)我应该使用什么大小?我听说过 128 位的盐,可能高达 256 位。看起来这个函数使用字节大小,所以我可以假设 32(256 位)的大小就足够了吗?
对于 pbkdf2 调用,什么是合适的迭代次数以及密钥 (keylen) 的合适长度是多少?
此外,对于存储,我已经看到将盐、长度、迭代和 derviedkey 存储在同一列中的示例。我正在使用一个将 4 分开的示例::
,即:
这样做,然后我可以分离::
以获取 4 个值,因此我可以根据提供的密码生成派生密钥以查看它是否匹配。这是存储它的正确方法吗?或者我应该在结合这些价值观时更具“欺骗性”吗?
c++ - 在简单的密码管理器中更新密码
我正在使用 C++ 开发一个简单的密码管理器,我想知道如何在关闭程序后更新我的密码。
如果我更新程序中的密码,我相信它们会在我退出程序后恢复到源代码中的内容。有没有办法在程序关闭后使更改持久化?
当我更改密码时,没有将密码列表一遍又一遍地写入输出文件,还有其他方法吗?
database - 安全存储无法加密的凭据
我有一个客户正在运行来自多个帐户的信息聚合器。数据库需要将用户名和密码存储到其他网站,以便稍后脚本可以使用该方式登录这些网站以检索数据。
我认为我们可以对它们进行哈希存储,而不是将它们存储为纯文本。显然,如果有人可以访问代码和数据库,他们仍然可以访问纯文本版本,但如果他们只有一个或另一个,则不能。
有更好的想法吗?
ruby - 如何使用 CouchRest 和 BCrypt 在 CouchDB 中存储密码?
虽然,这不是 CouchDB 特定的,但我使用的库是. 我在 Ruby 中使用couchrest_model创建User
如下模型:
我对这里的密码存储感到困惑。我想使用 BCrypt 但是当我做这样的事情时:
我被告知这User::BCryptHash
是一个未初始化的常数。我当然需要bcrypt
事先图书馆。您能帮我解决 BCrypt 问题或建议在 CouchDB 中存储密码的不同方式吗?我已经查看了哈希密码,但是我不确定如何实现这一点。
security - 针对不同客户的全公司密码方案
考虑一家在交付过程中交付计算机网络的公司。它为数百个不同的客户做到了这一点。所有电脑都需要有安全密码。这至少意味着:
- 密码应符合基本密码规则(大写、数字、特殊字符等)
- 不同的客户不应使用相同的密码。
- 密码不应该很容易被猜到。
- 如果可能,网络中的不同 PC 不应使用相同的密码(但这样做可能是可以接受的)。
- 由于还需要在交付过程中维护这些系统,因此操作员需要能够轻松检索特定系统的密码,而不会导致任何安全问题(例如在电子邮件中转发密码等)。
以下是我关于这种设置的问题:
- 是否建议创建一个密码方案,以便操作员无需查找即可“计算”密码?【问题是,一旦方案公开,所有系统都会出现安全问题。】
- 应如何存储/检索密码以获得良好的安全性?[是否有可用于通过 Web 界面访问安全数据库的程序?]
我在调查期间发现了 WebKeePass(看起来很有希望)。另一种选择是打印密码并将其保存在地下室废弃厕所的上锁文件柜中,门上写着“小心豹子”?但我相信这对运营商来说并不方便。我想知道其他选择是什么......
更新: “网络”界面不必对公众开放(即,它只能在 VPN 内访问)。
aes - 将密码存储在 AES 容器中
我知道将密码存储为加盐哈希,而且我知道它对于 Linux 来说甚至足够安全。但甚至在我知道这一点之前,我就想知道将密码存储在使用密码本身加密的 AES 容器中是否安全。
万一我的问题变得难以理解,一些pythonish伪代码:
php - 一遍又一遍地将密码重新应用到密码是否有帮助?
由于 PHP sha1() 可以通过与一长串哈希值进行比较很容易地被破坏 - 这会更好吗(基本上 - 一遍又一遍地应用 sha1() 来尝试通过减慢哈希过程来使暴力破解变得不切实际) :
.net - 在应用程序中安全存储密码的任何方式
我非常有信心,答案是否定的,但我想涵盖我所有的基础。
在 .net 的上下文中,有没有办法编写一个应用程序,而不是 Web 应用程序或服务,而是一个可以访问服务的应用程序,而最终用户无法直接访问相同的服务?
或者,更具体地说,有什么方法可以在应用程序或应用程序和文件(用户也可以访问两者)中存储密码、某种形式的凭据,我可以自信地声明用户不能用于提取凭据并获得对该服务的一般访问权限?
我知道我可能会使这变得非常困难,但我的印象是,鉴于这种情况和设置,我无法或多或少地无法检索这些凭据和密码。有什么方法可以做到这一点,我可以向相关方保证它是安全的?