Firme digitali di documenti XML, PDF e Office su ogni piattaforma

2

Sto cercando di sviluppare un sito Web che esegua firme digitali sul lato client e quindi di inviare il documento firmato sul lato server. Voglio fare le firme sul client, a causa del fatto di non mandare via la chiave privata dell'utente. Questa chiave (in teoria) deve essere sempre con l'utente e non deve essere inviata al web (anche se protetta con SSL, ad esempio).

Voglio che ogni piattaforma possa essere in grado di firmare i documenti. Ho già sviluppato un'applet Java con gli algoritmi di firma, ma Java non è supportato in iOS o Android .. Anche in .NET è impossibile. Quindi penso di essere limitato a JavaScript, ma non sono a conoscenza di alcuna libreria javascript che firma documenti XML, PDF e Office. Cosa devo fare? Solo con Javascript ogni piattaforma funziona ..

    
posta user3411342 12.03.2014 - 17:15
fonte

2 risposte

2

Divulgazione: lavoro per CoSign .

Stai sollevando la domanda comune di firma digitale dei dati sul bordo della rete.

Buona fortuna per l'idea di firmare al cliente / edge, per le ragioni che discuti. E dimentica Javascript, è completamente insicuro dal punto di vista della crittografia .

Hai ragione che la chiave privata dei firmatari non deve essere inviata ovunque.

Buone notizie: c'è un'architettura alternativa che:

  • Non richiede che le chiavi private vengano inviate ovunque
  • Proteggi le chiavi private
  • Abilita la firma da client di tutti i tipi, inclusi dispositivi mobili, Android, .Net, iOS, ecc.
  • Riduci i costi amministrativi centralizzando le chiavi e la gestione delle chiavi

La risposta: utilizzare un dispositivo di firma centralizzato. L'appliance è indurita a livello hardware: se provi ad aprire la scatola, le chiavi vengono distrutte. Gli elettrodomestici firmati sono realizzati dalla mia azienda e da altri.

In questo sistema, il documento (o meglio, solo il suo hash) viene inviato dal dispositivo periferico al dispositivo di firma centralizzato. L'utente si autentica anche con l'appliance (utilizzando uno qualsiasi di una serie di tecniche). L'appliance detiene le chiavi private. Firma l'hash e restituisce la firma digitale al client edge.

A seconda delle capacità del client, può:

Assembla il documento firmato stesso (combinando la firma digitale con il documento sorgente). Vantaggio: è necessario inviare meno dati tra il client edge e l'appliance di firma. Problema: richiede più sw sul client. Oppure:

L'appliance può restituire il documento firmato completo. Vantaggi di un'implementazione più semplice sul client ma richiede che il documento venga inviato all'appliance di firma dal client edge.

Si noti che non è necessario restituire un intero documento PDF: la firma digitale PDF viene semplicemente aggiunta al documento di origine. Quindi il flusso può essere:

  1. Invia l'intero PDF per la firma. (O semplicemente invia l'hash se il cliente può calcolarlo.)
  2. Riceve indietro l'intero PDF (firmato), o solo una "coda" che, una volta aggiunta al PDF di origine, crea il documento firmato.

Tipi di dati multipli La mia azienda supporta la firma di PDF, Word, Excel, XML e altri tipi di documenti pronti all'uso. Ad esempio, i documenti Word sono firmati usando lo "standard" di Word - un documento Word con firma digitale può essere verificato da un destinatario (relying party) senza installando qualcosa oltre a Word. Nessun plugin, ecc.

Autenticazione firmatario I firmatari devono autenticarsi con l'appliance centralizzata. La mia azienda supporta diversi tipi di autenticazione tra cui OTP e 2FA.

    
risposta data 13.03.2014 - 07:20
fonte
0

Per requisiti di sicurezza da bassi a moderati, la delega è più economica e ci sono molte soluzioni per i servizi di firma, come l'appliance menzionata nella risposta sopra. Tuttavia, indipendentemente dall'affidabilità fornita dal servizio di firma, si affiderà sempre alla capacità del client di autenticare il servizio. Utilizzando il codice fornito dal fornitore PKI + fornito dal fornitore predefinito adatto non c'è difesa contro un attacco mirato.

Java potrebbe essere una scelta ragionevole per le firme lato client, ad eccezione di iOS. Non come applet java, ma come applicazione java, qualcosa come portablesigner (sourceforge). In linea di principio dovrebbe essere possibile derivare un'app per Android da tale progetto. iOS avrà bisogno di un'app obj-C separata. Considerando che devi comunque gestire le chiavi dei client, l'installazione di Java sembra essere un problema minore.

I browser avranno l'API Web Crypto accessibile da Javascript e potrebbe valere la pena esaminarla una volta che W3C sarà pronto a rilasciarlo. Se si trova un metodo per eseguire il bootstrap del codice Javascript in modo sicuro può essere utile la firma sul lato client.

    
risposta data 15.03.2014 - 10:14
fonte