Вывод Slappasswd рандомизируется

Большинство, которое я когда-либо видел на экземпляре SQL Server, было 3 500 базами данных, просто застенчивыми из общих данных петабайта. Было интересно видеть окна sql кластер со специализированным SAN. На стороне отмечают, что был также кластер услуг по анализу со своим собственным выделенным san также. Я понятия не имею, сколько кубов было на том экземпляре.

Поскольку я редко имею дело с mysql (я только сделал миграции с mysql на SQL-сервер), и никогда не имели дело с пост-ГРЭС, я не могу прокомментировать масштабируемость тех платформ. Самым большим mysql сервером, который я видел, были 10 DBS приблизительно с 4 терабайтами общего количества данных.

9
задан 10 April 2015 в 05:25
2 ответа

Рискуя здесь, но я предполагаю, что slappasswd использует соленый хеш вместо простого хеша. Это означает, что добавляет случайный префикс к Вашему паролю и сохраняет тот случайный префикс как часть строки, которую Вы видите в выводе slappasswd. При вводе пароля он добавляет префикс к нему, хеширует результат и сравнивает это со строкой в выводе slappasswd. Если это соответствует, Вы находитесь в. Если это не делает, Вы, пароль был неправильным :)

8
ответ дан 2 December 2019 в 22:26

SSHA - это соленый SHA-1. По умолчанию последние 4 байта - это соль. Вывод slappasswd -

'{<Hash Method>}<base64 converted hash and salt>'

Поэтому, чтобы проверить, равен ли обычный текстовый пароль соленому SHA, необходимо:

  1. протрите хэш-метод-спецификатор, например, с помощью sed.
  2. расшифровать base64 string
  3. извлечь последние 4 байта, это соль
  4. связать соль с обычным текстовым паролем
  5. хэшем it
  6. сравнить

Строка base64-декодированная содержит хэш в двоичном виде и не может быть распечатана, поэтому мы будем преобразовывать его в hexx с od. Первые 3 шага выполняются следующим кодом:

#!/bin/bash
output=$(slappasswd -h {SSHA} -s password)
hashsalt=$( echo -n $output | sed 's/{SSHA}//' | base64 -d)
salt=${hashsalt:(-1),(-4)}
echo $output
echo $(echo -n $hashsalt | od -A n -t x1)
echo "Salt: $salt"

Вывод может быть:

{SSHA}fDu0PgKDn1Di9W1HMINpPXRqQ9jTYjuH

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8 d3 62 3b 87
<------------------------- Hash --------------------------> <-- Salt-->

Salt: ▒b;▒

Итак, теперь мы должны соединить соль с обычным текстовым паролем и хэшем, на этот раз без соли! Проблема была в том, что я понял, что соль действительно может быть любым символом, включая непечатаемые символы. Чтобы скомкатинировать эти непечатаемые символы, мы будем использовать printf и их шестнадцатиричные представления:

slappasswd -h {SHA} -s $(printf 'password\xd3\x62\x3b\x87') | sed 's/{SHA}//' | base64 -d | od -A n -t x1

Вывод:

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8

Что равнозначно хэшу, приведенному выше. Теперь мы проверили, что 'пароль' соответствует соленому SHA.

Спасибо и дальнейшее чтение: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm

8
ответ дан 2 December 2019 в 22:26

Теги

Похожие вопросы