Con javascript nel browser, come posso firmare alcuni dati senza manipolare direttamente una chiave privata?

1

Con JavaScript nel browser, ho bisogno di firmare digitalmente alcuni dati. Sto guardando il nuovo Crypto.Subtle api , in particolare il segno ( ) e importKey() metodi. Voglio, molto ragionevolmente, ritenere di installare un certificato su un dispositivo mobile, al di fuori della mia app Web, quindi, nell'app Web, per firmare alcune cose con il certificato installato senza manipolare direttamente o visualizzare la chiave privata. Tuttavia non riesco a vedere se o come l'API Crypto si interfaccia con i certificati installati.

Mi manca qualcosa di ovvio? Se questo non è possibile, ci sono plugin del browser che possono aiutarmi? Vedo nel 2009 qualcuno l'ha fatto con un oggetto MS ActiveX, ma ci deve essere un modo migliore sei anni dopo?

    
posta bbsimonbb 16.09.2015 - 12:27
fonte

2 risposte

0

Non è possibile, non senza uno sforzo significativo da parte degli autori del browser (o degli autori del plugin del browser) per renderlo possibile. Ricorda, il punto di firmare qualcosa è verificare la sua autenticità - cioè, che il firmatario intendeva firmare quella cosa, con quella chiave, e sono l'unica con la chiave - quindi avere un modo per il contenuto della pagina web (che è un codice intrinsecamente inaffidabile, dal punto di vista del browser) per accedere alle chiavi di firma di un utente sarebbe un grave rischio per la sicurezza! Anche solo l'enumerazione delle chiavi installate consentirebbe all'utente di eseguire il fingerprinting e il tracciamento.

Ora, un browser (o un plug-in) potrebbe tentare di farlo in modo sicuro, offrendo un'API JS che richiede all'utente " Uno script sul sito sta tentando di accedere all'archivio certificati. [Consenti ] [Rifiuta (impostazione predefinita)] "e quindi un prompt simile (se il primo è approvato) per l'accesso alla propria chiave privata (e la password per esso se necessario). Sarei molto cauto riguardo a questa caratteristica, però.

    
risposta data 16.09.2015 - 22:12
fonte
0

Non è possibile in un browser semplice . Ma se provi a eseguire la tua web app , userai certamente una specie di wrapper lib per convertirlo in un'applicazione Android (o ios, ecc.). In questo modo puoi fare ciò che il tuo wrapper può fare sul dispositivo mobile. Se scrivi il tuo wrapper e disponi dei diritti appropriati, puoi eseguire qualsiasi ciò che altre app mobili possono fare.

Il wrapper più popolare come phoneGap ti dà l'API per l'accesso ai file, in questo modo puoi accedere alla tua chiave (btw, la firma è fatta da privkey non da certificati).

Tuttavia  Sono d'accordo con CBHacking, non sarebbe una buona idea accedere alle tue preziose chiavi da javascript. Forse un approccio migliore per creare una chiamata API che firma quel messaggio per te. Gli script non toccano mai i tasti allora.

    
risposta data 17.09.2015 - 02:15
fonte

Leggi altre domande sui tag