Generazione e utilizzo degli hash nei PDF forms dinamici

Ultimo aggiornamento: 2023-08-15

Conoscenze preliminari

È necessaria una certa esperienza con AEM Forms su JEE Designer, così come la possibilità di accedere e chiamare funzioni in oggetti script.

Livello utente

Inizio

Quando si desidera nascondere una password nel modulo PDF senza inserirla in testo non crittografato nel codice sorgente o in qualsiasi altro punto del documento PDF, è fondamentale sapere come generare e utilizzare gli hash MD4, MD5, SHA-1 e SHA-256.

L’idea è quella di oscurare la password generando un hash univoco e archiviarlo nel documento di PDF. Questo hash univoco può essere generato da diverse funzioni hash. In questo articolo viene illustrato come generarle all’interno del modulo PDF e come utilizzarle.

Una funzione hash accetta come input una stringa lunga (o messaggio) di qualsiasi lunghezza e produce come output una stringa a lunghezza fissa, a volte denominata message digest 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 Dynamic 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 - definiti dal NIST

Il principale vantaggio dell’utilizzo degli hash è che non è necessario confrontare direttamente le password confrontando stringhe di testo non crittografate, ma è possibile confrontare i due hash delle due password. Poiché è improbabile che due stringhe diverse abbiano lo stesso hash, se entrambi gli hash sono identici, puoi supporre che anche le stringhe confrontate (in questo caso, le password) siano identiche.

NOTA

Esistono alcuni noti problemi di sicurezza (cosiddetti conflitti hash) con MD4 o MD5. A causa di queste collisioni di hash e di altri hack SHA-1 (inclusi i tavoli arcobaleno), ho deciso di concentrarmi sulla funzione di hash SHA-256 nel secondo campione. Per ulteriori informazioni, vedere Collisione e Tavola arcobaleno pagine da Wikipedia.

Analisi degli oggetti script

Quando apri uno dei due esempi forniti in AEM Forms su JEE Designer, trovi i quattro oggetti script nella palette Gerarchia (vedi la Figura seguente).

Variabili

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 sono state implementate le seguenti funzioni hash:

  • soHASHING_MD4.hex_md4()
  • soHASHING_MD4.b64_md4()
  • soHASHING_MD4.str_md4()
  • soHASHING_MD5.hex_md5()
  • soHASHING_MD5.b64_md5()
  • soHASHING_MD5.str_md5()
  • soHASHING_SHA1.hex_sha1()
  • soHASHING_SHA1.b64_sha1( )
  • soHASHING_SHA1.str_sha1( )
  • soHASHING_SHA256.hex_sha256()
  • soHASHING_SHA256.b64_sha256()
  • soHASHING_SHA256.str_sha256()

Come puoi vedere da questo elenco, sono disponibili diverse funzioni per i diversi tipi di output dell’hash. Puoi scegliere tra hex_ per le cifre esadecimali, b64_ per output con codifica Base64, o str_ per la codifica di stringhe semplice.

A seconda della funzione di hash scelta, la lunghezza dell’hash varia:

  • MD4: 128 bit
  • MD5: 128 bit
  • SHA-1: 160 bit
  • SHA-256: 256 bit

Prova dei PDF forms di esempio

I file di esempio per questo articolo includono due PDF forms. Il primo esempio consente di digitare una stringa e quindi generare i valori hash MD4, MD5, SHA-1 e SHA-256 per la stringa. Il secondo esempio è un modulo semplice che consente di sbloccare i campi di testo se viene immessa una password corretta.

Esempio 1: generazione di hash

Per provare il primo esempio, procedere come segue:

  1. Dopo aver scaricato e decompresso i file di esempio, apri hashing_forms_sample1.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 sarà possibile visualizzare il codice sorgente.
  2. Nel campo di testo etichettato testo non crittografato digita una password o qualsiasi altro messaggio a cui desideri applicare l’hash.
  3. Fare clic su uno dei quattro pulsanti per generare l'hash MD4, MD5, SHA-1 o SHA-256. A seconda del pulsante premuto, viene chiamata una delle quattro funzioni hash che produce l'output esadecimale e viene applicato l'hash alla stringa o al messaggio.

Il risultato dell’operazione hash viene visualizzato nel campo etichettato hash. La lunghezza dell’hash varia a seconda della funzione di hash scelta.

Tutti gli esempi utilizzano cifre esadecimali come tipo di output. È possibile utilizzare l'editor di script per modificare gli esempi e modificare il tipo di output in Base64 o in String semplice.

Esempio 2: password corrispondenti

Il secondo esempio mostra come gli hash vengono confrontati in background, senza dover rivelare la vera password. La password immessa è sottoposta ad hashing. Anche la password reale, memorizzata in un campo invisibile, viene sottoposta ad hashing. La password è protetta non perché è invisibile, ma perché è stata sottoposta a hashing. Poiché è impossibile ricostruire la password dal valore con hash, è possibile esporla in modo sicuro sotto forma di hash. Il confronto viene fatto solo tra gli hash, non tra le password in testo non crittografato. Se entrambi gli hash sono uguali, è possibile supporre che le password siano identiche.

Per provare il secondo esempio, procedere come segue:

  1. Apri 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 sarà possibile visualizzare il codice sorgente.
  2. Scegli uno dei due campi di password etichettati MAN password o Password WOMAN e digita le password:
    1. La password per l'uomo è bob
    2. La password per la donna è alice
  3. Quando si sposta lo stato attivo dai campi della password o si preme il tasto Invio, l'hash della password immessa viene generato automaticamente e viene confrontato con l'hash memorizzato della password corretta in background. Le password con hash corrette vengono memorizzate nei campi di testo invisibili etichettati 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 per consentirvi di digitare testo. Lo stesso comportamento vale per i campi della donna.
  4. In alternativa, è possibile fare clic sul pulsante con l'etichetta "elimina password", che disabilita i campi di testo e ne modifica il bordo.

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 andare da qui

Dove ti servirebbe qualcosa del genere? Considera un modulo di PDF con campi che devono essere compilati solo da persone autorizzate. Proteggendo questi campi con una password, che non può essere visualizzata in testo non crittografato in nessuna parte del documento, come in Sample_2.pdf, è possibile garantire che tali campi siano accessibili solo agli utenti che conoscono la password.

Ti 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 Attribution forniscono anche informazioni aggiuntive sull’hashing e sulle implementazioni JavaScript specifiche utilizzate in questo articolo.

Attribution

In questa pagina