Назад | Перейти на главную страницу

Как создать хешированный пароль SHA512 для тени?

Предыдущие вопросы по SF, которые я видел, привели к ответам, которые дают хешированный пароль MD5.

Есть ли у кого-нибудь предложение создать хешированный пароль SHA-512? Я бы предпочел один лайнер вместо скрипта, но если скрипт является единственным решением, это тоже нормально.

Обновить

Замена предыдущих версий py2 на эту:

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

Вот один лайнер:

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

Python 3.3+ включает mksalt в склепе, что значительно упрощает (и делает более безопасным) использование:

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

Если вы не аргументируете crypt.mksalt (он мог принять crypt.METHOD_CRYPT, ...MD5, SHA256, и SHA512), он будет использовать самые сильные из доступных.

ID хеша (число после первого $) связано с используемым методом:

  • 1 -> MD5
  • 2a -> Blowfish (не в основной glibc; добавлен в некоторые дистрибутивы Linux)
  • 5 -> SHA-256 (начиная с glibc 2.7)
  • 6 -> SHA-512 (начиная с glibc 2.7)

Я бы порекомендовал вам посмотреть, что такое соли и тому подобное, и, согласно smallclamgers, прокомментировать разницу между шифрованием и хешированием.

Обновление 1: полученная строка подходит для сценариев теней и кикстарта. Обновление 2: Предупреждение. Если вы используете Mac, см. Комментарий об использовании этого в python на Mac, где он работает не так, как ожидалось.

В Debian вы можете использовать mkpasswd для создания паролей с разными алгоритмами хеширования, подходящими для / etc / shadow. Он входит в пакет whois (согласно apt-файлу)

mkpasswd -m sha-512
mkpasswd -m md5

чтобы получить список доступных алгоритмов хеширования, введите:

mkpasswd -m help 

HTH

Лучший ответ: grub-crypt

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**

Вот короткий код C для генерации пароля SHA-512 в различных операционных системах типа Unix.

Файл: passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

компилировать:

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

использование:

passwd-sha512 <password> <salt (16 chars max)>

Perl однострочное решение для генерации хешированного пароля SHA-512:

perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'

Работал на RHEL 6

Вот однострочник, который использует команды оболочки для создания хешированного пароля SHA-512 со случайной солью:

[root @ host] mkpasswd -m sha-512 MyPAsSwOrD $ (openssl rand -base64 16 | tr -d '+ =' | head -c 16)

Ноты

  1. Возможно, вам потребуется установить пакет «whois» (Debian, SuSE и т. Д.), Который предоставляет «mkpasswd».
  2. См. Crypt (3) для получения подробной информации о формате строк в "/ etc / shadow".

Почему бы не выполнить следующую проверку и модификацию машин Centos / RHEL, чтобы гарантировать, что все хеширование паролей для / etc / shadow выполняется с помощью sha512. Затем вы можете просто установить свой passworkd в обычном режиме с помощью команды passwd

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi

Прочтите комментарий ниже, чтобы узнать о последствиях этого ответа для безопасности.

Для тех, кто придерживается мировоззрения Ruby, вот одна строка:

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))

Этот сценарий работал у меня на Ubuntu 12.04 LTS: https://gist.github.com/JensRantil/ac691a4854a4f6cb4bd9

#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512

Он имеет следующие функции, которых не хватает некоторым другим альтернативам:

  • Он надежно генерирует соль. Никто не должен делать это вручную. Когда-либо.
  • это не хранит что-нибудь в истории оболочки.
  • для ясности он выводит сгенерированный пароль пользователя, что может быть удобно при генерации паролей многих пользователей.

Если вам нужна альтернатива однострочникам, написанным на perl / python, mkpasswd - хороший вариант. Хотя он включен в пакет Debian whois, он отсутствует в системах CentOS / RHEL. Я модифицировал версию mkpasswd для Debian и включил более сильный механизм генерации соли, основанный на OpenSSL. Полученный двоичный файл полностью сохраняет все параметры командной строки версии Debian. Код доступен на github и должен компилироваться для любого варианта Linux: mkpasswd

Взгляните на страницу руководства для crypt (3), и я думаю, вы обнаружите, что инструмент crypt был обновлен для использования glibc и sha256 (5 долларов США) и sha512 (6 долларов США), нескольких раундов, гораздо большей соли и т. Д. .

Очевидно, что SHA512 имеет отношение к тому, как работает / etc / shadow.

Тем не менее, эта веб-страница была очень полезной - в частности, MKPASSWD, поскольку это решило МОЮ проблему.

Учитывая потенциально «утерянный» пароль, я могу использовать MKPASSWD и соль, чтобы сгенерировать хэш SHA512 и подтвердить / отклонить список возможных паролей.

Я бы использовал John the ripper - но, по крайней мере, на моем оборудовании (Raspberry Pi) и моем бюджете (ничего) - Джон не может этого сделать (похоже, он не поддерживает расширенный материал crypt / glibc в бесплатной версии raspbian.

Имейте в виду, поскольку у меня достаточно прав для чтения / записи / etc / shadow, Я МОЖЕТ просто перезаписать хеш и продолжать жить ... это академическое упражнение.


ПРИМЕЧАНИЯ Примечания к Glibc Версия этой функции для glibc2 поддерживает дополнительные алгоритмы шифрования.

   If salt is a  character  string  starting  with  the  characters
   "$id$" followed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine, id identifies the encryp‐
   tion method used and this then determines how the  rest  of  the
   password  string is interpreted.  The following values of id are
   supported:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So  $5$salt$encrypted  is  an  SHA-256  encoded   password   and
   $6$salt$encrypted is an SHA-512 encoded one.
$ htpasswd -c /tmp/my_hash user1
New password: 
Re-type new password: 
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30

Очевидно, вы просто берете второе поле и можете удалить файл после того, как добавите его в тень или для использования с sudo (все еще скорее всего shadow).

Это не один лайнер, но может кому-то помочь:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)
#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

Вы можете клонировать его из моего репозитория на github, если хотите: https://github.com/antoncohen/mksha

Алгоритмы HASH предназначены для создания дайджестов MESSAGE, они никогда не подходят для паролей, которые должны использовать какой-то HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - см. PBKDF2 или BCrypt

Удивительно, но ни один ответ не предполагает простого openssl passwsd команда с -6 вариант. Может, его еще не было в 2011 году?

Если вам все равно, что вводить пароль в командной строке (рискуя остаться в истории команд), вы можете сделать:

openssl passwd -6 YourPassword

Он сгенерирует соль и выведет такую ​​строку:

$6$/57kpVAA/kuPUtzV$Ugxo0RTL2uXCvU7WH43c1qn0quMy2ve.qiBYJPG75tFgTN8gI5Jp/FYPXFOzIsASqVTqM42kjN2805VYLHKzm1

С stdin вариант, он также может считывать пароль из STDIN (или файла), поэтому вы не оставляете его в истории:

openssl passwd -6 -stdin

Я не уверен, как SHA-512 связан с /etc/shadow. Эти пароли cryptизд.

Но если вы хотите, чтобы пароль был хеширован с помощью SHA-512, вы можете сделать это с помощью echo -n the_password | sha512sum. Вы не можете использовать вывод для / etc / shadow.