Chiffrement de bout en bout

Cette rubrique contient des informations détaillées sur l'utilisation du chiffrement de bout en bout dans le Client SDK du client Vonage Video pour iOS :

Pour une présentation générale du chiffrement de bout en bout, consultez ce sujet.

Configuration de la clé de chiffrement

Les sessions chiffrées de bout en bout sont créées à l'aide des API du serveur (voir Activation du chiffrement à l'aide de l'API REST).

Avant que le client ne publie ou ne s'abonne, appelez la fonction [OTSession setEncryptionSecret:error:] méthode :

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

Un secret valide est une chaîne de 8 à 256 caractères. Vous pouvez modifier le secret en appelant la fonction Session.setEncryptionSecret() à nouveau.

La définition d'un secret non valide entraînera un InvalidEncryptionSecret erreur.

Événements et erreurs

Les événements et les erreurs sont essentiels pour gérer le comportement du chiffrement piloté par l'utilisateur. Le chiffrement de bout en bout utilise le modèle du secret partagé : tous les participants à la session sont censés utiliser le même secret pour chiffrer leurs données et déchiffrer celles des autres.

Si le client tente de se connecter à une session cryptée de bout en bout et ne définit pas le secret de cryptage avant de se connecter, une erreur avec le code défini à EncryptionSecretMissing:

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

Si un utilisateur tente de publier dans une session chiffrée de bout en bout sans avoir spécifié de secret de chiffrement, l'appel de la fonction [OTSession publish:error:] donne lieu à une erreur dont le code est défini comme suit OTPublisherEncryptionSecretMissing. Pour une expérience utilisateur optimale, l'application doit valider un secret fourni par l'utilisateur avant de le publier :

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 abonné n'est pas en mesure de décoder les médias d'un flux en raison d'un secret de cryptage erroné, la fonction [OTSubscriberKitDelegate subscriber:didFailWithError:] est envoyé avec une erreur dont le code est fixé à ErrorCode.EncryptionSecretMismatch. Il est important d'indiquer à l'utilisateur que le média n'est pas reçu en raison d'une erreur de cryptage et non d'une défaillance de la connexion ou d'un problème audio/vidéo :

// 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 abonné rencontre une erreur interne lors du décryptage d'un paquet, la fonction [OTSubscriberKitDelegate subscriber:didFailWithError:] est envoyé avec une erreur dont le code est fixé à OTSubscriberDecryptionInternalError.