Στην κρυπτογραφία, ο **Κωδικός Αυθεντικοποίησης Μηνύματος** (KAM, αγγλικά: *Message Authentication code*, MAC), ή **κωδικός ελέγχου ταυτότητας μηνύματος**, γνωστός επίσης ως *ετικέτα*, είναι ένα μικρό τμήμα δεδομένων που χρησιμοποιείται για την αυθεντικοποίηση ενός μηνύματος — με άλλα λόγια, για να επιβεβαιωθεί ότι το μήνυμα προήλθε από τον φερόμενο ως αποστολέα (αυθεντικότητα) και ότι δεν έχει τροποποιηθεί (ακεραιότητα). Ο KAM προστατεύει την ακεραιότητα των δεδομένων του μηνύματος και την αυθεντικότητα του μηνύματος, επιτρέποντας σε όποιον προβεί στην επαλήθευση (χρησιμοποιώντας το μυστικό κλειδί) να αντιληφθεί αν έχει επέλθει τροποποίηση στο περιεχόμενο του μηνύματος.

Ορισμοί
-------

Ανεπίσημα, ένα σύστημα κωδικού αυθεντικοποίησης μηνύματος αποτελείται από τρεις αλγόριθμους:

* Ένας αλγόριθμος δημιουργίας κλειδιών επιλέγει ένα κλειδί από το εύρος κλειδιών κατά τρόπο ομοιόμορφο και τυχαίο.
* Ένας αλγόριθμος υπογραφής επιστρέφει αποδοτικά μια ετικέτα, δοθέντος του κλειδιού και του μηνύματος.
* Ένας αλγόριθμος επαλήθευσης επαληθεύει αποδοτικά ότι το μήνυμα είναι αυθεντικό, δοθέντος του κλειδιού και της ετικέτας. Δηλαδή, επιστρέφει *δεκτό* όταν το μήνυμα και η ετικέτα είναι αναλλοίωτα και δεν είναι πλαστά, ενώ διαφορετικά επιστρέφει *απορριφθέν*.

Ένας ασφαλής κωδικός αυθεντικοποίησης μηνύματος πρέπει να είναι ανθεκτικός έναντι των προσπαθειών ενός αντιπάλου να δημιουργήσει πλαστές ετικέτες, για αυθαίρετα, συγκεκριμένα, ή όλα τα μηνύματα, ακόμη και υπό συνθήκες γνωστού ή επιλεγμένου απλού κειμένου. Θα πρέπει να είναι υπολογιστικά ανέφικτο να υπολογιστεί μια έγκυρη ετικέτα για το δοθέν μήνυμα χωρίς γνώση του κλειδιού, ακόμη και στη χειρότερη περίπτωση, στην οποία υποθέτουμε ότι ο αντίπαλος γνωρίζει την ετικέτα όλων των μηνυμάτων εκτός από το υπό κρίση.

Επίσημα, ένα σύστημα **κωδικού αυθεντικοποίησης μηνύματος** (**ΚΑΜ**) συνίσταται από μια τριάδα αποδοτικών αλγορίθμων (*G*, *S*, *V*) για τους οποίους ισχύει ότι:

* Ο *G* (γεννήτρια κλειδιών) παράγει το κλειδί *k* βάσει της τιμής εισόδου 1*n* (μοναδιαίου συστήματος αρίθμησης), όπου *n* είναι η παράμετρος ασφαλείας.
* Ο *S* (υπογραφής) παράγει μια ετικέτα *t* βάσει του κλειδιού *k* και του κειμένου εισόδου *x*.
* Ο *V* (επαλήθευσης) παράγει την τιμή *δεκτό* ή *απορριφθέν* βάσει των τιμών εισόδου: του κλειδιού *k*, του κειμένου *x* και της ετικέτας *t*.

Οι *S* και *V* πρέπει να πληρούν τα παρακάτω:

Pr [ *k* ← (*G*(1*n*), *V*( *k*, *x*, *S*(*k*, *x*) ) = *δεκτό* ] = 1.
Ένας ΚΑΜ είναι **μη πλαστογραφήσιμος** αν για κάθε αποδοτικό αντίπαλο *A*

Pr [ *k* ← *G*(1*n*), (*x*, *t*) ← *A**S*(*k*, ·)(1*n*), *x* ∉ Ερώτημα(*A**S*(*k*, ·), 1*n*), *V*(*k*, *x*, *t*) = *δεκτό* ] < negl(*n*),
όπου *A**S*(*k*, ·) δηλώνει ότι ο *A* έχει πρόσβαση στο μαντείο *S*(*k*, ·) και Ερώτημα(*A**S*(*k*, ·), 1*n*) δηλώνει το σύνολο των ερωτημάτων στο *S* που έκανε ο *A*, το οποίο γνωρίζει το *n*. Προφανώς απαιτείται ότι κανένας αντίπαλος δεν μπορεί να υποβάλλει απευθείας το κείμενο *x* ως ερώτημα στο *S*, καθώς διαφορετικά ο αντίπαλος αυτός μπορεί να αποκτήσει εύκολα μια έγκυρη ετικέτα.

Ασφάλεια
--------

Παρότι οι συναρτήσεις ΚΑΜ είναι παρόμοιες με τις κρυπτογραφικές συναρτήσεις κατακερματισμού, έχουν διαφορετικές απαιτήσεις ασφάλειας. Για να θεωρείται ασφαλής, μια συνάρτηση KAM πρέπει να αντιστέκεται στην υπαρξιακή πλαστογράφηση υπό επιθέσεις επιλεγμένου απλού κειμένου. Αυτό σημαίνει ότι ακόμη κι αν ο επιτιθέμενος έχει πρόσβαση σε μαντείο που διαθέτει το μυστικό κλειδί και που παράγει ΚΑΜ για τα μηνύματα που επιλέγει ο επιτιθέμενος, ο επιτιθέμενος δεν μπορεί να μαντέψει τον ΚΑΜ για άλλα μηνύματα, που δεν έχουν τεθεί ως ερωτήματα στο μαντείο, παρά μόνο αν προβεί σε υπολογισμούς ανέφικτου εύρους.

Οι ΚΑΜ διαφέρουν από τις ψηφιακές υπογραφές, καθώς η τιμή του ΚΑΜ παράγεται και επαληθεύεται με το ίδιο μυστικό κλειδί. Από αυτό υπονοείται ότι ο αποστολέας και ο λήπτης του μηνύματος πρέπει να συνεννοηθούν για το κοινό κλειδί πριν ξεκινήσουν την επικοινωνία, όπως συμβαίνει στη συμμετρική κρυπτογραφία. Για τον ίδιο λόγο, οι ΚΑΜ δεν προσφέρουν την ιδιότητα της μη-απάρνησης, την οποία προσδίδουν οι ψηφιακές υπογραφές ιδίως στην περίπτωση που το κοινό μυστικό κλειδί έχει μοιραστεί με ολόκληρο το δίκτυο: κάθε χρήστης που μπορεί να επαληθεύσει τον ΚΑΜ ενός συγκεκριμένου μηνύματος έχει και τη δυνατότητα να παράγει ΚΑΜ για άλλα μηνύματα. Αντίθετα, μια ψηφιακή υπογραφή παράγεται χρησιμοποιώντας το ιδιωτικό κλειδί από ένα ζεύγος κλειδιών, διαδικασία που συνιστά κρυπτογραφία δημόσιου κλειδιού. Επειδή αυτό το ιδιωτικό κλειδί βρίσκεται στη διάθεση αποκλειστικά και μόνο του κατόχου του, μια ψηφιακή υπογραφή αποδεικνύει ότι μόνο ο κάτοχος του κλειδιού μπορεί να έχει υπογράψει το έγγραφο. Έτσι, οι ψηφιακές υπογραφές όντως προσφέρουν μη-απάρνηση. Ωστόσο, η μη-απάρνηση είναι δυνατό να παρέχεται και από συστήματα που συνδέουν με ασφάλεια πληροφορίες για τη χρήση του κλειδιού με το κλειδί ΚΑΜ· το ίδιο κλειδί βρίσκεται στην κατοχή δύο προσώπων, αλλά ο ένας έχει ένα αντίγραφο του κλειδιού που μπορεί να χρησιμοποιηθεί για τη δημιουργία ΚΑΜ ενώ ο άλλος έχει ένα αντίγραφο του κλειδιού σε μια συσκευή υλισμικού ασφαλείας η οποία επιτρέπει μόνο την επαλήθευση του ΚΑΜ.

Υλοποίηση
---------

Οι αλγόριθμοι ΚΑΜ μπορεί να καταρτίζονται από άλλες στοιχειώδεις τεχνικές κρυπτογράφησης, όπως οι κρυπτογραφικές συναρτήσεις κατακερματισμού (κατά την περίπτωση του HMAC) ή από κρυπταλγόριθμους τμήματος (OMAC, CCM, GCM, και PMAC). Ωστόσο, πολλοί από τους πιο γρήγορους αλγόριθμους ΚΑΜ, όπως οι UMAC-VMAC και Poly1305-AES καταρτίζονται βάσει καθολικού κατακερματισμού.

Συναρτήσεις κατακερματισμού που βασίζονται εγγενώς σε κλειδί, όπως ο SipHash, είναι εξ ορισμού και αλγόριθμοι ΚΑΜ· μπορεί να είναι ακόμη πιο γρήγοροι από τους αλγόριθμους ΚΑΜ που βασίζονται σε καθολικό κατακερματισμό.

Επιπλέον, ο αλγόριθμος ΚΑΜ μπορεί να συνδυάσει σκόπιμα δύο ή περισσότερες στοιχειώδεις τεχνικές κρυπτογράφησης, έτσι ώστε να παραμένει ασφαλής ακόμη και αν αργότερα βρεθεί ότι μια από αυτές είναι ευάλωτη. Για παράδειγμα, στο TLS, τα δεδομένα εισόδου διχοτομούνται, το κάθε μισό υφίσταται επεξεργασία με διαφορετική αυθύπαρκτη τεχνική κατακερματισμού (SHA-1 και SHA-2) και επί των αποτελεσμάτων εκτελείται XOR ώστε να παραχθεί ο ΚΑΜ.

### ΚAM μιας χρήσης

Ο καθολικός κατακερματισμός και ιδιαίτερα οι συναρτήσεις κατακερματισμού ανά δύο ανεξάρτητων παρέχουν έναν ασφαλή κωδικό αυθεντικοποίησης μηνύματος αρκεί το κλειδί να χρησιμοποιείται το πολύ μια φορά. Αυτό μπορεί να θεωρηθεί αντίστοιχο του σημειωματάριου μιας χρήσης για την αυθεντικοποίηση.

Η απλούστερη τέτοια συνάρτηση κατακερματισμού ανά δύο ανεξάρτητων ορίζεται από το τυχαίο κλειδί, *key* = (*a*, *b*), και η ετικέτα ΚΑΜ για το μήνυμα *m* υπολογίζεται ως *ετικέτα* = (*am* + *b*) mod *p*, όπου ο *p* είναι πρώτος αριθμός.

Γενικότερα, οι συναρτήσεις κατακερματισμού ανά k ανεξάρτητων παρέχουν έναν ασφαλή κωδικό αυθεντικοποίησης μηνύματος αρκεί το κλειδί να χρησιμοποιείται λιγότερο από *k* φορές για συναρτήσεις κατακερματισμού ανά *k* ανεξάρτητων.

Οι κωδικοί αυθεντικοποίησης μηνύματος και η αυθεντικοποίηση προέλευσης δεδομένων έχουν συζητηθεί και στο πλαίσιο της κβαντικής κρυπτογραφίας. Αντίθετα με άλλες κρυπτογραφικές διαδικασίες, όπως η διανομή κλειδιών, για μια αρκετά ευρεία κατηγορία κβαντικών ΚΑΜ έχει αποδειχθεί ότι οι κβαντικοί πόροι δεν προσφέρουν πλεονέκτημα έναντι ενός άνευ όρων ασφαλούς κλασικού ΚΑΜ μιας χρήσης.

Πρότυπα
-------

Διάφορα πρότυπα ορίζουν αλγόριθμους ΚΑΜ. Σε αυτά περιλαμβάνονται:

* το FIPS PUB 113 *Computer Data Authentication*, που αποσύρθηκε το 2002, το οποίο ορίζει έναν αλγόριθμο που βασίζεται στο DES,
* το FIPS PUB 198-1 *The Keyed-Hash Message Authentication Code (HMAC)*,
* το ISO/IEC 9797-1 *Mechanisms using a block cipher*,
* το ISO/IEC 9797-2 *Mechanisms using a dedicated hash-function*,
* το ISO/IEC 9797-3 *Mechanisms using a universal hash-function*,
* το ISO/IEC 29192-6 *Lightweight cryptography - Message authentication codes*.

Τα ISO/IEC 9797-1 και -2 ορίζουν κατά γένος μοντέλα και αλγόριθμους που μπορούν να χρησιμοποιηθούν με κάθε κρυπταλγόριθμο τμήματος ή συνάρτηση κατακερματισμού, και μια σειρά από άλλους παραμέτρους. Αυτά τα μοντέλα και οι παράμετροι επιτρέπουν τον καθορισμό πιο ειδικών αλγόριθμων με την επιλογή των παραμέτρων. Για παράδειγμα, ο αλγόριθμος στο FIPS PUB 113 είναι λειτουργικά ισοδύναμος με τον αλγόριθμο ΚΑΜ 1 από το ISO/IEC 9797-1 αν επιλεγεί η μέθοδος συμπλήρωσης 1 και ο κρυπταλγόριθμος τμήματος DES.

Ένα παράδειγμα χρήσης ΚΑΜ
-------------------------

Σε αυτό το παράδειγμα, ο αποστολέας του μηνύματος το περνά από έναν αλγόριθμο ΚΑΜ για να παραχθεί μια ετικέτα δεδομένων ΚΑΜ. Το μήνυμα και η ετικέτα ΚΑΜ στέλνονται μετά στον λήπτη. Ο λήπτης με τη σειρά του περνά το μέρος της μετάδοσης που αποτελεί το αρχικό μήνυμα από τον ίδιο αλγόριθμο ΚΑΜ χρησιμοποιώντας το ίδιο κλειδί, παράγοντας μια δεύτερη ετικέτα δεδομένων ΚΑΜ. Κατόπιν, ο λήπτης συγκρίνει την πρώτη ετικέτα ΚΑΜ, την οποία έλαβε με τη μετάδοση, με τη δεύτερη ετικέτα ΚΑΜ, την οποία παρήγαγε. Αν είναι πανομοιότυπες, ο λήπτης μπορεί να υποθέσει με ασφάλεια ότι το μήνυμα δεν τροποποιήθηκε ούτε αλλοιώθηκε κατά τη μετάδοση (ακεραιότητα δεδομένων).

Ωστόσο, για να είναι δυνατό στον λήπτη να εντοπίσει επιθέσεις επανάληψης, το ίδιο το μήνυμα πρέπει να περιλαμβάνει δεδομένα που να εξασφαλίζουν ότι το μήνυμα αυτό μπορεί να σταλεί μόνο μια φορά (π.χ. χρονοσφραγίδα, σειριακός αριθμός ή χρήση ΚΑΜ μιας χρήσης). Διαφορετικά ένας επιτιθέμενος θα μπορούσε να καταγράψει αυτό το μήνυμα, χωρίς καν να καταλαβαίνει το περιεχόμενό του, και να το αποστείλει εκ νέου αργότερα, προξενώντας το ίδιο αποτέλεσμα με τον αρχικό αποστολέα.

Παραπομπές
----------

1. ↑  Ο ισχυρότερος αντίπαλος υποθέτουμε ότι έχει πρόσβαση στον αλγόριθμο υπογραφής χωρίς να γνωρίζει το κλειδί. Ωστόσο, το τελικό πλαστό μήνυμά του πρέπει να είναι διαφορετικό από κάθε μήνυμα που επέλεξε να υποβάλει ως ερώτημα στον αλγόριθμο υπογραφής προηγουμένως. Βλ. συζητήσεις του Pass πριν το Definition 134.2
2. ↑  Θεωρητικά, ένας αποδοτικός αλγόριθμος εκτελείται σε πιθανολογικό πολυωνυμικό χρόνο.
3. ↑  Pass, Definition 134.1
4. ↑  Pass, Definition 134.2
5. ↑ . "*VMAC: Message Authentication Code using Universal Hashing*".
6. ↑  Jean-Philippe Aumasson· Daniel J. Bernstein (18 Σεπτεμβρίου 2012). «SipHash: a fast short-input PRF» (PDF).
7. ↑  Nikolopoulos, Georgios M.; Fischlin, Marc (2020). «Information-Theoretically Secure Data Origin Authentication with Quantum and Classical Resources» (στα αγγλικά). *Cryptography* **4** (4): 31. doi:10.3390/cryptography4040031. .
8. ↑  «FIPS PUB 113 *Computer Data Authentication*». Αρχειοθετήθηκε από το πρωτότυπο στις 27 Σεπτεμβρίου 2011. Ανακτήθηκε στις 10 Οκτωβρίου 2010.
9. ↑  «Federal Information Processing Standards Publications, Withdrawn FIPS Listed by Number». Αρχειοθετήθηκε από το πρωτότυπο στις 1 Αυγούστου 2010. Ανακτήθηκε στις 10 Οκτωβρίου 2010.
10. ↑  *The Keyed-Hash Message Authentication Code (HMAC)*
11. ↑  ISO/IEC 9797-1 *Information technology — Security techniques — Message Authentication Codes (MACs) — Part 1: Mechanisms using a block cipher*
12. ↑  ISO/IEC 9797-2 *Information technology — Security techniques — Message Authentication Codes (MACs) — Part 2: Mechanisms using a dedicated hash-function*
13. ↑  ISO/IEC 9797-3 *Information technology — Security techniques — Message Authentication Codes (MACs) — Part 3: Mechanisms using a universal hash-function*
14. ↑  ISO/IEC 29192-6 *Information technology — Lightweight cryptography — Part 6: Message authentication codes (MACs)*
15. ↑  «Mac Security Overview», *Mac® Security Bible*, Wiley Publishing, Inc. 2011-11-01, σελ. 1–26, doi:10.1002/9781118257739.ch1, ISBN 9781118257739

Πηγές
-----

* Goldreich, Oded (2001), *Foundations of cryptography I: Basic Tools*, Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1
* Goldreich, Oded (2004), *Foundations of cryptography II: Basic Applications* (1. publ. έκδοση), Cambridge [u.a.]: Cambridge Univ. Press, ISBN 978-0-521-83084-3
* Pass, Rafael, *A Course in Cryptography*, ανακτήθηκε στις 31 December 2015

Εξωτερικοί σύνδεσμοι
--------------------

* RSA Laboratories entry on MACs
* Ron Rivest lecture on MACs