Sicheres Verwenden von CryptSignAndEncryptMessage?

  • Ich entwickle eine Anwendung, die Nachrichten sendet, die ich verschlüsseln und signieren möchte. Der CryptoApi bietet eine Funktion mit dem Namen CryptSignAndEncryptMessage . Die Beschreibung sagt aus, was diese Funktion tatsächlich macht:

    Die Funktion CryptSignAndEncryptMessage erstellt einen Hash des angegebenen -Inhalts signiert den Hash, verschlüsselt den Inhalt, hasht den verschlüsselten Inhalt und den signierten Hash und verschlüsselt dann sowohl den verschlüsselten Inhalt als auch den signierten Hash. Das Ergebnis ist dasselbe wie wenn der Hash zuerst signiert und dann verschlüsselt würde.

    Wenn ich das richtig verstanden habe, könnte diese Lösung anfällig sein ein Angriff namens Schleichweiterleitung ?

    Bei der Schleichweiterleitung wird der naive Ansatz "Sign and Encrypt" verwendet, damit B eine an B gerichtete Nachricht von A an einen Dritten C weiterleiten kann und C der Meinung ist, dass die Nachricht war von B, bestimmt nach C (obwohl es von A nach B und gerade von B weitergeleitet wurde). Dies ist möglich, weil B die signierte Nachricht entschlüsseln und für C erneut verschlüsseln kann. Obwohl eine Nachricht "illegal" weitergeleitet werden kann, kann der eigentliche Nachrichteninhalt jedoch nicht geändert werden.

    Bedeutet dies wiederum, dass ich, wenn ich den Empfänger in die signierten Daten einbeziehe, nicht anfällig für diesen Angriff ist?

    30 May 2012
    cmcculloh
1 answer
  • Wenn ich es richtig verstanden habe, könnte diese Lösung für einen Angriff mit dem Namen Schleichweiterleitung anfällig sein.

    Wenn CryptSignAndEncryptMessage wird auf naive Weise implementiert. Dann scheint es, als wäre es anfällig für einen Weiterleitungsangriff. Microsoft hat die genauen Details (AFAIK) nicht veröffentlicht, daher ist es schwierig, dies mit Sicherheit zu sagen.

    Bedeutet dies, wenn ich den Empfänger einbeziehe In den signierten Daten bin ich nicht anfällig für diesen Angriff?

    Es gibt eine veröffentlichte Empfehlung, die von einigen sehr respektablen Kryptographen gemacht wird. Es ist in Abschnitt 7 von Zur Sicherheit von gemeinsamer Signatur und Verschlüsselung und ähnelt dem, was Sie vorschlagen. Insbesondere empfehlen sie Folgendes:

    1. Bei jeder Verschlüsselung muss die Identität des Senders $ ID_S $ zusammen mit dem verschlüsselten Code angegeben werden message.
    2. Wenn Sie etwas signieren, geben Sie die Identität des Empfängers $ ID_R $ zusammen mit der signierten Nachricht an.
    3. Auf der Empfangsseite immer Entweder die Identität des Senders oder des Empfängers stimmt nicht mit dem erwarteten überein, geben Sie $ \ bot $ aus.
    30 May 2012
    JaanusSiim