Gölge için bir SHA-512 karma şifresi nasıl oluşturulur?


62

Gördüğüm önceki SF soruları, MD5 karma şifresini üreten cevaplara yol açtı.

Bir SHA-512 karma şifre oluşturmak için önerisi olan var mı? Bir komut dosyası yerine bir liner tercih ederim, ancak bir komut dosyası tek çözüm ise, bu da iyi.

Güncelleme

Önceki py2 sürümlerini bununla değiştirmek:

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

4
SHA ve MD5 şifreleme değil . Algoritmaları var. Önemli fark, karma verilerin kurtarılamaz olmasıdır. Ne yapman gerek?
SmallClanger

Teşekkür ederim. Soruyu değiştirdim. man 5 shadow"şifreli parola" olarak adlandırır, bu yüzden bu terimi kullandım.
Belmin Fernandez

2
Biraz tuhaf olsaydı özür dilerim. El ile gölgeye uyumlu şifre karmaları oluşturmaya mı çalışıyorsunuz? Eğer öyleyse, /etc/shadowiçeriğine bir göz atın . Göreceksin $x$salt$hash. xtarafından kullanılan algoritma anlamına gelmektedir cryptile 6sha512 (bakınız modern linux'lar tipik olarak, man 3 crypt). Aşağıdaki cevaplardan herhangi biri, aynı tuzu verdiğiniz sürece aynı hastayı üretecektir.
SmallClanger

2
Oh hayır, sinsi değil. Kafamı karıştıran bir şeyi açıklığa kavuşturdunuz, bu yüzden minnettarım efendim!
Belmin Fernandez

1
Teşekkür ederim! Passlib tabanlı olan OS X üzerinde çalışabildiğim tek kişi.
Stig Brautaset

Yanıtlar:


65

İşte bir astar:

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

Python 3.3+, kullanımı çok daha kolay (ve daha güvenli) yapan mksaltcrypt içerir :

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

Eğer bir argüman girmezseniz crypt.mksalt(kabul edebileceği crypt.METHOD_CRYPT, ...MD5, SHA256, ve SHA512), bu güçlü kullanılabilir kullanacaktır.

Karma değerinin kimliği (ilk numaradan sonraki sayı $) kullanılan yöntemle ilgilidir:

  • 1 -> MD5
  • 2a -> Blowfish (ana hat glibc'de değil; bazı Linux dağıtımlarında eklendi)
  • 5 -> SHA-256 (glibc 2.7'den beri)
  • 6 -> SHA-512 (glibc 2.7'den beri)

Tuzların neler olduğunu ve küçük krakerlere göre şifreleme ve karmama arasındaki farkı yorumlamanızı öneririm.

Güncelleme 1: Üretilen dize gölge ve hızlı başlangıç ​​komut dosyaları için uygundur. Güncelleme 2: Uyarı. Bir Mac kullanıyorsanız, bunun beklendiği gibi çalışmadığı bir mac üzerinde python'da bunu kullanma hakkındaki yoruma bakın.


5
random_saltGerçek rastgele bir tuzla değiştirin .
Belmin Fernandez

6
Bunun Yosemite’de çalışmasını sağlayamıyorum. Tükürdüğü şey işte bu: $6asQOJRqB1i2- bu doğru olacak kadar uzun görünmüyor!
Stig Brautaset

3
Crypt modül sizin için tuz yapalım: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))'
rrauenza

2
glibc varsayılan olarak sadece bugünlerde oldukça zayıf olan 5000 tur kullanıyor . Örneğin, "$ rounds = ###" ekleyerek tur sayısını belirleyebilirsiniz crypt.crypt("test", "$6$rounds=200000$random_salt"). 200000 mevcut dizüstü bilgisayarımda yaklaşık 100ms alıyor.
srparish

2
Bu, en azından Mac'te kullanılmamalıdır. Mac'te (10.13.5) bu her seferinde aynı sonucu verir.
oskarpearson

37

Debian'da , / etc / shadow için uygun farklı karma algoritmalarına sahip şifreler oluşturmak için mkpasswd komutunu kullanabilirsiniz . Whois paketine dahil edilir (apt-file'a göre)

mkpasswd -m sha-512
mkpasswd -m md5

Kullanılabilir karma algoritma türlerinin listesini almak için:

mkpasswd -m help 

HTH


3
Hangi paket sağlıyor? mkpasswdFedora'nın altında da bir program var (beklentinin bir parçası), ancak bu amaç için işe yaramaz.
Cristian Ciupitu

Söylediği gibi, mkpasswdkonuştuğu versiyon Debian / Ubuntu içindir. Açık mkpasswdFedora'da (en az 14 adet) -manahtar eksik .
slm

3
Tuhaf bir şekilde, bu whois paketi, Debian'ın mirası. Bkz dpkg -S /usr/bin/mkpasswdKendim inanamadım: D
Rbjz

Bir şifreyi kontrol etmek için, ilk rakam 6 ise, ikinci ve üçüncü dolar arasındaki kısmı tuz olarak kullanın. Örneğin için root:$6$AbCdE$xyz:...hangisini kullanmalısınız mkpasswd -m sha-512 -S AbCdE. Doğru şifre ile aynı hash almalısınız.
Luc

24

En iyi cevap: 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)**

1
Basit bir çözüm .. CentOS 6'da benim için
çalıştı

4
grub-cryptKomutu olan sistemlerde , bu gerçekten en kusursuz ve en kolay yoludur. Tuzladığın zaman tuzlarla elle oynamanın anlamı yok. Sorun, gittikçe daha fazla modern sistemin GRUB2 değerine sahip olması ve bu nedenle bu komutu içermemesidir.
rsaw

11

İşte çeşitli Unix tipi işletim sistemlerinde SHA-512 şifresini oluşturmak için kısa bir C kodu.

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

derlemek için:

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

kullanımı:

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

Bu soru 3 yaşında ...
Huysuz

Bu yorum o kadar eski değil. Elinizde şirin uygulama var, o sadece
1up,

4

SHA-512 karma şifreyi oluşturmak için Perl bir liner çözümü:

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

RHEL 6'da çalıştı


2

Neden / etc / shadow için tüm parolanın sha512 ile yapıldığından emin olmak için Centos / RHEL makinelerinde aşağıdaki kontrol ve değişikliklerin yapılmaması için. O zaman passworkd komutunu normal olarak passwd komutuyla ayarlayabilirsiniz.

#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

İşte rastgele bir tuz ile bir SHA-512 karma şifresi oluşturmak için kabuk komutlarını kullanan bir liner:

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

notlar

  1. "Mkpasswd" sağlayan "whois" paketini (Debian, SuSE vb.) Kurmanız gerekebilir.
  2. "/ Etc / shadow" içindeki satırların biçimi hakkında ayrıntılı bilgi için şifreye (3) bakın.

Ne yazık ki, whoisFedora 18'den gelen paket herhangi bir şey sağlamıyor mkpasswd.
Cristian Ciupitu

1
Arch Linux'ta: / usr / bin / mkpasswd beklememiz aittir 5,45-3
Nowaker

Fedora 20'de de aynıdır ve başka bir şey yapar.
Cristian Ciupitu

2
Maalesef önerilen komutun iki sorunu var: 1) Verilen şifre artık kabuğunuzun geçmişinde saklanıyor ve 'geçmiş' komutuna veya benzerine sahip herkes tarafından görülebiliyor. 2) Komut satırında rastgele tuz vermeniz gerekmez - ve bence funky openssl numaralarını kullanmak yerine mkpasswd'nin sizin için yapmasına izin vermelisiniz. (Bunun en azından Ubuntu Quantal'da geçerli olduğunu unutmayın. Birden fazla kez 'mkpasswd -m sha-512 foo' komutunu kullanarak test edebilirsiniz. Tuz değişikliklerini göreceksiniz. Tuz, 2. ve 3. $ karakterleri arasındaki değerdir. )
oskarpearson

2

Bu yanıtın güvenlikle ilgili etkileri hakkında bilgi edinmek için aşağıdaki yorumu okuyun

Yakut zihniyet olanlar için burada bir tek astar:

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

1
Bu yanlıştır: Ruby'nin rand işlevi güvenli değildir - bir PRNG kullanır, bu nedenle, bu işlemi çalıştırdığınız anın / durumun bir tahminine dayanarak tersine mühendislik yapılabilir.
oskarpearson

1

Bu komut benim için Ubuntu 12.04 LTS'de çalıştı: 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

Diğer alternatiflerin bir kısmının bulunmadığı aşağıdaki özelliklere sahiptir:

  • Tuzunu güvenli bir şekilde üretir. Kimse bunu manuel olarak yapmaya güvenmemelidir. Hiç.
  • Kabuk tarihinde hiçbir şey saklamaz .
  • netlik açısından, birçok kullanıcının şifresini oluştururken iyi olabilecek hangi kullanıcının şifresini oluşturduğunu gösterir.

2
Bunun yalnızca chpasswdsisteminizde varsa işe yarayacağını unutmayın .
Matt Sanders,

FYI: chpasswd shadow-utils -S'de -S'yi desteklemiyor-4.1.5.1
Saustrup

0

HASH algoları, MESSAGE özeti üretmek içindir, bir tür HKDF kullanması gereken şifreler için asla uygun değildirler ( http://tools.ietf.org/rfc/rfc5869.txt ) - PBKDF2 veya BCrypt'a bakınız.


İyi nokta, ancak man cryptPBKDF2'nin desteklenmediğini söylüyor.
Huygens

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

İsterseniz onu github depomdan klonlayabilirsiniz: https://github.com/antoncohen/mksha


0

Tek bir astar değil, ama birine yardım edebilir:

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)

randomkriptografik olarak güvenli değil, os.urandomkullanılmalıdır. 56 karakter uzunluğundaki sözlükten 8 karakter çok az. Python'da tekrar tekrar acı hissetmek de kötü bir biçimdir (O ​​(n ^ 2) karmaşıklığına sahiptir)
Hubert Kario

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

Açıkçası, sadece 2. alanı kaparsınız ve dosyayı gölgeye ekledikten sonra veya sudo ile kullanmak için silebilirsiniz (yine de büyük olasılıkla gölge).


0

Crypt (3) için man sayfasına bir göz atın ve crypt aracının glibc ve sha256 (5 $) ve sha512 (6 $), çoklu turlar, çok daha büyük tuz vb. Kullanmaya güncellendiğini göreceksiniz. .

Açıkçası SHA512 / etc / shadow'ın nasıl çalıştığıyla ilgilidir.

Bununla birlikte, bu web sayfası çok yardımcı oldu - özellikle de MKPASSWD, MY problemini çözdü.

Potansiyel olarak "kayıp" bir parola verildiğinde, SHP512 karma değerini oluşturmak için MKPASSWD ve tuzu kullanabilir ve aday parolaların bir listesini onaylayabilir / reddedebilirim.

Yırtıcı John'u kullanırdım - ama en azından benim donanımımda (Raspberry Pi) ve bütçemde (hiçbir şey) - John bunu yapamaz (ahududu ücretsiz sürümünde gelişmiş crypt / glibc işlerini desteklemiyor gibi görünmüyor).

Unutma, okuma / yazma / etc / shadow için yeterli izne sahip olduğum için, karmaşanın üzerine yazabilir ve yaşama devam edebilirim ... bu akademik bir egzersiz.


NOTLAR Glibc notları Bu fonksiyonun glibc2 sürümü ek şifreleme algoritmalarını destekler.

   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 ile yazılmış bir liner seçeneğine ihtiyacınız varsa, mkpasswd iyi bir eşleşmedir. Debian whois paketine dahil olmasına rağmen, CentOS / RHEL sistemlerinde eksik. Mkpasswd'nin Debian versiyonunu değiştirdim ve OpenSSL'ye dayanan daha güçlü bir tuz üretme mekanizması dahil ettim. Ortaya çıkan ikili, tüm Debian'ın sürüm komut satırı parametrelerini tamamen korur. Kod github'da avaiable ve herhangi bir Linux lezzetinde derlenmelidir: mkpasswd


-4

SHA-512'nin ne ile ilgili olduğundan emin değilim /etc/shadow. Bu şifreler crypted.

Ancak, SHA-512 ile şifrelenmiş bir şifre istiyorsanız, bunu yapabilirsiniz echo -n the_password | sha512sum. / Etc / shadow için çıktıyı kullanamazsınız.


2
echo -n the_passwordDemek yeni çizgiye sahip değilsin. </pedant>
SmallClanger 11:11

Şifreler shadowyıllar içinde daha fazla şifreli değildir (). Modern sistemler en az md5 kullanır.
Alexander Janssen

6
Aslında şifreleri shadowhala crypt()ed ama fonksiyon birçok farklı algoritmayı desteklemek için güncellendi. Ne olursa olsun, bu cevapta açıklanan yöntem için uygun karma üretmez /etc/shadow. Algoritma, tek bir SHA-512 karma turundan daha karmaşıktır.
ek bileşeni
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.