CouchDB 用来加密密码的“简单”哈希算法是什么?

问题描述

(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" 使用 SHA1SHA256SHA512PBKDF_SHA1PBKDF2_SHA256。 我的数据库中所有用户的文档都没有 "derived_key"。几乎所有这些都没有定义的 "password_scheme"。如果它们中的任何一个确实有定义的 "password_scheme",则它始终是 "simple"(并且永远不会是 "pbkdf2")。

一旦我确切地知道 CouchDB 使用哪种散列算法,我就需要知道使用了多少轮或迭代来散列密码。
Firebase 文档说:

"您必须提供轮数(对于 SHA1SHA256SHA512,介于 1 和 8192 之间,对于 PBKDF_SHA1 和 {{1} 介于 0 和 120000 之间}}) 用于散列密码。”

但是,我找不到任何关于此的文档/信息。

所以我的问题是:

  1. CouchDB 对“简单”“password_scheme”使用的哈希算法是什么? (是 SHA1、SHA256、SHA512、PBKDF_SHA1、PBKDF2_SHA256 还是其他?)
  2. 使用多少轮或迭代来散列密码?

解决方法

我向 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

所以直接回答这两个问题:

  1. “简单”的 CouchDB 哈希算法使用 SHA1。
  2. 而且这只是一轮散列。
,

为了完整起见,这个 simple 方案不是最新版本的 CouchDB(肯定不是 >= 2)使用的。当前的默认值是使用具有以下值的 pbkdf2

iterations = 10
keylen = 20
size = 16
encoding = 'hex'
digest = 'SHA1'

如果您需要生成或验证 CouchDB 样式的密码,请参阅 couch-pwd