Cifrado de archivos
El cifrado de Vonage Video te permite crear archivos en los que los datos nunca permanecen almacenados sin cifrar.
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: esta opción utiliza claves de cifrado gestionadas por Amazon S3 para el cifrado. Para obtener más información, consulta 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 funcionalidad adicional. Póngase en contacto con nosotros para activar esta función para las claves de tu proyecto.
Resumen de las características
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 archivado cifrado requiere que configures un destino de carga.) Guarda la clave privada localmente para tu solo 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, se te notificará mediante una llamada de retorno a tu servidor y podrás solicitar la contraseña. Vonage no almacena en ningún momento la contraseña sin cifrar, y no tiene forma alguna de descifrarla (solo el titular de la clave privada puede descifrarla).
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 el algoritmo RSA con relleno OAEP. Ten en cuenta que solo puedes 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 archivado cifrado
Envío del certificado de archivo cifrado a Vonage
Descifrar un archivo comprimido
Desactivar el archivado cifrado
Creación de un certificado de archivado cifrado
Crea un certificado X.509 en formato PEM y la clave privada correspondiente para utilizarlos con tus archivos:
(Nota: 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 menos. Deberás enviar el certificado en formato JSON a la Video API de Vonage para configurar el destino de archivo (consulta la siguiente sección). Dado que el certificado se incluirá en los datos JSON, envía los datos codificados en base64 o sustituye los caracteres de salto de línea del certificado por «\n».
El siguiente ejemplo codifica el certificado en base64:
Una cadena de certificado codificada en base64 tiene este aspecto:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
Una cadena de certificado con caracteres de nueva línea sustituidos tiene el siguiente aspecto:
"-----BEGIN CERTIFICATE-----\n...\n...\n -----END CERTIFICATE-----"
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:
/v2/project/archive/storage
Sustituir appId con el ID de la aplicación de su proyecto.
Autentifica la solicitud de la API REST utilizando el Cabecera de autorización:
Authorization: Basic base64(APP_ID:API_SECRET)
Crea el token web JSON con las siguientes reclamaciones:
{
"iss": "your_app_id",
"ist": "project",
"iat": current_timestamp_in_seconds,
"exp": expire_timestamp_in_seconds,
"jti": "jwt_nonce"
}
- Conjunto
issa tu ID de Vonage Video App (que se te proporcionó en tu Cuenta de Vonage en la página del proyecto). - Conjunto
ista "proyecto". - Conjunto
iata la marca de tiempo de época Unix actual (cuando se creó el token), en segundos. - Conjunto
exphasta la hora de caducidad del token. Por motivos de seguridad, te recomendamos que utilices una hora de caducidad cercana a la hora de creación del token (por ejemplo, 3 minutos después de su creación) y que crees un nuevo token para cada llamada a la API REST. El intervalo máximo permitido para la hora de caducidad es de 5 minutos. - Conjunto
jtia un identificador único para el JWT. Esto es opcional. Consulta el Especificación de token web JSON Para más información.
Utiliza la clave privada de tu proyecto como clave secreta del JWT y fírmalo con el algoritmo de cifrado HMAC-SHA256. (La clave privada se te facilita en tu Account de la 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:
import jwt # See https://pypi.python.org/pypi/PyJWT
import time
import uuid
print jwt.encode({"iss": "my-project-API-key",
"iat": int(time.time()),
"exp": int(time.time()) + 180,
"ist": "project",
"jti": str(uuid.uuid4())()},
'my-project-API-secret',
algorithm='RS256')
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:
Content-Type:application/json
Sustituye los caracteres de salto de 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 que se vaya a utilizar con un destino de Amazon S3, configura los datos JSON de la llamada a la API REST para que utilicen el siguiente formato:
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
}
Conjunto 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.
Establece 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 que puedas utilizarlo en el literal de cadena 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:
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"fallback": "none",
"certificate" : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0...
}
Configure el contenedor para que coincida con el nombre de su contenedor de Microsoft Azure. Establezca el accountName y accountKey propiedades que coincidan con tus 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 en caso de que falle la subida.
Fije el certificate propiedad del certificado de clave pública que Vonage utilizará para cifrar el archivo. Asegúrate de codificar el certificado en base64 o de sustituir los caracteres de salto de línea del certificado por "\n", para que puedas utilizarlo en el literal de cadena de los datos JSON. Una cadena de certificado codificada en base64 tiene este aspecto:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
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 el código de estado 403 indica que has introducido un ID de aplicación o una clave privada del proyecto 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:
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:
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 comprimido
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:
{
"id" : "b40ef09b-3811-4726-b508-e41a0f96c68f",
"event": "archive",
"createdAt" : 1384221380000,
"duration" : 328,
"name" : "Foo",
"partnerId" : 123456,
"reason" : "",
"sessionId" : "2_MX40NzIwMzJ-flR1ZSBPERUIDIwMTN-MC45NDQ2MzE2NH4",
"size" : 18023312,
"status" : "uploaded",
"password" : "e42c...d23"
}
La contraseña es una clave AES cifrada mediante 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 siguientes 32 bytes constituyen 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:
A continuación, utiliza la contraseña para descifrar el archivo comprimido:
-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 establece el certificado en «null» en los datos JSON que envíes con la solicitud.
Desactivación del archivado cifrado para un destino de Amazon S3
Para eliminar un certificado de clave pública de un destino de archivo de Amazon S3 (y desactivar el cifrado de los archivos), llama a la API REST con los siguientes datos JSON:
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate" : null
}
Conjunto 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 control de Vonage en caso de que falle la subida.
Configura el certificate a null.
Desactivación del archivado cifrado para un destino de Microsoft Azure
Para eliminar un certificado de clave pública de un destino de archivo de Microsoft Azure (y desactivar el cifrado de los archivos), llama a la API REST con los siguientes datos JSON:
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"certificate" : null
}
Conjunto 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 control de Vonage en caso de que falle la subida.
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 el código de estado 403 indica que has introducido un ID de aplicación del 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:
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 indica como 0, tanto en todas las llamadas a la API REST de Vonage Video como en los métodos de los SDK del servidor de Vonage Video y en las llamadas de retorno al cambiar el estado del archivo.