Niech będzie wektorem zmiennych boolowskich. Niech C , D będą dwoma obwodami logicznymi na x . Powiedz, że C jest podobny do D, jeśli:
jest wykładniczo mały, gdy x jest losowo narysowany równomiernie z { 0 , 1 } n (innymi słowy, mają prawie identyczną funkcjonalność); i,
różnią się nieznacznie odległością edycji wykresu (ich odległość edycji jest znacznie mniejsza niż rozmiar obwodu, powiedzmy O ( 1 ) lub jakaś niewielka stała), co oznacza, że prawie wszystkie bramki i przewody w C pasują do siebie odpowiednią bramę i drut w D , z kilkoma bramkami dodanymi / usuniętymi / zmienionymi.
Mój problem: otrzymałem obwód i chcę wiedzieć, czy istnieje obwód D, który jest podobny do C, ale nie identyczny z C (tj. Gdzie istnieje x taki, że C ( x ) ≠ D ( x ) ) .
Czy ktoś może zasugerować algorytm rozwiązania tego problemu?
Jeśli to pomoże, możemy ograniczyć uwagę do obwodów które są mniejsze niż dany obwód C (tzn. Chcemy wiedzieć, czy istnieje obwód D taki, że D jest mniejszy niż C , D jest podobny do C i istnieje x takie, że C ( x ) ≠ D ( x ) ).
Jeśli to pomoże, możesz dodatkowo założyć, że otrzymaliśmy znane dobre przypadki testowe takie, że C ( x i ) = y i dla wszystkich i , i możemy dodatkowo ograniczyć uwaga tylko na obwody D takie, że D ( x i ) = y i dla wszystkich i .
Wynika to z praktycznego zastosowania, więc jeśli nie możesz rozwiązać tego problemu, możesz rozwiązać dowolny wariant lub interesujący specjalny przypadek. Na przykład możesz dowolnie tworzyć dowolne parametry lub progi w dogodny dla siebie sposób. Możesz założyć, że obwody nie są zbyt duże (wielomianowe lub coś w tym rodzaju). Możesz zastąpić odległość edycji wykresu inną miarą zbliżonego dopasowania. Ponadto w praktyce solwery SAT są często zaskakująco skuteczne w obwodach strukturalnych, które powstają w praktyce, więc prawdopodobnie dobrze jest wywołać solver SAT jako podprogram / wyrocznię (przynajmniej, jeśli wywołuje się go na czymś w rodzaju pochodnej instancji SAT z obwodu takiego jak ).
Alternatywnie, bez żadnych algorytmów, byłbym również zainteresowany pytaniem o istnienie: w przypadku „przeciętnego” obwodu , jakie jest prawdopodobieństwo, że istnieje jakieś D, które spełnia wszystkie kryteria? (Mam nadzieję, że prawdopodobieństwo to jest bardzo niskie, ale nie mam pojęcia, czy tak jest w tym przypadku).
Praktycznym zastosowaniem jest sprawdzenie, czy obwód może zawierać złośliwe tylne drzwi / ukryte jajko wielkanocne. Hipoteza, jak coś takiego może zostać wstawione, wygląda następująco. Zaczynamy od „złotego” obwodu D , który oblicza pożądaną funkcjonalność i nie ma ukrytego tylnego wejścia. Następnie przeciwnik robi małe zmiany D wprowadzenie ukryty furtkę, uzyskując zmodyfikowany obwód C . Celem backdoora jest zmiana funkcji obliczonego przez D w jakiś sposób. Jeśli Pr [ C ( x ) ≠ D ( x ) ]nie jest zbyt mały, zmiana może być prawdopodobnie wykryta przez losowe testy, więc przeciwnik prawdopodobnie będzie próbował utrzymać bardzo małym poziomie. Podobnie, jeśli C różni się od D w zbyt wielu miejscach, można to zauważyć przez losową kontrolę obwodu, więc przeciwnik prawdopodobnie spróbuje zminimalizować liczbę zmian. (I nie może być zestaw testów z x i , y í par, które reprezentują wystąpienia pożądanej funkcjonalności, więc wiemy, że bez względu na „złoty” Obieg D jest, że spełnia D ( dla wszystkich i .) Ostatecznie otrzymujemy obwód C (ale nie „złoty” obwód D ) i chcemy wiedzieć, czy C może być zmodyfikowaną wersją jakiegoś D , gdzie modyfikacja była wprowadzone w celu wprowadzenia tego rodzaju ukrytego backdoora.