<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.oauth.introduction.security-architecture">
    <title>Architektur der Sicherheit</title>

    <para>
        OAuth wurde speziell designt um über eine unsichere <acronym>HTTP</acronym> Verbindung zu
        arbeiten und deshalb ist die Verwendung von <acronym>HTTPS</acronym> nicht notwendig obwohl
        es natürlich wünschenswert wäre wenn es vorhanden ist. Sollte eine <acronym>HTTPS</acronym>
        Verbindung möglich sein bietet OAuth die Implementation einer Signaturmethode an welche
        PLAINTEXT heißt und verwendet werden kann. Über eine typische unsichere
        <acronym>HTTP</acronym> Verbindung muss die Verwendung von PLAINTEXT verhindert werden und
        ein alternatives Schema wird verwendet. Die OAuth Spezifikation definiert zwei solcher
        Signaturmethoden: HMAC-SHA1 und RSA-SHA1. Beide werden von <classname>Zend_Oauth</classname>
        vollständig unterstützt.
    </para>

    <para>
        Diese Signaturmethoden sind recht einfach zu verstehen. Wie man sich vorstellen kann macht
        die PLAINTEXT Signaturmethode nichts das erwähnenswert wäre da Sie auf
        <acronym>HTTPS</acronym> aufsetzt. Wenn man aber PLAINTEXT über <acronym>HTTP</acronym>
        verwenden würde, dann würde ein signifikantes Problem bestehen: Es gibt keinen Weg um
        sicherzustellen das der Inhalt einer OAuth-aktivierten Anfrage (welche einen OAuth
        Zugriffstoken enthalten würde) beim Routen verändert wurde. Das ist der Fall weil unsichere
        <acronym>HTTP</acronym> Anfragen immer das Risiko des Lauschens, von Man In The Middle
        (MITM) Attacken, oder andere Risiken haben können in denen eine Anfrage weiterbearbeitet
        werden könnten und damit Arbeiten im Sinne des Angreifers ausgeführt werden indem sich
        dieser als Originalanwendung maskiert ohne das dies vom Serviceprovider bemerkt wird.
    </para>

    <para>
        HMAC-SHA1 und RSA-SHA1 vermindern dieses Risiko indem alle OAuth Anfragen mit dem originalen
        von der Anwendung registrierten Konsumentengeheimnis digital signiert werden. Angenommen nur
        der Konsument und der Provider wissen was das Geheimnis ist, dann kann ein Mann in der Mitte
        soviele Anfragen verändern wie er will - aber er wird nicht in der Lage sein sie gültig zu
        signieren und unsignierte oder ungültig signierte Anfragen würden von beiden Parteien
        ausgeschieden werden. Digitale Signaturen bieten deshalb eine Garantie das gültig signierte
        Anfragen von der erwarteten Partei kommen und beim Routen nicht verändert wurden. Das ist
        der Kern warum OAuth über eine unsichere Verbindung arbeiten kann.
    </para>

    <para>
        Wie diese digitalen Signaturen arbeiten hängt von der verwendeten Methode ab, z.B.
        HMAC-SHA1, RSA-SHA1 oder möglicherweise eine andere Methode welche vom Serviceprovider
        definiert wird. HMAC-SHA1 ist ein einfacher Mechanismus welcher einen Nachrichten
        Authentifizierungscode (MAC) erzeugt indem eine kryptographische Hash Funktion (z.B. SHA1)
        in Verbindung mit einem geheimen Schlüssel verwendet wird der nur dem Sender und dem
        Empfänger der Nachricht bekannt sind (z.b. das Konsumentengeheimnis von OAuth kombiniert
        mit dem authorisierten Zugriffsschlüssel). Dieser Hashing Mechanismus wird den Parametern
        und dem Inhalt aller OAuth Anfragen angehängt und zu einem "Basissignatur String"
        zusammengefügt wie es von der OAuth Spezifikation definiert ist.
    </para>

    <para>
        RSA-SHA1 operiert auf ähnlichen Prinzipien ausser dass das Geheimnis welches geteilt wird,
        wie man es erwarten würde, der private RSA Schlüssel jeder Partei ist. Beide Seiten haben
        den öffentlichen Schlüssel des anderen mit dem die digitalen Signaturen geprüft werden. Das
        führt verglichen mit HMAC-SHA1 zu einem Riskolevel da die RSA Methode keinen
        Zugriffsschlüssel als teil des geteilten Geheimnisses verwendet. Dies bedeutet dass wenn
        der private RSA Schlüssel eines Konsumenten kompromitiert ist, sind es alle zugeordneten
        Zugriffstoken dieses Konsumenten auch. RSA führt zu einem alles oder gar nichts Schema.
        Generell tendiert die Mehrheit der Serviceprovider welche OAuth Authorisierung anbieten
        dazu HMAC-SHA1 standardmäßig zu verwenden, und jene welche RSA-SHA1 anbieten können eine
        Fallback Unterstützung für HMAC-SHA1 anbieten.
    </para>

    <para>
        Wärend digitale Signaturen zur Sicherheit von OAuth beitragen sind Sie trotzdem für andere
        Formen von Attacken angreifbar, wie Replay Attacken welche vorhergehende Anfragen
        aufgezeichnet und zu einer Zeit geprüft und signiert wurden. Ein Angreifen können jetzt
        exakt die gleiche Anfrage zum Provider wie er will und zu jeder Zeit senden und seine
        Ergebnisse auffangen. Das führt zu einem signifikanten Risiko aber es ist recht einfach
        sich davor zu schützen - einen eindeutigen String (z.b. eine Nonce) bei allen Anfragen
        hinzufügen welcher sich bei jeder Anfrage ändert (dies verändert laufend den Signaturstring)
        kann aber niemals wiederverwendet werden weil Provider verwendete Nonces zusammen mit einem
        bestimmten Fenster aktiv verfolgen welches vom Timestamp definiert wird der einer Anfrage
        auch angehängt wird. Man würde erwarten das wenn die Verfolgung einer bestimmten Nonce
        gestoppt wird, das wiederabspielen funktionieren würde, aber das ignoriert den Timestamp
        der verwendet werden kann um das Alter einer Anfrage zu ermitteln zu welcher Sie digital
        signiert wurde. Man kann also annehmen dass die eine Woche alte Anfrage in einem
        Wiederholungsversuch abgespielt wird, auf ähnliche Weise verworfen wird.
    </para>

    <para>
        Als letzter Punkt erwähnt, ist dies keine exzessive Ansicht der Sicherheitsarchitektur in
        OAuth. Was passiert zum Beispiel wenn <acronym>HTTP</acronym> Anfragen welche sowohl den
        Zugriffstoken als auch das Geheimnis des Konsumenten enthalten abgehört werden? Das System
        ist auf der einen Seite von einer klaren Übermittlung von allem abhängig solange
        <acronym>HTTPS</acronym> nicht aktiv ist. Deshalb ist die naheliegende Feststellung das
        <acronym>HTTPS</acronym>, dort wo es möglich ist zu bevorzugen ist und
        <acronym>HTTP</acronym> nur an solchen Orten eingesetzt wird so es nicht anders möglich oder
        nicht erschwinglich ist.
    </para>
</sect2>
