问题描述
(TL;DR:我在底部有两个问题。)
我一直在查看 CouchDB 的文档以了解其散列算法,但我找不到重要的细节。
我收集的最多信息来自此页面:1.5.2. Authentication Database
这是我的问题:
我在 Cloudant 上的 CouchDB 实例的 _users
数据库中有一堆用户。
我需要能够将用户从 CouchDB 迁移到 Firebase。
Firebase 为此提供 a super-handy-dandy auth migration tool。但是,为了利用其身份验证迁移工具,我需要确切知道 "simple"
password_scheme
正在使用哪种散列算法。
对于 _users 数据库中的每个用户,我都有 "salt"
和 "password_sha"
可用。
鉴于名称 "password_sha"
,我假设 "simple"
"password_scheme"
使用 SHA1
、SHA256
、SHA512
、PBKDF_SHA1
或PBKDF2_SHA256
。
我的数据库中所有用户的文档都没有 "derived_key"
。几乎所有这些都没有定义的 "password_scheme"
。如果它们中的任何一个确实有定义的 "password_scheme"
,则它始终是 "simple"
(并且永远不会是 "pbkdf2"
)。
一旦我确切地知道 CouchDB 使用哪种散列算法,我就需要知道使用了多少轮或迭代来散列密码。
Firebase 文档说:
"您必须提供轮数(对于 SHA1
、SHA256
和 SHA512
,介于 1 和 8192 之间,对于 PBKDF_SHA1
和 {{1} 介于 0 和 120000 之间}}) 用于散列密码。”
但是,我找不到任何关于此的文档/信息。
所以我的问题是:
- CouchDB 对“简单”“password_scheme”使用的哈希算法是什么? (是 SHA1、SHA256、SHA512、PBKDF_SHA1、PBKDF2_SHA256 还是其他?)
- 使用多少轮或迭代来散列密码?
解决方法
我向 a few chats linked in the CouchDB homepage 发布了同样的问题,CouchDB 的所有者 Robert Newson 告诉我以下in Slack:
“简单”是一轮SHA-1(加盐) https://github.com/apache/couchdb/blob/main/src/couch/src/couch_passwords.erl#L26
所以直接回答这两个问题:
- “简单”的 CouchDB 哈希算法使用 SHA1。
- 而且这只是一轮散列。
为了完整起见,这个 simple
方案不是最新版本的 CouchDB(肯定不是 >= 2)使用的。当前的默认值是使用具有以下值的 pbkdf2
:
iterations = 10
keylen = 20
size = 16
encoding = 'hex'
digest = 'SHA1'
如果您需要生成或验证 CouchDB 样式的密码,请参阅 couch-pwd。