2013-11-04 4 views
9

HCE (Host-Based Card Emulation)가 도입되었습니다. 아시다시피 모든 NFC 카드는 고정 된 카드 ID (NfcAdapter.EXTRA_ID)와 함께 제공됩니다.고정 카드 ID로 호스트 기반 카드 에뮬레이션

내 사무실 문 액세스는 일반적으로 승인을 위해 NFC 카드 ID를 감지합니다. 내 핸드폰을 KitKat에 플래시 한 후, 액세스 리더기로 내 휴대폰을 스캔하려고했습니다. 그러나 화면이 꺼지고 다시 켜질 때마다 나는 다른 카드 ID를 얻습니다.

나는 전화 화면을 켜 놓고 에뮬레이트 된 카드 ID를 도어 액세스 시스템에 등록하려고 시도했다. 그것은 문을 열 수있는 액세스 권한을 부여 받았습니다. 그러나 화면이 꺼졌다가 다시 켜지면 작동하지 않습니다.

KitKat에서 HCE 모드를 도입 한 이후로 휴대 전화를 사용하여 출입 카드를 에뮬레이션하려고했습니다.

에뮬레이트 된 카드 ID를 수정하기위한 아이디어는 무엇입니까?

+1

코드를 게시 하시겠습니까? 새로운 매개 변수 4.4, requiresDeviceUnlock이 있다는 것을 알고 있습니다. 거짓/참으로 변경하려고 했습니까? – Pete

+0

아무도 당신이 적어도 공식적으로, 대부분의 RFID, NFC 액세스 제어 시스템의 보안을 어떻게 든 깨뜨릴 것입니다, 사용자 정의 카드 UID를 에뮬레이트하게 할 것입니다 !!! 그러나 당신이 평평하게 내려 가면 매우 쉽다고 확신합니다. –

+0

나는 Google Play 스토어에서 전체 카드 에뮬레이터 (카드 UID 포함)를 보는 데 너무 열심이며, 개발자가되기를 바랍니다 !! –

답변

13

이 (적어도 공식적인 API로) 불가능 다음 HCE 장치의 UID를 제공 할 교환의 처음 부분에

; HCE 장치는 임의의 UID가 있다고 가정해야합니다. 즉, 모든 탭에서 독자에게 제시되는 UID는 무작위로 생성 된 UID가됩니다. 이 때문에 NFC 판독기는 HCE 장치의 UID를 인증 또는 식별의 한 형태로 사용해서는 안됩니다.

(http://developer.android.com/guide/topics/connectivity/nfc/hce.html#ProtocolParams) HCE에 대한 책임 구글 개발자의

11

According to 하나

죄송합니다, 나는 실현 많은 사람들이 원하지만, 공식 버전에서 수 없습니다. (물론 AOSP 해킹으로 할 수있다.) 그 이유는 HCE가 백그라운드 작업을 중심으로 설계 되었기 때문입니다. 앱이 UID를 설정하도록 허용하면 모든 앱이 자체 UID를 설정하려고하므로 충돌을 해결할 방법이 없습니다. HCE를 사용하면 NFC 인프라가 상위 수준의 프로토콜 스택으로 이동하여 UID (쉽게 복제 할 수 있음) 대신에 인증을 수행하기를 바랍니다.

7

Broadcom의 NFC 컨트롤러 (예 : Nexus 5에서 사용)는 충돌 방지 식별자 (UID), ATQA 및 SAK 바이트에 대한 임의의 값 설정을 지원합니다. 그러나이를 변경할 API가 없으므로 libnfc-nci 라이브러리를 수정하는 것이 유일한 방법입니다.

이 코드는 현재 ATQA (값 플랫폼의 조합과은 0x04)으로 설정
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); 

및 SAK 바이트 (:

NFC-A에 대한 관련 코드 파일 nfa_dm_discover.c에 (라인 322부터) sens_info의 값).

NFC-A 충돌 방지 중에 사용 된 UID를 변경하려면, 당신은 또한 매개 변수 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); 

당신은 좀 더 사용자 정의 버전을 찾을 수 있습니다 libnfc을-NCI here (여전히 작동 - 인 - 진행).

관련 문제