Frage

Wir entwickeln einen Service, der eine POST Anfrage akzeptiert. Einige der POST Daten müssen vor dem POST verschlüsselt werden, wie es in versteckten Feldern in einem Formular gespeichert werden.

Die Anwendung ist in C # geschrieben, aber wir wollen Dritte Kunden in der Lage sein, leicht mit ihm zu integrieren. Wir finden, dass die meisten Kunden nutzen PHP, klassischen ASP oder VB.Net.

Die dritten Parteien sollten nur die Verschlüsselung tun. Wir würden die Entschlüsselung tun. Es gibt keine Zwei-Wege-Kommunikation.

Was sind die kompatibelen Kombinationen von Verschlüsselungsalgorithmus, Padding-Modus und anderen Optionen?

War es hilfreich?

Lösung

Unter der Annahme, dass Sie eine sichere Art und Weise haben einen Schlüssel teilen (ob RSA-Verschlüsselung davon, Retrieval über eine SSH oder HTTPS-Verbindung oder die anderen Entwickler auf einer gesicherte Telefonleitung callling), einer der großen moderner Verschlüsselungen (wie AES wie erwähnt würde durch @Ed Haber) geeignet sein. Ich würde zweite seinen Vorschlag von AES. Es sollte Bibliotheken für PHP, VB, Ruby, etc sein.

Beachten Sie jedoch, dass mit „keine Zwei-Wege-Kommunikation“ Sie Methode eine out-of-Kanal werden finden sicher den symmetrischen Schlüssel zur Verschlüsselung von Partei zu bekommen.

Andere Tipps

Wenn Sie meinen, dass es unmöglich sein sollte für Dritte Daten zu entschlüsseln, dann sollten Sie einen asymmetrischen Verschlüsselungsalgorithmus wie RSA verwenden. Dies wird die Drittanbieter-Daten mit Ihrem öffentlichen Schlüssel zu verschlüsseln und nur dann, können Sie die Daten mit Ihrem privaten Schlüssel entschlüsseln, die Sie nicht offen legen. Es sollte für alle Sprachen verfügbar Implementierungen von RSA, die Sie erwähnt.

Wenn Sie nicht egal, ob die Dritt die Daten entschlüsseln kann, dann ist AES der Weg zu gehen. Sie werden einen Schlüssel haben, die Sie mit den Dritten teilen. Dieser Schlüssel wird sowohl für die Verschlüsselung und Entschlüsselung verwendet.

Ich würde AES verwenden für die Massendatenverschlüsselung und RSA für den AES-Schlüssel verschlüsselt werden. Wenn die Daten klein genug ist, dann verschlüsseln nur die ganze Sache mit RSA.

Ed Haber sagte

  

Ich würde AES verwenden für die Bulk-Daten   Verschlüsselung und RSA für die Verschlüsselung der   AES-Schlüssel. Wenn die Daten klein genug   dann verschlüsselt nur die ganze Sache mit   RSA.

Ich denke, das ist eine gute Lösung. Was ich tun würde, ist Ihre Anwendung für die Zeugung eines öffentlichen RSA-Schlüssel eine API veröffentlichen. Wenn ich Dritte möchte, dass Sie etwas senden wird es den öffentlichen Schlüssel. Es erzeugt dann einen Sitzungsschlüssel die eigentliche Verschlüsselung unter Verwendung einer Blockchiffre (dh AES) und sendet den Schlüssel für Sie durch die Verschlüsselung mit dem öffentlichen Schlüssel zu tun. Sie entschlüsseln den Sitzungsschlüssel mit dem privaten Schlüssel. Der Dritte verschlüsselt dann die Daten, die er möchte, dass Sie mit AES senden (ein Padding-Verfahren verwenden, die Sie auch veröffentlichen) und sendet es Ihnen. Sie entschlüsseln den Sitzungsschlüssel verwendet wird.

Es gibt einige Probleme mit dem oben beschriebenen Verfahren. Da Sie keine Informationen (außer Ihren öffentlichen Schlüssel veröffentlichen zu senden sind, können Sie nicht steuern, wie der Sitzungsschlüssel generiert wird. Das bedeutet, dass Dritte sehr unsichere Art und Weise der Sitzungsschlüssel verwenden können, um zu erzeugen und Sie werden es nie erfahren. Ein zweites Problem in den Pad-Daten für AES hat in der gleichen Art und Weise ist jeder, der möchte, dass Sie Daten senden Sie. So müssen Sie alle ein Koordinaten stellen Sie sicher. das zweite Problem ist nicht zu groß, aber das erste ein Problem sein könnte vor allem wenn man die dritte, dass alle viel zu generieren wirklich gute Session-Schlüssel von einem guten kryptografisch sicheren Zufallszahlengenerator

nicht vertrauen

Sie können ganz einfach Ihre eigene XOR Key-basierten Bit-Verschlüsselung implementieren. Mit ein wenig Gedanken und Einfallsreichtum, können Sie sich etwas einfallen lassen, die für Ihre Anwendung mehr als geeignet ist.

Hier ist ein PHP-Beispiel:

function XOREncryption($InputString, $KeyPhrase){

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){

        $rPos = $i % $KeyPhraseLength;

        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);

        $InputString[$i] = chr($r);
    }

    return $InputString;
}

Coldfusion hat die verschlüsseln und entschlüsseln Funktionen der Lage, eine Reihe von Algorithmen und Kodierungen der Handhabung, einschließlich der AES oben empfohlen.

Informationen unter: http://www.cfquickdocs.com/cf8/? GetDoc = encrypt # Encrypt

Schnellbeispielcode:

Key = generateSecretKey( 'AES' , 128 )

EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' )

Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' )

Eine ähnliche Funktionalität ist mit dieser Bibliothek verfügbar für PHP :
http://www.chilkatsoft.com/p/php_aes.asp

... und Java, Python, Ruby und andere ...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

Klingt wie RSA Algorithmus für Sie.

Warum haben Sie den Server über HTTPS ausgesetzt? Auf diese Weise jeden Client, den HTTPS umgehen kann, kann den Dienst sicher verbrauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top