Emulacja karty opartej na serwerze ze stałym identyfikatorem karty

[[1]}Android 4.4 wprowadził emulację kart opartych na HCE (Host-based Card Emulation). Jak wiadomo, wszystkie karty NFC mają stały identyfikator karty (NfcAdapter.EXTRA_ID).

Mój dostęp do drzwi biura zwykle wykrywa IDENTYFIKATOR karty NFC do autoryzacji. Po flashowaniu telefonu do KitKat, próbowałem zeskanować telefon za pomocą czytnika dostępu. Ale za każdym razem, gdy ekran się wyłącza i włącza, dostaję inny identyfikator karty.

Próbowałem utrzymać włączony ekran telefonu i zarejestrować emulowany IDENTYFIKATOR karty w systemie dostępu do drzwi. Informatyka / align = "left" / Ale to nie zadziała po tym, jak ekran się wyłączy i ponownie się włączy.

Odkąd KitKat wprowadził tryb HCE, próbuję emulować moją kartę dostępu do drzwi za pomocą telefonu.

Jakieś pomysły na poprawienie identyfikatora karty emulacji telefonu?

Author: Michael Roland, 2013-11-04

3 answers

Jest to (przynajmniej z oficjalnym API) niemożliwe:

W pierwszej czÄ ™ Ĺ "ci wymiany UID urzÄ ... dzenia HCE przedstawi swoje UID; urzÄ ... dzenia HCE naleĹźy zakĹ' adać, Ĺźe majÄ ... losowy UID. Oznacza to, że przy każdym dotknięciu wyświetlany czytelnikowi identyfikator użytkownika będzie losowo generowanym identyfikatorem. Z tego powodu czytniki NFC nie powinny zależeć od UID urządzeń HCE jako formy uwierzytelniania lub identyfikacja.

(http://developer.android.com/guide/topics/connectivity/nfc/hce.html#ProtocolParams)

 14
Author: charno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 12:14:23

Według jednego z programistów Google odpowiedzialnych za HCE:

Przepraszam, zdaję sobie sprawę, że wiele osób tego chciało, ale w oficjalnej wersji nie jest to możliwe. (Można oczywiście zrobić to z jakiegoś hackingu AOSP). Powodem jest to, że HCE jest zaprojektowany wokół pracy w tle. Jeśli pozwolimy aplikacjom ustawić UID, każda aplikacja będzie chciała ustawić swój własny UID i nie ma sposobu na rozwiązanie konfliktu. Mamy nadzieję, że dzięki HCE Infrastruktura NFC przejdzie na wyższy poziom ze stosu protokołów do uwierzytelniania zamiast polegać na UID (który i tak jest łatwo sklonowany).

 11
Author: tbellenger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-20 18:23:08

Przynajmniej Kontroler Broadcom NFC (używany np. w nexus 5) obsługuje ustawianie dowolnych wartości dla identyfikatora antykolizyjnego (UID), bajtu ATQA i SAK. Nie ma jednak API, które by je zmieniało, więc jedynym sposobem byłoby zmodyfikowanie biblioteki libnfc-NCI.

Odpowiedni kod dla NFC - A znajduje się w pliku nfa_dm_discover.c (począwszy od linii 322):

UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, 0x04);
UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, platform);
UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO);
UINT8_TO_STREAM (p, sens_info);

Ten kod aktualnie ustawia atqa (kombinację platformy wartości i 0x04) oraz bajt SAK (wartość sens_info).

Aby zmienić UID używany podczas NFC-a anticollision, możesz dodać parametr dodawania NFC_PMID_LA_NFCID1:

UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1);
UINT8_TO_STREAM (p, 4);  // length of NFCID1 in bytes
UINT8_TO_STREAM (p, 0x12);
UINT8_TO_STREAM (p, 0x34);
UINT8_TO_STREAM (p, 0x56);
UINT8_TO_STREAM (p, 0x78);

Możesz znaleźć bardziej konfigurowalną wersję libnfc-nci tutaj (nadal trwają prace).

 7
Author: Michael Roland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 07:38:22