Ahora mismo estoy pensando en una forma de crear un servidor de transmisión de video seguro con la siguiente suposición:
- se puede confiar en las personas para que no distribuyan el video que tienen derechos para ver.
(Creo que en la primera edición de mi pregunta no pude articular mis pensamientos. Lo que se confía en las personas no es un requisito, sino un supuesto. Y creo que en algunos casos es válido. Por ejemplo : no confía a las personas con su tarjeta de credencial y no quiere que conozcan su secreto, pero puede confiarle a su esposa). De la misma manera, podría haber un grupo de personas dentro de una organización a la que les gustaría compartir algunos videos y confiar entre ellos (pueden estar equivocados, pero en este momento confían).
y requisitos:
- las personas tienen que iniciar sesión con sus credenciales para ver videos
- diferentes personas deben tener derechos para ver diferentes videos
- debería poder usar el almacenamiento en caché de CDN (los videos pueden ser bastante grandes)
- el video debe verse en diferentes plataformas y dispositivos.
La parte con credenciales de inicio de sesión para ver videos no se ve tan difícil, el problema surge cuando tiene que transmitir video a un usuario. Sin cifrar de alguna manera el video, existe la posibilidad de un ataque MITM (y también los fragmentos pueden almacenarse en CDN y luego verse libremente).
Al principio, pensé que esto tampoco es un problema y lo único que se necesita es mostrar el video a través de https. Pero luego me di cuenta de que de esta manera no es posible utilizar el almacenamiento en caché CDN (aunque el almacenamiento en caché del navegador todavía será posible).
Otro enfoque en el que pensé es crear una clave privada para cada video y codificar el video con esta clave. Si el debe tener derechos para verlo, recibiría una clave para descifrar el video (por lo tanto, todos los usuarios que tienen derechos para ver un video en particular tendrían que acceder al mismo video encriptado y, por lo tanto, se puede almacenar en caché en CDN sin riesgo) . El problema aquí es que el descifrado se debe realizar en el cliente y la forma en que puedo verlo es a través de flash (que no es compatible con todos los dispositivos).
Supongo que jugadores como Google y Netflix ya han hecho algo como esto pero no pudieron encontrar cómo lo lograron. Entonces, ¿es posible construir el sistema que satisfaga los criterios mencionados anteriormente y, de ser así, cuál es el enfoque?