#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
int getFingerprintIDez();
int GreenLed = 4;
int RedLed = 5;
int WhiteLed = 6;
int YellowLed = 7;
int BlueLed = 8;
// pin #2 is IN from sensor (YELLOW wire)
// pin #3 is OUT from arduino (WHITE wire)
SoftwareSerial mySerial(2, 3); //activates serial communication on pin 2 & 3
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup()
{
pinMode(GreenLed, OUTPUT);
pinMode(RedLed, OUTPUT);
pinMode(WhiteLed, OUTPUT);
pinMode(YellowLed, OUTPUT);
pinMode(BlueLed, OUTPUT);
digitalWrite(RedLed, HIGH);
Serial.begin(9600);
finger.begin(57600);
delay(5);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
}
void loop()
{
getFingerprintID();
delay(100);
}
uint8_t getFingerprintID()
{
uint8_t p = finger.getImage();
switch (p)
{
case FINGERPRINT_OK:
break;
case FINGERPRINT_NOFINGER:
return p;
case FINGERPRINT_PACKETRECIEVEERR:
return p;
case FINGERPRINT_IMAGEFAIL:
return p;
default:
return p;
}
p = finger.image2Tz();
switch (p)
{
case FINGERPRINT_OK:
break;
case FINGERPRINT_IMAGEMESS:
return p;
case FINGERPRINT_PACKETRECIEVEERR:
return p;
case FINGERPRINT_FEATUREFAIL:
return p;
case FINGERPRINT_INVALIDIMAGE:
return p;
default:
return p;
}
// match finger with stored ID#
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK)
{
digitalWrite(GreenLed, HIGH); //turn on green LED if finger ID is match
digitalWrite(RedLed, LOW); //red LED is OFF
Serial.print("Found ID # "); Serial.println(finger.fingerID);
ShowID(finger.fingerID);
}
else if (p == FINGERPRINT_NOTFOUND)
{
digitalWrite(GreenLed, LOW); //turn off green LED if finger do not match
digitalWrite(RedLed, HIGH); //red LED is ON
Serial.println("Finger not registered");
}
else
{
return p;
}
}
// returns ID#
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
//return finger.fingerID);
}
void ShowID(char data)
{
switch (data)
{
case 1: digitalWrite(BlueLed, HIGH); break;
case 2: digitalWrite(YellowLed, HIGH); break;
case 3: digitalWrite(WhiteLed, HIGH); break;
case 4: digitalWrite(BlueLed, LOW); digitalWrite(YellowLed, LOW); digitalWrite(WhiteLed, LOW); break;
}
}
digitalWrite(GreenLed, LOW); //turn off green LED and Relay if finger do not match
digitalWrite(RedLed, HIGH); //red LED is ON
Serial.println("Finger not registered");
digitalWrite(GreenLed, HIGH); //turn on green LED and Relay if finger ID is match
digitalWrite(RedLed, LOW); //red LED is OFF
Serial.print("Found ID # "); Serial.println(finger.fingerID);
ShowID(finger.fingerID);
void ShowID(char data)
{
switch (data)
{
case 1: digitalWrite(BlueLed, HIGH); break;
case 2: digitalWrite(YellowLed, HIGH); break;
case 3: digitalWrite(WhiteLed, HIGH); break;
case 4: digitalWrite(BlueLed, LOW); digitalWrite(YellowLed, LOW); digitalWrite(WhiteLed, LOW); break;
}
}
+21 |
1827
36
|
+34 |
2389
132
|
???
Что я хочу сказать — как то быстро все оборвалось. Да и описание хромает — сколько пальцев может хранить, как считывает у прочих членов семьи, можно ли удаленно хранить отпечатки…
Запоминает максимум 162 отпечатка. Картинку можно получить через софтину под windows.
главное — заставить корректно работать китайскую фиговину, а применение то уже проще простого))
«я тут купил одну штуку интересную, скачал к ней программу, она все сделала за меня, только пальцы надо было приложить, ну да, все работает, убрал на полку...» — это щас описание очень многих «диайуайщиков».
Ни в вопросе разобраться, ни в софте, ни в железе. Купил модуль, скачал готовые программные библиотеки к нему — и вот ужо поделка без смысла и упрека на полке.
Главное, чтобы так скайнет не получился и не захавал потом всех прямо с той полки.
Иногда смотришь на казалось бы нормальный софт, продаваемый за офигенные деньги, но там с безопасностью просто мрак.
не скопировать, если установлены ключи не по умолчаниюВ смысле скопировать можно, но если не привязывать всю логику к UID, там еще есть куча блоков — то все до одного места
Другое дело что можно действительно нормальным считывателем считать нужные сектора и блоки при помощи ключей, включая самый первый блок, где хранятся uid и atqa с sak. Но с другой стороны возникает вопрос- а зачем в качестве id использовать именно uid, а не что-то пользовательское, зашифрованное в определенном секторе?
Вот для чего uid вполне удобен, это для так называемой диверсификации ключей- когда для каждой метки по определенному алгоритму, ключу и uid метки формируются индивидуальные ключи от секторов метки.
А то так дойти можно до критики пос-терминалов, которые на борту имеют ключи, но как только их тамперишь — они их стирают :)
Казалось бы SQL класная система, есть куча настроек доступа и так далее, но все равно до сей поры есть системы которые стоят дохрена денег, но требуют sa для установки и работы, я был в шоке.
mysku.club/blog/aliexpress/87084.html#comment3889174
Но иногда бывает просто пофигизм и полное нежелание даже пытаться думать о том что есть такая штука как безопастность.
Есть системы мониторинга безопасности сети предприятия, устанавливающиеся на клиентов и на свой сервер с правами sa и админа хоста.
Объяснить что-либо сотрудникам безопасности нереально
— Парни, у нас дыра в безопасности
— Ну, хоть что-то у нас в безопасности
…
habr.com/ru/company/milandr/blog/518138/
А по считывателю из статьи надо читать даташит на мк в данном считывателе, что у него с защитами- я увидел что мк умеет в шифрование, но дальше лень читать даташит. Если ключи для того же AES шифрования можно загрузить в мк, а обратно уже никак не считать, то можно сделать обмен данными с нормальной защитой.
Вон HID кардридеры, у них wiegand старый на выходе, но есть оптопара, и если ты этот ридер открутишь от монтажной пластины в желании подслушать или послать wiegand — он подымет тампер и никто даже не успеет добраться до wiegand-а незамеченным. При этом сам интерфейс идет с времен ридеров магнитной полосы, и никто не спешит ничего менять или криптовать, ибо не нужно.
Хотя понятно, что подделать/скопировать HID карту ни у кого пока не получилось.
А даже если бы и получилось подделать(например украсть) карту, то такое решается ридером со вводом пин-кода.
Обозреваемый сканер является полуфабрикатом, который можно оформить в безопасную систему при желании.
Я же при желании биометрии просто беру ридеры от suprema которые и палец и карту умеют и моноблок с PoE.
Я вот изучал как производители борются с уязвимостями mifare classic различными методами (хотя уже все-равно пора переходить на тот же mifare plus)), и скажу что довольно много чего интересного придумали.
Hid, а какой hid?:) Который prox, который ничем не лучше em-marin или hid iclass?:)) Iclass я так понял поставляется по принципу прошитый считыватель и прошитые ключи, в отличии от семейства mifare, где сам без производителя/ авторизованного интегратора можешь записать любые ключи в карты и в считыватели.
Хотя я больше офигевал от решений с ble ключами- половина производителей предлагают генерацию ключей на их сервере, а другая половина- генерировать либо по IMSI либо по IMEI. Имхо, и то, и другое дичь.
А вообще, любая система связанная с безопасностью должна быть сделана по принципу разумной необходимости и достаточности, иначе это будет калитка в чистом поле)))
Одним словом можно, но только если умеете программить и разбираетесь в электронике.
Есть сканеры в обычные клавиатуры встроенным. Там тоже видел вариант когда он как бы видео на внутреннем хабе и когда прямо на контроллер клавиатуры.
Сильно подробно не интересовался, но когда разберёшь иногда понятно по какому интерфейсу скорее всего работает.
Иногда там за usb отвечет отдельный конвертор, так что можно просто взять сигналы до него и вот голые данные.
У меня на бывшей работе стоит на двери в распечатанном на 3д принтере корпусе (датчик поставил вертикально).
Подключается к blue pill, к которому также подключены кнопки открывания, записи отпечатка и очистки базы. Контроллер управляет электромагнитным замком двери через транзистор, зажигает два светодиода возле датчика-зеленый и красный, для солидности конечно.
Работает 24/7 года 4, срабатывает четко, в памяти отпечатков 20, время открытия в районе секунды.
За все время только один раз приходилось экстренно сворачивать танки на компе-произошло срабатывание на отпечаток не в базе.
Мне в целом датчик понравился.
Сейчас бы я взялся делать самопальный замок на этом датчике только в 2 случаях:
1) В учебных целях
2) Если при попытке открыть дверь есть необходимость бить током шаловливые пальчики, отсутствующие в базе.
А так — на алиэкспресс готовая ручка со встроенным датчиком стоит меньше 40$, то на то и выйдет по материалам.
Interfaz de comunicación: USB/UART
но интересуют детали — можно ли отпечатки вытащить с устройства, если его украсть, интересно? наверняка можно, но насколько сложно это будет?
и второй — питание. какие потребление в режиме ожидания, считывания?
развернуто: отпечаток «как картинка» хранился только в первых, совсем древних, фингерпринтах (или в отдельном контроллере). Сейчас хранится некий «хэш» ключевых параметров (точек, линий, глубины и т.п.) причем алгоритм определения «что считать ключевым» не раскрывается и может быть очень разным. Также как и не существует общепринятого стандарта кодирования.
Т.е. «нужно»: считать сырое содержимое памяти (та еще задача), восстановить параметры из «хэша» (еще сложнее) и преобразовать их в «картинку». И даже после этого (через черт его знает сколько лет, а то и веков) результатом будут огрызки отпечатка, относительно пригодные только для подсовывания точно такому же датчику.
(Если не заморачиваться с другой арлуиной или ещё чем-то, что может передать номер отпечатка)
Отпечатки хранятся только в этой игрушке. Игрушка не привязана никакой авторизацией к ардуине и основное устройство понятия не имеет, какой именно датчик к нему подключен.
Т.е., достаточно выломать этот модуль, который даже креплений не имеет, подключить точно такой же с заранее вбитыми в него своими отпечатками и всё — доступ обеспечен?
Или я что-то пропустил?
Это — для самоделок, для защиты «от честных людей». Скорее даже не защиты, а идентификации, типа фиксации кто во сколько пришёл.
использование только биометрии в критических точках входа — плохая идея. с обеих сторон — и с точки зрения защищенности от взлома (хотя здесь есть где разгуляться и, в принципе, можно добиться неплохих результатов), и с точки зрения надежности определения валидных входов (например: если шифрация «очень важных данных» завязана только на палец, то что случиться если этот палец получит серьезную травму?).
p. s. как может выжрать чтото датчик, который 99% времени спит?
void loop()
{
getFingerprintID();
delay(100);
}
Это же по 10 считываний в секунду до скончания веков?
Не… ну если так тоды ой)
Цены бы ему не было!
Выбор напитка — обычной кнопкой, а «пуск» — с авторизацией.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.