Citrix ADC

Operaciones complejas en texto

Además de la simple coincidencia de cadenas, puede configurar expresiones que examinen la longitud de la cadena y el bloque de texto en busca de patrones en lugar de cadenas específicas.

Tenga en cuenta lo siguiente para cualquier operación basada en texto:

  • Para cualquier operación que tome un argumento de cadena, la cadena no puede superar los 255 caracteres.
  • Puede incluir espacios en blanco al especificar una cadena en una expresión.

Operaciones en la longitud de una cadena

Las siguientes operaciones extraen cadenas por un recuento de caracteres.

Operación de recuento de caracteres Descripción
<text>.TRUNCATE(<count>) Devuelve una cadena después de truncar el final del destino por el número de caracteres en <count>. Si toda la cadena es más corta que<count>, no se devuelve nada.
<text>.TRUNCATE(<character>, <count>) Devuelve una cadena después de truncar el texto después de <character> por el número de caracteres especificado en <count>.
<text>.PREFIX(<character>, <count>) Selecciona el prefijo más largo del destino que tenga como máximo<count> ocurrencias de<character>.
<text>.SUFFIX(<character>, <count>) Selecciona el sufijo más largo del destino que tenga como máximo<count> ocurrencias de<character>. Por ejemplo, considere el siguiente cuerpo de respuesta: JLEWX. La siguiente expresión devuelve un valor de “jlewX”: Http.res.body (100).sufijo (‘L’,1) La siguiente expresión devuelve “llewX”: Http.res.body (100).suffix (‘L’,2)
<text>.SUBSTR(<starting_offset>, <length>) Seleccione una cadena con<length>el número de caracteres del objeto de destino. Comience a extraer la cadena después de la <starting_offset>. Si el número de caracteres después del desplazamiento es menor que el valor del<length> argumento, seleccione todos los caracteres restantes.
<text>.SKIP(<character>, <count>) Seleccione una cadena del destino después de saltar sobre el prefijo más largo que tenga como máximo<count> ocurrencias de<character>.

Operaciones en una parte de una cadena

Consulte la Tabla de operaciones de cadenapara saber cómo extraer un subconjunto de una cadena más grande mediante una de las operaciones.

Operaciones para comparar el orden alfanumérico de dos cadenas

La operación COMPARAR examina el primer carácter no coincidente de dos cadenas diferentes. Esta operación se basa en el orden lexicográfico, que es el método utilizado para ordenar términos en diccionarios.

Esta operación devuelve la diferencia aritmética entre los valores ASCII de los primeros caracteres no coincidentes en las cadenas comparadas. Las siguientes diferencias son ejemplos:

  • La diferencia entre “abc” y “y” es -1 (basado en la tercera comparación de caracteres por pares).
  • La diferencia entre “@” y “abc” es -33.
  • La diferencia entre “1” y “abc” es -47.

A continuación se muestra la sintaxis de la operación COMPARAR.

<text>.COMPARE(<string>)

Extraer un entero de una cadena de bytes que representan texto

Consulte Tabla de extracción de enteros para saber cómo tratar una cadena de bytes que representan texto como una secuencia de bytes, extraer 8 bits, 16 bits o 32 bits de la secuencia y, a continuación, convertir los bits extraídos en un entero.

Convertir texto en un valor hash

Puede convertir una cadena de texto en un valor hash mediante la función HASH. Esta función devuelve un entero positivo de 31 bits como resultado de la operación. A continuación se presenta el formato de la expresión:

<text>.HASH

Esta función ignora las mayúsculas y minúsculas y los espacios en blanco. Por ejemplo, después de la operación, las dos cadenas Ab c y a bc producirían el mismo valor hash.

Codificar y decodificar texto aplicando el algoritmo de codificación Base64

Las siguientes dos funciones codifican y decodifican una cadena de texto aplicando el algoritmo de codificación Base64

Función Descripción
text.B64ENCODE Codifica la cadena de texto (designada por texto) aplicando el algoritmo de codificación Base64.
text.B64DECODE Decodifica la cadena codificada en Base64 (designada por texto) aplicando el algoritmo de decodificación Base64. La operación genera un UNDEF si el texto no está en formato codificado en B64.

Refinar la búsqueda en una acción de reescritura mediante la función EXTEND

La función EXTEND se utiliza en acciones de reescritura que especifican patrones o conjuntos de patrones y se dirigen a los cuerpos de los paquetes HTTP. Cuando se encuentra una coincidencia de patrón, la función EXTEND extiende el alcance de la búsqueda por un número predefinido de bytes en ambos lados de la cadena coincidente. A continuación, se puede utilizar una expresión regular para realizar una reescritura de coincidencias en esta región extendida. Las acciones de reescritura configuradas con la función EXTEND realizan reescrituras más rápido que las acciones de reescritura que evalúan cuerpos HTTP enteros mediante solo expresiones regulares.

El formato de la función EXTEND es EXTEND (m, n), donde m y n son el número de bytes por los que se extiende el alcance de la búsqueda antes y después del patrón coincidente, respectivamente. Cuando se encuentra una coincidencia, el nuevo ámbito de búsqueda comprende m bytes que preceden inmediatamente a la cadena coincidente, la propia cadena y los n bytes que siguen a la cadena. A continuación, se puede utilizar una expresión regular para realizar una reescritura en una parte de esta nueva cadena.

La función EXTEND solo se puede utilizar si la acción de reescritura en la que se utiliza cumple los siguientes requisitos:

  • La búsqueda se realiza mediante el uso de patrones o conjuntos de patrones (no expresiones regulares)
  • La acción de reescritura evalúa solo los cuerpos de los paquetes HTTP.

Además, la función EXTEND solo se puede utilizar con los siguientes tipos de acciones de reescritura:

  • replace_all
  • insert_after_all
  • delete_all
  • insert_before_all

Por ejemplo, puede que quiera eliminar todas las instancias de “http://exampleurl.com/” y “http://exampleurl.au/” en los primeros 1000 bytes del cuerpo. Para ello, puede configurar una acción de reescritura para buscar todas las instancias de la cadena exampleurl, extender el alcance de la búsqueda en ambos lados de la cadena cuando se encuentre una coincidencia y, a continuación, utilizar una expresión regular para realizar la reescritura en la región extendida. En el ejemplo siguiente se extiende el ámbito de la búsqueda en 20 bytes a la izquierda y 50 bytes a la derecha de la cadena coincidente:

add rewrite action delurl_example delete_all 'HTTP.REQ.BODY(1000)' -pattern exampleurl -refineSearch 'extend(20,50).regex_select(re#http://exampleurl.(com|au)#)'

Convertir texto a formato hexadecimal

La siguiente función convierte el texto en formato hexadecimal y extrae la cadena resultante:

<text>.BLOB_TO_HEX(<string>)

Por ejemplo, esta función convierte la cadena de bytes “abc” a “61:62:63”.

Cifrar y descifrar texto

En las expresiones de sintaxis predeterminadas, puede utilizar las funciones ENCRYPT y DECRYPT para cifrar y descifrar texto. Los datos cifrados por la función ENCRYPT en un dispositivo Citrix ADC determinado o par de alta disponibilidad (HA) están destinados a descifrarse mediante la función DECRYPT en el mismo dispositivo Citrix ADC o par HA. El dispositivo admite los métodos de cifrado RC4, DES3, AES128, AES192 y AES256. El valor de clave que se requiere para el cifrado no es especificable por el usuario. Cuando se establece un método de cifrado, el dispositivo genera automáticamente un valor de clave aleatorio adecuado para el método especificado. El método predeterminado es el cifrado AES256, que es el método de cifrado más seguro y el que Citrix recomienda.

No es necesario configurar el cifrado a menos que quiera cambiar el método de cifrado o que quiera que el dispositivo genere un nuevo valor de clave para el método de cifrado actual.

Nota: También puede cifrar y descifrar cargas XML. Para obtener información acerca de las funciones de cifrado y descifrado de cargas XML, consulte Cifrar y descifrar cargas XML.

Configurar cifrado

Durante el inicio, el dispositivo ejecuta el comando set ns EncryptionParams con, de forma predeterminada, el método de cifrado AES256 y utiliza un valor de clave generado aleatoriamente adecuado para el cifrado AES256. El dispositivo también cifra el valor de la clave y guarda el comando, con el valor de la clave cifrada, en el archivo de configuración de Citrix ADC. Por lo tanto, el método de cifrado AES256 está habilitado para las funciones ENCRYPT y DECRYPT de forma predeterminada. El valor de clave que se guarda en el archivo de configuración persiste durante los reinicios aunque el dispositivo ejecute el comando cada vez que lo reinicie.

Puede ejecutar manualmente el comando set ns EncryptionParams o utilizar la utilidad de configuración si quiere cambiar el método de cifrado o si quiere que el dispositivo genere un nuevo valor de clave para el método de cifrado actual. Para utilizar la CLI para cambiar el método de cifrado, establezca solo el parámetro del método, como se muestra en “Ejemplo 1: Cambiar el método de cifrado.” Si quiere que el dispositivo genere un nuevo valor de clave para el método de cifrado actual, establezca el parámetro del método en el método de cifrado actual y el parámetro KeyValue en una cadena vacía (“”), como se muestra en “Ejemplo 2: Generación de un nuevo valor de clave para el método de cifrado actual” Después de generar un nuevo valor de clave, debe guardar la configuración. Si no guarda la configuración, el dispositivo utiliza el valor de clave recién generado solo hasta el siguiente reinicio, después de lo cual vuelve al valor de clave de la configuración guardada.

Configurar el cifrado mediante la interfaz gráfica de usuario

  1. Vaya a Sistema > Configuración.
  2. En el área Configuración, haga clic en Cambiar parámetros de cifrado.
  3. En el cuadro de diálogo Cambiar parámetros de cifrado, realice una de las acciones siguientes:
    • Para cambiar el método de cifrado, en la lista Método, seleccione el método de cifrado que quiera.
    • Para generar un nuevo valor de clave para el método de cifrado actual, haga clic en Generar una nueva clave para el método seleccionado.
  4. Haga clic en Aceptar.

Utilizar las funciones ENCRYPT y DECRYPT

Puede utilizar las funciones ENCRYPT y DECRYPT con cualquier prefijo de expresión que devuelva texto. Por ejemplo, puede utilizar las funciones ENCRYPT y DECRYPT en directivas de reescritura para el cifrado de cookies. En el siguiente ejemplo, las acciones de reescritura cifran una cookie denominada MyCookie, que es establecida por un servicio back-end, y descifran la misma cookie cuando es devuelta por un cliente:

add rewrite action my-cookie-encrypt-action replace "HTTP.RES.SET_COOKIE.COOKIE("MyCookie").VALUE(0)" "HTTP.RES.SET_COOKIE.COOKIE("MyCookie").VALUE(0).ENCRYPT" -bypassSafetyCheck YES

add rewrite action my-cookie-decrypt-action replace "HTTP.REQ.COOKIE.VALUE("MyCookie")" "HTTP.REQ.COOKIE.VALUE("MyCookie").DECRYPT" -bypassSafetyCheck YES

Después de configurar directivas para el cifrado y el descifrado, guarde la configuración para que las directivas entren en vigor.

Configurar la clave de cifrado para el cifrado de terceros

En las expresiones de sintaxis predeterminadas, puede utilizar las funciones ENCRYPT y DECRYPT para cifrar y descifrar texto en una solicitud o respuesta. Los datos cifrados por la función ENCRYPT en un dispositivo (independiente, de alta disponibilidad o clúster) están diseñados para ser descifrados por la función DECRYPT por el mismo dispositivo. El dispositivo admite los métodos de cifrado RC4, DES, Triple-DES, AES92 y AES256 y cada uno de estos métodos utiliza una clave secreta tanto para el cifrado como para el descifrado de datos. Puede utilizar cualquiera de estos métodos para cifrar y descifrar datos de dos maneras: Autocifrado y cifrado de terceros.

La función de autocifrado de un dispositivo (independiente, de alta disponibilidad o clúster) cifra y, a continuación, descifra los datos evaluando el valor del encabezado. Un ejemplo para entender esto es el cifrado HTTP Cookie. La expresión evalúa el encabezado, cifra el valor de la cookie HTTP en el encabezado Set-Cookie en la respuesta saliente y, a continuación, descifra el valor de la cookie cuando se devuelve en el encabezado de la cookie de una solicitud entrante posterior del cliente. El valor de clave no es configurable por el usuario; en su lugar, cuando se configura un método de cifrado en el comando set ns EncryptionParams, el dispositivo genera automáticamente un valor de clave aleatorio para el método configurado. De forma predeterminada, el comando utiliza el método de cifrado AES256, que es el método altamente seguro y Citrix recomienda este método.

La función de cifrado de terceros cifra o descifra datos con una aplicación de terceros. Por ejemplo, un cliente puede cifrar los datos de una solicitud y el dispositivo descifra los datos antes de enviarlo al servidor back-end o viceversa. Para ello, el dispositivo y la aplicación de terceros deben compartir una clave secreta. En el dispositivo, puede configurar directamente la clave secreta mediante un objeto de clave de cifrado y el dispositivo genera automáticamente el valor de clave para obtener un cifrado más sólido. La misma clave se configura manualmente en el dispositivo de terceros para que tanto el dispositivo como la aplicación de terceros puedan utilizar la misma clave para cifrar y descifrar datos.

Nota: Mediante el cifrado de terceros, también puede cifrar y descifrar cargas XML. Para obtener información acerca de las funciones de cifrado y descifrado de cargas XML, consulte “Encrypting and Decrypting XML Payloads.

Métodos de cifrado

Un método de cifrado proporciona dos funciones: Una función de cifrado que transforma una secuencia de bytes de texto sin formato en una secuencia de bytes de texto cifrado, y una función de descifrado que transforma el texto cifrado en texto sin formato. Los métodos de cifrado utilizan secuencias de bytes llamadas claves para realizar el cifrado y el descifrado. Los métodos de cifrado que utilizan la misma clave para el cifrado y el descifrado se denominan simétricos. Los métodos de cifrado que utilizan diferentes claves para el cifrado y el descifrado son asimétricos. Los ejemplos más notables de cifrados asimétricos son la criptografía de clave pública, que utiliza una clave pública disponible para cualquier persona para el cifrado y una clave privada conocida solo por el descifrador.

Un buen método de cifrado hace que sea inviable descifrar (“crack”) texto cifrado si no posee la clave. “No factible” realmente significa que descifrar el texto cifrado llevaría más tiempo y recursos informáticos del que vale la pena. A medida que las equipos se vuelven más potentes y más baratas, los cifrados que antes eran inviables de descifrar se vuelven más factibles. Además, con el tiempo, se encuentran fallas en los métodos de cifrado (o sus implementaciones), lo que facilita el agrietamiento. Por lo tanto, los métodos de cifrado más nuevos son preferibles a los más antiguos. En general, las claves de mayor longitud proporcionan mejor seguridad que las claves más cortas, a costa de tiempos de cifrado y descifrado más largos.

Un método de cifrado puede utilizar cifrados de flujo o cifrados de bloque. RC4 es la mayoría de los cifrados de flujo seguros y se utiliza solo para aplicaciones heredadas. Los cifrados de bloque pueden incluir relleno.

Cifras de transmisión

Un método de cifrado de flujo funciona en bytes individuales. Solo hay un cifrado de flujo disponible en los dispositivos Citrix ADC: RC4, que utiliza una longitud de clave de 128 bits (16 bytes). Para una clave dada, RC4 genera una secuencia pseudo-aleatoria de bytes, llame a un flujo de claves, que se escribe en X con el texto sin formato para producir el texto cifrado. RC4 ya no se considera seguro y solo debe utilizarse si las aplicaciones heredadas lo requieren.

Bloquear cifrados

Un método de cifrado de bloques funciona en un bloque fijo de bytes. Un dispositivo Citrix ADC proporciona dos cifradores de bloque: Estándar de cifrado de datos (DES) y Estándar de cifrado avanzado (AES). DES utiliza un tamaño de bloque de 8 bytes y (en un dispositivo Citrix ADC) dos opciones para la longitud de clave: 64 bits (8 bytes), de los cuales 56 bits son datos y 8 bits son paridad, y Triple DES, una longitud de clave de 192 bits (24 bytes). AES tiene un tamaño de bloque de 16 bytes y (en Citrix ADC) tres opciones para la longitud de clave: 128 bits (16 bytes), 192 bits (24 bytes) y 256 bits (32 bytes).

Acolchado

Si el texto sin formato para un cifrado de bloque no es un número integral de bloques, es posible que sea necesario rellenar con más bytes. Por ejemplo, supongamos que el texto sin formato es “xyzzy” (hex 78797a7a79). Para un bloque triple DES de 8 bytes, este valor tendría que ser rellenado para crear 8 bytes. El esquema de relleno debe permitir que la función de descifrado determine la longitud del texto sin formato original después del descifrado. A continuación se presentan algunos esquemas de relleno actualmente en uso (n es el número de bytes agregados):

  • PKCS7: Agrega n bytes de valor n cada uno. Por ejemplo, 78797a7a79030303. Este es el esquema de relleno utilizado por OpenSSL y ENCRYPT () función de directiva. El esquema de relleno PKCS5 es el mismo que PKCS7.
  • ANSI X.923: Agrega n-1 cero bytes y un último byte de valor n. Por ejemplo, 78797a7a79000003.
  • ISO 10126: Agrega n-1 bytes aleatorios y un byte final de valor n. Por ejemplo, 78797a7a79xxxx03, donde xx puede ser cualquier valor de byte. La función de directiva DECRYPT () acepta este esquema de relleno, que también le permite aceptar los esquemas PKCS7 y ANSI X.923.
  • ISO/IEC 7816-4: Agrega un byte 0x80 y n-1 cero bytes. Por ejemplo, 78797a7a79800000. Esto también se llama relleno OneAndZeros.
  • Cero: Agrega n cero bytes. Ejemplo: 78797a7a79000000. Esto solo se puede usar con texto sin formato que no incluya bytes NUL.

Si se utiliza relleno y el texto sin formato es un número integral de bloques, normalmente se agrega un bloque adicional para que la función de descifrado pueda determinar inequívocamente la longitud original del texto sin formato. Para PCKS7 y bloque de 8 bytes, esto sería 0808080808080808.

Modos de funcionamiento

Existen varios modos de operación diferentes para los cifrados de bloques, que especifican cómo se cifran varios bloques de texto sin formato. Algunos modos utilizan un vector de inicialización (IV), un bloque de datos aparte del texto sin formato que se utiliza para iniciar el proceso de cifrado. Es una buena práctica usar un IV diferente para cada cifrado, de modo que el mismo texto sin formato produzca un texto cifrado diferente. El IV no necesita ser secreto, por lo que se antepone al texto cifrado. Los modos incluyen:

  • Libro de códigos electrónico (BCE): Cada bloque de texto plano se cifra de forma independiente. No se usa una vía intravenosa. El relleno es necesario si el texto sin formato no es un múltiplo del tamaño del bloque de cifrado. El mismo texto sin formato y clave siempre produce el mismo texto cifrado. Debido a esto, el BCE se considera menos seguro que otros modos y solo debe utilizarse para aplicaciones heredadas.
  • Encadenado de bloques de cifrado (CBC): Cada bloque de texto plano se XORed con el bloque de texto cifrado anterior, o el IV para el primer bloque, antes de ser cifrado. El relleno es necesario si el texto sin formato no es un múltiplo del tamaño del bloque de cifrado. Este es el modo utilizado con el método Citrix ADC EncryptionParams.
  • Comentarios de cifrado (CFB): El bloque de texto cifrado anterior, o el IV del primer bloque, está cifrado y la salida se XORed con el bloque de texto plano actual para crear el bloque de texto cifrado actual. La retroalimentación puede ser de 1 bit, 8 bits o 128 bits. Dado que el texto sin formato es XORed con el texto cifrado, no se requiere relleno.
  • Feedback de salida (OFB): Se genera un flujo de claves aplicando el cifrado sucesivamente al IV y Xoring los bloques de flujo de claves con el texto sin formato. No se requiere relleno.

Configurar claves de cifrado para cifrado de terceros

A continuación se presentan las tareas de configuración realizadas en la configuración de la clave de cifrado.

  1. Agregar una clave de cifrado. Configura una clave de cifrado para un método de cifrado especificado con un valor de clave especificado.
  2. Modificación de una clave de cifrado. Puede modificar los parámetros de una clave de cifrado configurada.
  3. Desconfigurando una clave de cifrado. Establece los parámetros de una clave de cifrado configurada en sus valores predeterminados. Debe existir un valor de EncryptionKey con el nombre. Establece el relleno en DEFAULT (determinado por el método), elimina un IV existente, lo que hace que ENCRYPT () genere un IV aleatorio. Elimina un comentario existente. El método y el valor de la clave no se pueden restablecer.
  4. Eliminación de una clave de cifrado. Elimina una clave de cifrado configurada. La clave no puede tener ninguna referencia.
  5. Mostrar una clave de cifrado. Muestra los parámetros de la clave de cifrado configurada o de todas las claves configuradas. Si se omite el nombre, no se muestra el valor de clave.

Agregar una clave de cifrado mediante la CLI

En el símbolo del sistema, escriba:

add ns encryptionKey <name> -method <method> [-keyValue <keyvalue>][-padding (OFF | ON)] [-iv <hexstring>] -keyValue <keyvalue> [-comment <string>]

Donde:

<method> = ( NONE | RC4 | DES3 | AES128 | AES192 | AES256 | DES | DES-CBC | DES-CFB | DES-OFB | DES-ECB | DES3-CBC | DES3-CFB | DES3-OFB | DES3-ECB | AES128-CBC | AES128-CFB | AES128-OFB | AES128-ECB | AES192-CBC | AES192-CFB | AES192-OFB | AES192-ECB | AES256-CBC | AES256-CFB | AES256-OFB | AES256-ECB ) <hexstring> = hex-encoded byte sequence

Los métodos de cifrado anteriores especifican el modo de operación con CBC como el modo de operación predeterminado. Por lo tanto, los métodos DES, DES2, AES128, AES192 y AES256 son equivalentes a los métodos DES-CBC, DES3-CBC, AES128-CBC, AES192-CBC y AES256-CBC.

Modificar una clave de cifrado mediante la CLI

En el símbolo del sistema, escriba:

set ns encryptionKey <name> [-method <method>] [-keyValue <keyvalue>] [-padding ( OFF | ON )] [-iv <string>] [-comment <string>]

Desconfigurar una clave de cifrado mediante la CLI

En el símbolo del sistema, escriba:

unset ns encryptionKey <name> [-padding] [-iv] [-comment]

Quitar una clave de cifrado mediante la CLI

En el símbolo del sistema, escriba:

rm ns encryptionKey <name>

Mostrar una clave de cifrado mediante la CLI

En el símbolo del sistema, escriba:

Ejemplo:

show ns encryptionKey [<name>]

add ns encryptionKey my_key -method aes256 -keyValue 26ea5537b7e0746089476e5658f9327c0b10c3b4778c673a5b38cee182874711 –iv c2bf0b2e15c15004d6b14bcdc7e5e365
set ns encryptionKey my_key -keyValue b8742b163abcf62d639837bbee3cef9fb5842d82d00dfe6548831d2bd1d93476
unset ns encryptionKey my_key -iv
rm ns encryptionKey my_key
show ns encryptionKey my_key
Name: my_key
Method: AES256
Padding: DEFAULT
Key Value: (not disclosed)

Agregar una clave de cifrado mediante la interfaz gráfica de usuario

Vaya a Sistema > Claves de cifrado y haga clic en Agregar para crear una clave de cifrado.

Modificar una clave de cifrado mediante la interfaz gráfica de usuario

Vaya a Sistema > Claves de cifrado y haga clic en Modificar para modificar los parámetros de una clave de cifrado configurada.

Quitar una clave de cifrado mediante la interfaz gráfica de usuario

Vaya a Sistema > Claves de cifrado y haga clic en Eliminar.

Funciones ENCRYPT y DECRYPT para cifrado de terceros

A continuación se presenta la función ENCRYPT utilizada para el cifrado de tercera parte.

ENCRYPT (encryptionKey, out_encoding)

Donde:

Los datos de entrada del dispositivo son el texto que se va a cifrar

EncryptionKey: Parámetro de cadena opcional que especifica el objeto de clave de cifrado configurado para proporcionar el método de cifrado, el valor de clave secreta y otros parámetros de cifrado. Si se omite, el método utiliza el valor de clave generado automáticamente asociado con el comando set ns EncryptionParams.

out_encoding: Este valor especifica cómo se codifica la salida. Si se omite, se utiliza la codificación BASE64.

Entrada:

BASE64: original PEM base64-encoding: 6 bits (0..63) encoded as one ASCII character:
                  0..23 = 'A'..'Z', 24..51 = 'a'..'z', 52..61 = '0'..'9', 62 = '+', 63 = '/', '=' = pad byte.
      BASE64URL:  URL and Filename safe base64-encoding: same as BASE64 except 62 = '-', 63 = '_'
      HEX_UPPER:  Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'A'..'F'.
      HEX_LOWER:  Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'a'..'f'.
      HEX_COLONS: Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'A'..'F'; ':' between each hex byte. Matches BLOB_TO_HEX() output format
      HEX:  For input, accepts HEX_UPPER, HEX_LOWER, and HEX_COLONS format. For output, produces HEX_LOWER format

Salida: La salida es un texto cifrado mediante el método y la clave especificados y codificado mediante una codificación de salida especificada. Inserta un IV generado antes del texto cifrado para los métodos y modos de bloque que requieren un IV, y no se especifica ningún IV para EncryptionKey o se omite EncryptionKey.

A continuación se presenta la función DECRYPT utilizada para el descifrado de tercera parte.

DECRYPT(encryptionKey, in_encoding)

Donde:

Los datos de entrada son un texto cifrado que utiliza el método especificado y la clave codificada mediante la codificación de entrada especificada. Se espera que este texto incluya un IV generado antes de que el texto cifrado para los métodos y modos de bloque que requieren un IV, y no se especifica ningún IV para EncryptionKey o se omite EncryptionKey.

EncryptionKey: Parámetro de cadena opcional que especifica el objeto EncryptionKey configurado para proporcionar el método de cifrado, la clave secreta y otros parámetros de cifrado. Si se omite, se utilizará el método y la clave generada automáticamente asociada a la configuración EncryptionParams

in_encoding—parámetro de enumeración opcional que especifica cómo se espera que se codifique la entrada. Los valores son los mismos que out_encoding de ENCRYPT. Si se omite, se espera la codificación BASE64.

Los datos de salida son un texto descifrado sin codificar.

Variantes y parámetros opcionales

A continuación se presentan las variantes de estas funciones con los parámetros opcionales:

Variante Descripción
CIFRAR Utilice el comando EncryptionParams y el parámetro de codificación de salida BASE64.
ENCRYPT (out_encoding) Utilice EncryptionParams y el parámetro de codificación de salida especificado.
ENCRYPT (EncryptionKey) Utilice el parámetro de codificación de salida EncryptionKey y BASE64 especificados.
ENCRYPT (EncryptionKey, out_encoding) Utilice el parámetro de codificación de salida y EncryptionKey especificados.
DESCIFRAR Utilice el comando EncryptionParams y el parámetro de codificación de entrada BASE64.
DECRYPT (out_encoding) Utilice el comando EncryptionParams y el parámetro de codificación de entrada especificado.
DECRYPT (EncryptionKey) Utilice el parámetro de codificación de entrada EncryptionKey y BASE64 especificados.
DECRYPT (EncryptionKey, out_encoding) Utilice el parámetro de codificación de entrada y EncryptionKey especificados.

Configurar claves HMAC

Los dispositivos Citrix ADC admiten una función de código de autenticación de mensajes hash (HMAC) que calcula un método de resumen o hash del texto de entrada mediante una clave secreta compartida entre el remitente y el receptor de mensajes. El método digest (derivado de una técnica RFC 2104) autentica al remitente y verifica que el contenido del mensaje no se haya alterado. Por ejemplo, cuando un cliente envía un mensaje con la clave HMAC compartida a un dispositivo Citrix ADC, las expresiones de directiva avanzadas (PI) utilizan la función HMAC para calcular el código basado en hash en el texto seleccionado. Luego, cuando el receptor recibe el mensaje con la clave secreta, vuelve a calcular el HMAC comparándolo con el HMAC original para determinar si el mensaje ha sido alterado. La función HMAC es compatible con dispositivos independientes y dispositivos en una configuración de alta disponibilidad o en un clúster. Su uso es similar a la configuración de una clave de cifrado.

Los comandos add ns hmackey y set ns hmackey incluyen un parámetro que especifica el método digest y la clave secreta compartida que se utilizará para el cálculo HMAC.

Para configurar una clave HMAC, debe realizar lo siguiente:

  1. Agregar una clave HMAC. Configura una clave HMAC con un valor de clave especificado.
  2. Modificación de una clave HMAC. Modifica los parámetros de una clave HMAC configurada. El método de resumen se puede cambiar sin cambiar el valor de clave, ya que la longitud del valor de clave no está determinada por el resumen. Sin embargo, es aconsejable especificar una nueva clave al cambiar el resumen.
  3. Desconfigurando una clave HMAC. Establece los parámetros de una clave HMAC configurada en sus valores predeterminados. Debe existir un objeto HMacKey con el nombre. El único parámetro que se puede anular es el comentario, que se elimina.
  4. Extracción de una clave HMAC. Elimina una clave configurada. La clave no puede tener ninguna referencia.
  5. Mostrar una clave HMAC. Muestra los parámetros de la clave ac HMAC configurada o todas las claves configuradas. Si se omite el nombre, no se muestra el valor de clave.

Configurar una clave HMAC única y aleatoria

Puede generar automáticamente una clave HMAC única. Si el dispositivo es una configuración de clúster, la clave HMAC se genera al inicio del proceso y se distribuye a todos los nodos y motores de paquetes. Esto garantiza que la clave HMAC sea la misma para todos los motores de paquetes y todos los nodos del clúster.

En el símbolo del sistema, escriba:

add ns hmacKey <your_key> -digest <digest> -keyValue <keyvalue>

Ejemplo:

add ns hmacKey <name> -digest sha1 -keyValue AUTO

Donde:

  • La sintaxis de nombre es correcta y no duplica el nombre de una clave existente.
  • El KeyValue “AUTO” se puede utilizar en los comandos set para generar nuevas claves para los objetos EncrytionKey y HmacKey existentes.

Nota:

La generación automática de claves resulta útil si el dispositivo Citrix ADC está cifrando y descifrando datos con la clave, o generando y verificando una clave HMAC. Dado que el valor de clave en sí ya está cifrado cuando se muestra, no puede recuperar el valor de clave generado para su uso por ninguna otra parte.

Ejemplo:

add ns hmacKey my_hmac_key -digest sha1 -keyValue 0c753c6c5ef859189cacdf95b506d02c1797407d

Los métodos de cifrado anteriores especifican el modo de operación con CBC como el modo de operación predeterminado. Por lo tanto, los métodos DES, DES2, AES128, AES192 y AES256 son equivalentes a los métodos DES-CBC, DES3-CBC, AES128-CBC, AES192-CBC y AES256-CBC.

Modificar una clave HMAC mediante la CLI

Este comando modifica los parámetros configurados para una clave HMAC. Puede cambiar el resumen sin cambiar el valor de la clave, ya que la longitud del valor de la clave no está determinada por el resumen. Sin embargo, es aconsejable especificar una nueva clave al cambiar el resumen. En el símbolo del sistema, escriba:

set ns hmacKey <name> [-digst <digest>] [-keyValue <keyvalue>]
[-comment <string>]

Desestablecer una clave HMAC mediante la CLI

Este comando establece los parámetros configurados para una clave HMAC con sus valores predeterminados. Debe existir un objeto HMacKey con el nombre. El único parámetro que puede anular es la opción de comentario, que se elimina. En el símbolo del sistema, escriba:

unset ns hmacKey <name> -comment

Quitar una clave HMAC mediante la CLI

Este comando elimina la clave hmac configurada. La clave no puede tener referencias. En el símbolo del sistema, escriba:

rm ns hmacKey <name>

Mostrar una clave HMAC mediante la CLI

En el símbolo del sistema, escriba:

show ns encryptionKey [<name>]

add ns hmacKey my_hmac_key -digest sha1 -keyValue 0c753c6c5ef859189cacdf95b506d02c1797407d
set ns hmacKey my_hmac_key -keyValue f348c594341a840a1f641a1cf24aa24c15eb1317
rm ns hmacKey my_hmac_key
show ns hmacKey my_hmac_key
          Name: my_hmac_key
    Digest: SHA1
    Key Value: (not disclosed)