base91 से एक सुरक्षित पासवर्ड चाहिए।
नमस्ते, मैं अक्षम हूँ।
हाल ही में, क्रोमियम/क्रोम के पासवर्ड ऑटो-जेनरेशन प्रॉम्प्ट आदि से मुझे बहुत चिंता होती है, इसलिए मैं कुछ ऐसा बनाना चाहता हूँ जो कुछ हद तक आसान और कुछ हद तक प्रतिवर्ती हो।
वैसे, Artix Linux के मामले में, base91 कमांड डिफ़ॉल्ट रूप से शामिल नहीं था, इसलिए यह माना जाता है कि yay -S base91 किया गया है।
निष्कर्ष से
अंततः, मैंने इससे जनरेट करने का फैसला किया।
echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo
*बाद में मैंने सोचा, शायद awk '{printf $1}' बेहतर है।
व्यर्थ की बातें
सच कहूँ तो, मैं sha*sum द्वारा जनरेट की गई स्ट्रिंग्स का काफी उपयोग कर रहा था, और मैं वर्णों की संख्या से संतुष्ट था, और हैश मान स्वयं अपरिवर्तनीय है, इसलिए यदि यह उजागर हो भी जाए तो मुझे कोई खास फर्क नहीं पड़ता।
मूल हैशिंग स्वयं केवल एक हेक्साडेसिमल स्ट्रिंग है, इसलिए यदि कोई गंभीर ब्रूट-फोर्स हमला होता है, तो उपयोग की जाने वाली स्ट्रिंग प्रकारों के संदर्भ में, यह रेगुलर एक्सप्रेशन में [a-z0-9] होगा।
और आजकल, जब हमें बड़े अक्षरों और प्रतीकों का उपयोग करने के लिए कहा जाता है, तो यह मेरे लिए भी कितना बुरा है।
इसलिए इस बार, मैं इस स्ट्रिंग के पैटर्न की संख्या को किसी तरह बढ़ाना चाहता हूँ।
इस बार क्या होगा
सबसे पहले, यदि हम इसे तोड़ते हैं
echo -n "string"
बिना नई लाइन के स्ट्रिंग को मानक आउटपुट पर भेजें, और पाइप के माध्यम से अगले कमांड को पास करें।
sha384sum
प्राप्त स्ट्रिंग को SHA384 से हैश करें।
awk '{print $1}'
प्राप्त स्ट्रिंग को awk से फॉर्मेट करें, क्योंकि अंत में अनावश्यक स्ट्रिंग - की आवश्यकता नहीं है।
xxd -r -p
मैंने भी इसे पहली बार शोध करते समय जाना, यह हेक्साडेसिमल स्ट्रिंग को बाइनरी फॉर्मेट में आउटपुट करता है।
तो
यह प्राप्त स्ट्रिंग को बाइनरी फॉर्मेट में आउटपुट करता है।
base91
प्राप्त बाइनरी को base91 से एन्कोड करें और आउटपुट करें।
tr -d "\n" && echo
जैसा कि है, base91 स्वचालित रूप से नई लाइनों के साथ फॉर्मेट करता है, इसलिए नई लाइन वर्ण को हटा दें, और यदि सफल हो, तो नई लाइन के बिना कॉपी-पेस्ट करना मुश्किल होगा, इसलिए अंत में एक खाली लाइन आउटपुट करें।
यह कुछ ऐसा दिखेगा।
alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y
वास्तव में, मैंने अभी-अभी यह सोचा है, इसलिए यह स्पष्ट नहीं है कि क्या कई फ़ॉर्म वास्तव में इसे स्वीकार करेंगे।
फिलहाल, वर्णों की संख्या है
$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59
चाहे स्ट्रिंग कितनी भी छोटी क्यों न हो, 59 वर्ण जनरेट होंगे।
फायदे
सबसे पहले, जब इसे xxd -r -p से जनरेट किया जाता है, तो इसे बाइनरी डेटा के रूप में संग्रहीत किया जा सकता है।
इसलिए, यदि आप मूल string भूल भी जाते हैं, तो सबसे खराब स्थिति में, यदि आपके पास बाइनरी है, तो आप इसे पुनर्स्थापित कर सकते हैं।
चरणों के संदर्भ में
sha384sum = अपरिवर्तनीय
xxd -r -p = प्रतिवर्ती
base91 = प्रतिवर्ती
जैसे चरण हैं।
या यों कहें, यह मूल पासफ्रेज से लंबा हो गया है, और क्या यह बेहतर नहीं होगा कि मूल पासफ्रेज को शुरुआती चरण में अपरिवर्तनीय बना दिया जाए? इसी विचार से यह ऐसा बन गया।
इसके अलावा, यदि इसे इससे जनरेट किया जाता है, तो ऐसा लगता है कि बाइनरी को saslauthdb या बाइनरी डिबगिंग में उपयोग किए जाने वाले strings कमांड से भी नहीं पढ़ा जा सकता है।
यह सादे टेक्स्ट डेटा रखने से बेहतर और सुरक्षित है।
shasum करके हैश करने पर टकराव की संभावना बहुत कम होती है।
और चूंकि इसे आगे बाइनरी डेटा में परिवर्तित किया जाता है और फिर Base91 फॉर्मेट में एन्कोड किया जाता है, तो यह मेरे अपर्याप्त दिमाग से बनाए गए पासवर्ड से बेहतर लगता है।
.bashrc में एक फ़ंक्शन जोड़ना
सच कहूँ तो, इसे हर बार टाइप करना नरक से कम नहीं है
फ़ंक्शन_नाम() {
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}
और मैंने इसे फ़ंक्शन_नाम स्ट्रिंग से पासवर्ड जनरेट करने योग्य बना दिया।
यदि इसे भी तोड़ा जा सकता है, तो मुझे लगता है कि यह "युरा युरा तेइकोकु का इंसान बनना छोड़ दो" या बल्कि, "एन्क्रिप्शन छोड़ दो" जैसा होगा...
और, यदि आप सर्वर-साइड पर उपयोग किए जाने वाले पासवर्ड की स्ट्रिंग लंबाई बढ़ाना चाहते हैं, तो आप sha512 का उपयोग कर सकते हैं, और यदि आप बैश पर पहचानने योग्य स्ट्रिंग लंबाई को कम करना चाहते हैं, तो आप base64 का उपयोग कर सकते हैं।
इसे आसानी से बदला जा सकता है, और तदनुसार फ़ंक्शन को बदलकर .bashrc में डाल दिया जा सकता है, है ना?