Як створити хешований пароль SHA-512 для тіні?


62

Попередні питання щодо SF, які я бачив, призвели до відповідей, які створюють хешований пароль MD5.

Хтось має пропозицію створити хешований пароль SHA-512? Я вважаю за краще один вкладиш замість сценарію, але, якщо сценарій є єдиним рішенням, це також добре.

Оновлення

Заміна попередніх версій py2 на цю:

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

4
SHA та MD5 не є шифруванням. Вони алгоритми хешування. Ключова різниця полягає в тому, що хешовані дані не підлягають відновленню. Що вам потрібно зробити?
SmallClanger

Дякую. Модифікував питання. man 5 shadowназиває це "зашифрованим паролем", тому я пішов разом з цим терміном.
Белмін Фернандес

2
Вибачте, якщо це було трохи химерно. Ви намагаєтесь вручну генерувати тіньові хеші паролів? Якщо так, подивіться на ваш /etc/shadowвміст. Ви побачите $x$salt$hash. xпозначає використовуваний алгоритм crypt, який 6є типовим для сучасних Linux, який є sha512 (див. man 3 crypt). Будь-який із наведених нижче відповідей дасть той самий хеш, якщо ви даєте йому ту саму сіль.
SmallClanger

2
О ні, зовсім не хитрі. Ви пояснили щось, у чому я плутався, тому я дуже вдячний пане!
Белмін Фернандес

1
Дякую! На базі пасли - це єдиний, кому я зміг зробити роботу над ОС X.
Stig Brautaset

Відповіді:


65

Ось один вкладиш:

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), він буде використовувати найсильніший доступний.

Ідентифікатор хеша (число після першого $) пов'язаний із використовуваним методом:

  • 1 -> MD5
  • 2a -> Blowfish (не в основному glibc; додається в деяких дистрибутивах Linux)
  • 5 -> SHA-256 (з моменту glibc 2.7)
  • 6 -> SHA-512 (з моменту glibc 2.7)

Я рекомендую вам переглянути, що таке солі та такі, і, як коментують дрібні клагери, різниця між шифруванням та хешированием.

Оновлення 1: Рядок, що випускається, підходить для сценаріїв тіні та початкового старту. Оновлення 2: Попередження. Якщо ви використовуєте Mac, дивіться коментар щодо використання цього в python на mac, де він, здається, не працює так, як очікувалося.


5
Замініть random_saltфактичною випадковою сіллю.
Белмін Фернандес

6
Я не можу змусити це працювати в Йосеміті. Це те, що випльовується: $6asQOJRqB1i2- це не здається майже довгим, щоб бути правильним!
Stig Brautaset

3
Дозвольте модулю склепу зробити сіль для вас: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))'
rrauenza

2
glibc за замовчуванням використовує лише 5000 патронів, що в ці дні є досить слабким. Ви можете вказати кількість раундів, додавши «$ раундів = ###», наприклад: crypt.crypt("test", "$6$rounds=200000$random_salt"). 200000 займає близько 100 мс на моєму теперішньому ноутбуці.
srparish

2
Це не слід використовувати, принаймні на Mac. На Mac (10.13.5) це щоразу повертає той самий неправильний результат.
oskarpearson

37

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

mkpasswd -m sha-512
mkpasswd -m md5

щоб отримати список доступних типів алгоритмів хешування:

mkpasswd -m help 

HTH


3
Який пакет надає його? Також у mkpasswdFedora є програма (частина очікування), але вона для цього марна.
Крістіан Цюпіту

За його словами, версія, про яку mkpasswdвін говорить, призначена для Debian / Ubuntu. У mkpasswdFedora (принаймні до 14) відсутній -mкомутатор.
slm

3
Цікаво, що це пакет Whois, спадщина від Debian. Дивіться, dpkg -S /usr/bin/mkpasswdя сам не міг повірити: D
Rbjz

Щоб перевірити пароль, якщо перша цифра 6, використовуйте частину між другим і третім доларом як сіль. Наприклад для root:$6$AbCdE$xyz:...слід використовувати: mkpasswd -m sha-512 -S AbCdE. При правильному паролі ви повинні отримати той же хеш.
Люк

24

Найкраща відповідь: криптовалюта

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)**

1
Просте рішення ..
працював

4
У системах, у яких є grub-cryptкоманда, це дійсно найбезпечніший та зручний спосіб зробити це. Немає сенсу грати з солями вручну, коли можна було б її накрутити. Проблема полягає в тому, що все більш сучасні системи мають GRUB2 і тому не включають цю команду.
rsaw

11

Ось короткий код 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)>

Цьому питанню 3 роки ...
бурмоче

Цей коментар не такий уже й старий. Симпатичний додаток, який ви там
знайшли

4

Perl однолінійне рішення для генерації хешованих паролів SHA-512:

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

Працював над RHEL 6


2

Чому б не виконати наступну перевірку та модифікацію машин 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

2

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

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

Примітки

  1. Можливо, вам доведеться встановити пакет "whois" (Debian, SuSE тощо), який забезпечує "mkpasswd".
  2. Детальну інформацію про формат рядків див. У крипті (3) у "/ etc / shadow".

На жаль, whoisпакет від Fedora 18 не надає mkpasswd.
Крістіан Цюпіту

1
В Arch Linux: / usr / bin / mkpasswd належить очікувати 5.45-3
Nowaker

Те саме на Fedora 20, і це робить щось інше.
Крістіан Цюпіту

2
На жаль, запропонована команда має дві проблеми: 1) Наданий пароль тепер зберігається в історії вашої оболонки і є видимим для всіх, хто має команду "історія" або подібну. 2) Вам не потрібно вводити випадкову сіль у командному рядку - і я думаю, ви повинні дозволити mkpasswd зробити це за вас замість того, щоб використовувати прийоми funky openssl. (Зверніть увагу, що це справедливо принаймні на Ubuntu Quantal. Ви можете перевірити це, виконавши 'mkpasswd -m sha-512 foo' кілька разів. Ви побачите зміни солі. Сіль - це значення між 2-м та 3-м символами $. )
oskarpearson

2

Прочитайте коментар нижче, щоб дізнатися про наслідки безпеки цієї відповіді

Для тих, хто мислить про Рубі, тут є однолінійний:

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

1
Це неправильно: функція rand Ruby не захищена - вона використовує PRNG, тому це генерує результати, які можуть бути реверсивними, ґрунтуючись на здогадуванні про час / стан моменту, коли ви запустили це.
oskarpearson

1

Цей сценарій працював для мене на 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

Він має такі особливості, яких бракує деяких інших альтернатив:

  • Він генерує свою сіль надійно. Ніхто не повинен покладатися на це вручну. Колись.
  • він не зберігає нічого в історії оболонки.
  • для наочності він друкує, який саме користувальницький пароль він створив, що може бути приємно при створенні багатьох паролів користувачів.

2
Зверніть увагу, це працюватиме лише chpasswdу вашій системі.
Метт Сандерс

FYI: chpasswd не підтримує -S у shadow-utils-4.1.5.1
Saustrup

0

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


Добре, але man cryptмені кажуть, що PBKDF2 не підтримується.
Гюйгенс

0
#!/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


0

Це не один лайнер, але він може допомогти комусь:

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)

randomне є криптографічно захищеним, його os.urandomслід використовувати. 8 символів із словника довжиною 56 символів теж занадто мало. Змагання на жало в пітоні теж погана форма (має складність O (n ^ 2))
Хуберт Каріо

0
$ 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

Очевидно, що ви просто захопите 2-е поле і зможете видалити файл, як тільки ви додасте його в тінь або для використання з sudo (все ще, швидше за все, тінь).


0

Погляньте на сторінку man для crypt (3), і я думаю, що ви побачите, що інструмент для склепіння оновлено для використання glibc і sha256 ($ 5) і sha512 (6 $), кілька раундів, набагато більша сіль і так далі .

Зрозуміло, що SHA512 має відношення до того, як / etc / тінь працює.

З цього приводу ця веб-сторінка була дуже корисною - зокрема MKPASSWD, оскільки це вирішило мою проблему.

З огляду на потенційно "загублений" пароль, я можу використовувати MKPASSWD та сіль, щоб генерувати хеш SHA512 та підтвердити / заперечити список паролів-кандидатів.

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

Зверніть увагу, оскільки у мене достатньо дозволу на читання / запис / тощо / тінь, я можу просто переписати хеш і продовжувати життя ... це академічна вправа.


ПРИМІТКИ Примітки 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.

0

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


-4

Я не впевнений, як пов’язаний SHA-512 /etc/shadow. Ці паролі cryptредагуються.

Але якщо ви хочете, щоб хеш-код пароля з SHA-512, ви можете зробити це за допомогою echo -n the_password | sha512sum. Ви не можете використовувати вихід для / etc / shadow.


2
echo -n the_passwordтак що ви не хеште новий рядок. </
pedant

Паролі shadowвже не робляться crypt () редакторами з багатьох років. Сучасні системи використовують щонайменше md5.
Олександр Янссен

6
Насправді паролі в програмі shadowвсе ще crypt()редагуються, але функція була оновлена ​​для підтримки декількох різних алгоритмів. Незважаючи на те, що метод, описаний у цій відповіді, не дає відповідного хешу /etc/shadow. Алгоритм складніший за один хеш-раунд SHA-512.
оснастка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.