Различайте QRCode и Скриншот / изображение QRCode с помощью QRCode Reader - PullRequest
2 голосов
/ 06 марта 2020

Я использую библиотеку QRCodeReaderView для сканирования QRCode. Все работает идеально, как чтение QRCode и получение значений.

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

Есть ли вероятность, что при сканировании с помощью QRCode Reader / Scanner я обнаружу, что отображаемый QRCode не является истинным QRCode, а изображением QRCode, полученным с какого-либо другого устройства? .

Как я могу различать?

PS : Как я описал выше, все работает отлично, поэтому я не делюсь никаким кодом, и здесь мне нужно то, что если да, то как я могу отличить gui sh ..

PS Мне нужен какой-то эксперт по этому вопросу, пожалуйста ... Я только что натолкнулся на проект, в котором был сценарий обнаружения лиц, система смогла различить guish между реальным лицом человека и изображением этого человека .. Они были победителями в конкурсе .. enter image description here

Ответы [ 5 ]

2 голосов
/ 09 марта 2020

Существует разница в различении лица человека и фотографии лица человека. И QR-код по сравнению со скриншотом указанного QR-кода. Черт, из-за чего-то известного как алгоритм Рида-Соломона , QR-код все еще можно сканировать, если он частично скрыт (до некоторой степени)

Если вас беспокоит несколько случаев, единственное Вы можете сделать, это иметь уникальный QR-код для каждого человека с уникальным идентификатором, назначенным им. Невозможно отличить guish между QR-кодом и фотографией. Вот только как это

1 голос
/ 15 марта 2020

TLDR; Возможен обходной путь, но вам придется расширить класс QRCodeReaderView и использовать некоторую обработку изображений.

Хотя вы не можете напрямую различить guish в самой библиотеке считывателя QRCode, вы можете использовать некоторые скрытые пиксели, которые видны только при обработке изображений. Именно этот подход был использован в функциональности приложения Shazam для «распознавания изображений». Для реализации у вас будет QR-код, который будет виден устройству только при применении «фильтра». По сути, это картинка, скрытая внутри картинки.

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

Это защитит от фотографий, потому что большинство приложений камеры не распознают «скрытые» пиксели.

1 голос
/ 15 марта 2020

IMO, я чувствую, что использование базовой обработки изображений c было бы хорошим способом go. В случае, когда на скриншоте (изображение с высоким разрешением, непосредственно с устройства), обработка изображения сможет увидеть, что количество шума на изображении практически не уменьшается. Тем не менее, с изображением дисплея, особенно с более низким разрешением, при съемке изображения камера захватывает все RGB-огни с экрана, делая белый цвет похожим на смесь всех вышеупомянутых цветов.

TL; DR. Мое предложение будет заключаться в том, что из-за того, что снимки, сделанные на дисплее, могут сделать изображение довольно шумным - использование базового инструмента обработки изображений c будет различать скриншот и изображение дисплей.

Надеюсь, это помогло!

1 голос
/ 13 марта 2020

То, что сказал @ItsMeNaira, совершенно правильно, нет никакого способа узнать, является ли QR-код реальной сделкой или картиной, но, на мой взгляд, есть некоторые вещи, которые вы все еще можете сделать. некоторые более простые, чем другие.

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

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

Чтобы лучше представить решение, было бы полезно лучше понять ваше приложение. Для чего нужны коды? почему пользователь совершает мошенничество? в каких настройках он использует приложение?

1 голос
/ 09 марта 2020

Возможно, вам следует переосмыслить свой подход.

Ваше заявление Я сделал основные задания, чтобы избежать таких вещей, как захват или снимок экрана QRCode уже подразумевает, что система, которую вы связываете для создания, небезопасна .

Если вы пытаетесь создать что-то безопасное, вам следует использовать подход, использующий систему, созданную с нуля, с учетом безопасности, а НЕ использующую (небезопасную) систему и пытающуюся исправить ее ненадежность. это (псевдо) безопасно. Попытка сделать небезопасную систему безопасной за счет защиты некоторых крайних случаев никогда не защитит вашу систему. Всегда найдутся люди, которые найдут другой крайний случай для использования вашей системы.

Вот несколько примеров того, как ваша система может быть использована, даже если вы попытаетесь обезопасить ее, узнав, настоящий ли это QR-код или его изображение:

  • Воспользуйтесь внешним приложением (например, устройством записи Az-screen), запишите видео с экрана, а затем извлеките изображение с QR-кодом из видео. Отображение на другом телефоне всегда будет выглядеть оригинально.
  • Сфотографируйте QR-код, теперь вы можете создать QR-код с нуля, установив каждый черно-белый пиксель вручную в программном обеспечении для создания изображений или аналогичный. Отображение этого на другом телефоне снова будет выглядеть как настоящий QR-код.

Как вы можете видеть, есть несколько случаев, когда ваша система может быть использована, и особенно вы не можете исправить последнюю точку.

Таким образом, даже если вам удастся определить, указывает ли камера на реальный QR-код или его фотографию (что также трудно сделать, см. Ответ @ItsMeNaira), ваша система не будет защищена, поскольку вы не можете обезопасить небезопасную систему, исправив ее крайние случаи.

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

...