Criptografia de ponta a ponta

Este tópico inclui detalhes sobre como usar a criptografia de ponta a ponta no Vonage Client SDK para Windows:

Para obter uma visão geral da criptografia de ponta a ponta, consulte esse assunto.

Configurando o segredo de criptografia

As sessões com criptografia de ponta a ponta são criadas por meio de APIs do servidor (consulte Ativando a criptografia por meio da API REST).

Antes que o cliente publique ou se inscreva, chame o Session.SetEncryptionSecret() método:

Session.SetEncryptionSecret("encryption-secret");	
Session.Connect(TOKEN);

Um segredo válido é uma sequência de caracteres com comprimento entre 8 e 256 caracteres. Você pode alterar o segredo chamando a função Session.SetEncryptionSecret() método novamente.

Eventos e erros

Eventos e erros são essenciais para gerenciar o comportamento da criptografia orientada pelo usuário. A criptografia de ponta a ponta utiliza o modelo de segredo compartilhado: espera-se que todos os participantes da sessão utilizem o mesmo segredo para criptografar seus dados e descriptografar os dados dos demais participantes.

Se um cliente tentar se conectar a uma sessão criptografada de ponta a ponta sem definir um segredo de criptografia, o Session.Error o evento é enviado com um código de erro definido como ErrorCode.EncryptionSecretMissing:

private void Session_Error(object sender, ErrorEventArgs error)
{
	if (Error.ErrorCode == ErrorCode.EncryptionSecretMissing) {
    // Notify the user that they cannot join the session
	}
}

Session.Error += Session_Error;
Session.Connect(TOKEN);

Se um usuário tentar publicar em uma sessão criptografada de ponta a ponta sem ter especificado um segredo de criptografia, ao chamar a função Session.Publish() A função resulta no Publisher.Error evento enviado com um erro cujo código está definido como ErrorCode.EncryptionInternalError. Para garantir a melhor experiência do usuário, o aplicativo deve validar um segredo fornecido pelo usuário antes de chamar o Session.Publish() método:

private void Publisher_Error(object sender, ErrorEventArgs error)
{
	if (Error.ErrorCode == ErrorCode.EncryptionInternalError) {
    // The application should communicate that the secret was not set.
	}
}

Publisher.Error += Publisher_Error;
Session.Publish(Publisher);

Se um assinante não conseguir decodificar o conteúdo de mídia de um stream devido a uma chave de criptografia incorreta, o Subscriber.Error o evento é enviado com um erro cujo código está definido como ErrorCode.EncryptionSecretMismatch. É importante informar ao usuário que a mídia não está sendo recebida devido a uma incompatibilidade de criptografia e não por causa de uma falha na conexão ou de um problema de áudio/vídeo:

private void Subscriber_Error(object sender, ErrorEventArgs error)
{
	if (Error.ErrorCode == ErrorCode.EncryptionSecretMismatch) {
  // Activate a UI element communicating that there's been an encryption secret mismatch.
	}
}

Subscriber.Error += Subscriber_Error;
Session.Subscribe(Subscriber);

Se um assinante encontrar um erro interno ao descriptografar um pacote, o Subscriber.Error o evento é enviado com um erro cujo código está definido como ErrorCode.DecryptionInternalError.