Cifrado de archivos

La codificación de Vonage Video te permite crear archivos en los que los datos nunca están en reposo sin codificar.

Puedes proteger tus archivos de las siguientes maneras:

  • Desactivar el almacenamiento de reserva de archivos: de forma predeterminada, Vonage almacena un archivo de reserva en sus servidores si no pudo cargar el archivo a tu servidor especificado de Amazon S3 o Microsoft Azure. Puedes evitar este almacenamiento alternativo usando la API REST para configurar el destino de carga del archivo.
  • Usa el cifrado de video de Vonage: esto te permite crear archivos donde los datos nunca están en reposo sin cifrar. Esto proporciona el máximo nivel de seguridad.
  • Utilizar el cifrado del lado del servidor de Amazon S3 - Esto utiliza claves de cifrado gestionadas por Amazon S3 para el cifrado. Para obtener más información, consulte esta guía para desarrolladores.

Con la codificación de video de Vonage, los datos de video y audio en un archivo de Vonage se codifican usando un certificado de clave pública que le proporcionas a Vonage.

Importante: La función de cifrado de Vonage está disponible como un función adicional. Póngase en contacto con nosotros para activar esta función para las llaves de su proyecto.

Resumen de funciones

La función de archivo cifrado de la plataforma de Vonage Video te permite crear archivos en los que los datos nunca están en reposo sin cifrar.

Primero, crea un par de claves RSA pública y privada para usar con tus archivos. Mediante una llamada REST API, comparte el certificado de clave pública con Vonage. (En la misma llamada REST, envías detalles sobre el destino de carga de Amazon S3 o Microsoft Azure que usarás para tus archivos).

La función de archivo cifrado requiere que establezcas un destino de carga). Guarde la clave privada localmente para su sólo para uso privado.

A continuación, Vonage cifra cada archivo utilizando una contraseña generada aleatoriamente, la cifra con el certificado y almacena la contraseña cifrada en nuestros servidores.

Cuando el archivo esté listo, recibirás una notificación a través de una devolución de llamada a tu servidor y podrás consultar la contraseña. En ningún momento Vonage almacena la contraseña sin cifrar, y Vonage no tiene forma de descifrar la contraseña (solo el guardián de la clave privada puede descifrar la contraseña).

A continuación, puedes descifrar la contraseña con la clave privada y utilizarla para descifrar el archivo cifrado. El archivo descifrado está en formato MPEG-TS.

Vonage utiliza el algoritmo AES-256 para cifrar el archivo.

La contraseña generada se cifra mediante encriptación RSA con relleno OAEP. Tenga en cuenta que sólo puede utilizar el archivado cifrado con archivos compuestos, no con archivos de flujo individuales.

En esta guía veremos lo siguiente:

Creación de un certificado de archivo cifrado

Envío del certificado de archivo cifrado a Vonage

Descifrar un archivo

Desactivar el archivado cifrado

Problemas conocidos

Creación de un certificado de archivo cifrado

Cree un certificado X.509 PEM y una clave privada correspondiente para utilizarlos con sus archivos:

openssl req -new -x509 -days 365 -newkey rsa:2048 -out cert.pem -keyout key.pem

(Nota: Esto se ha probado con OpenSSL 1.0.1.)

Enviarás el certificado a Vonage, que lo utilizará para generar una contraseña encriptada, necesaria para desencriptar el archivo. La contraseña puede descifrarse con tu clave privada, y el archivo puede descifrarse con la contraseña. La contraseña será diferente para cada archivo.

El tamaño de la clave debe ser de 2048 bits o menor. Enviarás el certificado en datos JSON a la API REST de video de Vonage para configurar el destino del archivo (consulta la siguiente sección). Dado que el certificado se incluirá en datos JSON, envía los datos codificados en base64 o reemplaza los caracteres de nueva línea en el certificado por "\n".

El siguiente ejemplo codifica el certificado en base64:

openssl enc -base64 -in cert.pem -out cert.pem.encoded -A

Una cadena de certificado codificada en base64 tiene el siguiente aspecto:

Una cadena de certificado con caracteres de nueva línea sustituidos tiene el siguiente aspecto:

Envío del certificado de archivo cifrado a Vonage

Para configurar el certificado y activar el cifrado de archivos, envíe una solicitud HTTP PUT a la siguiente URL:

Sustituir appId con el ID de la aplicación de su proyecto.

Autenticar la solicitud de la API REST mediante el método Cabecera de autorización:

Cree el token web JSON con las siguientes afirmaciones:

  • Establecer iss a tu ID de Vonage Video App (que se te proporcionó en tu Cuenta de Vonage en la página del proyecto).
  • Establecer ist a "proyecto".
  • Establecer iat a la marca de tiempo de época Unix actual (cuando se creó el token), en segundos.
  • Establecer exp a la hora de caducidad del token. Por motivos de seguridad, le recomendamos que utilice un tiempo de caducidad cercano al tiempo de creación del token (por ejemplo, 3 minutos después de la creación) y que cree un nuevo token para cada llamada a la API REST. El tiempo de caducidad máximo permitido es de 5 minutos.
  • Establecer jti a un identificador único para el JWT. Esto es opcional. Véase el Especificación de token web JSON para más detalles.

Utilice la clave privada de su proyecto como clave secreta JWT y fírmela con el algoritmo de cifrado HMAC-SHA256. (Su clave privada se le proporciona en su Cuenta Video API en la página Proyecto). Por ejemplo, el siguiente código Python crea un token que puede utilizarse en una llamada a la API REST:

Sustituir my-project-API-key y my-project-API-secret con el ID y el secreto de la aplicación del proyecto de Vonage Video. Configura el Content-type para la llamada de la API REST a application/json:

Sustituya los caracteres de nueva línea del certificado por "\n"para poder utilizarlo en la cadena literal de los datos JSON. Pase el certificado de clave pública como una propiedad de los datos JSON que envíe cuando llame al método REST para configurar el almacenamiento de archivos. Consulte las secciones siguientes.

Configuración del archivado cifrado para un destino Amazon S3

Para especificar un certificado de clave pública para utilizarlo con un destino de Amazon S3, configure los datos JSON en la llamada a la API REST para que utilicen el siguiente formato:

Establecer bucket al nombre del bucket de Amazon S3 que desea utilizar para la carga de archivos. Establezca el secretKey y accessKey a la clave secreta y la clave de acceso de Amazon S3 para ese bucket.

Establezca la propiedad fallback en "none" para evitar que los archivos se almacenen en la nube de video de Vonage si falla la carga. Establece la propiedad en "opentok" para tener el archivo disponible en su panel de control si falla la carga.

Establece la propiedad de certificado en el certificado de clave pública que Vonage utilizará para cifrar el archivo. Asegúrate de codificar el certificado en base64 o de reemplazar los caracteres de nueva línea del certificado por "\n"para poder utilizarlo en la cadena literal de los datos JSON.

Configuración del archivado cifrado para un destino de Microsoft Azure

Para especificar un certificado de clave pública para utilizarlo con un destino de Microsoft Azure, configure los datos JSON en la llamada a la API REST para que utilicen el siguiente formato:

Configure el contenedor para que coincida con el nombre de su contenedor de Microsoft Azure. Establezca el accountName y accountKey para que coincidan con sus credenciales de almacenamiento de Microsoft Azure.

Fije el fallback propiedad a "none" para evitar que los archivos se almacenen en la nube de video de Vonage si falla la carga. Establece la propiedad en "opentok" para que el archivo esté disponible en el panel de control si falla la carga.

Fije el certificate al certificado de clave pública que Vonage utilizará para cifrar el archivo. Asegúrate de codificar el certificado en base64 o de reemplazar los caracteres de nueva línea del certificado por "\n"para que pueda utilizarlo en la cadena literal de los datos JSON. Una cadena de certificado codificada en base64 tiene este aspecto:

Respuestas de la API REST

  • Una respuesta con código de estado 200 indica éxito.
  • Una respuesta con un código de estado 400 indica que ha incluido datos JSON no válidos o que no ha especificado el destino de carga.
  • Una respuesta con un código de estado 403 indica que ha introducido un ID de aplicación de proyecto o una clave privada no válidos.

Ejemplos

El siguiente ejemplo de línea de comandos establece de forma segura el certificado que Vonage utilizará al cifrar archivos que se cargarán en un bucket de Amazon S3:

app_id=12345 data='{"type":"s3","config":{"bucket":"your-s3-bucket","secretKey":"your-s3-secret-key","accessKey":"your-s3-access-key"},"certificate" : "...your-cert..."}' curl \ -i \ -H "Content-Type: application/json" \ -X PUT -H "Authorization: Basic base64(app_id:API_secret)" -d '$data' \ https://video.api.vonage.com/v2/project/$app_id/archive/storage

Establezca el valor de app_id a tu ID de aplicación del proyecto de Vonage Video. Establece los valores para your-s3-bucket y your-s3-access-key para que coincida con sus credenciales de Amazon S3. Sustituya el valor del certificado por la cadena del certificado.

El siguiente ejemplo de línea de comandos establece de forma segura el certificado que Vonage utilizará al cifrar archivos que se cargarán en un bucket de Microsoft Azure:

app_id=12345 data='{"type":"azure","config":{"accountName":"your-azure-account-name","accountKey":"your-azure-account-key", "container":"your-azure-container"}, "certificate": "...your-cert..."}' curl \ -i \ -H "Content-Type:application/json" \ -X PUT -H "Authorization: Basic base64(app_id:API_secret)" -d "$data" \ https://video.api.vonage.com/v2/project/$app_id/archive/storage

Establezca el valor de app_id a tu ID de aplicación del proyecto de Vonage Video. Establece los valores para your-azure-account-name, your-azure-account-namey your-azure-container para que coincida con sus credenciales de Amazon S3. Sustituya el valor del certificado por la cadena del certificado.

Descifrar un archivo

Puede establecer una devolución de llamada de estado de archivo utilizando el panel de control. Consulte "Cambios en el estado del archivo" en la sección Guía del desarrollador de archivado.

Una vez creado el archivo, las solicitudes POST de estado del archivo a su URL de devolución de llamada incluyen una propiedad de contraseña:

La contraseña es una clave AES cifrada con certificado y un vector de inicialización, en forma de datos binarios codificados en base64.

Los tres primeros bytes de los datos binarios representan la versión (un byte), el algoritmo (un byte) y el modo (un byte). En esta versión, la longitud se establece en 1, el algoritmo se establece en 1 (indicando AES-256) y el modo se establece en 1 (indicando CBC).

Los 32 bytes siguientes son la clave. Los 16 bytes restantes son el vector de inicialización.

En primer lugar, descifra la contraseña y, a continuación, descifra utilizando tu clave privada:

openssl enc -base64 -d -A <<< "password-from-tokbox" \ -out password.enc openssl rsautl -decrypt -oaep -inkey key.pem \ -in password.enc -out password.bin

A continuación, utiliza la contraseña para descifrar el archivo comprimido:

openssl enc -d -aes-256-cbc -nopad -in your_archive_file.ts \ -out your_decrypted_file.ts \ -K $(xxd -s 3 -l 32 -c 32 -p password.bin) \ -iv $(xxd -s 35 -l 16 -c 16 -p password.bin)

-K es la clave -iv es el vector de inicialización xxd convierte la contraseña binaria decodificada y desencriptada en hexadecimal para que pueda ser alimentada a openssl. Lea la página man de xxd para más información sobre los switches.

Desactivar el archivado cifrado

Para desactivar el archivado cifrado, envíe una solicitud HTTP PUT a la URL de almacenamiento de archivos (consulte Envío del certificado de archivo cifrado a Vonage), pero establezca el certificado en null en los datos JSON que envíe con la solicitud.

Deshabilitar el archivado cifrado para un objetivo de Amazon S3

Para eliminar un certificado de clave pública para un destino de archivo de Amazon S3 (y eliminar el cifrado de los archivos), llame a la API REST con los siguientes datos JSON:

Establecer bucket al nombre del bucket de Amazon S3 que desea utilizar para la carga de archivos. Establezca el secretKey y accessKey a la clave secreta y la clave de acceso de Amazon S3 para ese bucket. Establezca las propiedades fallback propiedad to "none" para evitar que los archivos comprimidos se almacenen en la nube de Vonage si falla la carga. Establece la propiedad en "opentok" para que el archivo esté disponible en el panel de Vonage si falla la carga. Configura el certificate a null.

Desactivación del archivado cifrado para un destino de Microsoft Azure

Para eliminar un certificado de clave pública para un destino de archivo de Microsoft Azure (y eliminar el cifrado de los archivos), llame a la API REST con los siguientes datos JSON:

Establecer container para que coincida con el nombre de su contenedor de Microsoft Azure. Establezca el accountName y accountKey para que coincidan con sus credenciales de almacenamiento de Microsoft Azure. Establezca las propiedades fallback propiedad a "none" para evitar que los archivos comprimidos se almacenen en la nube de Vonage si falla la carga. Establece la propiedad en "opentok" para que el archivo esté disponible en el panel de Vonage si falla la carga. Configura el certificate propiedad a null.

Respuestas de la API REST

  • Una respuesta con el código de estado 200 indica que se ha conseguido desactivar el cifrado.
  • Una respuesta con un código de estado 400 indica que ha incluido datos JSON no válidos o que no ha especificado el destino de carga.
  • Una respuesta con un código de estado 403 indica que ha introducido un ID de aplicación de proyecto o un secreto de socio no válidos.

Ejemplo

El siguiente ejemplo de línea de comandos desactiva el archivado cifrado para un destino S3:

app_id=12345 data='"type": "s3","config": {"bucket": "your-s3-bucket","secretKey": "your-s3-secret-key","accessKey": "your-s3-access-key"},{"certificate" : null}' curl \ -i \ -H "Content-Type:application/json" \ -X PUT -H "Authorization: Basic base64(app_id:API_secret)" -d "$data" \ https://video.api.vonage.com/v2/project/$app_id/archive/storage

Establezca el valor de app_id a tu ID de Vonage Video App. Establece los valores para your-s3-bucket y your-s3-access-key para que coincida con sus credenciales de Amazon S3.

Problemas conocidos

La duración de un archivo cifrado siempre se informa como 0, en todas las llamadas a la API REST de Vonage Video, en los métodos de los SDK del servidor de Vonage Video y en las devoluciones de llamada de cambio de estado del archivo.