web-dev-qa-db-fra.com

Comment créer un mot de passe haché SHA512 pour shadow?

Les questions SF précédentes que j'ai vues ont conduit à des réponses qui produisent un mot de passe haché MD5.

Quelqu'un a-t-il une suggestion pour produire un mot de passe haché SHA-512? Je préférerais une ligne unique au lieu d'un script mais, si un script est la seule solution, c'est bien aussi.

Mise à jour

Remplacement des versions précédentes de py2 par celle-ci:

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

Voici une doublure:

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

Python 3.3+ inclut mksalt dans crypt , ce qui le rend beaucoup plus facile (et plus sécurisé) à utiliser:

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

Si vous ne fournissez pas d'argument à crypt.mksalt (il pourrait accepter crypt.METHOD_CRYPT, ...MD5, SHA256, et SHA512), il utilisera le plus fort disponible.

L'ID du hachage (numéro après le premier $) est lié à la méthode utilisée:

  • 1 -> MD5
  • 2a -> Blowfish (pas dans la glibc principale; ajouté dans certaines distributions Linux)
  • 5 -> SHA-256 (depuis glibc 2.7)
  • 6 -> SHA-512 (depuis glibc 2.7)

Je vous recommande de rechercher ce que sont les sels et autres et, selon les petits palpeurs, de commenter la différence entre le cryptage et le hachage.

Mise à jour 1: la chaîne produite convient aux scripts shadow et kickstart. Mise à jour 2: avertissement. Si vous utilisez un Mac, consultez le commentaire sur son utilisation dans python sur un Mac où il ne semble pas fonctionner comme prévu.

69
davey

Sur Debian, vous pouvez utiliser mkpasswd pour créer des mots de passe avec différents algorithmes de hachage adaptés à/etc/shadow. Il est inclus dans le paquet whois (selon apt-file)

mkpasswd -m sha-512
mkpasswd -m md5

pour obtenir une liste des types d'algorithmes de hachage disponibles:

mkpasswd -m help 

HTH

38
mrossi

Meilleure réponse: 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)**
24
Wayne

Voici un court code C pour générer le mot de passe SHA-512 sur divers systèmes d'exploitation de type Unix.

Fichier: 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;
}

compiler:

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

usage:

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

Perl solution à une ligne pour générer le mot de passe haché SHA-512:

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

A travaillé sur RHEL 6

4
Ivan Chau

Lisez le commentaire ci-dessous pour en savoir plus sur les implications de sécurité de cette réponse

Pour ceux de l'état d'esprit Ruby voici un one-liner:

'password'.crypt('$6$' + Rand(36 ** 8).to_s(36))
2
TrueDuality

Voici une ligne qui utilise les commandes Shell pour créer un mot de passe haché SHA-512 avec un sel aléatoire:

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

Remarques

  1. Vous devrez peut-être installer le paquet "whois" (Debian, SuSE, etc.), qui fournit "mkpasswd".
  2. Voir crypt (3) pour plus de détails sur le format des lignes dans "/ etc/shadow".
2
ajchace

Pourquoi ne pas effectuer la vérification et la modification suivantes sur les machines Centos/RHEL pour vous assurer que tout le hachage de mot de passe pour/etc/shadow est effectué avec sha512. Ensuite, vous pouvez simplement définir votre mot de passe normalement avec la commande 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
ckliborn

Ce script a fonctionné pour moi sur 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

Il présente les caractéristiques suivantes qui manquent à certaines des autres alternatives:

  • Il génère son sel en toute sécurité. Personne ne devrait compter sur cette opération manuellement. Déjà.
  • il ne stocke rien dans l'historique Shell.
  • pour plus de clarté, il imprime le mot de passe de l'utilisateur qu'il a généré, ce qui peut être agréable lors de la génération des mots de passe de nombreux utilisateurs.
1
Ztyx

Si vous avez besoin d'une alternative aux monolignes écrites en Perl/python, mkpasswd est une bonne correspondance. Bien qu'il soit inclus dans le paquet whois Debian, il est absent sur les systèmes CentOS/RHEL. J'ai modifié la version Debian de mkpasswd et inclus un mécanisme de génération de sel plus puissant basé sur OpenSSL. Le binaire résultant préserve entièrement tous les paramètres de ligne de commande de la version Debian. Le code est disponible sur github et devrait être compilé sur n'importe quelle version de Linux: mkpasswd

0
Liviu

Ce n'est pas une doublure, mais cela pourrait aider quelqu'un:

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)
0
jordixou

Les algos HASH sont destinés à produire des résumés de MESSAGE, ils ne sont jamais adaptés aux mots de passe, qui devraient utiliser une sorte de HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - voir PBKDF2 ou BCrypt

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

De toute évidence, il vous suffit de saisir le deuxième champ et de supprimer le fichier une fois que vous l'avez ajouté à shadow ou à utiliser avec Sudo (toujours le plus probable shadow).

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

Vous pouvez le cloner depuis mon dépôt github si vous le souhaitez: https://github.com/antoncohen/mksha

0
Anton Cohen

Jetez un œil à la page de manuel de crypt (3) et je pense que vous constaterez que l'outil crypt a été mis à jour pour utiliser glibc et sha256 (5 $) et sha512 (6 $), plusieurs tours, beaucoup plus gros sel, etc. .

Il est clair que SHA512 est pertinent pour le fonctionnement de/etc/shadow.

Cela dit, cette page Web a été très utile - en particulier le MKPASSWD, car cela a résolu MON problème.

Étant donné un mot de passe potentiellement "perdu", je peux utiliser MKPASSWD et le sel, pour générer le hachage SHA512 et confirmer/refuser une liste de mots de passe candidats.

J'utiliserais John l'éventreur - mais au moins sur mon matériel (Raspberry Pi) et mon budget (rien) - John ne peut pas le faire (il ne semble pas prendre en charge les fonctionnalités avancées de crypt/glibc dans la version gratuite de raspbian.

Attention, puisque j'ai suffisamment d'autorisations pour lire/écrire/etc/shadow, JE POURRAIS simplement écraser le hachage et continuer ma vie ... c'est un exercice académique.


NOTES Notes Glibc La version glibc2 de cette fonction prend en charge des algorithmes de cryptage supplémentaires.

   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
joeomniback