2009-07-15 5 views
11

Ich habe vor kurzem diese RSA-JavaScript-Bibliothek gefunden: http://www.ohdave.com/rsa/. Es erfordert jedoch, dass der Schlüssel vorgeneriert wird. Hier sind meine Fragen/Themen:Erzeugen eines RSA-Schlüsselpaars in JavaScript

  1. Ich mag würde ein RSA-Schlüsselpaar in der JavaScript generieren

  2. (so, dass ich auf den Code nicht ändern sich jedes Mal, wenn ich ein neues Schlüsselpaar wollen.)
  3. Während ich verstehe, wie dies verwendet werden kann, um sichere Daten zu senden, kann ich diese Bibliothek nicht verwenden, damit der Client sichere Daten vom Server erhält (weil die öffentlichen und privaten Exponenten und der Modulo übertragen werden) Klartext vom Server). Täusche ich mich?

Ich würde gerne einige Diskussion darüber. Ich bin kein Sicherheitsexperte, aber ich habe eine ziemlich genaue Kenntnis der asymmetrischen Verschlüsselung.

+0

Können Sie nicht einfach die Daten mit SSL senden? Es ist sicher und, was noch wichtiger ist, es ist transparent für Sie, so dass Sie auf keiner Seite irgendeine Art von Verschlüsselung/Entschlüsselung vornehmen müssen. – RaYell

+2

Vielleicht könnte ich SSL tun. Aber was, wenn ich einen Host verwende, der es nicht unterstützt? Ich persönlich weiß nicht, wie man SSL konfiguriert - alles, was ich online gefunden habe, ist nicht einfach. Egal, SSL ist nicht wirklich relevant für meine Frage. –

Antwort

1

Das Erzeugen des Schlüsselpaares erfordert einen starken Zufallszahlengenerator (ich glaube nicht, dass Sie einen in JavaScript haben) und ziemlich viel Rechnen (für Primalitätstests). Sobald Sie Ihr Paar dann haben, wenn Sie Ihren öffentlichen Schlüssel auf die andere Seite übertragen, gibt es eine Möglichkeit für einen Man-in-the-Middle-Angriff, da bei der Übertragung des öffentlichen Schlüssels keine Integritätsprüfung stattfindet.

Sie erhalten sichere Übertragung an wer auch immer den privaten Schlüssel hat. Es ist nicht klar aus Ihrer Frage, ob das der Client oder der Server ist. Sie können ein gemeinsames Geheimnis initialisieren, indem Sie denjenigen, der nur den öffentlichen Schlüssel hat, ein gemeinsames Geheimnis erzeugen lassen, es verschlüsseln und es an denjenigen senden, der den öffentlichen Schlüssel hat.

Sie können einen ähnlichen Funktionssatz erhalten (Abhängigkeit vom Zufallsgenerator, Anfälligkeit für MITM, Möglichkeit, gemeinsam genutztes Geheimnis als Sitzungsschlüssel zu erstellen), jedoch mit weniger Aufwand durch Ausführen eines Diffie-Hellman-Schlüsselaustauschs.

Sie sind wahrscheinlich besser dran herauszufinden, wie Sie SSL auf Ihrem Server konfigurieren.

+0

Der Diffie-Hellman-Schlüsselaustausch klingt interessant, ich werde das untersuchen. Heres ein Link, den ich zu einer Javascript-Implementierung gefunden habe: http://enanocms.org/News:Article/2008/02/20/Diffie_Hellman_key_exchange_implemented Auf dem Punkt der assymetrischen Schlüsselpaare könnte ein starker Zufallszahlengenerator ziemlich leicht portiert werden eine andere Sprache. Gleiches gilt für Primzahltests. Ich denke nicht, dass dies in Javascript völlig zeitaufwendig wäre, besonders mit dem richtigen Hintergrund-Thread, der es ausführt (während ein Benutzer den Rest der Seite benutzt). Kennen Sie irgendeinen guten C-style RSA-Schlüsselgenerierungscode, den ich verwenden könnte? –

+0

Ich habe gehört, dass Simson Garfinkels Buch über PGP eine ziemlich gute Erklärung für den Code einschließlich des Primality-Testers hat - mit verschiedenen schnellen Methoden und dann einige abschließende Durchgänge mit Code basierend auf Fermat's Little Theorem. Und Sie sollten es in einer alten PGP-Quelle oder einer der OpenPGP- oder gpg-Implementierungen finden können. Aber ich denke, Sie werden feststellen, dass es in Javascript zu langsam ist. –

Verwandte Themen