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.
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)))"
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:
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.
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
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)**
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)>
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
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))
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
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
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:
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
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)
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
$ 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).
#!/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
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.