Podczas testowania bezpieczeństwa systemu lub modelu wielokrotnie pojawiło się następujące pytanie .
Motywacja: Wady bezpieczeństwa oprogramowania często nie wynikają z błędów spowodowanych prawidłowymi danymi wejściowymi, ale z błędów wynikających z nieprawidłowych danych wejściowych, które są wystarczająco zbliżone do prawidłowych danych wejściowych, aby przejść przez wiele prostych kontroli poprawności. Klasycznym przykładem jest oczywiście przepełnienie bufora, w którym dane wejściowe są uzasadnione, z wyjątkiem tego, że są zbyt duże. Kompilatory i inne narzędzia mogą pomóc rozwiązać te problemy, modyfikując układ stosu i sterty oraz innymi technikami zaciemniania. Alternatywą jest usunięcie problemów z samego kodu źródłowego. Jedna technika zwana fuzzingiem bombarduje program z wejściami zbliżonymi do oczekiwanych, ale w niektórych miejscach są nieuzasadnione (duże wartości dla liczb całkowitych lub ciągów znaków). Chciałbym zrozumieć rozmycie (jako przykład) z bardziej formalnej perspektywy.
Załóżmy, że przestrzeń prawidłowych danych wejściowych jest opisana przez ograniczenia . Niech M będzie zbiorem rozwiązań takich ograniczeń, a mianowicie M = { m ∈ M | m ⊨ Φ } , gdzie M jest przestrzenią możliwych danych wejściowych.
Szukam pracy opisującej następujące pojęcia:
Półcień z jest zbiorem M ' ⊆ M taki, że dla każdego m ∈ M ' m ⊭ cp i w pewnym sensie elementy M " są blisko elementów M . Można myśleć o półcieniu jako prawie rozwiązaniu . Oczywiście to pojęcie nie będzie unikalne.
„Penumbra” to słowo, które wybrałem, aby opisać tę koncepcję. Można to nazwać czymś innym.
Inspirację znalazłem w morfologii matematycznej , stąd moja metafora wizualna, ale oba światy są od siebie oddzielone. Czy jest tam jakaś przydatna praca? A może w świecie surowych zestawów ?
Czy ktoś może rzucić światło?