Cifrado de extremo a extremo

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

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 [OTSession setEncryptionSecret:error:] método:

OTError *error = nil;
[_session setEncryptionSecret:@"encryption-secret" error:&error];
if (error)
{
    // Notify the user.
}

Una clave válida es una cadena de entre 8 y 256 caracteres. Puedes cambiar la clave llamando a la función Session.setEncryptionSecret() el método 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 el cliente intenta conectarse a una sesión cifrada de extremo a extremo y no configura el secreto de cifrado antes de conectarse, se producirá un error con el código establecido en EncryptionSecretMissing:

OTError *error = nil;
[_session connectWithToken:kToken error:&error];
if (error && (error.code == EncryptionSecretMissing))
{
    // Notify the user of the error connecting.
}

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 [OTSession publish:error:] El método genera un error cuyo código está establecido en OTPublisherEncryptionSecretMissing. Para obtener la mejor experiencia de usuario, la aplicación debe validar un secreto proporcionado por el usuario antes de publicarlo:

OTError *error = nil;
[_session publish:_publisher error:&error];
if (error && (error.code == OTPublisherEncryptionSecretMissing))
{
    // The application should communicate that the secret was not set.
}

Si un suscriptor no puede descodificar el contenido multimedia de una transmisión debido a una clave de cifrado incorrecta, el [OTSubscriberKitDelegate subscriber:didFailWithError:] con un error cuyo código es 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 [OTSubscriberKitDelegate subscriber:didFailWithError:]:
- (void)subscriber:(OTSubscriberKit*)subscriber
  didFailWithError:(OTError*)error
{
	if (error && (error.code == EncryptionSecretMismatch)) {
    // Activate a UI element communicating that there's been an encryption secret mismatch.
	}
}

[_session subscribe:_subscriber error:&error];
// ...

Si un abonado encuentra un error interno al descifrar un paquete, el [OTSubscriberKitDelegate subscriber:didFailWithError:] con un error cuyo código es OTSubscriberDecryptionInternalError.