Estoy haciendo una investigación y un proyecto piloto en WebRTC (basado en navegador/JavaScript) y ahora estoy investigando la implementación de seguridad del mismo.
Entiendo (corríjame de lo contrario) que el DTLS-SRTC implementa un mecanismo de encriptación y solo puedo encontrar referencias a TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.
También pensé que los servidores STUN/TURN intermedios no participan en el mecanismo de cifrado, por lo que la carga útil simplemente pasará intacta a través de un servidor TURN.
Esto me hace preguntar si es posible configurar y elegir entre una lista de cifrados disponibles y longitud de clave para WebRTC en una solución de navegador/JavaScript... o si TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 es el único.
Si se puede establecer la longitud de clave/cifrado, ¿puede darnos algún consejo sobre cómo hacerlo en JavaScript o señalar alguna documentación específica para lograrlo?
Primero quiero responder a sus preguntas directas, las notas sobre cosas que no se preguntaron explícitamente.
Tiene razón en que TURN no proporciona seguridad a la sesión de WebRTC. Cuando se utiliza un servidor TURN, los datos ya están cifrados cuando pasan por el servidor TURN. El servidor TURN no puede modificar ni inspeccionar los datos que fluyen a través de él.
No puede controlar CipherSuites a través de Javascript. No existen API para eso hoy.
Los navegadores ofrecen múltiples DTLS y SRTP CipherSuites. Aquí está la lista que usa FireFox 98.
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) Cipher Suite: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca9) Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8) Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)y estos son los SRTP CipherSuites
SRTP Protection Profile: SRTP_AEAD_AES_128_GCM (0x0007) SRTP Protection Profile: SRTP_AEAD_AES_256_GCM (0x0008) SRTP Protection Profile: SRTP_AES128_CM_HMAC_SHA1_80 (0x0001) SRTP Protection Profile: SRTP_AES128_CM_HMAC_SHA1_32 (0x0002)WebRTC utiliza dos CipherSuites. Uno es para DTLS y otro para SRTP. DTLS es para mensajes de DataChannel y SRTP es para medios.
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 es un CipherSuite TLS (no un CipherSuite SRTP).
La única forma en que puede tener algún control sobre CipherSuite es ejecutando una implementación de WebRTC que no está en el navegador. Un servidor/cliente WebRTC de su elección podría proporcionar API para cambiarlos.
WebRTC para Curious#Secure también podría ser útil. Toca los puntos en esta respuesta un poco más profundo.