Se requiere cierta experiencia con AEM Forms en JEE Designer, así como la capacidad de acceder y llamar a funciones en objetos de script.
Inicio
Si desea ocultar una contraseña en el formulario de PDF y no desea que esté en texto no cifrado dentro del código fuente o en cualquier otro lugar del documento de PDF, es fundamental saber cómo generar y trabajar con los hash MD4, MD5, SHA-1 y SHA-256.
La idea es ofuscar la contraseña generando un hash único y almacenarlo en el documento del PDF. Este hash único se puede generar mediante diferentes funciones hash y, en este artículo, se muestra cómo generarlas dentro del formulario PDF y cómo trabajar con ellas.
Una función hash toma una cadena larga (o mensaje) de cualquier longitud como entrada y produce una cadena de longitud fija como salida, a veces denominada compendio de mensajes o huella digital.
AEM Forms en JEE Designer le permite implementar las diferentes funciones hash en objetos de script como JavaScript y ejecutarlas dentro de un documento de PDF dinámico. Los PDF de ejemplo que se incluyen con los archivos de ejemplo para este artículo utilizan implementaciones de código abierto de las siguientes funciones hash:
MD4 y MD5: diseñados por Ronald Rivest
SHA-1 y SHA-256 - tal como los define el NIST
La mayor ventaja de utilizar hashes es que no tiene que comparar contraseñas directamente comparando cadenas de texto no cifrado; en su lugar, puede comparar los dos hashes de las dos contraseñas. Dado que es muy poco probable que dos cadenas diferentes tengan el mismo hash, si ambos hashes son idénticos, puede suponer que las cadenas comparadas (en este caso, las contraseñas) también son idénticas.
Hay algunos problemas de seguridad conocidos (los llamados conflictos de hash) con MD4 o MD5. Debido a esos choques de hash y otros hacks SHA-1 (incluyendo las tablas del arco iris), decidí concentrarme en la función de hash SHA-256 en la segunda muestra. Para obtener más información, consulte la Conflicto y Tabla del arco iris páginas de Wikipedia.
Cuando abra uno de los dos ejemplos proporcionados en AEM Forms en JEE Designer, encontrará los cuatro objetos de script en la paleta Jerarquía (consulte la figura siguiente).
Para ver la implementación de JavaScript de las funciones hash dentro de estos objetos de script, seleccione el objeto de script y explore el código en el Editor de scripts. Puede ver cómo se ha implementado cada una de las siguientes funciones hash:
Como puede ver en esta lista, hay diferentes funciones disponibles para los diferentes tipos de salida del hash. Puede elegir entre hex_
para dígitos hexadecimales, b64_
para salida codificada en Base64, o str_
para la codificación de cadenas simple.
Según la función hash que elija, la longitud del hash variará:
Los archivos de ejemplo para este artículo incluyen dos PDF forms. El primer ejemplo permite escribir una cadena y generar valores hash MD4, MD5, SHA-1 y SHA-256 para la cadena. El segundo ejemplo es un formulario sencillo que desbloquea los campos de texto si se introduce una contraseña correcta.
Siga los pasos a continuación para probar el primer ejemplo:
El resultado de la operación hash se muestra en el campo denominado hash. La longitud del hash variará según la función hash que elija.
Todos los ejemplos utilizan dígitos hexadecimales como tipo de salida. Puede utilizar el Editor de secuencias de comandos para modificar los ejemplos y cambiar el tipo de salida a Base64 o String simple.
El segundo ejemplo muestra cómo se comparan los hash en segundo plano, sin tener que revelar la contraseña real. La contraseña introducida tiene un cifrado hash. La contraseña real, que se almacena en un campo invisible, también tiene un cifrado hash. La contraseña es segura no porque sea invisible, sino porque tiene un cifrado hash. Como es imposible reconstruir la contraseña a partir del valor con hash, es seguro exponer la contraseña en forma con hash. La comparación se realiza únicamente entre los hashes, no entre las contraseñas en texto no cifrado. Si ambos hashes son iguales, entonces puede suponer que las contraseñas son idénticas.
Siga los pasos a continuación para probar el segundo ejemplo:
hashing_forms_sample2.pdf
con AEM Forms en JEE Designer. Como alternativa, puede utilizar Adobe Reader o Adobe Acrobat Professional para abrir y ver el ejemplo, pero no podrá ver el código fuente.bob
alice
passwd_man_hashed
y passwd_woman_hashed
. Si escribe la contraseña correcta para el comando man, los campos de texto etiquetados como Man 1
y Man 2
son accesibles para que pueda escribir texto en ellos. El mismo comportamiento se aplica a los campos de la mujer.El código para comparar los dos valores con hash y habilitar los campos de texto es sencillo:
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";
}
¿Dónde necesitarías algo como esto? Considere un formulario de PDF que tenga campos que solo deban rellenarlos personas autorizadas. Al proteger esos campos con una contraseña, que no se puede ver en texto no cifrado en ninguna parte del documento como en Sample_2.pdf, puede asegurarse de que esos campos solo sean accesibles para los usuarios que conocen la contraseña.
Le animo a que siga explorando los dos archivos de PDF de muestra. Puede generar nuevos valores hash con Sample_1.pdf y utilizar los valores generados para cambiar la contraseña o la función hash utilizada en Sample_2.pdf. Los recursos enumerados en la sección Atribuciones también proporcionan información adicional sobre hashing y las implementaciones específicas de JavaScript utilizadas en este artículo.