Sea un vector de variables booleanas. Sea dos circuitos booleanos en . Digamos que es similar a si:
es exponencialmente pequeño, cuando se dibuja uniformemente al azar desde (en otras palabras, tienen una funcionalidad casi idéntica); y,
difieren en la distancia de edición del gráfico en una pequeña cantidad (su distancia de edición es mucho menor que el tamaño del circuito, por ejemplo, o alguna pequeña constante), lo que significa que casi todas las puertas y cables de coinciden una puerta correspondiente y un cable en , con solo unas pocas puertas agregadas / eliminadas / modificadas.
Mi problema: me dan un circuito , y quiero saber si existe un circuito que sea similar a pero no idéntico a (es decir, donde existe tal que )
¿Alguien puede sugerir un algoritmo para resolver este problema?
Si ayuda, podemos restringir la atención a los circuitos que son más pequeños que el circuito C dado (es decir, queremos saber si existe un circuito tal que es más pequeño que , es similar a y existe tal que ).
Si ayuda, también puede suponer que se nos dan casos de prueba bien conocidos modo que para todo , y podemos restringir aún más la atención solo a los circuitos modo que para todo .
Esto surge de una aplicación práctica, por lo que si no puede resolver este problema, no dude en resolver cualquier variante o caso especial interesante. Por ejemplo, siéntase libre de instanciar cualquiera de los parámetros o umbrales de la manera que le resulte conveniente. Puede suponer que los circuitos no son demasiado grandes (tamaño polinómico, o algo así). Siéntase libre de reemplazar la distancia de edición del gráfico por alguna otra medida de casi coincidencia de implementación. Además, en la práctica, los solucionadores de SAT a menudo son sorprendentemente efectivos en los circuitos estructurados que surgen en la práctica, por lo que probablemente esté bien invocar un solucionador de SAT como una subrutina / oráculo (al menos, si lo invoca en algo como una instancia de SAT derivada de un circuito como ).
Alternativamente, al carecer de algoritmos, también me interesaría la pregunta de existencia: para un circuito "promedio" , ¿cuál es la probabilidad de que exista algo de que cumpla con todos los criterios? (Espero que esta probabilidad sea muy baja, pero no tengo idea si ese es el caso).
La aplicación práctica es probar si un circuito puede contener una puerta trasera maliciosa / huevo de Pascua oculto. La hipótesis de cómo podría insertarse algo así es así. Comenzamos con un circuito "dorado" , que calcula la funcionalidad deseada y no tiene una puerta trasera oculta. Entonces, el adversario hace un pequeño cambio en para introducir la puerta trasera oculta, la obtención de un circuito modificado . El propósito de la puerta trasera es cambiar la función calculada por de alguna manera. Si no es demasiado pequeño, el cambio puede detectarse plausiblemente mediante pruebas aleatorias, por lo que un adversario probablemente tratará de mantenermuy pequeña. Del mismo modo, si difiere de en demasiados lugares, esto podría notarse mediante una inspección aleatoria del circuito, por lo que un adversario probablemente tratará de minimizar el número de cambios. (Y, puede haber un conjunto de pruebas de pares que representan instancias de la funcionalidad deseada, por lo que sabemos que sea cual sea el circuito "dorado" , satisface para todo .) En última instancia, se nos da el circuito (pero no el circuito "dorado" ), y queremos saber si podría ser una versión modificada de alguna, donde se realizó la modificación para introducir una puerta trasera oculta de este tipo.