Authentifizierungsschlüssel
Der Authentifizierungsschlüssel wird aus einem geheimen Schlüssel und einem Zeitcode gebildet. Anschließend wird von diesem ein MD5-Hash erstellt. Die Ziele dieses Verfahrens sind:
Es wird geprüft, ob der Anfragende berechtigt ist, die Information abzurufen. Nur Berechtigte sollten im Besitz des geheimen Schlüssel sein.
Ein abgefangener MD5-Hash eines Authentifizierungsschlüssels sollte keine Rückschlüsse auf den geheimen Schlüssel zulassen.
Ein abgefangener MD5-Hash eines Authentifizierungsschlüssels wird durch den Zeitcode nach einer gewissen Zeit ungültig (in diesem Fall im Maximum nach 30 Minuten).
Aufbau des Schlüssels
$key1 - Vorderer Teil des geheimen Schlüssels.
$key2 - Hinterer Teil des geheimen Schlüssels.
$timecode - Zeitcode bzgl. UTC im Format: [2-stellige Jahreszahl] [2-stellige Monatszahl] [2-stellige Tageszahl] [2-stellige Stundenzahl (24-Stunden-Format)] [1. Stelle der Minutenzahl], alles ohne Trennzeichen. Beispiel zum Zeitpunkt UTC 1. November 2008 14:27: „081101142“
Der Authentifizierungsschlüssel ergibt sich dann aus: $key1 . $timecode . $key2.
Überprüfung des Schlüssels
Der Anfragende generiert den Authentifizierungsschlüssel und dessen MD5-Hash. Der Hash wird an die URL als Parameter „auth“ angehangen. Der Angefragte generiert seinerseits den Authentifizierungsschlüssel und zusätzlich den der letzten und kommenden 10 Minuten, um Fehler durch asynchrone Systemuhren oder Verzögerungen bei der Anfrage zu vermeiden. Stimmt der übergebene Hash mit einem der drei lokal generierten Hashes überein, so ist die Anfrage gültig.
Beispielfunktion in PHP
function getAuthHash ($key1, $key2, $timecode_shift = 0) {
$timecode = gmdate('ymdHi', time() + $timecode_shift * 600);
$timecode = substr($timecode, 0, -1);
$authkey = $key1 . $timecode . $key2;
$authhash = md5($authkey);
return $authhash;
}