ADC

Operaciones complejas sobre texto

Además de una simple coincidencia de cadenas, puede configurar expresiones que examinan 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 sobre la longitud de una cadena

Las siguientes operaciones extraen cadenas mediante un recuento de caracteres.

Operación Conteo de personajes Descripción
<text>.TRUNCATE(<count>) Devuelve una cadena tras truncar el final del destino por el número de caracteres de <count>. Si toda la cadena es más corta que <count>, no se devuelve nada.
<text>.TRUNCATE(<character>, <count>) Devuelve una cadena tras 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 tiene como máximo <count> apariciones de <character>.
<text>.SUFFIX(<character>, <count>) Selecciona el sufijo más largo del objetivo que tiene como máximo <count> apariciones de <character>. Por ejemplo, considere el siguiente cuerpo de respuesta: peninsula. La siguiente expresión devuelve un valor de sula: http.res.body(100).suffix('n',0). La siguiente expresión devuelve insula: http.res.body(100).suffix('n',1). La siguiente expresión devuelve un valor de peninsula: http.res.body(100).suffix('n',2). La siguiente expresión devuelve un valor de peninsula: http.res.body(100).suffix('n',3).
<text>.SUBSTR(<starting_offset>, <length>) Seleccione una cadena con el <length>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 tras el desplazamiento es inferior al valor del argumento <length>, seleccione todos los caracteres restantes.
<text>.SKIP(<character>, <count>) Seleccione una cadena del objetivo después de omitir el prefijo más largo que tenga como máximo <count> casos de <character>.

Operaciones en una parte de una cadena

Consulte la tabla Operaciones de cadena para 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 COMPARE examina el primer carácter no coincidente de dos cadenas distintas. Esta operación se basa en el orden lexicográfico, que es el método utilizado para ordenar los términos en los diccionarios.

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

  • La diferencia entre “abc” y “and” es -1 (basada en la comparación de caracteres del tercer par).
  • La diferencia entre “@” y “abc” es -33.
  • La diferencia entre “1” y “abc” es -47.

A continuación se presenta la sintaxis de la operación COMPARE.

<text>.COMPARE(<string>)

Extraer un entero de una cadena de bytes que representan texto

Consulte la tabla Extracción de enteros para saber cómo tratar una cadena de bytes que representa el 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 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 dos funciones siguientes 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 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 amplía el alcance de la búsqueda mediante un número predefinido de bytes a ambos lados de la cadena coincidente. A continuación, se puede utilizar una expresión regular para reescribir las coincidencias de esta región extendida. Las acciones de reescritura configuradas con la función EXTEND realizan reescrituras más rápidamente que las acciones de reescritura que evalúan cuerpos HTTP enteros utilizando únicamente 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 amplía 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 incluye m bytes que preceden inmediatamente a la cadena coincidente, a la propia cadena y a los n bytes que siguen a la cadena. Una expresión regular se puede utilizar para reescribir 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 utilizando 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, es posible que quiera eliminar todas las instancias dehttp://exampleurl.com/”” yhttp://exampleurl.au/”” de los primeros 1000 bytes del cuerpo. Para ello, puede configurar una acción de reescritura para buscar todas las instancias de la cadena exampleurl, ampliar el alcance de la búsqueda en ambos lados de la cadena cuando se encuentra una coincidencia y, a continuación, utilizar una expresión regular para reescribir en la región extendida. En el ejemplo siguiente se amplía el alcance de la búsqueda 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)' -search exampleurl -refineSearch 'extend(20,50).regex_select(re#http://exampleurl.(com|au)#)'

Convertir texto a formato hexadecimal

La siguiente función convierte el texto a 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 directivas avanzadas, puede utilizar las funciones ENCRYPT y DECRYPT para cifrar y descifrar texto. Los datos cifrados por la función ENCRYPT en un dispositivo NetScaler o en un par de alta disponibilidad (HA) determinados están diseñados para que la función DECRYPT los descifre en el mismo dispositivo NetScaler o par HA. El dispositivo admite los métodos de cifrado RC4, DES3, AES128, AES192 y AES256. El valor de clave necesario 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 recomienda Citrix.

No es necesario configurar el cifrado a menos que quiera cambiar el método de cifrado o 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 sobre las funciones de cifrado y descifrado de cargas útiles XML, consulte Cifrar y descifrar cargas útiles 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 clave cifrada, en el archivo de configuración de NetScaler. Por lo tanto, el método de cifrado AES256 está habilitado para las funciones ENCRYPT y DECRYPT de forma predeterminada. El valor clave que se guarda en el archivo de configuración persiste tras los reinicios, aunque el dispositivo ejecute el comando cada vez que lo reinicie.

Puede ejecutar el comando set ns encryptionParams manualmente 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 method, como se muestra en “Ejemplo 1: Cambio del 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 method 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 próximo reinicio, tras lo cual vuelve al valor clave de la configuración guardada.

Configurar el cifrado mediante la interfaz gráfica de usuario

  1. Ve 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 siguientes acciones:
    • 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 las directivas de reescritura para el cifrado de cookie. En el siguiente ejemplo, las acciones de reescritura cifran una cookie denominada MyCookie, que establece un servicio back-end, y descifran la misma cookie cuando un cliente la devuelve:

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"

add rewrite action my-cookie-decrypt-action replace "HTTP.REQ.COOKIE.VALUE("MyCookie")" "HTTP.REQ.COOKIE.VALUE("MyCookie").DECRYPT"
<!--NeedCopy-->

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

Configurar clave de cifrado para el cifrado de terceros

En las expresiones de directivas avanzadas, 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 (autónomo, de alta disponibilidad o clúster) están diseñados para que la función DECRYPT los descifre 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 mediante la evaluación del 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 de la respuesta saliente y, a continuación, descifra el valor de la cookie cuando se devuelve en el encabezado de cookie de una solicitud entrante posterior del cliente. El valor de clave no es configurable por el usuario; en cambio, 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 de alta seguridad y Citrix recomienda este método.

La función de cifrado de terceros cifra o descifra los datos con una aplicación de terceros. Por ejemplo, un cliente puede cifrar los datos de una solicitud y el dispositivo los descifra antes de enviarlos 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 la clave para un cifrado más seguro. 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: Con el cifrado de terceros, también puede cifrar y descifrar cargas útiles XML. Para obtener información sobre las funciones de cifrado y descifrado de cargas útiles XML, consulte “Cifrado y descifrado de cargas útiles XML.

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 denominadas 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 claves diferentes para el cifrado y el descifrado son asimétricos. Los ejemplos más notables de cifrados asimétricos se encuentran en 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 inviable descifrar (“descifrar”) el texto cifrado si no posee la clave. “No factible” significa realmente que descifrar el texto cifrado tomaría más tiempo y recursos informáticos de lo que vale la pena. A medida que las computadoras se vuelven más potentes y 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 en sus implementaciones), lo que facilita el descifrado. Por lo tanto, se prefieren los métodos de cifrado más nuevos a los más antiguos. En general, las claves de mayor longitud proporcionan una mayor 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 de bloques. RC4 es el cifrado de flujo más seguro y solo se utiliza para aplicaciones heredadas. Los cifrados de bloques pueden incluir relleno.

Cifrados Stream

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

Cifrados por bloques

Un método de cifrado por bloques funciona en un bloque fijo de bytes. Un dispositivo NetScaler proporciona dos cifrados por bloques: 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 NetScaler) dos opciones de 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 NetScaler) tres opciones de longitud de clave: 128 bits (16 bytes), 192 bits (24 bytes) y 256 bits (32 bytes).

Padding

Si el texto sin formato de un cifrado de bloque no es un número integral de bloques, puede ser 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 rellenarse 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: Suma n bytes de valor n cada uno. Por ejemplo, 78797a7a79030303. Este es el esquema de relleno utilizado por OpenSSL y la función de directiva ENCRYPT(). El esquema de relleno PKCS5 es el mismo que el de PKCS7.
  • ANSI X.923: Agrega n-1 cero bytes y un byte final 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, lo 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. Solo se puede utilizar 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 sin ambigüedades la longitud original del texto sin formato. Para PCKS7 y bloque de 8 bytes, sería 0808080808080808.

Modos de operación

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

  • Libro de códigos electrónico (ECB): Cada bloque de texto sin formato se cifra de forma independiente. No se utiliza un VI. 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 la misma clave siempre producen el mismo texto cifrado. Por este motivo, el ECB se considera menos seguro que otros modos y solo debe utilizarse para aplicaciones heredadas.
  • Encadenamiento de bloques de cifrado (CBC): Cada bloque de texto sin formato se somete a XOR con el bloque de texto cifrado anterior, o el VI del primer bloque, antes de cifrarse. 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 que se utiliza con el método NetScaler EncryptionParams.
  • Retroalimentación de cifrado (CFB): El bloque de texto cifrado anterior, o el VI del primer bloque, se cifra y la salida se realiza con XOR con el bloque de texto sin formato actual para crear el bloque de texto cifrado actual. La retroalimentación puede ser de 1 bit, 8 bits o 128 bits. Puesto que el texto sin formato se somete a XOR con el texto cifrado, no es necesario rellenar.
  • Retroalimentación de salida (OFB): Se genera una secuencia de claves aplicando el cifrado sucesivamente al VI y XORing los bloques keystream con el texto sin formato. No es necesario acolchado.

Configurar claves de cifrado para el cifrado de terceros

A continuación se presentan las tareas de configuración que se realizan 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. Desconfiguración de 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 VI existente, lo que hace que ENCRYPT() genere un VI 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. Muestra una clave de encriptación. Muestra los parámetros de la clave de cifrado configurada o de todas las claves configuradas. Si se omite el nombre, el valor clave no se muestra.

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
<!--NeedCopy-->

Los métodos de cifrado anteriores especifican el modo de operación con CBC como 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>]

Desestablecer 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)
<!--NeedCopy-->

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

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 la clave secreta y otros parámetros de cifrado. Si se omite, el método utiliza el valor de clave generado automáticamente asociado al 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
<!--NeedCopy-->

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

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

DECRYPT(encryptionKey, in_encoding)

Donde:

Los datos de entrada son un texto cifrado que utiliza el método especificado y la clave codificados mediante la codificación de entrada especificada. Se espera que este texto incluya un VI generado antes del texto cifrado para los métodos y modos de bloque que requieren una VI, y no se especifica ninguna VI para la EncryptionKey o se omite la 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 los 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
ENCRYPT 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 especificado.
ENCRYPT(encryptionKey, out_encoding) Utilice el parámetro encryptionKey y el parámetro de codificación de salida especificados.
DECRYPT 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 especificado.
DECRYPT(encryptionKey, out_encoding) Utilice el parámetro encryptionKey y de codificación de entrada especificados.

Configurar claves HMAC

Los dispositivos NetScaler admiten una función de código de autenticación de mensajes con hash (HMAC) que calcula un método de resumen o un hash del texto de entrada mediante una clave secreta compartida entre el remitente del mensaje y el receptor del mensaje. El método de resumen (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 NetScaler, las expresiones de directiva avanzadas (PI) utilizan la función HMAC para calcular el código basado en hash del 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 configurar una clave de cifrado.

Los comandos add ns hmackey y set ns hmackey incluyen un parámetro que especifica el método de resumen y la clave secreta compartida que se utilizará para el cálculo de 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 clave, ya que el resumen no determina la longitud del valor clave. Sin embargo, es aconsejable especificar una nueva clave al cambiar el resumen.
  3. Desajuste de 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. Muestra una clave HMAC. Muestra los parámetros de la clave ac HMAC configurada o de todas las claves configuradas. Si se omite el nombre, el valor clave no se muestra.

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 del nombre es correcta y no duplica el nombre de una clave existente.
  • El valor de clave “AUTO” se puede utilizar en los comandos set para generar nuevas claves para los objetos encryptionKey y hmacKey existentes.

Nota:

La generación automática de claves resulta útil si el dispositivo NetScaler cifra y descifra datos con la clave o genera y verifica una clave HMAC. Dado que el valor de la clave en sí ya está cifrado cuando se muestra, no puede recuperar el valor de clave generado para que lo utilice 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 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 clave, ya que el resumen no determina la longitud del valor clave. 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>]

<!--NeedCopy-->

Desconfigurar 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 se puede desactivar es la opción de comentario, que se elimina. En el símbolo del sistema, escriba:

unset ns hmacKey <name> -comment

Eliminar 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)
<!--NeedCopy-->