ENCRYPT BLOB

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 6.7


ENCRYPT BLOB (aCifrar; enviarLlavePriv{; recepLlavePub})

ParámetroTipoDescripción
aCifrarBLOBDatos a cifrar
Datos cifrados
enviarLlavePrivBLOBLlave privada del emisor
recepLlavePubBLOBLlave pública del receptor

Descripción

El comando ENCRYPT BLOB cifra el contenido del BLOB aCifrar con la ayuda de la llave privada del emisor enviarLlavePriv, así como también opcionalmente la llave pública del receptor recepLlavePub. Estas llaves deben ser generadas por el comando GENERATE ENCRYPTION KEYPAIR (en el tema "Protocolo de seguridad").

Nota: Este comando utiliza el algoritmo y las funciones de cifrado del protocolo SSL. Para utilizar este comando, asegúrese de que los componentes necesarios para el funcionamiento del protocolo SSL estén instalados correctamente en su equipo — aunque no quiera utilizar SSL para conexiones con el servidor Web 4D. Para información detallada sobre este protocolo, consulte la sección Servicios Web, Utilizando el protocolo SSL.

Si una llave se utiliza para el cifrado (la llave privada del emisor), sólo las personas que tengan la llave pública podrán leer la información. Este sistema garantiza que el emisor haya cifrado la información.

El uso simultáneo de la llave privada del emisor y la llave pública del receptor garantiza que sólo un receptor podrá leer la información.

El BLOB que contiene las llaves tiene un formato interno PKCS. Este formato estándar, multiplataforma, permite intercambiar o manipular las llaves simplemente haciendo copiar-pegar en un email o archivo de texto.

Una vez ejecutado el comando, el BLOB aCifrar contiene los datos cifrados que serán descifrados sólo con el comando DECRYPT BLOB, con la llave pública del emisor pasada como parámetro.

Además, si la llave pública opcional ha sido utilizada para cifrar la información, la llave privada del receptor también será necesaria para descifrar.

Principio de cifrado con llaves públicas y privadas para el intercambio de mensajes entre dos personas, "Alicia" y "Juan":

Nota: El algoritmo de cifrado contiene una función de verificación de integridad (checksum), con el fin de evitar toda modificación del contenido del BLOB (intencional o no). Por lo tanto, un BLOB cifrado no debe modificarse de lo contrario no podría descifrarse.

Optimización de comandos de cifrado

El cifrado de los datos disminuye la velocidad de ejecución de sus aplicaciones, especialmente si se utiliza un par de llaves. Sin embargo, puede considerar los siguientes consejos de optimización:

Dependiendo de la memoria disponible, el comando se ejecutará en modo "sincrónico" o "asincrónico".

El modo asincrónico es más rápido, ya que no bloquea los otros procesos. Este modo se utiliza automáticamente si la memoria disponible es por lo menos dos veces del tamaño de los datos a cifrar.

De lo contrario, por razones de seguridad se utiliza el modo sincrónico. Este modo es menos rápido ya que bloquea los otros procesos.

En el caso de BLOBs grandes, usted puede cifrar sólo una pequeña parte "estratégica" del BLOB con el fin de reducir el tamaño de los datos a procesar como también el tiempo de ejecución.

Ejemplos

Utilización de una sola llave

Una empresa quiere garantizar la confidencialidad de los datos almacenados en una base 4D. La empresa debe enviar esta información con regularidad a sus filiales a través de archivos, vía Internet.

1. La empresa genera un par de llaves con el comando GENERATE ENCRYPTION KEYPAIR:

   `Método GENERAR_LLAVES_TXT
   C_BLOB($BLlavePublica; $BLlavePrivada)
   GENERATE ENCRYPTION KEYPAIR($BLlavePrivada; $BLlavePublica)
   BLOB TO DOCUMENT("LlavePublica.txt"; $BLlavePublica)
   BLOB TO DOCUMENT("LlavePrivada.txt"; $BLlavePrivada)

2. La empresa conserva la llave privada, y envía a cada filial una copia del documento que contiene la llave pública. Para máxima seguridad, la llave debe copiarse en un disco y ser enviada físicamente a las subsidiarias.

3. Luego la empresa copia la información confidencial, (almacenada por ejemplo en el campo tipo texto) en BLOBs y los cifra con la llave privada:


   `Método CIFRAR_INFO
   C_BLOB($vbCifrado;$vbLlavePrivada)
   C_TEXT($vtCifrado)

   $vtCifrado:=[Privado]Info
   VARIABLE TO BLOB ($vtCifrado;$vbCifrado)
   DOCUMENT TO BLOB("LlavePrivada.txt"; $vbLlavePrivada)
   If(OK=1)
      ENCRYPT BLOB ($vbCifrado; $vbLlavePrivada)
      BLOB TO DOCUMENT ("Update.txt";$vbCifrado)
   End if

4. Los archivos actualizados pueden enviarse a las filiales (a través de un canal no seguro como Internet). Si una tercera persona intercepta el archivo cifrado, no podrá descifrarlo sin la llave pública.

5. Cada filial puede descifrar el documento con la llave pública:

   `Método DESCIFRAR_INFO
   C_BLOB($vbCifrado;$vbLlavePublica)
   C_TEXT($vtDescifrado)
   C_TIME ($vtDocRef)

   ALERT ("Por favor seleccione un documento cifrado.")
   $vtDocRef:=Open document("") `Seleccione Update.txt
   If (OK=1)
      CLOSE DOCUMENT($vtDocRef)
      DOCUMENT TO BLOB(Document;$vbCifrado)
         `Su llave privada es cargada
      DOCUMENT TO BLOB("LlavePublica.txt"; $vbLlavePublica)
      If (OK=1)
         DECRYPT BLOB ($vbCifrado; $vbLlavePublica)
         BLOB TO VARIABLE($vbCifrado; $vtDescifrado)
         CREATE RECORD ([Privado])
         [Privado]Info:=$vtDescifrado
         SAVE RECORD([Privado])
      End if
   End if

Utilización de llaves pares

Una empresa quiere utilizar el Internet para intercambiar información. Cada filial recibe información privada y también envía información a la oficina principal. Por lo tanto hay dos requerimientos:

- Sólo el destinatario debe poder leer el mensaje,

- El destinatario debe tener prueba de que el mensaje fue enviado por el emisor.

1. La oficina principal y cada filial genera sus propios pares de llaves (con el método GENERAR_LLAVES_TXT).

2. La llave privada se mantiene en secreto para ambas partes. Cada filial envía su llave pública a la oficina principal, quien a su vez envía su llave pública. Esta transferencia de llaves no necesariamente tiene que ser efectuada por un canal protegido ya que la llave pública no es suficiente para descifrar el mensaje.

3. Para cifrar la información a enviar, la filial o la oficina principal ejecuta el método CIFRAR_INFO_2 el cual utiliza la llave privada del emisor y la llave pública del destinatario para cifrar la información:


`Método CIFRAR_INFO_2
C_BLOB($vbCifrado;$vbLlavePrivada;$vbLlavePublica)
C_TEXT($vtCifrado)
C_TIME ($vtDocRef)
   $vtEncrypt:= [Privado]Info    VARIABLE TO BLOB ($vtCifrado;$vbCifrado)       ` Su propia llave privada se carga...    DOCUMENT TO BLOB("LlavePrivada.txt"; $vbLlavePrivada)    If (OK=1)          ` ...y la llave pública del destinatario       ALERT ("Por favor seleccione la llave pública del destinatario.")       $vhDocRef:=Open document("") `Llave pública a cargar       If (OK=1)          CLOSE DOCUMENT($vtDocRef)          DOCUMENT TO BLOB(Document;$vbLlavePublica)             `Cifrado del BLOB con dos llaves como parámetros          ENCRYPT BLOB ($vbCifrado; $vbLlavePrivada; $vbLlavePublica)          BLOB TO DOCUMENT ("Update.txt";$vbCifrado)       End if    End if

4. El archivo cifrado puede entonces ser enviado al destinatario vía Internet. Si una tercera persona lo intercepta, no podrá descifrar el mensaje, incluso si tiene las llaves públicas porque no tendrá la llave privada del destinatario.

5. Cada destinatario puede descifrar el documento utilizando su propia llave privada y la llave pública del emisor:


`Método CIFRAR_INFO_2
C_BLOB($vbCifrado;$vbLlavePrivada;$vbLlavePublica)
C_TEXT($vtCifrado)
C_TIME ($vtDocRef)
   ALERT ("Por favor seleccione la llave pública del destinatario.")    $vhDocRef:=Open document("") `Llave pública a cargar    If (OK=1)       CLOSE DOCUMENT($vhDocRef)       DOCUMENT TO BLOB(Document;$vbCifrado)          `Se carga su propia llave privada       DOCUMENT TO BLOB("LlavePrivada.txt"; $vbLlavePrivada)       If (OK=1)             ` ...y la llave pública del emisor          ALERT ("Por favor seleccione la llave pública del emisor.")          $vhDocRef:=Open document("") `Llave pública a cargar          If (OK=1)             CLOSE DOCUMENT($vhDocRef)             DOCUMENT TO BLOB(Document;$vbLlavePublica)                `Descifrar el BLOB con dos llaves como parámetros             DECRYPT BLOB ($vbCifrado; $vbLlavePublica;$vbLlavePrivada)             BLOB TO VARIABLE($vbCifrado; $vtDescifrado)             CREATE RECORD ([Privado])             [Privado]Info:=$vtDescifrado             SAVE RECORD([Privado])          End if       End if    End if

Ver también

DECRYPT BLOB, GENERATE ENCRYPTION KEYPAIR.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente