Cifrado de extremo a extremo

Este tema incluye información detallada sobre el uso del cifrado de extremo a extremo en el Client SDK de Vonage Video para Android:

Para obtener una visión general del cifrado de extremo a extremo, consulta este tema.

Configuración del secreto de cifrado

Las sesiones cifradas de extremo a extremo se crean mediante las API del servidor (véase Activación del cifrado mediante la API REST).

Antes de que el cliente publique o se suscriba, llame a la función Session.setEncryptionSecret() método:

session.setEncryptionSecret("encryption-secret");
session.connect(TOKEN);

Una clave válida es una cadena de entre 8 y 256 caracteres. Puedes cambiar la clave llamando a la función Session.setEncryptionSecret() función de nuevo.

Si se establece un secreto no válido, se producirá un InvalidEncryptionSecret error.

Sucesos y errores

Los eventos y errores son esenciales para gestionar el comportamiento del cifrado dirigido por el usuario. El cifrado de extremo a extremo utiliza el modelo de secreto compartido: se espera que todos los participantes en la sesión utilicen el mismo secreto para cifrar sus medios y descifrar los de los demás.

Si un cliente intenta conectarse a una sesión cifrada de extremo a extremo sin haber configurado un secreto de cifrado, el SessionListener.onError() El controlador de eventos se invoca con un código de error establecido en ErrorCode.EncryptionSecretMissing:

// Implementation of SessionListener.onError():
@Override
public void onError(Session session, OpentokError opentokError) {
  if (opentokError.getErrorCode() == ErrorCode.EncryptionSecretMissing) {
    // Notify the user that they cannot join the session
  }
}

session.connect(token);

Si un usuario intenta publicar en una sesión cifrada de extremo a extremo sin haber especificado un secreto de cifrado, al llamar a la función Session.publish() da como resultado el método PublisherListener.onError() Se está llamando al controlador de eventos con un error cuyo código está establecido en ErrorCode.EncryptionSecretMissing. Para garantizar la mejor experiencia de usuario, la aplicación debería validar una clave secreta facilitada por el usuario antes de llamar a la Session.publish() método:

// Implementation of PublisherListener.onError():
@Override
public void onError(PublisherKit publisher, OpentokError opentokError) {
  if (opentokError.getErrorCode() == ErrorCode.EncryptionInternalError) {
    // The application should communicate that the secret was not set.
  }
}

session.publish(publisher);

Si un suscriptor no puede descodificar el contenido multimedia de una transmisión debido a una clave de cifrado incorrecta, el SubscriberListener.onError() El controlador de eventos se activa con un error cuyo código está establecido en ErrorCode.EncryptionSecretMismatch. Es importante comunicar al usuario que los medios no se están recibiendo debido a un desajuste de cifrado y no a un fallo de conexión o a un problema de audio/vídeo:

// Implementation of Subscriber.onError():
@Override
public void onError(SubscriberKit publisher, OpentokError opentokError) {
  if (opentokError.getErrorCode() == ErrorCode.EncryptionSecretMismatch) {
    // Activate a UI element communicating that there's been an encryption secret mismatch.
  }
}

session.subscribe(subscriber);

Si la aplicación intenta suscribirse sin configurar un secreto de cifrado, el Subscriber.onError() El controlador de eventos se activa con un error cuyo código está establecido en ErrorCode.EncryptionSecretMissing.

Si un abonado encuentra un error interno al descifrar un paquete, el Subscriber.onError() El controlador de eventos se activa con un error cuyo código está establecido en ErrorCode.DecryptionInternalError.