Ende-zu-Ende-Verschlüsselung

Dieses Thema enthält Informationen zur Verwendung der End-to-End-Verschlüsselung im Vonage Video Android-Client SDK:

Einen Überblick über die End-to-End-Verschlüsselung finden Sie unter dieses Thema.

Festlegen des Verschlüsselungsschlüssels

End-to-End-verschlüsselte Sitzungen werden mithilfe von Server-APIs erstellt (siehe Aktivieren der Verschlüsselung über die REST-API).

Bevor der Client publiziert oder abonniert, rufen Sie die Session.setEncryptionSecret() Methode:

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

Ein gültiges Geheimnis ist eine Zeichenfolge zwischen 8 und 256 Zeichen. Sie können das Geheimnis ändern, indem Sie die Funktion Session.setEncryptionSecret() Funktion wieder.

Das Setzen eines ungültigen Geheimnisses führt zu einer InvalidEncryptionSecret Fehler.

Ereignisse und Fehler

Ereignisse und Fehler sind wesentlich für die Verwaltung des benutzergesteuerten Verschlüsselungsverhaltens. Bei der Ende-zu-Ende-Verschlüsselung wird das Modell des gemeinsamen Geheimnisses verwendet: Es wird erwartet, dass alle Teilnehmer der Sitzung dasselbe Geheimnis verwenden, um ihre Medien zu verschlüsseln und die der anderen zu entschlüsseln.

Wenn ein Client versucht, eine Verbindung zu einer Ende-zu-Ende-verschlüsselten Sitzung herzustellen, ohne ein Verschlüsselungsgeheimnis zu setzen, wird der SessionListener.onError() Ereignisbehandlungsroutine wird mit einem Fehlercode aufgerufen, der auf 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);

Wenn ein Benutzer versucht, in einer Ende-zu-Ende-verschlüsselten Sitzung zu veröffentlichen, ohne ein Verschlüsselungsgeheimnis angegeben zu haben, wird der Aufruf der Session.publish() Methode führt zu der PublisherListener.onError() Der Ereignis-Handler wird mit einem Fehler aufgerufen, dessen Code auf ErrorCode.EncryptionSecretMissing. Für eine optimale Benutzerfreundlichkeit sollte die Anwendung ein vom Benutzer eingegebenes Geheimnis validieren, bevor sie die Session.publish() Methode:

// 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);

Wenn ein Teilnehmer aufgrund eines falschen Verschlüsselungsgeheimnisses nicht in der Lage ist, die Medien eines Streams zu entschlüsseln, wird der SubscriberListener.onError() Ereignisbehandlungsroutine wird mit einem Fehler aufgerufen, dessen Code auf ErrorCode.EncryptionSecretMismatch. Es ist wichtig, dem Benutzer mitzuteilen, dass die Medien aufgrund eines Verschlüsselungsfehlers und nicht aufgrund eines Verbindungsfehlers oder eines Audio-/Videoproblems nicht empfangen werden können:

// 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);

Wenn die Anwendung versucht, ein Abonnement abzuschließen, ohne einen Verschlüsselungsschlüssel festzulegen, wird die Subscriber.onError() Ereignisbehandlungsroutine wird mit einem Fehler aufgerufen, dessen Code auf ErrorCode.EncryptionSecretMissing.

Wenn ein Teilnehmer bei der Entschlüsselung eines Pakets auf einen internen Fehler stößt, wird der Subscriber.onError() Ereignisbehandlungsroutine wird mit einem Fehler aufgerufen, dessen Code auf ErrorCode.DecryptionInternalError.