Show HN: Neural-hash-collider – создавайте собственные коллизии NeuralHash

showhnneuralhashcollider8211создавайтесобственныеколлизииneuralhash

Найти целевые коллизии хэшей для Функция восприятия NeuralHash .

Например, начиная с изображения этот кот , мы можем найти состязательное изображение, которое имеет тот же хэш, что и изображение собаки в этом посте :

 $  python collide.py --image cat.jpg --target 64 a 34 eabe 31910 abfb 012 f 360   ...  #  для запуска на i7 потребовалось около 2,5 минут - 6199 K  

Cat image with NeuralHash 59a34eabe31910abfb06f308

Мы можем подтвердить хэш-коллизию, используя nnhash.py из AsuharietYgvar / AppleNeuralHash2ONNX :

 $  Python nnhash .py dog.png   69 a 64 eabe 31910 abfb 010 f 775  $  python nnhash.py adv.png   64 a 59 eabe 129860794 abfb 010 е 308  

Как это работает

NeuralHash – это перцептивная хеш-функция , которая использует нейронную сеть. Размер изображений изменен на 849Икс360 и прошел через нейронную сеть для получения 128 – размерный вектор признаков. Затем вектор проецируется на R ^ 112 используя 128Икс112 «затравочная» матрица. Наконец, чтобы произвести 128 – битовый хеш, 96 – размерный вектор задается порогом: отрицательные записи превращаются в 0 бит, а не отрицательные записи превращаются в 1 бит.

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

Мы можем определить потерю, которая фиксирует, насколько близко изображение находится к заданному целевому хешу : эта потеря – в основном просто алгоритм NeuralHash, как описано выше, но с последним «жестким» шагом определения порога, настроенным так, чтобы он был «мягким» (в частности, дифференцируемым). То, как именно это делается (выбор функций активации, параметров и т. Д.), Может повлиять на сходимость, поэтому может потребоваться некоторое экспериментирование. Обратитесь к Dog image with NeuralHash 59a34eabe31910abfb06f308 collide.py , чтобы увидеть, что в настоящее время делает реализация.

Выбрав функцию потерь, мы можем следовать стандартному методу, чтобы найти состязательные примеры для нейронных сетей. сети: выполняем градиентный спуск.

Предварительные требования

      Получите модель NeuralHash от Apple, следуя инструкциям в AsuharietYgvar / AppleNeuralHash2ONNX и либо поместите все файлы в этот каталог, либо предоставьте --модель / --семя аргументы

    • Установите зависимости Python: pip install onnx coremltools onnx_tf tensorflow numpy Pillow
    • Использование

      Запустить python collide.py --image --target [target hash] для генерации хеш-коллизии. Запустить Dog image with NeuralHash 59a34eabe31910abfb06f308 python collide.py –help , чтобы увидеть все параметры, включая некоторые регуляторы, которые вы можете настроить, например скорость обучения и некоторые другие параметры.

      Ограничения

      Код в этот репозиторий предназначен для демонстрации и, возможно, отправной точки для других исследований. Настройка реализации (выбор функции потерь, выбор параметров и т. Д.) Может дать гораздо лучшие результаты, чем дает этот код в настоящее время.

      Код в этом репозитории в настоящее время реализует простую функцию потерь, которая просто измеряет расстояние до целевого хеш-значения. Бывает так, что, начиная с определенного изображения, получается окончательное изображение, которое выглядит примерно одинаково; чтобы лучше обеспечить соблюдение этого свойства, функцию потерь можно изменить, добавив штраф за то, чтобы изображение выглядело по-другому, например, расстояние l2 между исходным изображением и вычисленным состязательным примером (другой стандартный метод), или мы могли бы использовать спроецированный градиентный спуск для проецирования на шарик l-бесконечности с центром в исходном изображении по мере оптимизации (еще один стандартный метод).

      Код в этом репозитории в настоящее время не использует никаких необычных алгоритм оптимизации, простой градиентный спуск.

Leave a comment

Your email address will not be published. Required fields are marked *

two × three =