Se la firma dovrebbe affermare la proprietà del documento o l'accettazione da parte dell'utente, allora il potere di firmare dovrebbe rimanere nelle mani dell'utente (precisamente dove risiede il suo "USB etoken"). Poiché gli algoritmi di firma iniziano con una chiamata alla funzione hash (il messaggio da firmare è hash, e il resto dell'algoritmo utilizza il valore hash come input), almeno l'hash del file PDF deve essere inviato al computer dell'utente.
Javascript nei browser Web non ha (ancora) la possibilità di accedere ai dispositivi hardware dal lato dell'utente. Non sarai in grado di fare una cosa del genere senza una sorta di codice nativo o pseudo-nativo sul lato utente; questo significa ActiveX, Silverlight (soggetto all'autorizzazione dell'utente), un'applet Java (firmata) o alcuni eseguibili non Web che l'utente esegue sulla sua macchina. Nessuna di queste tecnologie è veramente facile da implementare. Nessuno di questi funzionerà con tablet / smartphone (per questi sarà necessaria un'applicazione completa).
Comunque, se vuoi che l'utente firmi, allora vuoi potenzialmente rendere l'utente responsabile per ciò che firma. Questo è un problema parzialmente legale, per il quale la tecnologia è solo una parte della soluzione. Avrai bisogno di una soluzione per la firma che potrebbe potenzialmente "tenere in tribunale", che dipende molto dalla giurisdizione locale.