하자 부울 변수 벡터 될. C , D 를 x의 두 부울 회로라고 합시다 . 다음 과 같은 경우 C 가 D 와 유사 하다고 가정 하십시오.
는 그래프 편집 거리가 작은 양만큼 다릅니다 (편집 거리는 회로의 크기보다 훨씬 작습니다 예 : 또는 작은 상수)). 의 거의 모든 게이트와 와이어가 일치 한다는 것을 의미합니다. 몇 개의 게이트 만 추가 / 삭제 / 변경된 의 해당 게이트 및 와이어 .
내 문제 : 나는 회로 부여하고 , 나는 회로가 존재하는지 여부를 알고 싶어 와 유사하다 와 동일하지만 (즉, 거기에 존재하는 같은 것을 ).
누구 든지이 문제를 해결하는 알고리즘을 제안 할 수 있습니까?
도움이된다면, 우리는 회로에 관심을 제한 할 수 있습니다 주어진 회로보다 작은 즉 (우리는 회로가 존재하는지 여부를 알고 싶어 있도록 보다 작은 , 유사하다 , 그리고 존재 되도록 ).
도움이된다면, 당신은 또한 우리가 알려진 좋은 테스트 케이스 주어진 가정 할 수있다 같은 그 위한 모든 전용 회로에, 우리는 더 관심을 제한 할 수있는 되도록 모든 .
이것은 실제 응용 프로그램에서 발생하므로이 문제를 해결할 수없는 경우 변형 또는 흥미로운 특수 사례를 자유롭게 해결하십시오. 예를 들어, 편리한 방법으로 매개 변수 또는 임계 값을 자유롭게 인스턴스화하십시오. 회로가 너무 크지 않다고 가정 할 수 있습니다 (다항식 크기 등). 그래프 편집 거리를 구현의 거의 일치하는 다른 척도로 대체하십시오. 또한 실제로 SAT 솔버는 실제로 발생하는 구조화 된 회로에서 놀랍게도 효과적이므로 SAT 솔버를 서브 루틴 / 오라클로 호출하는 것이 좋습니다 (적어도 SAT 인스턴스와 같은 방식으로 호출하는 경우). 와 같은 회로에서 ).
대안 적으로, 어떤 알고리즘이 없다면, 존재 질문에 관심이있을 것이다 : "평균"회로 에 대해, 모든 기준을 만족 하는 일부 가 존재할 확률은 얼마인가? (이 확률이 매우 낮기를 희망하지만 그럴 경우 실마리가 없습니다.)
실제 적용은 회로 에 악성 백도어 / 숨겨진 이스터 에그가 포함되어 있는지 테스트하는 것 입니다. 그러한 것들이 어떻게 삽입 될 수 있는지에 대한 가설은 다음과 같습니다. 원하는 기능을 계산하고 숨겨진 백도어가없는 "골든"회로 시작 합니다. 그런 다음 적은 로 약간 변경 하여 숨겨진 백도어를 도입하여 수정 된 회로 얻습니다 . 백도어의 목적은 어떤 방식 으로 에 의해 계산 된 함수를 변경하는 것입니다. 만약 공격자는 아마 유지하려고 있도록, 변경이 그럴듯하게, 무작위 시험을 통해 너무 작 검출 할 수 있지 않습니다매우 작은. 마찬가지로, 가 너무 많은 곳 에서 와 다른 경우 회로의 임의 검사에 의해 발견 될 수 있으므로 공격자는 변경 횟수를 최소화하려고 시도 할 것입니다. 또한 원하는 기능의 인스턴스를 나타내는 쌍 의 테스트 스위트가있을 수 있으므로 "골든"회로 가 무엇이든 만족 한다는 것을 알고 있습니다. 모든 .) 결국, 우리는 회로 주어진 아니라 "황금"회로 ( ), 우리는 여부를 알고 싶은 약간의 수정 된 버전 수 있습니다이러한 종류의 숨겨진 백도어를 도입하도록 수정되었습니다.