Slappasswd आउटपुट यादृच्छिक


10

मैं slappasswdएक निश्चित हैश का उत्पादन करने की उम्मीद कर रहा था, लेकिन ऐसा प्रतीत होता है कि आउटपुट यादृच्छिक है क्योंकि मुझे कभी भी समान इनपुट के लिए समान आउटपुट नहीं मिलता है:

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

प्रमाणीकरण के दौरान, थप्पड़ कैसे जानता है कि प्रदान किए गए पासवर्ड के लिए उसी तरह से हैश को कैसे यादृच्छिक किया जाए ताकि यह पहली बार में परिभाषित पासवर्ड से मेल खा सके?

जवाबों:


8

यहाँ एक अंग पर बाहर जा रहा है, लेकिन मुझे लगता है कि एक सादे हैश के बजाय एक नमकीन हैश का उपयोग कर रहा है। इसका मतलब यह है कि यह आपके पासवर्ड में एक यादृच्छिक उपसर्ग जोड़ता है, और उस यादृच्छिक उपसर्ग को स्ट्रिंग के भाग के रूप में बचाता है जिसे आप स्लैपस्वाड आउटपुट में देखते हैं। जब आप अपना पासवर्ड टाइप करते हैं, तो यह उपसर्ग जोड़ता है, परिणाम को हैश करता है और इसकी तुलना स्लैपस्वाल्ड आउटपुट में स्ट्रिंग से करता है। यदि यह मेल खाता है, तो आप अंदर हैं। यदि यह नहीं है, तो आप पासवर्ड गलत थे :)


3
वास्तव में। विशेष रूप से, के लिए डिफ़ॉल्ट हैश विधि slappasswd{SSHA}, या SHA-1 का नमकीन संस्करण है।
justarobert

मैं सहमत हूं, लेकिन मेरा प्रश्न शेष है: यदि नमक हैश के हिस्से के रूप में समाप्त होता है, जिसका अर्थ है कि आप हैशेड पासवर्ड से नमक नहीं निकाल सकते हैं। तदनुसार, थप्पड़ कैसे जानता है कि पासवर्ड सत्यापन करते समय क्या नमक जोड़ना है? (यह हैशेड पासवर्ड के लिए समान नमक जोड़ना होगा)।
अधिकतम

3
@user: इसके बाद वाले हिस्से में नमक और हैश दोनों{SSHA} होते हैं ।
user1686

8

SSHA एक नमकीन SHA-1 है। डिफ़ॉल्ट रूप से अंतिम 4 बाइट्स नमक हैं। Slappasswd का आउटपुट है

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

तो यह जांचने के लिए कि क्या एक सादा पाठ पासवर्ड नमकीन SHA के बराबर है, आपको इसकी आवश्यकता है:

  1. हैश विधि-निर्दिष्टक को उदाहरण के लिए पट्टी के साथ पट्टी करें।
  2. बेस 64 स्ट्रिंग को डीकोड करें
  3. अंतिम 4 बाइट्स निकालें, यह नमक है
  4. सादे पाठ पासवर्ड के लिए नमक को मिलाएं
  5. हैश
  6. तुलना

बेस 64-डिकोडेड स्ट्रिंग में बाइनरी रूप में हैश होता है और इसे मुद्रित नहीं किया जा सकता है, इसलिए हम इसे ओएक्स के साथ हेक्स में बदल देंगे। पहले 3 चरण निम्नलिखित कोड द्वारा किए जा रहे हैं:

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

उत्पादन हो सकता है:

{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;▒

तो अब हमें नमक को प्लेन टेक्स्ट पासवर्ड में बदलना है और हैश करना है, इस बार बिना नमकीन के! मुझे जो समस्या समझ में आ रही थी, वह यह है कि नमक वास्तव में किसी भी वर्ण का हो सकता है, जिसमें गैर-मुद्रण योग्य वर्ण भी शामिल हैं। इन गैर-मुद्रण योग्य वर्णों को संक्षिप्त करने के लिए हम प्रिंटफ़ और उनके हेक्साडेसिमल निरूपण का उपयोग करेंगे:

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

आउटपुट है:

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

जो ऊपर हैश के बराबर है। अब हमने सत्यापित कर लिया है कि 'पासवर्ड' नमकीन SHA से मेल खाता है।

धन्यवाद और आगे पढ़ने: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.