2009-07-15 15 views
11

Recentemente ho trovato questa libreria JavaScript RSA: http://www.ohdave.com/rsa/. Tuttavia, richiede che la chiave sia pre-generata. Qui sono le mie domande/problemi:Generazione di una coppia di chiavi RSA in JavaScript

  1. mi piacerebbe per generare una coppia di chiavi RSA in JavaScript

  2. (in modo che io non devo cambiare il codice ogni volta che voglio una nuova coppia di chiavi.)
  3. Mentre capisco come questo possa essere usato per inviare dati sicuri, se non sbaglio questa libreria non può essere usata per il client per ricevere dati sicuri dal server (perché gli esponenti pubblici e privati, e il modulo, vengono trasmessi testo semplice dal server). Mi sbaglio?

Mi piacerebbe qualche discussione su questo. Non sono un esperto di sicurezza, ma ho una conoscenza abbastanza precisa della crittografia asimmetrica.

+0

Non puoi semplicemente inviare i dati usando SSL? È sicuro e, cosa più importante, è trasparente per te, quindi non è necessario eseguire alcun tipo di crittografia/decodifica da nessuna parte. – RaYell

+2

Forse potrei fare SSL. Ma cosa succede se sto usando un host che non lo supporta? Personalmente, non so come configurare SSL: tutte le cose che ho trovato online non sono dirette. Indipendentemente da ciò, SSL non è davvero rilevante per la mia domanda. –

risposta

1

Generare la coppia di chiavi richiede un forte generatore di numeri casuali (non penso di averne uno in JavaScript) e un bel po 'di calcolo (per i test di primalità). Quindi, una volta che hai la tua coppia, quando trasmetti la tua chiave pubblica dall'altra parte, c'è un'opportunità per un attacco man-in-the-middle poiché non c'è un controllo di integrità sulla trasmissione della chiave pubblica.

Otterrete la trasmissione sicura a chiunque disponga della chiave privata. Non è chiaro dalla tua domanda se si tratti del client o del server. È possibile inizializzare un segreto condiviso facendo in modo che chiunque abbia solo la chiave pubblica generi un segreto condiviso, crittografarlo e inviarlo a chiunque abbia la chiave pubblica.

È possibile ottenere un set di funzionalità simile (dipendenza dal generatore di numeri casuali, vulnerabilità al MITM, possibilità di creare un segreto condiviso da utilizzare come chiave di sessione) ma con molto meno computazione eseguendo invece uno scambio di chiavi Diffie-Hellman.

Probabilmente stai meglio capire come configurare SSL sul tuo server.

+0

Lo scambio di tasti Diffie-Hellman sembra interessante, esaminerò quello. Ecco un link che ho trovato su un impianto javascript: http://enanocms.org/News:Article/2008/02/20/Diffie_Hellman_key_exchange_implemented Sul punto delle coppie di chiavi assimetriche, un forte generatore di numeri casuali potrebbe essere facilmente trasferito da un'altra lingua. Lo stesso con i test di primalità. Non penso che questo sarebbe del tutto proibitivo in javascript, specialmente con il giusto thread in background che lo esegue (mentre un utente usa il resto della pagina). Conosci qualche buon codice di generazione di chiavi RSA in stile C che potrei usare? –

+0

Ho sentito che il libro di Simson Garfinkel su PGP ha una buona spiegazione del codice, incluso il tester di primalità, usando vari metodi veloci e poi facendo alcuni passaggi finali con codice basato sul Piccolo Teorema di Fermat. E dovresti riuscire a trovarlo in una vecchia fonte PGP o in una qualsiasi delle implementazioni di OpenPGP o gpg. Ma penso che scoprirai che è troppo lento in esecuzione in Javascript. –

Problemi correlati