【问题标题】:What is the "simple" hashing algorithm that CouchDB uses to encrypt passwords?CouchDB 用来加密密码的“简单”散列算法是什么?
【发布时间】:2021-08-25 02:18:56
【问题描述】:

(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_SHA1PBKDF2_SHA256 介于 0 和 120000 之间)。”

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

所以我的问题是:

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

【问题讨论】:

    标签: firebase-authentication couchdb sha password-hash


    【解决方案1】:

    我向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. 而且它只是一轮哈希。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-06-27
        • 1970-01-01
        • 2011-12-17
        • 2014-09-05
        • 2011-10-05
        • 2011-02-18
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多