Va bene inviare la chiave privata dell'utente, anche se protetta con un canale SSL?

0

Sto sviluppando un server web che esegue firme digitali di documenti (xml, pdf e office) e quindi convalida tali firme.

La mia idea è: un utente mette la sua SmartCard e attraverso un PIN, ottiene la sua chiave privata. Quindi, la chiave privata deve essere inviata al server, in modo che il server possa firmare il documento con quella chiave.

Anche se la chiave privata viene trasmessa attraverso un canale SSL (HTTPS), è una buona idea inviare la chiave privata lontano dall'utente? Qual è la tua opinione? Sto cercando di evitare di eseguire le firme sul lato client, in modo che sia possibile accedere al servizio di firma da ogni dispositivo.

Saluti, William.

    
posta user3411342 12.03.2014 - 17:10
fonte

3 risposte

3

(solo per riassumere la mia risposta a questa domanda duplicata su SO e i suoi commenti ...)

È certamente una cattiva pratica, e può anche essere un importante problema legale.

Poiché sia l'utente che il tuo servizio tecnicamente hanno avuto accesso alla chiave privata, non è più possibile garantire chi fosse il firmatario effettivo verso terzi.

Do you know any javascript library that signs xml, pdf and office documents? This way, the private key would only be used on client-side.

Non fare crypto JavaScript . Non sarai in grado di dimostrare all'utente cosa fa il tuo codice (potrebbe ancora inviare la chiave). Per quanto ne so, parte del progetto WebCrypto stava cercando di risolvere alcuni di questi problemi (ad esempio lasciando che alcuni codici JS usassero la chiave privata memorizzata nel browser senza farla uscire), ma non è ancora pronta, e non risolve tutti i problemi (es dimostrando agli utenti che cosa stanno firmando con quella chiave privata).

E, naturalmente, lo show-stopper tecnico ...

La maggior parte dei meccanismi di smart card non ti consente di accedere alla chiave privata stessa (spesso in base alla progettazione), quindi in qualche modo dovresti in qualche modo interfacciare con l'API della firma per la scheda. Quella API in realtà non ti darà la chiave privata, ti permetterà solo di usarla per firmare qualcosa, l'elaborazione viene effettuata sulla carta stessa. Pertanto, qualsiasi piano per inviare la chiave privata da qualche parte o avere un codice (che non utilizza questa API) non funzionerebbe.

Mentre il certificato sulle smartcard può essere utilizzato dal browser per l'autenticazione con certificato client, perché i browser sono implementati per supportare questo come parte della propria interfaccia utente (niente a che fare con qualsiasi pagina web che si possa fornire), non credo c'è qualcosa di ovvio che uno script nella tua pagina web acceda a questo. (Questo lascerebbe anche il problema di fidarsi di ciò che il tuo codice JS effettivamente segnala.)

    
risposta data 12.03.2014 - 21:19
fonte
0

L'inserimento della chiave privata sul server interrompe la filosofia dell'infrastruttura a chiave pubblica, anche se lo trasferisci in modo sicuro.

Con la chiave privata ora fuori dal controllo degli utenti, sarà possibile per una terza parte (il server) impersonare l'utente. Questa è chiaramente una violazione di non ripudio - l'utente potrebbe rifiutare un contratto in base al fatto che lui non ha accettato, l'amministratore del server ha fatto.

"Ogni dispositivo" dovrebbe non essere in grado di firmare un documento come qualcun altro (immagino qui al tuo caso d'uso). Solo la persona la cui chiave privata dovrebbe essere in grado di firmare con esso.

Quale caso d'uso hai che richiede questa insolita proposta di distribuzione delle chiavi?

    
risposta data 12.03.2014 - 20:38
fonte
0

L'idea di pki è che la tua chiave privata sia la sine qua non della tua identità. Non lo mandi da nessuna parte.

Invece di inviarlo da qualche parte, mettilo in un posto (un'appliance centralizzata) e richiedilo da remoto. Vedi la mia risposta alla relativa domanda di stackexchange.

    
risposta data 13.03.2014 - 08:52
fonte