Important Notes

  • En OpenTok.js 2.27.0+, el cifrado de extremo a extremo no funcionará cuando se conecte a clientes que utilicen una versión anterior de OpenTok.js. Cuando actualices tu aplicación para utilizar OpenTok.js 2.27.0+, asegúrate de que todos los clientes utilizan OpenTok.js 2.27.0+ si la aplicación utiliza cifrado de extremo a extremo.
  • La compatibilidad con el cifrado de extremo a extremo en los navegadores basados en WebKit, como Safari en macOS/iOS y Chrome en iOS, solo está disponible a partir de la versión 2.30.0 de OpenTok.js.

Note about Content Security Policies (CSP)

Si el script-src asegúrese de que 'wasm-unsafe-eval' está especificado. De lo contrario, WebAssembly, necesario para el cifrado de extremo a extremo, no podrá cargarse ni ejecutarse en la página.

Initializing a session with a secret

Las sesiones cifradas de extremo a extremo se crean mediante las API del servidor (véase «Activación del cifrado mediante el API REST). Para que un cliente web se una a una sesión cifrada de extremo a extremo, especifique un secreto de cifrado al llamar a la función OT.initSession() método:

const session = OT.initSession('api-key', 'session-id', {
  encryptionSecret: 'initialEncryptionSecret',
});

Una clave válida es una cadena de entre 8 y 256 caracteres. La clave se puede cambiar posteriormente con el Session.setEncryptionSecret() método (véase «Cambiar el secreto, más abajo).

Checking whether the browser supports end-to-end encryption

Utiliza el OT.hasEndToEndEncryptionSupport() Método para comprobar si el navegador del cliente admite el cifrado de extremo a extremo:

if (OT.hasEndToEndEncryptionSupport()) {
  // Proceed with connecting to the session
}
else {
  // Notify the user that they cannot join the session
}

El cifrado de extremo a extremo no está soportado actualmente en Firefox.

Changing the secret

Puede cambiar el secreto utilizando la opción Session.setEncryptionSecret() después de que la sesión se haya conectado:

await session.setEncryptionSecret('newEncryptionSecret');

Events and errors

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.

Un objeto «Subscriber» envía un encryptionSecretMismatch situación en la que el suscriptor no puede descodificar el contenido multimedia de una transmisión. Es importante comunicar al usuario que no se está recibiendo el contenido multimedia debido a una incompatibilidad de cifrado y no a un fallo de conexión o a un error de audio o vídeo:

subscriber.on('encryptionSecretMismatch', () => {
  // Activate a UI element communicating that there's been an encryption secret mismatch.
});

Además, es importante comunicar a los usuarios que el cifrado se ha activado correctamente. Un objeto Suscriptor envía un evento encryptionSecretMatch cuando el suscriptor es capaz de decodificar los medios del flujo después de un desajuste previo.

Además, es importante comunicar a los usuarios que el cifrado se ha activado correctamente. Un objeto Suscriptor envía un evento encryptionSecretMatch cuando el suscriptor es capaz de decodificar los medios del flujo después de un desajuste previo.

subscriber.on('encryptionSecretMatch', () => {
  // Activate a UI element communicating that the media is being properly decrypted.
});

El Session.connect() se invoca con un error si el cliente intenta conectarse a una sesión cifrada de extremo a extremo que se inicializó con un secreto de cifrado no válido. Un secreto válido es una cadena de entre 8 y 256 caracteres. Para una mejor experiencia de usuario, la aplicación debe detectar un secreto no válido antes de llamar a la llamada de retorno OT.initSession() método. En el siguiente ejemplo, se inicializa una sesión con un secreto vacío (y por tanto inválido), lo que provoca un error al intentar conectarse:

const session = OT.initSession(
 'api-key',
 'e2ee-session-id',
 {
   encryptionSecret: '',
 }
)

session.connect('token', (error) => {
  if (error && error.name === 'OT_INVALID_ENCRYPTION_SECRET') {
    /*
    The application should communicate that the secret was invalid.
    */
  }
});

El Session.connect() La función de devolución de llamada se activa con un error si un usuario intenta conectarse a una sesión cifrada de extremo a extremo en un navegador que no admite el cifrado de extremo a extremo.

const session = OT.initSession(
 'api-key',
 'e2ee-session-id',
 {
   encryptionSecret: 'validEncryptionSecret',
 }
)

session.connect('token', (error) => {
  if (error && error.name === 'OT_UNSUPPORTED_BROWSER') {
    /*
    The error will have the message 'Tried to connect an e2ee session but the browser does not support e2ee'
    The application should communicate that the browser does not support encryption.
    */
  }
});

Si un usuario intenta publicar en una sesión cifrada de extremo a extremo sin haber especificado un secreto de cifrado, el Session.publish() La función de devolución de llamada se invoca con un error. Para garantizar la mejor experiencia de usuario, la aplicación debería validar el secreto facilitado por el usuario antes de llamar a la session.publish() método:

session.publish(publisher, (error) => {
  if (error && error.name === 'OT_STREAM_CREATE_FAILED') {
    /*
    The error will have the message 'Tried to publish to an e2ee session but encryption secret was not set'
    The application should communicate that the secret was not set.
    */
  }
});

Si un usuario intenta suscribirse en una sesión cifrada de extremo a extremo sin haber especificado un secreto de cifrado, el Session.subscribe() La función de devolución de llamada se invoca con un error. Para garantizar la mejor experiencia de usuario, la aplicación debería validar el secreto facilitado por el usuario antes de llamar a la Session.subscribe() método:

subscriber = session.subscribe(stream, target, opts, (error) => {
  if (error && error.name === 'OT_UNABLE_TO_SUBSCRIBE') {
    /*
    The error will have the message 'Tried to subscribe to an e2ee stream but encryption secret was not set'
    The application should communicate that the secret was not set.
    */
  }
});