Criptografia da Video API da Vonage
A criptografia do OpenTok permite criar arquivos do OpenTok nos quais os dados nunca ficam armazenados em estado não criptografado.
Você pode proteger seus arquivos do OpenTok das seguintes maneiras:
-
Desativar o armazenamento de fallback do arquivo — Por padrão, a Vonage armazena um arquivo de backup nos servidores da OpenTok caso não consiga fazer o upload do arquivo para o servidor Amazon S3 ou Microsoft Azure especificado por você. Você pode impedir esse armazenamento de fallback ao usar a API REST da OpenTok para definir o destino do upload do arquivo.
-
Use a criptografia do OpenTok — Isso permite que você crie arquivos do OpenTok nos quais os dados nunca ficam armazenados em um estado não criptografado. Isso oferece o mais alto nível de segurança.
-
Use a criptografia do lado do servidor do Amazon S3 — Essa opção utiliza chaves de criptografia gerenciadas pelo Amazon S3 para a criptografia. Para obter mais detalhes, consulte este guia para desenvolvedores.
Com a criptografia do OpenTok, os dados de vídeo e áudio em um arquivo do OpenTok são criptografados por meio de um certificado de chave pública que você fornece à Vonage.
Importante: O recurso de criptografia do OpenTok está disponível como um recurso adicional. Entre em contato conosco para ativar esse recurso para as chaves do seu projeto OpenTok.
Visão geral dos recursos
O recurso de arquivamento criptografado da Plataforma OpenTok permite criar arquivos nos quais os dados nunca ficam armazenados em estado não criptografado.
Primeiro, crie um par de chaves RSA pública e privada para usar com seus arquivos do OpenTok. Por meio de uma chamada à API REST do OpenTok, você compartilha o certificado da chave pública com a Vonage. (Na mesma chamada REST, você envia detalhes sobre o destino de upload no Amazon S3 ou no Microsoft Azure a ser usado para seus arquivos. O recurso de arquivamento criptografado exige que você defina um destino de upload.) Você salva a chave privada localmente para seu uso exclusivamente privado.
A Vonage, então, criptografa cada arquivo usando uma senha gerada aleatoriamente, criptografa-a com o certificado e armazena a senha criptografada em nossos servidores. Quando o arquivo estiver pronto, você será notificado por meio de uma chamada de retorno ao seu servidor e poderá solicitar a senha. Em nenhum momento a Vonage armazena a senha não criptografada, e a Vonage não tem como descriptografar a senha (apenas o detentor da chave privada pode descriptografar a senha).
Em seguida, você pode descriptografar a senha usando a chave privada e usar a senha para descriptografar o arquivo compactado. O arquivo compactado descriptografado está no formato MPEG-TS.
A Vonage utiliza o algoritmo AES-256 para criptografar o arquivo. A senha gerada é criptografada por meio da criptografia RSA com preenchimento OAEP. Observe que só é possível usar o arquivamento criptografado com arquivos compostos, e não com arquivos de fluxo individuais.
Este documento inclui as seguintes seções:
Criação de um certificado de arquivamento criptografado
Envio do certificado de arquivamento criptografado para a Vonage
Desativando o arquivamento criptografado
Criação de um certificado de arquivamento criptografado
Crie um certificado X.509 no formato PEM e uma chave privada correspondente para usar com seus arquivos:
(Observação: Isso foi testado com o OpenSSL 1.0.1.)
Você enviará o certificado à Vonage, que o utilizará para gerar uma senha criptografada, necessária para descriptografar o arquivo compactado. A senha pode ser descriptografada com sua chave privada, e o arquivo compactado pode ser descriptografado com a senha. A senha será diferente para cada arquivo compactado.
O tamanho da chave deve ser de 2.048 bits ou menos. Você enviará o certificado em formato JSON para a API REST do OpenTok para definir o destino do arquivo (consulte a próxima seção). Como o certificado será incluído nos dados JSON, envie os dados codificados em base64 ou substitua os caracteres de nova linha no certificado por "\n".
O exemplo a seguir codifica o certificado em base64:
Uma string de certificado codificada em base64 tem a seguinte aparência:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
Uma string de certificado com os caracteres de nova linha substituídos fica assim:
"-----BEGIN CERTIFICATE-----\n...\n...\n
-----END CERTIFICATE-----"
Envio do certificado de arquivamento criptografado para a Vonage
Para configurar o certificado e ativar a criptografia do arquivo, envie uma solicitação HTTP PUT para a seguinte URL:
https://api.opentok.com/v2/project/<apiKey>/archive/storage
Substituir <apiKey> com a chave da API do seu projeto OpenTok.
Autentique a solicitação da API REST usando um cabeçalho HTTP personalizado:
X-OPENTOK-AUTH. Defina esse valor como um token JSON Web (consulte a documentação da API REST do OpenTok
):
X-OPENTOK-AUTH: <JSON_web_token>
Crie o token JSON da web com as seguintes reivindicações:
{
"iss": "your_api_key",
"ist": "project",
"iat": current_timestamp_in_seconds,
"exp": expire_timestamp_in_seconds,
"jti": "jwt_nonce"
}
-
Conjunto
issà sua chave da API do OpenTok (fornecida a você em seu Vonage Account (na página do Projeto). -
Conjunto
istpara “projeto”. -
Conjunto
iataté o timestamp da época Unix atual (quando o token foi criado), em segundos. -
Conjunto
expaté o prazo de validade do token. Por motivos de segurança, recomendamos que você utilize um prazo de validade próximo à hora de criação do token (por exemplo, 3 minutos após a criação) e que crie um novo token para cada chamada à API REST. O intervalo máximo permitido para o prazo de validade é de 5 minutos. -
Conjunto
jtipara um identificador exclusivo do JWT. Isso é opcional. Consulte o Especificação do JSON Web Token para mais detalhes.
Use o segredo da API do seu projeto OpenTok como chave secreta do JWT e assine-o com o algoritmo de criptografia HMAC-SHA256. (O segredo da API é fornecido a você em seu Account da Video API (na página do Projeto.)
Por exemplo, o código Python a seguir cria um token que pode ser usado em uma chamada à API REST do 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')
Substituir my-OpenTok-project-API-key
e my-OpenTok-project-API-secret
com a chave de API e o segredo do projeto OpenTok.
Defina o Content-type cabeçalho para a chamada da API REST para application/json:
Content-Type:application/json
Substitua os caracteres de nova linha no certificado por "\n",
para que você possa usá-lo no literal de string nos dados JSON.
Passe o certificado da chave pública como uma propriedade dos dados JSON que você envia ao chamar o método REST para configurar o armazenamento de arquivos.
Consulte as próximas seções.
Configurando o arquivamento criptografado para um destino do Amazon S3
Para especificar um certificado de chave pública a ser usado com um destino do Amazon S3, defina os dados JSON na chamada da API REST de modo a utilizar o seguinte formato:
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
}
Conjunto bucket para o nome do bucket do Amazon S3 que você deseja usar para o envio de arquivos. Defina o
secretKey e accessKey propriedades da chave secreta e da chave de acesso do Amazon S3 para esse
bucket.
Defina a propriedade “fallback” como "none"
para impedir que os arquivos de arquivo sejam armazenados na nuvem da OpenTok caso
o upload falhe. Defina a propriedade como "opentok"
para que o arquivo fique disponível no painel do OpenTok caso o upload
falhe.
Defina a propriedade do certificado como o certificado de chave pública que a Vonage utilizará para criptografar o
arquivo compactado. Certifique-se de codificar o certificado em base64 ou substituir os caracteres de nova linha
no certificado por "\n",
para que você possa usá-lo no literal de string nos dados JSON.
Configurando o arquivamento criptografado para um destino no Microsoft Azure
Para especificar um certificado de chave pública a ser usado com um destino do Microsoft Azure, defina os dados JSON na chamada da API REST de modo a utilizar o seguinte formato:
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"fallback": "none",
"certificate" : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0...
}
Defina o nome do contêiner para que corresponda ao nome do seu contêiner no Microsoft Azure. Defina o accountName
e accountKey propriedades que correspondam às suas credenciais de armazenamento do Microsoft Azure.
Defina o fallback propriedade para "none"
para impedir que os arquivos de arquivo sejam armazenados na nuvem da OpenTok caso
o upload falhe. Defina a propriedade como "opentok"
para que o arquivo fique disponível no painel do OpenTok caso o upload
falhe.
Defina o certificate propriedade do certificado de chave pública que a Vonage utilizará para criptografar o
arquivo compactado. Certifique-se de codificar o certificado em base64 ou substituir os caracteres de nova linha
no certificado por "\n",
para que você possa usá-lo no literal de string nos dados JSON. Uma
string de certificado codificada em base64 tem a seguinte aparência:
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
Respostas da API REST
Uma resposta com o código de status 200 indica sucesso.
Uma resposta com o código de status 400 indica que você incluiu dados JSON inválidos ou que não especificou o destino do upload.
Uma resposta com o código de status 403 indica que você inseriu uma chave de API ou um segredo de API inválidos do projeto OpenTok.
Exemplos
O exemplo de linha de comando a seguir configura com segurança o certificado que a Vonage deve usar ao criptografar arquivos a serem enviados para um bucket do Amazon S3:
Defina o valor para api_key para a chave da API do seu projeto OpenTok. Defina o valor para json_web_token
para um token JSON da Web.
Defina os valores para your-s3-bucket e your-s3-access-key para
corresponder às suas credenciais do Amazon S3. Substitua o valor do certificado
pela sequência de caracteres do certificado.
O exemplo de linha de comando a seguir configura com segurança o certificado que a Vonage deve usar ao criptografar arquivos compactados a serem enviados para um bucket do Microsoft Azure:
Defina o valor para api_key para a chave de API do seu projeto OpenTok. Defina o valor para json_web_token
para um token JSON da Web.
Defina os valores para your-azure-account-name, your-azure-account-name,
e your-azure-container para corresponder às suas credenciais do Amazon S3. Substitua o valor do certificado
pela string do certificado.
Descompactar um arquivo
Você pode configurar um callback de status de arquivamento usando o painel do OpenTok. Consulte “Alterações no status de arquivamento” na Guia do desenvolvedor do OpenTok Archiving.
Após a criação do arquivo, as solicitações POST de status do arquivo enviadas para sua URL de retorno incluem uma propriedade “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"
}
A senha consiste em uma chave AES criptografada por certificado e um vetor de inicialização, na forma de dados binários codificados em base64.
Os três primeiros bytes dos dados binários representam a versão (um byte), o algoritmo (um byte) e o modo (um byte). Nesta versão, o comprimento é definido como 1, o algoritmo é definido como 1 (indicando AES-256) e o modo é definido como 1 (indicando CBC).
Os próximos 32 bytes constituem a chave. Os 16 bytes restantes constituem o vetor de inicialização.
Primeiro, decodifique a senha e, em seguida, descriptografe-a usando sua chave privada:
Em seguida, use a senha para descriptografar o arquivo compactado:
-K é a chave
-iv é o vetor de inicialização
xxd converte a senha decodificada e descriptografada em binário para o formato hexadecimal, de modo que possa ser passada para o
OpenSSL. Leia a página de manual do xxd para obter mais informações sobre as opções.
Desativando o arquivamento criptografado
Para desativar o arquivamento criptografado, envie uma solicitação HTTP PUT para a URL do armazenamento de arquivos (consulte Envio do certificado de arquivamento criptografado para a Vonage), mas defina o certificado como nulo nos dados JSON que você enviar com a solicitação.
Desativando o arquivamento criptografado para um destino do Amazon S3
Para remover um certificado de chave pública de um destino de arquivamento do Amazon S3 (e remover a criptografia dos arquivos), chame a API REST com os seguintes dados JSON:
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate" : null
}
Conjunto bucket para o nome do bucket do Amazon S3 que você deseja usar para o envio de arquivos. Defina o
secretKey e accessKey propriedades da chave secreta e da chave de acesso do Amazon S3 para esse
bucket.
Defina o fallback propriedade to "none"
para impedir que os arquivos de arquivo sejam armazenados na nuvem da OpenTok caso
o upload falhe. Defina a propriedade como "opentok"
para que o arquivo fique disponível no painel do OpenTok caso o upload
falhe.
Defina o certificate propriedade para null.
Desativando o arquivamento criptografado para um destino do Microsoft Azure
Para remover um certificado de chave pública de um destino de arquivamento do Microsoft Azure (e remover a criptografia dos arquivos), chame a API REST com os seguintes dados JSON:
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"certificate" : null
}
Conjunto container para corresponder ao nome do seu contêiner do Microsoft Azure. Defina o accountName
e accountKey propriedades que correspondam às suas credenciais de armazenamento do Microsoft Azure.
Defina o fallback propriedade para "none"
para impedir que os arquivos de arquivo sejam armazenados na nuvem da OpenTok caso
o upload falhe. Defina a propriedade como "opentok"
para que o arquivo fique disponível no painel do OpenTok caso o upload
falhe.
Defina o certificate propriedade para null.
Respostas da API REST
Uma resposta com o código de status 200 indica que a desativação da criptografia foi bem-sucedida.
Uma resposta com o código de status 400 indica que você incluiu dados JSON inválidos ou que não especificou o destino do upload.
Uma resposta com o código de status 403 indica que você inseriu uma chave de API ou um segredo de parceiro inválido do projeto OpenTok.
Exemplo
O exemplo de linha de comando a seguir desativa o arquivamento criptografado para um destino S3:
Defina o valor para api_key à sua chave da API do OpenTok. Defina o valor para json_web_token
para um token JSON da Web. Defina os valores para your-s3-bucket
e your-s3-access-key para corresponder às suas credenciais do Amazon S3.
Problema conhecido
A duração de um arquivo criptografado é sempre informada como 0, em todas as chamadas da API REST do OpenTok, nos métodos dos SDKs do servidor OpenTok e nos callbacks de alteração de status do arquivo.