[Android] HCE를 이용한 NFC 통신

panax·2022년 4월 4일
0

Android

목록 보기
12/16

HCE (Host card emulation)

소프트웨어를 사용해 다양한 전자 식별자(접근, 수송, 은행 업무 등)의 정확한 가상 표현을 제공하는 소프트웨어 구조
해당 기능을 사용하면 모바일 앱을 NFC 태그처럼 사용할 수 있음

NFC 읽기

HCE 모바일 앱을 읽으려면 ISO/IEC 7816-4에 정의된 APDU 데이터 형식을 사용해야 한다.
태그가 리더기에 접촉했을 때, SELECT by AID(앱 ID) 명령어를 APDU 데이터 형식으로 전달하고 해당 태그에 지정한 AID가 있을 경우 HCE는 리더기에 데이터를 응답할 수 있다.

HCE를 읽는 리더기 앱은 다음 3가지가 필요하다.
1. AndroidManifest 설정
2. NFC 리더 모드 활성화
3. 통신 처리

AndroidManifest 설정

AndroidManifest에서 사용할 액티비티에 해당 속성을 설정 res 폴더 밑에 xml 폴더를 만들고 AndroidManifest에서 설정한 파일을 다음과 같이 생성

NFC 리더 모드 활성화

액티비티에서 NfcAdapter와 NfcAdapter.ReaderCallback 을 생성

onTagDiscovered 메서드는 밑에서 설명

리더 모드를 활성화 리더 모드 플래그는 다음과 같음

통신 처리

onTagDiscovered 메서드는 다음과 같음

IsoDep를 사용해 통신을 연결하고 transceive로 APDU를 보내면 태그에서 데이터를 응답

응답으로 받은 데이터는 ByteArray 형식으로 용도에 맞게 변형

HCE 앱

태그 역할을 하는 모바일 앱
HCE 를 사용하기 위해서는 다음 3가지가 필요하다
1. AndroidManifest 설정
2. AID와 서비스 등록
3. HostApduService 구현

AndroidManifest 설정

HostApduService 를 상속받는 서비스 클래스를 만들고 AndroidManifest에서 속성을 추가한다.

android:permission (NFC 사용 권한 설정)
intent-filter (안드로이드 시스템에서 APDU를 전달할 서비스를 식별하기 위해 사용)
meta-data (서비스가 받을 AID 설정)

res 폴더 밑에 xml 폴더를 만들고 AndroidManifest에서 설정한 파일을 다음과 같이 생성

aid-filter 에는 사용할 AID를 입력. AID는 최소 5바이트 이상이어야 한다.
문자 2개가 1바이트로 문자 1개 당 4비트(0~16)를 사용한다.

윈도우의 프로그래머 계산기를 사용하면 쉽게 확인할 수 있다.

AID와 서비스 등록

앞에서 설정한 AID를 액티비티 코드 상에서 설정해야 한다. 설정한 AID 목록은 다음 코드로 확인할 수 있다.

HostApduService 구현

HostApduService 를 구현한다.

자세한 내용은 개발자 문서 참고

profile
안드로이드 개발자

0개의 댓글