Die Nachrichtenauthentifizierung spielt eine wichtige Rolle bei der Identitätsauthentifizierung und ist ein wichtiger Bestandteil des Authentifizierungssystems. Sie wird häufig in Finanz- und Geschäftssystemen verwendet.
Als Grundlage für die Authentifizierung wird üblicherweise der Nachrichtenauthentifizierungscode (Message Authentication Code oder MAC) verwendet.
Das Grundprinzip besteht darin, mithilfe eines Schlüssels (privater Schlüssel) einen kleinen Datenblock zu generieren und diesen an die zu übertragende Nachricht anzuhängen. Bei dieser Technologie wird davon ausgegangen, dass beide kommunizierenden Parteien einen Schlüssel K gemeinsam nutzen. Wenn eine kommunizierende Partei Daten M an die andere Partei übertragen möchte, wird der MAC der Nachricht M durch einen bestimmten Algorithmus = F (K, M) berechnet, wobei F sich bezieht zur Authentifizierungsvorgangsfunktion, und dann werden die Nachrichtendaten M und MAC zusammen an die andere Partei gesendet. Wenn die andere Partei die Daten empfängt, berechnet sie zunächst den MAC mit demselben Algorithmus F und vergleicht ihn mit dem übertragenen MAC. Wenn dieser identisch ist, gelten die Daten als korrekt. Die Authentifizierungsfunktion wird oft als eine Art Verschlüsselungsalgorithmus betrachtet, der Unterschied besteht jedoch darin, dass sie nicht für umgekehrte Operationen verwendet wird und ein gewisses Maß an Sicherheit aufweist. In der Regel nutzen unterschiedliche Anwendungssysteme jeweils eigene spezifische Authentifizierungsfunktionen, wodurch die Datensicherheit bis zu einem gewissen Grad gewährleistet ist.
Ab j2sdk1.4 bietet Java die Nachrichtenauthentifizierung der Klasse javax.crypto.Mac.
Klartext in Zwischenablage anzeigen und drucken?
byte[] macData = "Dies ist ein Mac-Test".getBytes(); //eine Instanz von Mac abrufen, mithilfe des HmacMD5-Algorithmus
Mac mac = Mac.getInstance("HmacMD5"); //initiiere den IV des Algorithmus, 8 Bytes dürfen aus der Datei gelesen werden
byte[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // die geheimen Schlüsselbytes der Mac-Validierung, kann auch aus der Datei gelesen werden
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; //das geheime Schlüsselobjekt mit geheimen Bytes generieren und DESede-Algorithmus
SecretKey key = new SecretKeySpec(keyBytes, "DESede"); // init Mac mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
byte[] macData = "Dies ist ein Mac-Test".getBytes(); //eine Instanz von Mac abrufen, mithilfe des HmacMD5-Algorithmus
Mac mac = Mac.getInstance("HmacMD5"); //initiiere den IV des Algorithmus, 8 Bytes dürfen aus der Datei gelesen werden
byte[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // die geheimen Schlüsselbytes der Mac-Validierung, kann auch aus der Datei gelesen werden
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; //das geheime Schlüsselobjekt mit geheimen Bytes generieren und DESede-Algorithmus
SecretKey key = new SecretKeySpec(keyBytes, "DESede"); // init Mac mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
macCode ist der generierte Mac, und derselbe Mac kann mit demselben Schlüssel generiert werden.
Solange die kommunizierenden Parteien sicherstellen, dass sie denselben Schlüssel verwenden, können sie sicherstellen, dass sie denselben Mac erhalten, um den Zweck der Nachrichtenüberprüfung zu erreichen.
Es scheint, dass dies das gleiche Prinzip ist wie die im Internet häufig verwendete Prüfsumme.
-