En criptografía , la ofuscación de caja negra fue una primitiva criptográfica propuesta que permitiría ofuscar un programa informático de tal manera que fuera imposible determinar nada sobre él excepto su comportamiento de entrada y salida. [1] Se ha demostrado que la ofuscación de caja negra es imposible, incluso en principio. [2]
Barak et al. construyeron una familia de programas no ofuscables, para los cuales un atacante eficiente siempre puede aprender más de cualquier código ofuscado que del acceso a caja negra. [2] [3]
En términos generales, comienzan diseñando un par especial de programas que no se pueden ofuscar juntos. Para algunas cadenas seleccionadas al azar de una longitud fija predeterminada , definen un programa como aquel que calcula
y el otro programa a uno que calcula
(Aquí, interpreta su entrada como el código de una máquina de Turing . La segunda condición en la definición de es evitar que la función sea incomputable ).
Si un atacante eficiente solo tiene acceso a la caja negra, argumentaron Barak et al., entonces el atacante solo tiene una probabilidad exponencialmente pequeña de adivinar la contraseña , y por lo tanto no puede distinguir el par de programas de un par donde se reemplaza por algún programa que siempre genera "0". Sin embargo, si el atacante tiene acceso a cualquier implementación ofuscada de , entonces el atacante encontrará con una probabilidad de 1, mientras que el atacante siempre encontrará a menos que (lo que debería suceder con una probabilidad insignificante). Esto significa que el atacante siempre puede distinguir el par del par con acceso al código ofuscado, pero no el acceso a la caja negra. Dado que ningún ofuscador puede prevenir este ataque, Barak et al. concluyen que no existe ningún ofuscador de caja negra para pares de programas. [2] [3]
Para concluir el argumento, Barak et al. definen un tercer programa para implementar la funcionalidad de los dos anteriores:
Dado que se pueden recuperar implementaciones equivalentemente eficientes de una de conectando de forma fija el valor de , Barak et al. concluyen que tampoco se puede ofuscar, lo que concluye su argumento. [2]
En su artículo, Barak et al. también prueban lo siguiente (condicionado a suposiciones criptográficas apropiadas ): [2]
En su artículo original que explora la ofuscación de caja negra, Barak et al. definieron dos nociones más débiles de ofuscación criptográfica que no descartaron: ofuscación de indistinguibilidad y ofuscación de extractabilidad (a la que llamaron "ofuscación de entradas diferentes"). De manera informal, un ofuscador de indistinguibilidad debería convertir programas de entrada con la misma funcionalidad en programas de salida de tal manera que las salidas no puedan ser relacionadas eficientemente con las entradas por un atacante limitado, y un ofuscador de extractabilidad debería ser un ofuscador de tal manera que si el atacante eficiente pudiera relacionar las salidas con las entradas para dos programas cualesquiera, entonces el atacante también podría producir una entrada de tal manera que los dos programas que se están ofuscando produzcan salidas diferentes. (Tenga en cuenta que un ofuscador de extractabilidad es necesariamente un ofuscador de indistinguibilidad). [2] [4]
A partir de 2020 , se está investigando [update]una implementación candidata de ofuscación de indistinguibilidad . [5] En 2013, Boyle et al. exploraron varias implementaciones candidatas de ofuscación de extractabilidad. [4]