Toolypet
Back to Blog
Security

हैश एल्गोरिदम तुलना: MD5, SHA, Bcrypt कब उपयोग करें?

विभिन्न हैश एल्गोरिदम की विशेषताओं और उपयोग की तुलना करें और प्रत्येक स्थिति के लिए चयन गाइड प्राप्त करें।

Toolypet Team6 min read
हैश एल्गोरिदम तुलना: MD5, SHA, Bcrypt कब उपयोग करें?

हैश फंक्शन क्या है?

हैश फंक्शन किसी भी आकार के डेटा को निश्चित आकार के यूनिक वैल्यू में बदलने वाला गणितीय फंक्शन है। इस परिवर्तित वैल्यू को हैश, डाइजेस्ट, या चेकसम कहते हैं। हैश फंक्शन आधुनिक कंप्यूटर सुरक्षा का मुख्य घटक है, पासवर्ड स्टोरेज से लेकर ब्लॉकचेन तक विभिन्न क्षेत्रों में उपयोग होता है।

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

हैश फंक्शन की मुख्य विशेषताएं

सुरक्षित क्रिप्टोग्राफिक हैश फंक्शन में ये चार आवश्यक विशेषताएं होनी चाहिए।

1. निर्धारक (Deterministic)

समान इनपुट हमेशा समान आउटपुट देता है। यह विशेषता न हो तो हैश डेटा वेरिफिकेशन में उपयोग नहीं हो सकता।

// हमेशा समान परिणाम
MD5("Hello") === "8b1a9953c4611296a827abf8c47804d7"  // true
MD5("Hello") === "8b1a9953c4611296a827abf8c47804d7"  // true (हमेशा)

2. एकतरफा (One-way)

हैश वैल्यू से मूल डेटा निकालना गणनात्मक रूप से असंभव होना चाहिए। इस विशेषता के कारण हैश पासवर्ड स्टोरेज में सुरक्षित रूप से उपयोग हो सकता है। डेटाबेस लीक होने पर भी केवल हैश वैल्यू से मूल पासवर्ड नहीं पता चल सकता।

3. टक्कर प्रतिरोध (Collision Resistance)

दो अलग इनपुट से समान हैश वैल्यू बनना टक्कर कहलाता है। अच्छे हैश फंक्शन में टक्कर खोजना अत्यंत कठिन होना चाहिए। MD5 और SHA-1 अब सुरक्षा उद्देश्य से अनुशंसित नहीं हैं क्योंकि इनमें टक्कर पाई गई।

4. हिमस्खलन प्रभाव (Avalanche Effect)

इनपुट में मात्र 1 बिट बदलने पर आउटपुट पूरी तरह बदलना चाहिए। यह विशेषता समान इनपुट से हैश वैल्यू पैटर्न अनुमान करने से रोकती है।

MD5("Hello") = "8b1a9953c4611296a827abf8c47804d7"
MD5("hello") = "5d41402abc4b2a76b9719d911017c592"
// बस एक बड़े अक्षर का अंतर लेकिन परिणाम पूरी तरह भिन्न

प्रमुख हैश एल्गोरिदम गहन विश्लेषण

MD5: अब सुरक्षा के लिए क्यों नहीं इस्तेमाल करना चाहिए?

MD5 1991 में Ronald Rivest द्वारा डिज़ाइन किया गया 128-बिट हैश फंक्शन है। कभी सबसे व्यापक रूप से उपयोग होता था, लेकिन अब सुरक्षा उद्देश्य से नहीं उपयोग करना चाहिए।

इनपुट: "Hello World"
आउटपुट: b10a8db164e0754105b7a99be72e3fe5
लंबाई: 128 बिट (32 hex अक्षर)

MD5 का पतन: 2004 में चीन की Wang Xiaoyun टीम ने MD5 में टक्कर खोजी। बाद में 2008 में नकली SSL सर्टिफिकेट बनाने में MD5 टक्कर का दुरुपयोग हुआ। अब सामान्य कंप्यूटर से भी कुछ सेकंड में MD5 टक्कर बनाई जा सकती है।

MD5 कब उपयोग किया जा सकता है:

  • फाइल डाउनलोड इंटीग्रिटी जांच (सुरक्षा नहीं, त्रुटि पहचान उद्देश्य)
  • कैश की जेनरेशन
  • गैर-सुरक्षा चेकसम

SHA-1: Google का SHAttered अटैक

SHA-1 NSA द्वारा डिज़ाइन और NIST द्वारा मानकीकृत 160-बिट हैश फंक्शन है। MD5 से सुरक्षित माना जाता था, लेकिन 2017 में Google और CWI Amsterdam ने "SHAttered" अटैक से टक्कर दिखाई।

इस अटैक में शोधकर्ताओं ने समान SHA-1 हैश वैल्यू वाले दो अलग PDF फाइल बनाए। अटैक में 6,500 वर्ष CPU समय और 110 वर्ष GPU समय लगा। भारी संसाधन चाहिए थे, लेकिन टक्कर संभव होने का प्रमाण मिलते ही SHA-1 की सुरक्षा विश्वसनीयता समाप्त हो गई।

वर्तमान स्थिति: अधिकांश ब्राउज़र और सर्टिफिकेट अथॉरिटी SHA-1 सर्टिफिकेट अस्वीकार करते हैं।

SHA-256 (SHA-2): वर्तमान मानक

SHA-2 परिवार SHA-1 का उत्तराधिकारी है, जिसमें SHA-224, SHA-256, SHA-384, SHA-512 आदि विभिन्न संस्करण हैं। इनमें SHA-256 सबसे व्यापक रूप से उपयोग होता है।

इनपुट: "Hello World"
आउटपुट: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
लंबाई: 256 बिट (64 hex अक्षर)

SHA-256 और बिटकॉइन: बिटकॉइन SHA-256 को मुख्य रूप से उपयोग करता है। माइनर्स ब्लॉक हेडर की SHA-256 हैश वैल्यू जो विशेष शर्त (शुरू में कई 0) पूरी करे, ऐसा nonce खोजने के लिए खरबों हैश गणना करते हैं। SHA-256 की अप्रत्याशितता इस प्रक्रिया को निष्पक्ष बनाती है।

उपयोग:

  • डिजिटल सिग्नेचर (RSA, ECDSA के साथ)
  • SSL/TLS सर्टिफिकेट
  • ब्लॉकचेन
  • फाइल इंटीग्रिटी वेरिफिकेशन

SHA-3: Keccak का नया दृष्टिकोण

SHA-3 2015 में NIST द्वारा मानकीकृत नवीनतम हैश फंक्शन है। SHA-2 से पूरी तरह भिन्न संरचना (स्पंज संरचना) उपयोग करता है, इसलिए यदि SHA-2 में कमजोरी मिले तो भी SHA-3 प्रभावित नहीं होगा।

SHA-3 का डिज़ाइन दर्शन "अलग बनाना" था। SHA-2 Merkle-Damgård संरचना उपयोग करता है जबकि SHA-3 का Keccak एल्गोरिदम स्पंज फंक्शन पर आधारित है। यह एक प्रकार का बीमा है। SHA-2 अभी सुरक्षित है, लेकिन भविष्य के हमलों के लिए विकल्प तैयार है।

Bcrypt: पासवर्ड के लिए विशेष हैश

Bcrypt सामान्य हैश के विपरीत जानबूझकर धीमा डिज़ाइन किया गया। पासवर्ड हैशिंग में "धीमापन" फायदा है। हमलावर को प्रति सेकंड अरबों पासवर्ड आज़माने से रोकता है।

// वर्क फैक्टर (cost factor) 12 उपयोग
bcrypt.hash("password", 12)

// आउटपुट उदाहरण
$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/X4.VVzfQl0Pfy6.nO

Bcrypt हैश वैल्यू संरचना:

  • $2b$ - एल्गोरिदम वर्जन
  • 12$ - वर्क फैक्टर (2^12 = 4,096 बार दोहराव)
  • अगले 22 अक्षर - Salt (Base64 एन्कोडेड)
  • शेष - वास्तविक हैश वैल्यू

वर्क फैक्टर 1 बढ़ने पर गणना समय दोगुना होता है। वर्तमान अनुशंसित मान 10-12 है।

Argon2: नवीनतम पासवर्ड हैश

Argon2 2015 Password Hashing Competition का विजेता एल्गोरिदम है। मेमोरी इंटेंसिव डिज़ाइन से GPU पैरेलल अटैक के प्रति प्रतिरोधी है।

पैरामीटर:
- मेमोरी: कितनी RAM उपयोग करनी है
- समय: कितनी देर गणना करनी है
- पैरेललिज्म: कितने थ्रेड उपयोग करने हैं

Argon2id संस्करण सामान्य उपयोग के लिए अनुशंसित है। नए प्रोजेक्ट में Argon2 उपयोग करें, लीगेसी कम्पेटिबिलिटी आवश्यक हो तो Bcrypt।

व्यावहारिक उपयोग गाइड

पासवर्ड स्टोरेज: Salt और Pepper

Salt: प्रत्येक पासवर्ड में यूनिक रैंडम वैल्यू जोड़ें। समान पासवर्ड भी अलग हैश वैल्यू बनाता है, जिससे रेनबो टेबल अटैक निष्क्रिय होता है।

// Salt उपयोग
password: "password123"
salt: "x7Gh9kL2" (रैंडम जेनरेटेड)
hash: bcrypt("password123" + "x7Gh9kL2")

Pepper: Salt डेटाबेस में हैश के साथ स्टोर होता है जबकि Pepper अलग सीक्रेट के रूप में प्रबंधित होता है (एनवायरनमेंट वेरिएबल, हार्डवेयर सिक्योरिटी मॉड्यूल आदि)। डेटाबेस लीक होने पर भी Pepper बिना पासवर्ड वेरिफाई नहीं हो सकता।

फाइल इंटीग्रिटी वेरिफिकेशन

सॉफ्टवेयर डिस्ट्रीब्यूशन में SHA-256 चेकसम साथ देने से डाउनलोड फाइल में छेड़छाड़ न होने की पुष्टि होती है।

# फाइल हैश जेनरेट
sha256sum ubuntu-22.04.iso
# a1b2c3d4e5f6... ubuntu-22.04.iso

# वेरिफिकेशन
echo "a1b2c3d4e5f6... ubuntu-22.04.iso" | sha256sum --check

उपयोग अनुसार एल्गोरिदम चयन गाइड

उपयोगअनुशंसित एल्गोरिदमअनुशंसित नहीं
पासवर्ड स्टोरेजArgon2id, Bcrypt, PBKDF2MD5, SHA सीरीज़ (बहुत तेज)
फाइल इंटीग्रिटीSHA-256, SHA-512MD5 (टक्कर संभव)
डिजिटल सिग्नेचरSHA-256 + RSA/ECDSASHA-1 (टक्कर अटैक)
API टोकनHMAC-SHA256-
कैश कीMD5, SHA-1 (तेज)-

कोड उदाहरण

Node.js

const crypto = require('crypto');
const bcrypt = require('bcrypt');

// SHA-256
const sha256 = crypto.createHash('sha256')
  .update('Hello World')
  .digest('hex');

// Bcrypt
const hash = await bcrypt.hash('password', 12);
const isValid = await bcrypt.compare('password', hash);

Python

import hashlib
import bcrypt

# SHA-256
sha256 = hashlib.sha256(b'Hello World').hexdigest()

# Bcrypt
hashed = bcrypt.hashpw(b'password', bcrypt.gensalt(12))
is_valid = bcrypt.checkpw(b'password', hashed)

Toolypet Hash Tools

Toolypet के हैश टूल से विभिन्न हैश तेज़ी से जेनरेट और वेरिफाई करें:

  • MD5/SHA Generator: टेक्स्ट या फाइल का हैश वैल्यू तुरंत कैलकुलेट करें
  • Bcrypt Tool: पासवर्ड हैश जेनरेशन और वेरिफिकेशन
  • Hash Comparison: दो हैश वैल्यू की सुरक्षित तुलना (टाइमिंग अटैक रोकथाम)

डेवलपमेंट और टेस्टिंग के लिए आवश्यक हैश कार्य Toolypet में आसानी से करें।

HashMD5SHABcryptCryptography