En la era digital, las personas y las empresas enfrentan riesgos cada vez mayores de fuga de datos. En el contexto de la teoría de la información, el flujo de información se refiere al proceso de transferencia de datos de una variable x
a otra variable y
. Ningún sistema quiere filtrar información confidencial, que no sólo afecta la privacidad personal sino que también puede causar pérdidas importantes a la empresa.
Existen muchas maneras de limitar la divulgación de información, como listas de control de acceso, firewalls y tecnología de cifrado. Sin embargo, aunque estos métodos limitan la divulgación de información hasta cierto punto, no pueden garantizar que la información no se filtre.
A medida que avanza la tecnología, los métodos para garantizar la seguridad de los datos también han cambiado mucho. Por ejemplo, las listas de control de acceso pueden impedir el acceso no autorizado a los archivos, pero no pueden controlar qué sucede con los datos una vez que están en uso. De manera similar, aunque la tecnología de cifrado puede transmitir información de forma privada en un canal inseguro, la confidencialidad de los datos se verá amenazada una vez que se descifren. Por lo tanto, resulta especialmente importante comprender el control del flujo de información.
var l, h; l := h;
Por otro lado, los flujos secundarios explotan ciertas características como el tiempo de ejecución o el consumo de energía para filtrar información. Por ejemplo, en una condición, si h
es verdadero, se realizará un trabajo que consume mucho tiempo, lo que permite a un atacante inferir h
en función del tiempo que tarda el programa. . El valor de .
El flujo de información implícito también es parte del flujo de derivación. Si bien el flujo de control de un programa se basa en datos privados, las variables públicas pueden implicar cierta información secreta.
La no interferencia es una política que enfatiza que un atacante no debería poder distinguir entre dos cálculos basándose en su salida si difieren únicamente en sus entradas secretas. Sin embargo, esta política es demasiado restrictiva para ser aplicada en los procedimientos reales.
Por ejemplo, un programa de verificación de contraseñas podría necesitar revelar alguna información secreta cuando sea necesario: es decir, si la contraseña ingresada es correcta. Esto permite a un atacante obtener información útil incluso cuando el programa rechaza la contraseña, por ejemplo, la contraseña intentada ingresar no era válida.
Sin embargo, las técnicas de análisis dinámico no pueden observar todas las rutas de ejecución y, por lo tanto, no pueden garantizar tanto la robustez como la precisión. Para garantizar que no interfieran con la aplicación de políticas, estas técnicas a menudo requieren finalizar la ejecución que podría filtrar información confidencial o ignorar actualizaciones que podrían filtrar información.
Un sistema de tipos seguro agrega un elemento importante a los lenguajes de programación, permitiendo que cada expresión lleve una etiqueta de seguridad además de tener un tipo (como booleano o entero). El beneficio de hacer esto es que, a través de la verificación de tipos, si el programa pasa la verificación, puede garantizar que se siga la política de flujo, evitando así un flujo de información inadecuado.
Por ejemplo, si una variable está marcada como un tipo de alta seguridad, entonces la variable no debe cambiar a una variable de un tipo de baja seguridad, protegiendo así la información confidencial de ser filtrada.
En aplicaciones del mundo real, la rigurosidad de la política de no interferencia la hace poco práctica. Por lo tanto, se han propuesto muchos esquemas para permitir la divulgación de información a fin de lograr el objetivo de la divulgación controlada. Estos esquemas también se conocen como desclasificación de información. Una desclasificación robusta debe garantizar que un atacante activo no pueda manipular el sistema para obtener acceso a secretos más allá de lo que conoce un atacante pasivo.
ResumenEl control del flujo de información adquiere cada vez más importancia en la programación moderna y la protección de datos. Sin embargo, cómo garantizar eficazmente la seguridad de los datos en aplicaciones prácticas sigue siendo un desafío que debe abordarse. ¿Está usted preparado para afrontar estas amenazas potenciales?