Generazione e utilizzo degli hash nei PDF forms dinamici generate-work-with-hashes-dynamic-pdf-forms

Conoscenze preliminari prerequisite-knowledge

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

Livello utente user-level

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 ed 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.

NOTE
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 le pagine Collision e Rainbow Table di Wikipedia.

Analisi degli oggetti script examining-script-objects

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. È possibile scegliere tra hex_ per le cifre esadecimali, b64_ per l'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 try-sample-pdf-forms

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 generating-dashes

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 il codice sorgente.
  2. Nel campo di testo con etichetta testo non crittografato, digita una password o qualsiasi altro messaggio con 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 con etichetta 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 matching-passwords

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 il codice sorgente.

  2. Scegli uno dei due campi della password etichettati Password MAN 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 con etichetta passwd_man_hashed e passwd_woman_hashed. Se si digita la password corretta per l'uomo, i campi di testo con etichetta Man 1 e Man 2 sono resi accessibili in modo da poter digitare testo al loro interno. 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 next-steps

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

Attribution attributions

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2