End-to-End-Verschlüsselungs-API

Verwenden Sie die End-to-End Encryption API, um Medien zu verschlüsseln, die von Ihrer Anwendung über einen Medienserver gesendet werden.

Das ist wichtig: In OpenTok.js 2.27.0+ funktioniert die Ende-zu-Ende-Verschlüsselung nicht, wenn Sie sich mit Clients verbinden, die eine frühere Version von OpenTok.js verwenden. Wenn Sie Ihre Anwendung aktualisieren, um OpenTok.js 2.27.0+ zu verwenden, stellen Sie sicher, dass alle Clients OpenTok.js 2.27.0+ verwenden, wenn die Anwendung eine Ende-zu-Ende-Verschlüsselung verwendet.

Übersicht

Die Ende-zu-Ende-Verschlüsselung (oder E2EE) ermöglicht es Anwendungsentwicklern, Medien in weitergeleitete Sitzungen von Client zu Client. Bei weitergeleiteten Sitzungen werden die Medien bereits von Client zu Client über WebRTC-Protokolle verschlüsselt. Diese Funktion fügt eine Verschlüsselungsebene hinzu, indem sie die Medien-Nutzdaten beim Client verschlüsselt, so dass sie über den Medien-Router, der Medien an andere Clients weiterleitet (in gerouteten Sitzungen), verschlüsselt bleiben. Sie aktivieren die Ende-zu-Ende-Verschlüsselung, wenn Sie eine Sitzung erstellen.

Ende-zu-Ende-Verschlüsselung wird in Web-Apps auf Chromium-basierten (Chrome, Opera, Samsung Internet, Edge und Android WebView) und WebKit-basierten Browsern unterstützt, zum Beispiel Safari auf macOS/iOS, Chrome auf iOS und WebView auf iOS. Die Ende-zu-Ende-Verschlüsselung wird in Web-Apps auf Firefox nicht unterstützt.

WebKit-basierte Browserunterstützung ist erst ab der Version OpenTok.js 2.30.0 verfügbar.

Die Ende-zu-Ende-Verschlüsselung wird in jedem der nativen Client-SDKs (für Android, iOS, Windows, Linux und macOS) unterstützt.

Sie legen das Verschlüsselungsgeheimnis in einer Webanwendung mit OpenTok.js fest. Sie müssen das Verschlüsselungsgeheimnis im Web-Client festlegen, wenn Sie eine Sitzung initialisieren, und Sie können das Verschlüsselungsgeheimnis im laufenden Betrieb ändern, sobald die Sitzung verbunden ist. Das Verschlüsselungsgeheimnis ist eine nicht leere Zeichenfolge. Alle Benutzer müssen das gleiche Geheimnis verwenden, um verständliche Medien zu erhalten. Das Verschlüsselungsgeheimnis ist das Schlüsselmaterial für die Erzeugung eines kryptografischen Schlüssels, der zum Ver- und Entschlüsseln von Medien verwendet wird. Das Verschlüsselungsgeheimnis generiert insbesondere einen AES-256-Schlüssel unter Verwendung eines AES-CTR-Algorithmus mit einem 256-Bit-Schlüssel.

Bitte beachten Sie, dass die Medien-Router bei Verwendung der Ende-zu-Ende-Verschlüsselung keinen Zugriff auf unverschlüsselte Medien hat.

Daher werden Funktionen, die eine Mediendekodierung erfordern - wie Archivierung, Live-Streaming, Experience Composer, Audio-Connector und SIP-Interconnect - in verschlüsselten End-to-End-Sitzungen nicht unterstützt. .

End-to-End-Verschlüsselung pro Codec an allen Endpunkten

Codec/End-point Chrome Android Chrome iOS Chrome Firefox Safari Edge iOS SDK Android SDK Windows SDK macOS SDK Linux SDK
VP8
H.264
VP9

Hinzufügen einer Ende-zu-Ende-Verschlüsselung für Ihren Account

Die Ende-zu-Ende-Verschlüsselung ist verfügbar als Add-on-Feature. Sie können die Funktion auf Ihrem Video Account-Seite.

Aktivieren der Verschlüsselung über die REST-API

Sie aktivieren die Ende-zu-Ende-Verschlüsselung, wenn Sie eine Sitzung mit der REST-API erstellen. Setzen Sie die e2ee Eigenschaft zu true.

Siehe Erstellung von Sitzungen.

Anmerkung: Bevor Sie die Ende-zu-Ende-Verschlüsselung für eine Sitzung aktivieren, müssen Sie sie für Ihren Video Account aktivieren.

Das folgende Node.js-Beispiel erstellt eine Sitzung mit End-to-End-Verschlüsselung:

const Vonage = require('@vonage/server-sdk');

const vonage = new Vonage({
    applicationId: APP_ID,
    privateKey: PRIVATE_KEY_PATH
});

try {
    const session = await vonage.video.createSession({
         mediaMode: "routed",
         e2ee: true, // This will enable end-to-end encryption
    });
} catch(error) {
    console.error("Error creating session: ", error);
}

Durchführungsbestimmungen

Setting the encryption secret

End-to-end encrypted sessions are created using server APIs (see Enabling encryption using the REST API). To have a React Native client join an end-to-end encrypted session, set the encryptionSecret prop of the OTSession component:

<OTSession
  applicationId="api-key"
  sessionId="session-id"
  token="token"
  encryptionSecret="initial-encryption-secret"
>
  <OTPublisher />
  <OTSubscriber />
</OTSession>

A valid secret is a string between 8 and 256 characters.

You can change the secret by setting the encryptionSecret prop to a property of the React state and changing its value:

<OTSession
  applicationId="api-key"
  sessionId="session-id"
  token="token"
  encryptionSecret={this.state.encryptionSecret}>
>
  <OTPublisher />
  <OTSubscriber />
</OTSession>

Events and errors

Events and errors are essential to managing the behavior of user-driven encryption behavior. End-to-end encryption uses the shared secret model: everyone in the session is expected to use the same secret to encrypt their media and decrypt everyone else's.

The OTSubscriber error() event handler callback is invoked when the subscriber is unable to decode a stream's media due to a mismatched (or unset) encryption secret:

<OTSubscriber
eventHandlers={{
    error: event => {
    // Show UI notification.
    },
}}
>

The OTSession error() event handler callback is invoked if the client tries to connect to an end-to-end encrypted session that was initialized with an invalid encryption secret (or without specifying an encryption secret). A valid secret is a string between 8 and 256 characters. For the best user experience, the application should catch an invalid user supplied secret before setting the OTSession encryptionSecret prop. In the following example, a session is initialized with an empty (and thus invalid) secret, which causes an error when attempting to connect:

<OTSession
  applicationId="api-key"
  sessionId="session-id"
  token="token"
  encryptionSecret=""
  eventHanders={{
    error: event => {
      // An error event is dispatched if you set an invalid encryption secret
    }
  }}
>
  <OTPublisher />
  <OTSubscriber />
</OTSession>