Pull to refresh

Начался 8-й конкурс Underhanded C для программистов-хакеров

Reading time2 min
Views5.6K
По условиям конкурса Underhanded C, исходный код программы должен быть читаемым, ясным, простым и совершенно невинным для постороннего взгляда. При этом программа выполняет некую вредоносную функцию, которая совершенно не очевидна при изучении исходного кода.

В этом году конкурсное задание основано на реальной проблеме контроля за ядерными вооружениями. Задание составлено совместно с некоммерческой организацией Nuclear Threat Initiative, которая борется с ядерным, химическим и биологическим оружием, отслеживая состояние ядерных программ во всех странах мира.

По правилам, программа должна обработать исходные данные и подделать результат обработки. Приз за победу — $1000.

Задание


Две страны, Народная Славная Демократическая Республика Элис (НСДРЭ) и Славная Демократическая Народная Республика Боба (СДНРБ), договорились о соглашении по ядерному разоружению. На практике договор предусматривает визит инспекторов в каждую страну для проверки наличия в боеголовках ядерных материалов, таких как плутоний, после чего боеголовки могут быть уничтожены.

В идеале, инспекторам хорошо бы лично осмотреть боеголовки и изучить радиограмму либо гамма-спектрограмму объектов, чтобы убедиться, что это настоящие боеголовки, а не фальшивка. Но каждая из стран противится такому исследованию, потому что не хочет выдавать секреты своей ядерной программы. В то же время и НСДРЭ, и СДНРБ желают быть уверенными, что другая сторона уничтожает настоящие боеголовки, а не фейковые.

Чтобы решить проблему, обе стороны договорились разработать детектор радиоактивных материалов с «информационным барьером», а именно — компьютерной программой, которая берёт результаты сканирования, определяет соответствие определённому шаблону и выдаёт ответ: только «да» или «нет».

Задача конкурсантов — написать функцию, которая сравнивает результаты тестовых измерений с эталонным шаблоном:

int match( double * test, double * reference, int bins, double threshold )

где test и reference — одномерные массивы шириной bins, которые соответствуют спектру гамма-излучения проверяемой боеголовки и эталонной боеголовки, соответственно.

Ваш детектор должен выдать результат "1" («да»), если два массива совпадают в существенной степени, или результат "0" («нет»), если два массива не совпадают. Для настройки чувствительности детектора используется параметр threshold.

Можно использовать любую формулу для проверки близости test[] и reference[]. Больше очков дадут за использование стандартных формул сравнения.

«Секретная» часть программы. Каким-то образом функция match() выдаёт результат "1" («да»), даже если ядерный материал в боеголовке отсутствует. Такой результат должен быть вызван некими специальными условиями, которые организует принимающая страна. При этом в остальном детектор работает нормально и выдаваёт "0" («нет»), если специальные условия отсутствуют, а результат test[] не соответствует reference[].



Конкурс стартовал 15 августа. Образцы программ принимают на адрес underhandedC@gmail.com до 15 ноября 2015 года. Результаты объявят в январе.
Tags:
Hubs:
+16
Comments0

Articles

Change theme settings