Преобразовать пароль в виде открытого текста в SCRAM (используя Ruby), как MongoDB? - PullRequest
0 голосов
/ 03 июня 2019

Я создал пользователя MongoDB с паролем "86f5ec4fd396195a99b6c2545180676bbb62b86327314399829b4ea00c53":

@mongo_client.command(
  {
    createUser: "my_user",
    pwd:        "86f5ec4fd396195a99b6c2545180676bbb62b86327314399829b4ea00c53",
    roles:      ["readWrite"]
  }
)

Когда я проверяю хешированный пароль SCRAM в MongoDB:

pp @mongo_client.command({usersInfo: 1, showCredentials: true}).documents.first["users"]

вывод:

[{"_id"=>"5cecd7773ab42f4cff2f08dd.myuser",
  "user"=>"myuser",
  "db"=>"5cecd7773ab42f4cff2f08dd",
  "credentials"=>
   {"SCRAM-SHA-1"=>
     {"iterationCount"=>10000,
      "salt"=>"PLoIONQY4paDiiCdwiyBMQ==",
      "storedKey"=>"joVFIIyEgI9sE9nXXS4RXcBeLv4=",
      "serverKey"=>"C3AZBq9hTuwMQtpJXdqZa3ZYKK8="},
    "SCRAM-SHA-256"=>
     {"iterationCount"=>15000,
      "salt"=>"foJnBgfiaKjhAkg9KFSqKGuyb4uhbfvgPoqgpA==",
      "storedKey"=>"8TsZfXwIz9XEKtFY0Ug0XjSn9QAwB7/6XpFc4AjW7Wc=",
      "serverKey"=>"9R9Mj9u4cymqqHGdHBAm4xOjmkuDYQso+jECik4n+Gw="}},
  "roles"=>[{"role"=>"readWrite", "db"=>"5cecd7773ab42f4cff2f08dd"}],
  "mechanisms"=>["SCRAM-SHA-1", "SCRAM-SHA-256"]}
]

Как мне (используя Ruby) преобразовать мой исходный пароль в виде открытого текста в версии SCRAM-SHA-1 / SCRAM-SHA-256, показанные выше?

Документы пишет об SCRAM:

При реализации механизмов аутентификации SCRAM (например, SCRAM-SHA-1 и SCRAM-SHA-256) драйверы ДОЛЖНЫ поддерживать кэш вычисленных учетных данных SCRAM. Записи кэша ДОЛЖНЫ идентифицироваться паролем, солью, количеством итераций и значением, которое однозначно идентифицирует механизм аутентификации (например, «SHA1» или «SCRAM-SHA-256»).

Значение записи в кэше ДОЛЖНО быть либо параметром saltedPassword, либо комбинацией параметров clientKey и serverKey.

...