Cifrado de la Video API de Vonage
El cifrado de OpenTok te permite crear archivos de OpenTok en los que los datos nunca permanecen almacenados sin cifrar.
Puedes proteger tus archivos de OpenTok de las siguientes maneras:
-
Desactivar el almacenamiento de respaldo en el archivo — De forma predeterminada, Vonage almacena un archivo de respaldo en los servidores de OpenTok si no ha podido cargar el archivo en el servidor de Amazon S3 o Microsoft Azure que hayas especificado. Puedes evitar este almacenamiento de respaldo cuando utilices la API REST de OpenTok para configurar el destino de carga del archivo de respaldo.
-
Utiliza el cifrado de OpenTok: esto te permite crear archivos de OpenTok en los que los datos nunca permanecen almacenados sin cifrar. Esto garantiza 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 el cifrado de OpenTok, los datos de vídeo y audio de un archivo de OpenTok se cifran mediante un certificado de clave pública que usted facilita a Vonage.
Importante: La función de cifrado de OpenTok está disponible como un funcionalidad adicional. Póngase en contacto con nosotros para activar esta función para las claves de tu proyecto de OpenTok.
Resumen de las características
La función de archivado cifrado de la plataforma OpenTok te permite crear archivos en los que los datos nunca permanecen almacenados sin cifrar.
En primer lugar, crea un par de claves RSA (pública y privada) para utilizarlas con tus archivos de OpenTok. Mediante una llamada a la API REST de OpenTok, compartes el certificado de la clave pública con Vonage. (En la misma llamada REST, envías los datos del destino de carga en Amazon S3 o Microsoft Azure que se utilizará 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, lo cifra con el certificado y almacena la contraseña cifrada en nuestros servidores. Cuando el archivo esté listo, se le notificará mediante una llamada de retorno a su servidor, y podrá solicitar la contraseña. Vonage no almacena en ningún momento la contraseña sin cifrar, y Vonage no tiene forma alguna de descifrarla (solo el titular de la clave privada puede descifrar la contraseña).
A continuación, puedes descifrar la contraseña con la clave privada y utilizar dicha contraseña 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 cifrado RSA con relleno OAEP. Ten en cuenta que solo puedes utilizar el archivado cifrado con archivos compuestos, no con archivos de flujos individuales.
Este documento incluye las siguientes secciones:
Creación de un certificado de archivado cifrado
Envío del certificado de archivado 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.)
Deberás enviar el certificado a Vonage, que lo utilizará para generar una contraseña cifrada, necesaria para descifrar el archivo. La contraseña se puede descifrar con tu clave privada, y el archivo se puede descifrar con dicha 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 API REST de OpenTok para configurar el destino de archivo (consulta la siguiente sección). Dado que el certificado se incluirá en datos JSON, envía los datos codificados en base64 o sustituye los caracteres de salto de línea del certificado por «\n».
En el siguiente ejemplo se codifica el certificado en base64:
Una cadena de certificado codificada en base64 tiene este aspecto:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
Una cadena de certificado en la que se han sustituido los caracteres de salto de línea tiene este aspecto:
"-----BEGIN CERTIFICATE-----\n...\n...\n
-----END CERTIFICATE-----"
Envío del certificado de archivo cifrado a Vonage
Para configurar el certificado y habilitar el cifrado de archivos, envía una solicitud HTTP PUT a la siguiente URL:
https://api.opentok.com/v2/project/<apiKey>/archive/storage
Sustituir <apiKey> con tu clave API del proyecto OpenTok.
Autentifica la solicitud de la API REST utilizando un encabezado HTTP personalizado:
X-OPENTOK-AUTH. Establece este valor como un token web JSON (consulta la documentación de la API REST de OpenTok
):
X-OPENTOK-AUTH: <JSON_web_token>
Crea el token web JSON con las siguientes reclamaciones:
{
"iss": "your_api_key",
"ist": "project",
"iat": current_timestamp_in_seconds,
"exp": expire_timestamp_in_seconds,
"jti": "jwt_nonce"
}
-
Conjunto
issa tu clave API de OpenTok (que se te ha facilitado en tu Vonage Account en la página del proyecto). -
Conjunto
ista "proyecto". -
Conjunto
iathasta la marca de tiempo de la época Unix actual (momento en que 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 del token web JSON » Para más información.
Utiliza el secreto de la API de tu proyecto OpenTok como clave secreta JWT y fírmalo con el algoritmo de cifrado HMAC-SHA256. (El secreto de la API te se proporciona en tu Account de la Video API (en la página del proyecto.)
Por ejemplo, el siguiente código en Python crea un token que se puede utilizar en una llamada a la API REST de OpenTok:
import jwt # See https://pypi.python.org/pypi/PyJWT
import time
import uuid
print jwt.encode({"iss": "my-OpenTok-project-API-key",
"iat": int(time.time()),
"exp": int(time.time()) + 180,
"ist": "project",
"jti": str(uuid.uuid4())()},
'my-OpenTokproject-API-secret',
algorithm='HS256')
Sustituir my-OpenTok-project-API-key
y my-OpenTok-project-API-secret
con la clave API y el secreto del proyecto OpenTok.
Fije 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 que puedas utilizarlo en el literal de cadena de los datos JSON.
Incluye el certificado de clave pública como una propiedad de los datos JSON que envías al llamar al método REST para configurar el almacenamiento de archivos.
Consulta las siguientes secciones.
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 en 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 por el nombre del depósito de Amazon S3 que quieras utilizar para la subida de archivos. Establece el
secretKey y accessKey propiedades de la clave secreta y la clave de acceso de Amazon S3 para ese
depósito.
Establece la propiedad «fallback» en "none"
para evitar que los archivos de archivo se almacenen en la nube de OpenTok si
la subida falla. Establece la propiedad en "opentok"
para que el archivo esté disponible en el panel de control de OpenTok en caso de que
la subida falle.
Establece la propiedad del 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 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.
Configuración del archivado cifrado para un destino de Microsoft Azure
Para especificar un certificado de clave pública que se vaya a utilizar con un destino de Microsoft Azure, configura 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 de archivo se almacenen en la nube de OpenTok si
la subida falla. Establece la propiedad en "opentok"
para que el archivo esté disponible en el panel de control de OpenTok en caso de que
la subida falle.
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 has incluido datos JSON no válidos o que no has especificado el destino de la subida.
Una respuesta con el código de estado 403 indica que has introducido una clave de API o un secreto de API del proyecto OpenTok no válidos.
Ejemplos
El siguiente ejemplo de línea de comandos configura de forma segura el certificado que debe utilizar Vonage al cifrar los archivos que se van a subir a un depósito de Amazon S3:
Establezca el valor de api_key a la clave de la API de tu proyecto de OpenTok. Establece el valor de json_web_token
a un token web JSON.
Establece los valores para your-s3-bucket y your-s3-access-key para que
coincidan con tus credenciales de Amazon S3. Sustituye el valor del certificado
por la cadena del certificado.
El siguiente ejemplo de línea de comandos configura de forma segura el certificado que debe utilizar Vonage al cifrar archivos que se van a subir a un depósito de Microsoft Azure:
Establezca el valor de api_key a la clave API de tu proyecto de OpenTok. Establece el valor de json_web_token
a un token web JSON.
Establece los valores para your-azure-account-name, your-azure-account-name,
y your-azure-container para que coincida con tus credenciales de Amazon S3. Sustituye el valor del certificado
por la cadena del certificado.
Descifrar un archivo comprimido
Puedes configurar una notificación de estado de archivo a través del panel de control de OpenTok. Consulta «Cambios en el estado de archivo» en el Guía para desarrolladores de OpenTok Archiving.
Una vez creado el archivo, las solicitudes POST de estado del archivo enviadas a tu URL de devolución de llamada incluyen una propiedad «password»:
{
"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 (lo que indica AES-256) y el modo se establece en 1 (lo que indica CBC).
Los siguientes 32 bytes constituyen la clave. Los 16 bytes restantes constituyen el vector de inicialización.
En primer lugar, descodifica la contraseña y, a continuación, descifrála 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, una vez decodificada y descifrada en formato binario, a formato hexadecimal para que pueda introducirse en
OpenSSL. Consulta la página de manual de xxd para obtener más información sobre los parámetros.
Desactivar el archivado cifrado
Para desactivar el archivado cifrado, envía una solicitud HTTP PUT a la URL del almacenamiento de archivos (véase Envío del certificado de archivado cifrado a Vonage), pero establece el certificado como nulo 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 por el nombre del depósito de Amazon S3 que quieras utilizar para la subida de archivos. Establece el
secretKey y accessKey propiedades de la clave secreta y la clave de acceso de Amazon S3 para ese
depósito.
Fije el fallback propiedad to "none"
para evitar que los archivos de archivo se almacenen en la nube de OpenTok si
la subida falla. Establece la propiedad en "opentok"
para que el archivo esté disponible en el panel de control de OpenTok en caso de que
la subida falle.
Fije 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 tu contenedor de Microsoft Azure. Configura 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 de archivo se almacenen en la nube de OpenTok si
la subida falla. Establece la propiedad en "opentok"
para que el archivo esté disponible en el panel de control de OpenTok en caso de que la subida
falle.
Configura el certificate propiedad a null.
Respuestas de la API REST
Una respuesta con el código de estado 200 indica que se ha desactivado correctamente el cifrado.
Una respuesta con un código de estado 400 indica que has incluido datos JSON no válidos o que no has especificado el destino de la subida.
Una respuesta con el código de estado 403 indica que has introducido una clave de API o un secreto de socio de OpenTok no válidos.
Ejemplo
El siguiente ejemplo de línea de comandos desactiva el archivado cifrado para un destino S3:
Establezca el valor de api_key a tu clave API de OpenTok. Establece el valor de json_web_token
a un token web JSON. Establece los valores para your-s3-bucket
y your-s3-access-key para que coincida con sus credenciales de Amazon S3.
Problema conocido
La duración de un archivo cifrado siempre se indica como 0, tanto en todas las llamadas a la API REST de OpenTok, como en los métodos de los SDK del servidor de OpenTok, y en las llamadas de retorno de cambio de estado del archivo.