Γεννήτρια HMAC
Δημιουργήστε HMAC (Hash-based Message Authentication Code) χρησιμοποιώντας αλγόριθμους SHA-256, SHA-384, SHA-512 ή SHA-1 με ένα μυστικό κλειδί
Είσοδος
Έξοδος
Readme
Τι είναι το HMAC;
Το HMAC (Hash-based Message Authentication Code) είναι μια κρυπτογραφική τεχνική που συνδυάζει ένα μυστικό κλειδί με μια συνάρτηση κατακερματισμού για να παράγει έναν μοναδικό κωδικό ταυτοποίησης. Σε αντίθεση με τον απλό κατακερματισμό, το HMAC διασφαλίζει τόσο την ακεραιότητα των δεδομένων όσο και την αυθεντικότητα—επαληθεύοντας ότι ένα μήνυμα δεν έχει παραποιηθεί και επιβεβαιώνοντας την ταυτότητα του αποστολέα.
Το HMAC λειτουργεί επεξεργάζοντας το μήνυμα μέσω μιας συνάρτησης κατακερματισμού (όπως SHA-256) δύο φορές, αναμεμιγμένο με το μυστικό κλειδί με συγκεκριμένο τρόπο. Αυτή η προσέγγιση διπλού κατακερματισμού την καθιστά ανθεκτική σε επιθέσεις επέκτασης μήκους που επηρεάζουν τις απλές συναρτήσεις κατακερματισμού.
Πώς λειτουργεί το HMAC;
Ο αλγόριθμος HMAC ακολουθεί τα εξής βήματα:
- Προετοιμασία κλειδιού: Εάν το μυστικό κλειδί είναι μεγαλύτερο από το μέγεθος του μπλοκ κατακερματισμού, κατακερματίζεται πρώτα. Εάν είναι μικρότερο, συμπληρώνεται με μηδενικά.
- Εσωτερικό κατακερματισμό: Το κλειδί XORed με μια σταθερά εσωτερικής συμπλήρωσης (ipad), στη συνέχεια συνενώνεται με το μήνυμα και κατακερματίζεται.
- Εξωτερικό κατακερματισμό: Το κλειδί XORed με μια σταθερά εξωτερικής συμπλήρωσης (opad), στη συνέχεια συνενώνεται με το αποτέλεσμα του εσωτερικού κατακερματισμού και κατακερματίζεται ξανά.
Ο τύπος είναι: HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m))
Αυτή η κατασκευή διασφαλίζει ότι ακόμη και αν ένας επιτιθέμενος γνωρίζει το κατακερματισμό ενός μηνύματος, δεν μπορεί να πλαστογραφήσει ένα έγκυρο HMAC χωρίς να γνωρίζει το μυστικό κλειδί.
Γιατί να χρησιμοποιήσετε HMAC αντί για κανονικό κατακερματισμό;
| Χαρακτηριστικό | Κανονικό Hash | HMAC |
|---|---|---|
| Ακεραιότητα δεδομένων | ✓ | ✓ |
| Ταυτοποίηση | ✗ | ✓ |
| Απαιτεί μυστικό κλειδί | ✗ | ✓ |
| Προστασία κατά επιθέσεων επέκτασης | ✗ | ✓ |
| Κατάλληλο για ταυτοποίηση API | ✗ | ✓ |
Τα κανονικά κατακερματίσματα (MD5, SHA-256) επαληθεύουν μόνο ότι τα δεδομένα δεν έχουν αλλάξει. Το HMAC επιπλέον αποδεικνύει ότι το μήνυμα προήλθε από κάποιον που γνωρίζει το μυστικό κλειδί, καθιστώντας το απαραίτητο για ασφαλείς επικοινωνίες.
Κατανόηση αλγορίθμων κατακερματισμού
| Αλγόριθμος | Μέγεθος Εξόδου | Επίπεδο Ασφάλειας | Απόδοση | Σύσταση |
|---|---|---|---|---|
| SHA-1 | 160 bits (40 hex chars) | Ασθενές | Ταχύτερο | Μόνο παλαιά συστήματα |
| SHA-256 | 256 bits (64 hex chars) | Ισχυρό | Γρήγορο | Προτεινόμενο default |
| SHA-384 | 384 bits (96 hex chars) | Πολύ ισχυρό | Μέσιο | Ανάγκες υψηλής ασφάλειας |
| SHA-512 | 512 bits (128 hex chars) | Πολύ ισχυρό | Μέσιο | Μέγιστη ασφάλεια |
Το SHA-256 προσφέρει την καλύτερη ισορροπία ασφάλειας και απόδοσης για τις περισσότερες εφαρμογές. Το SHA-1 περιλαμβάνεται για συμβατότητα με παλαιά συστήματα αλλά θα πρέπει να αποφεύγεται για νέες υλοποιήσεις λόγω γνωστών ευπαθειών.
Σύγκριση μορφής εξόδου
Δεκαεξαδικό: Χρησιμοποιεί χαρακτήρες 0-9 και a-f. Παράγει μια μεγαλύτερη συμβολοσειρά αλλά είναι ευκολότερη στην ανάγνωση και αποσφαλμάτωση. Κοινή σε API και καταγραφή.
Base64: Χρησιμοποιεί χαρακτήρες A-Z, a-z, 0-9, +, και /. Παράγει μια μικρότερη συμβολοσειρά (περίπου 33% μικρότερη από hex). Κοινή σε JWT tokens και συμπαγή μετάδοση δεδομένων.
Παράδειγμα για το ίδιο HMAC:
- Hex:
5d5d139563c95b5967b9bd9a8c9b8c8d8e8f9a9b9c9d9e9f0a0b0c0d0e0f1011 - Base64:
XV0TlWPJW1lnub2ajJuMjY6Pmpm9nZ6fCgsMDQ4PEQ==
Περιγραφή εργαλείου
Αυτή η Γεννήτρια HMAC δημιουργεί κρυπτογραφικούς κωδικούς ταυτοποίησης χρησιμοποιώντας το Web Crypto API για ασφαλή, υπολογισμό στην πλευρά του πελάτη. Εισάγετε το μήνυμα και το μυστικό κλειδί σας για να δημιουργήσετε αμέσως υπογραφές HMAC με την επιλογή του αλγορίθμου κατακερματισμού (SHA-1, SHA-256, SHA-384 ή SHA-512) και της μορφής εξόδου (δεκαεξαδικό ή base64).
Όλη η επεξεργασία γίνεται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας—τα μυστικά κλειδιά και τα μηνύματά σας δεν μεταδίδονται ποτέ σε κανένα διακομιστή, διασφαλίζοντας πλήρη ιδιωτικότητα και ασφάλεια.
Παραδείγματα
Παράδειγμα 1: Υπογραφή αιτήματος API
- Μήνυμα:
GET /api/users?timestamp=1704067200 - Μυστικό κλειδί:
my-api-secret-key-2024 - Αλγόριθμος: SHA-256
- Εξόδου (Hex):
d090e24b18ee077bdeceacab17fb15ff8cf7868147b302dbcb1b11630465e817
Χαρακτηριστικά
- Πολλαπλοί αλγόριθμοι κατακερματισμού: Υποστήριξη SHA-1, SHA-256, SHA-384 και SHA-512 με οπτικούς δείκτες που δείχνουν την ισχύ bit
- Διπλές μορφές εξόδου: Δημιουργήστε αποτελέσματα σε δεκαεξαδικό ή κωδικοποίηση Base64 ανάλογα με τις απαιτήσεις σας
- Δημιουργία σε πραγματικό χρόνο: Το HMAC ενημερώνεται αμέσως καθώς πληκτρολογείτε, χωρίς να απαιτούνται κλικ κουμπιών
- Ασφάλεια στην πλευρά του πελάτη: Όλες οι κρυπτογραφικές λειτουργίες εκτελούνται τοπικά χρησιμοποιώντας το Web Crypto API—τίποτα δεν αποστέλλεται σε διακομιστές
- Προστατευμένη είσοδος με κωδικό πρόσβασης: Το πεδίο μυστικού κλειδιού κρύβεται από προεπιλογή για να αποτρέψει την παρακολούθηση ώμου
Περιπτώσεις χρήσης
- Ταυτοποίηση API: Υπογράψτε αιτήματα API με HMAC για να αποδείξετε την αυθεντικότητα του αιτήματος και να αποτρέψετε την παραποίηση (χρησιμοποιείται από AWS, Stripe και πολλές άλλες υπηρεσίες)
- Επαλήθευση webhook: Επαληθεύστε ότι τα εισερχόμενα webhooks προήλθαν πραγματικά από την αναμενόμενη υπηρεσία (GitHub, Shopify, Twilio)
- Ακεραιότητα μηνύματος: Διασφαλίστε ότι τα μηνύματα που μεταδίδονται μεταξύ συστημάτων δεν έχουν τροποποιηθεί κατά τη μετάδοση
- Δημιουργία token συνεδρίας: Δημιουργήστε ασφαλείς αναγνωριστικά συνεδρίας που μπορούν να επαληθευτούν χωρίς αναζητήσεις βάσης δεδομένων
- Ψηφιακές υπογραφές για έγγραφα: Δημιουργήστε επαληθεύσιμες υπογραφές για συμβάσεις, συμφωνίες ή ευαίσθητα έγγραφα που κοινοποιούνται μεταξύ των μερών
Βέλτιστες πρακτικές ασφάλειας
- Μήκος κλειδιού: Χρησιμοποιήστε μυστικά κλειδιά τουλάχιστον τόσο μεγάλα όσο η έξοδος κατακερματισμού (32 bytes για SHA-256, 64 bytes για SHA-512)
- Τυχαιότητα κλειδιού: Δημιουργήστε κλειδιά χρησιμοποιώντας κρυπτογραφικά ασφαλείς γεννήτριες τυχαίων αριθμών, όχι κωδικούς πρόσβασης
- Αποθήκευση κλειδιού: Μην κωδικοποιείτε ποτέ κλειδιά στον πηγαίο κώδικα· χρησιμοποιήστε μεταβλητές περιβάλλοντος ή ασφαλή συστήματα διαχείρισης κλειδιών
- Επιλογή αλγορίθμου: Χρησιμοποιήστε SHA-256 ή ισχυρότερο· αποφύγετε το SHA-1 για νέες υλοποιήσεις
- Σύγκριση σταθερού χρόνου: Κατά την επαλήθευση HMAC μέσω προγραμματισμού, χρησιμοποιήστε συναρτήσεις σύγκρισης σταθερού χρόνου για να αποτρέψετε επιθέσεις χρονισμού
Κοινές υλοποιήσεις HMAC
JavaScript (Node.js):
const crypto = require("crypto");
const hmac = crypto
.createHmac("sha256", secretKey)
.update(message)
.digest("hex");Python:
import hmac
import hashlib
signature = hmac.new(secret_key.encode(), message.encode(), hashlib.sha256).hexdigest()PHP:
$signature = hash_hmac('sha256', $message, $secretKey);Σχετικά πρότυπα και προδιαγραφές
- RFC 2104: HMAC: Keyed-Hashing for Message Authentication
- FIPS 198-1: The Keyed-Hash Message Authentication Code (HMAC)
- RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 with IPsec