Slappasswd çıktı rastgele


10

Ben slappasswdsabit bir karma üretmek için bekliyordum ama asla aynı giriş şifresi için aynı çıktıyı almak gibi çıktı rastgele görünüyor:

$ slappasswd -s secret
{SSHA}mCXsPZkfgQYZr2mKHpy5Iav+2S2XlVU3
$ slappasswd -s secret
{SSHA}62oXsalJBuopYfHhi6hGp6AESuWNIVnd
$ slappasswd -s secret
{SSHA}0Ulc8+ugMi3NbTtWnclOFW1LKCqRdsT8

Kimlik doğrulama sırasında, slapd , sağlanan parola için karma değerini ilk etapta tanımlanan parolayla eşleştirmek için nasıl aynı şekilde rasgele sıralayacağını nasıl bilir?

Yanıtlar:


8

Burada bir uzuv çıkıyor, ama slappasswd düz bir karma yerine tuzlu bir karma kullandığını varsayalım. Bu, şifrenize rastgele bir önek eklediği ve bu rastgele öneki slappasswd çıktısında gördüğünüz dizenin bir parçası olarak kaydedeceği anlamına gelir. Parolanızı yazdığınızda, bu paranın önekini ekler, sonucu toplar ve slappasswd çıktısındaki dizeyle karşılaştırır. Eşleşirse, içindesiniz. Değilse, şifreniz yanlıştı :)


3
Aslında. Özellikle için varsayılan karma yöntemi slappasswd{SSHA} veya SHA-1'in tuzlanmış versiyonudur.
justarobert

Kabul ediyorum, ancak sorum devam ediyor: tuz karma işleminin bir parçası olarak biterse, bu işlem karma şifreden tuz elde edemeyeceğiniz anlamına gelir. Buna göre, slapd şifre doğrulaması yaparken hangi tuzu ilave edeceğini nasıl biliyor? (karma şifrelerin aynı olması için aynı tuzu eklemelidir).
Maksimum

3
@user: Parça sonra {SSHA}içeren her iki tuz ve karma.
user1686

8

SSHA tuzlanmış bir SHA-1'dir. Varsayılan olarak son 4 Bayt tuzdur. Slappasswd çıktısı

'{<Hash Method>}<base64 converted hash and salt>'

Bu nedenle, düz bir metin şifresinin tuzlanmış SHA'ya eşit olup olmadığını test etmek için şunları yapmanız gerekir:

  1. karma yöntem belirleyicisini örneğin sed ile soyun.
  2. base64 dizesinin kodunu çöz
  3. Son 4 baytı çıkarın, bu tuz
  4. tuzu düz metin parolasıyla bitiştir
  5. vuruldu
  6. karşılaştırmak

Base64 kodu çözülmüş dize karmayı ikili biçimde içerir ve yazdırılamaz, bu nedenle od ile hex'e dönüştüreceğiz. İlk 3 adım aşağıdaki kodla gerçekleştirilir:

#!/bin/bash
output=$(slappasswd -h {SSHA} -s password)
hashsalt=$( echo -n $output | sed 's/{SSHA}//' | base64 -d)
salt=${hashsalt:(-1),(-4)}
echo $output
echo $(echo -n $hashsalt | od -A n -t x1)
echo "Salt: $salt"

Çıktı olabilir:

{SSHA}fDu0PgKDn1Di9W1HMINpPXRqQ9jTYjuH

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8 d3 62 3b 87
<------------------------- Hash --------------------------> <-- Salt-->

Salt: ▒b;▒

Şimdi tuzu düz metin parolasına birleştirmeliyiz ve bu sefer tuzlamadan hash etmeliyiz! Sahip olduğum problem, tuzun yazdırılamayan karakterler de dahil olmak üzere herhangi bir karakter olabileceğini anlamaktı. Bu yazdırılamayan karakterleri birleştirmek için printf ve onaltılık temsillerini kullanacağız:

slappasswd -h {SHA} -s $(printf 'password\xd3\x62\x3b\x87') | sed 's/{SHA}//' | base64 -d | od -A n -t x1

Çıktı:

7c 3b b4 3e 02 83 9f 50 e2 f5 6d 47 30 83 69 3d 74 6a 43 d8

Bu, yukarıdaki karmaya eşittir. Şimdi, bu 'şifre' nin tuzlu SHA ile eşleştiğini doğruladık.

Teşekkürler ve daha fazla okuma: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm

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.