È necessaria un’esperienza con AEM Forms su JEE Designer, così come la possibilità di accedere e chiamare funzioni negli oggetti script.
Inizio
Quando si desidera nascondere una password nel modulo PDF e non si desidera visualizzarla in testo libero all’interno del codice sorgente o in qualsiasi altro punto del documento PDF, è fondamentale sapere come generare e utilizzare hash MD4, MD5, SHA-1 e SHA-256.
L’idea è quella di offuscare la password generando un hash univoco e archiviarlo nel documento PDF. Questo hash univoco può essere generato da diverse funzioni hash e in questo articolo ti mostrerò come generarle all’interno del modulo PDF e come utilizzarle.
Una funzione hash prende una stringa lunga (o messaggio) di qualsiasi lunghezza come input e produce come output una stringa a lunghezza fissa, a volte definita digest del messaggio o impronta digitale.
AEM Forms su JEE Designer consente di implementare le diverse funzioni hash negli oggetti script come JavaScript e di eseguirle all’interno di un documento dinamico PDF. I PDF di esempio inclusi nei file di esempio per questo articolo utilizzano implementazioni open source delle seguenti funzioni hash:
MD4 e MD5 - progettati da Ronald Rivest
SHA-1 e SHA-256 - come definiti dal NIST
Il vantaggio maggiore dell'utilizzo degli hash è che non è necessario confrontare direttamente le password confrontando stringhe di testo chiare; è invece possibile confrontare i due hash delle due password. Poiché è molto improbabile che due stringhe diverse abbiano lo stesso hash, se entrambi gli hash sono identici, è possibile presumere che anche le stringhe confrontate (in questo caso, le password) siano identiche.
Esistono alcuni noti problemi di sicurezza (cosiddetti conflitti hash) con MD4 o MD5. A causa delle collisioni di hash e di altri hacks SHA-1 (compresi i tavoli arcobaleno), ho deciso di concentrarmi sulla funzione hash SHA-256 nel secondo campione. Per ulteriori informazioni, consulta la sezione Collisione e Tavola arcobaleno pagine da Wikipedia.
Quando si apre uno dei due esempi forniti in AEM Forms su JEE Designer, i quattro oggetti script sono disponibili nella palette Gerarchia (vedere la figura seguente).
Per visualizzare l'implementazione JavaScript delle funzioni hash all'interno di questi oggetti script, selezionare l'oggetto script ed esplorare il codice nell'Editor di script. Puoi vedere come è stata implementata ciascuna delle seguenti funzioni hash:
Come puoi vedere da questo elenco, sono disponibili diverse funzioni per i diversi tipi di output dell’hash. Puoi scegliere tra hex_
per cifre esadecimali, b64_
per l'output codificato Base64, oppure str_
per una codifica stringa semplice.
A seconda della funzione hash scelta, la lunghezza dell’hash varia:
I file di esempio per questo articolo includono due PDF forms. Il primo esempio consente di digitare una stringa e quindi generare valori hash MD4, MD5, SHA-1 e SHA-256 per la stringa. Il secondo esempio è un modulo semplice che sblocca i campi di testo se viene immessa una password corretta.
Per provare il primo esempio, effettua le seguenti operazioni:
Il risultato dell’operazione hash viene visualizzato nel campo contrassegnato hash. La lunghezza dell’hash varia a seconda della funzione hash scelta.
Tutti i campioni utilizzano cifre esadecimali come tipo di output. È possibile utilizzare l'Editor di script per modificare i campioni e modificare il tipo di output in Base64 o Stringa semplice.
Il secondo esempio mostra come gli hash vengono confrontati in background, senza dover svelare la password reale. La password immessa è con hash. Anche la password reale, memorizzata in un campo invisibile, viene sottoposta a hash. La password è protetta non perché è invisibile, ma perché è stata impostata con hash. Poiché è impossibile ricostruire la password dal valore con hash, è sicuro esporre la password in forma con hash. Il confronto viene effettuato solo tra gli hash, non tra le password in un testo chiaro. Se entrambi gli hash sono uguali, è possibile presumere che le password siano identiche.
Per provare il secondo esempio, effettua le seguenti operazioni:
hashing_forms_sample2.pdf
con AEM Forms su JEE Designer. In alternativa, puoi utilizzare Adobe Reader o Adobe Acrobat Professional per aprire e visualizzare l’esempio, ma non potrai vedere il codice sorgente.bob
alice
passwd_man_hashed
e passwd_woman_hashed
. Se si digita la password corretta per l'uomo, i campi di testo etichettati Man 1
e Man 2
sono rese accessibili, in modo da poter digitare il testo al loro interno. Lo stesso comportamento si applica ai campi della donna.Il codice per confrontare i due valori con hash e abilitare i campi di testo è semplice:
if (soHASHING_SHA256.hex_sha256(this.rawValue) == passwd_man_hashed.rawValue){
VAL_man_1.access = "open";
VAL_man_2.access = "open";
VAL_man_1.borderColor = "0,255,0";
VAL_man_2.borderColor = "0,255,0";
}
Dove vi servirebbe qualcosa del genere? Si consideri un modulo PDF con campi che devono essere compilati solo da persone autorizzate. Proteggendo questi campi con una password, che non può essere visualizzata in un testo trasparente in qualsiasi punto del documento come in Sample_2.pdf, è possibile garantire che tali campi siano accessibili solo agli utenti che conoscono la password.
Vi incoraggio a continuare a esplorare i due file PDF di esempio. È possibile generare nuovi valori hash con Sample_1.pdf e utilizzare i valori generati per modificare la password o la funzione hash utilizzata in Sample_2.pdf. Le risorse elencate nella sezione Attribuzioni forniscono anche informazioni aggiuntive sull’hashing e sulle implementazioni JavaScript specifiche utilizzate in questo articolo.