Comments 60
Я так и не понял как «из коробки» начать работать с опенцв в питоне… :-( Как?
почти
тока brew неизвестно что такое. Гугл ищет софт для пивоварения. А вот это меня вообще сделало бояться:
«To cut this short, here is what you need to get that Python running: brew install python»

Кто такой брю?
Брю это пакетный менеджер для мака. Вам нужно наверно apt-get install opencv
А…
о… Homebrew is the easiest and most flexible way to install the UNIX tools Apple didn't include with OS X.
На Win просто устанавливается пакет путём загрузки необходимого исполняемого файла. Собственно, ниже ссылочки дали.
Во-во, самый лучший вариант. Да помимо OpenCV там ещё куча разных библиотек есть.
Мне кажется что этому девайсу надо сделать стенки чтобы не было бликов на экране от окон и пр. + добавить подсветку (например светодиодом запитанным от той-же ардуины) во время съёмки…
А так — очень даже интересно… правда нагляднее было бы всё-же с кодом в статье, а не по ссылкам :)
Стенки делать нет смысла, т.к. бликов не бывает — камера строго перпендикулярна ЖК-экрану, поэтому бликовать там нечему.
А вот тень от краёв «окошка» экрана иногда мешает распознавать картинку — тут вы правы, нужен светодиод. Я даже экспериментировал с подключенным через второй ШИМ (для управления яркостью) светодиодом, но вмечатляющих результатов не добился — если направлять светодиод строго в экран, он очень сильно бликует, если же подсвечивать экран сбоку, появляется та же тень. Нужен рассеиватель.

В общем, надо думать, экспериментировать, а мне, если честно, уже лень ;)
два диода с двух сторон и белая бумага в качестве рассеивателся.
Если б Вам разрешили разобрать токен, то можно б было обойтись одной ардуиной — узнавать цифры с помощью анализа напряжений на выводах ЖК дисплея.
Но вот мощности ардуины не хватит представиться USB-клавиатурой (чтоб ввести пароль в домен)
Хотя Ваша конструкция напоминает считыватель TouchMemory с привязанной к нему скотчем таблеткой — профанация всей идеи безопасности…
Никто не мешает забирать токен с собой, покидая рабочее место, что, думается мне, и было специально предусмотрено конструкцией.
Ну разобрать токен, не так уж и просто, как кажется на первый взгляд, об этом позаботились его разработчики.
Разобрать токен никто не даст.
Да и «анализировать напряжение на выводах ЖК дисплея» сильно сложнее моей поделки, если честно.

Ардуина тут вообще, фактически, для красоты, как на известной картинке. Если бы была нужна USB-клавиатура, никто не помешал бы мне взять нормальную AVR'ку (или даже ARM) и сотворить всё, что душе угодно.

Кто куда привязан? Какая профанация? Ничего не понял. Вот, на всякий случай, ещё одна фотка, — возможно, вы не так всё поняли.

а зачем распознавать? у нас для такого же просто фотки с вебкамеры на http-сервер выкладываются
Ну чтобы надо зайти на сервер — нажал хоткей, дождался распознавания, нажал «вставить» в поле пароля и всё.

А у вас зачем фотки на http-сервер выкладываются? о_О
Ууу, это долго. Так можно и взять токен в руку, посмотреть пароль, ввести. А мне так лень )
спросонья не понял шутки =)

а как же безопасность, все дела? теряется весь смысл токена
для минимизации телодвижений, надо ещё после распознания автоматически вставлять текст в активное поле ввода
Пожалуй, пора делать токен в виде каптчи — смазанной и прыгающими цифрами
Это только ускорит популярность таких кустарных приборов.
Капчи гораздо проще распознавать алгоритмом, чем глазом.
Скажите, пожалуйста, а как вы освоили OpenCV под Python?

Я пишу курсовую по обработке изображений. Но OpenCV я как-то не потянул — не нашел толковых мануалов. В итоге ограничился достаточно простым но банальным PIL :(
У OpenCV не самая лучшая, но достаточно внятная документация с хорошим поиском (пример запроса по уловию «Canny»).

В исходниках OpenCV можно найти замечательные примеры (директория «samples») — на питоне в том числе.
Я просто грепал название нужной мне функции в этой директории и находил примеры использования.

Ну и google (который, зачастую, выводил меня на stack overflow).
Веб камеры довольно шумные, особенно если освещённость не очень. Качество картинки можно улучшить интегрированием — ну то есть захватить не один кадр, а несколько, сложить их, а потом посчитать среднее. Обычно берут количество кадров, равное степени двойки — скажем 8 или 16 и т.д. — тогда деление можно заменить сдвигом. Соотношение сигнал/шум несколько улучшится. Но если и так работает, можно и не заморачиваться.
тогда проще поставить 1-2 светодиода для подсветки, качество вырастет намного!
Кстати легкое смещение токена от оси камеры тоже может повысить контраст, ведь у таких жк дисплеев есть углы где контраст максимален, а в противоположных углах наоборот падает.
Андрей, я думал про интегрирование, но решил не заморачиваться особо, и решил задачу «в лоб».
Путей оптимизации и улучшения алгоритма масса, — когда мне будет скучно, я, возможно, вернусь к этой задаче.
Ну если вы попробуете объяснить мне, в каком месте здесь нарушена безопасность, — я обещаю, что привлеку его к проблеме.
Замечательная статья и замечательный способ повышения удобства. Но давайте я попробую на пальцах объяснить, в каком месте нарушается безопасность.

Основная идея автономных OTP-токенов в том, что физически разделяются «каналы» генерации и доставки секрета в момент аутентификации. То есть у вас для генерации секрета используется токен, а для его доставки — компьютер и сеть.
В этой связке недоверенными являются компьютер и сеть передачи данных. Именно поэтому им не позволено генерировать или хранить секрет. Это делает автономное устройство, на которое недоверенный компьютер или недоверенный субъект в сети никак (теоретически) не может повлиять, потому что для генерации секрета нужно физически нажать кнопку и ручками ввести одноразовый пароль. А у компьютера или субъекта в сети ручек нету.

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

Но в оправдание можно сказать что
— это не массовый продукт, уязвимости в вашем ПО и принципах работы искать никто не будет
— токен всегда можно забрать с собой (это нужно делать обязательно, когда Вас нет)
— это удобно :)

Но Ваш Security Manager, если ему не зря платят зарплату, должен Вас очень сильно отругать за такое изобретение.
Я вмешаюсь в разговор и блесну отсутствием каких-либо знаний в области ИБ, извините. Так вот, с чего вдруг в данном случае компьютер стал недоверенным? Если его как-то скомпрометировали, то не проще ли поставить кейлоггер/сниффер, либо воспользоваться поднятой ssh-сессией, чем пытаться найти уязвимость в ПО распознавалки?
Эта схема работает только если есть токен в устройстве. Процесс генерации сопровождается шумом и визуально виден, т.е. «тихой сапой» генерировать не получится. Уходя, токен просто забирается.
Спасибо за развёрнутый ответ и попытку объяснить суть проблемы.

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

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

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

Идеологически, недоверенному компьютеру (вирус, вредоносное ПО, шпионский софт и пр.) ничего не мешает без Вас послать команду на генерацию OTP и получить его значение. Вот и нарушение безопасности.

Об оговорках («кому это надо?», «можно унести токен с собой», «процесс генерации видно» и пр.) я писАл выше. Но мы сейчас руссуждаем о принципах :)
Да, теперь я понял о чём речь.
Согласен со всеми приведёнными доводами.
К счастью, есть тысячи более простых (но, тем не менее, практически — невозможных) способов получить доступ к системе и я могу спать спокойно.
Нужно просто сделать аппаратную кнопку активации процесса вместо управления с компьютера.
как вариант, ранее человек самостоятельно управлял событием «генерация токена».

Сейчас же можно удалённо запустить данную процедуру. Тем самым исключая контроль человека над этим независимым участком процесса аутентификации и авторизации.

Томас Эдисон в свое время, работая оператором связи на ЖД, вынужден был каждые 30 минут отстукивать азбукой Морзе «я не сплю», чтобы показывать, что готов принимать сообщение. Ясное дело, ночью ему хотелось спать и он придумал устройство, которое отстукивало нужный код, если провернуть колесо с рукояткой. Затем он договорился с ночным сторожем, чтобы тот каждые 30 минут подходил и поворачивал ручку. :-)
И можно было долго спать. Правда, он спалился на том, что ночью нужно было принять сообщение о внеочередном важном поезде и отправить ответ о готовности, вместо этого его автомат послал «я не сплю», тут все и поняли, что происходит. Выгнать его выгнали, но это не помешало ему стать известнейшим и уважаемым изобретателем.

Владимир, браво!
Мне нравится. Конструкция напомнило средневековое орудие пыток.
А можно было бы сделать токен-генератор на андроиде и передавать в компьютер по bluetooth…
Only those users with full accounts are able to leave comments. Log in, please.