발표 날짜 2013. 12. 17 팀명 I조 (회사 : 코나아이) 팀원 이름 김택현, 김효중, 김휘연 NFC Tag를 통한 기기 출입관리 프로그램 안녕하십니까. 코나아이 NFC 태그를 통한 기기 출입관리 프로그램 중간 발표를 맡은 김택현입니다. 발표 날짜 2013. 12. 17 팀명 I조 (회사 : 코나아이) 팀원 이름 김택현, 김효중, 김휘연 Project1 Fall, 2013; Midterm
Contents Overview Goal/Problem & Requirement Approach Development Environment Architecture Implementation Spec Results Demo Division and Assignment of work Project1 Fall, 2013; Midterm
Overview 기존의 기기 반출입 시스템 수기로 기록 : 시간 및 인적 낭비, 정보 관리의 어려움 새로운 시스템 업무효율 증대 정보관리 용이 비접촉식 무선통신 Bluetooth, Zigbee, RFID의 장점 NFC가 모두 흡수 반출/반입증 신청인 신청내역 관리자승인 스마트폰 개인정보 NFC 자산정보 기존의 반출입 시스템은 일일이 수기로 작성하는 방식이었는데요, 이런 방식은 귀찮을 뿐만 아니라 작성하는데 많은 시간이 걸리죠. 뿐만 아니라 이런 반출입 문서를 모아놓은 반출입 대장을 보관하고 관리하는 일이 어려울 뿐 아니라 어떤 내역을 찾아보려고 한다면 일일이 대장을 전부 다 뒤져봐야 한다는 불편함이 있습니다. 이외에도 위,변조 가능성, 무단 조회 등 각종 보안 문제에도 노출되어 있는 상황입니다. 따라서 이러한 반출입 시스템을 전산화하여 업무 효율을 높이고 정보 관리를 용이하게 하며 신뢰성을 높이는데 그 목적을 두고 있습니다. 이러한 전산화된 시스템을 구축함에 있어서 이제는 누구나 항상 소지하고 있는 스마트폰을 이용해 별도의 단말기가 필요 없이 빠르고 쉬운 접근이 가능하도록 하는 반출입 시스템을 개발하고자 합니다. 스마트폰을 이용한 비접촉식 무선통신에도 여러 가지가 있지만, 블루투스는 기기간 페어링을 해야 한다는 점, RFID는 단방향성이라 단말기가 필요하다는 문제가 있기 때문에 이러한 무선통신 방식의 장점을 모두 흡수하고 있는 NFC 태그를 이용하는 것이 가장 효율적입니다. APP 입력정보 DB 관리자 각 통신 방식은 각 특성에 따라 사용되는 영역이 다릅니다. Range, baudrate 등 각 통신 특성에 맞는 사용 영역이 존재합니다. Project1 Fall, 2013; Midterm
Goal/Problem & Requirement NFC Tag를 이용하여 반입, 반출 기기의 관리를 보다 쉽게 할 수 있도록 하는 시스템 개발 Requirements • 각 기기에 대한 NFC Tag 생성 기능 • 반출/입 기기의 정보 입력 기능 • 입력된 정보의 삭제 및 수정이 불가능하게 하는 보안기능 • 입력된 정보에 대한 주기적인 백업 기능 • 반입 및 반출 시간관리 기능 따라서 저희 프로젝트는 “NFC 태그를 이용하여 반입, 반출 기기의 관리를 보다 쉽게 할 수 있도록 하는 시스템 개발” 에 목적을 두고 있습니다. 이러한 목적을 수행함에 있어서 반드시 필요한 기능들은 다음과 같습니다. 각 기기에 대한 NFC 태그 생성 기능, 프로그램 상에서 반출입 기기의 정보를 입력받아 저장할 수 있는 기능, 보안적인 측면의 강화를 위해 한 번 저장된 정보를 관리자가 아니면 삭제 및 수정이 불가능하게 하는 기능, 많은 위험에 노출되어 있는 정보의 보호를 위해 주기적으로 백업하는 기능, 반입 반출 시간을 관리하는 기능 등입니다. Project1 Fall, 2013; Midterm
Approach 암호화 암호화 주기적 백업 등록 조회 반입 NFC태그 DB Project1 Fall, 2013; Midterm 반출 취소 수정 물품내역조회 개인내역조회 반출물품조회 반출물품승인 신규등록 삭제 등록 조회 반입 NFC태그 반출입 시스템의 기본 동작을 화면의 도식과 같이 나타낼 수 있습니다. NFC 태그는 물품에 관한 정보가 저장되고 어플리케이션 상에서는 등록/조회/반입/반출 등 4가지 주요 기능이 동작할 수 있도록 하여 실질적인 반출입 기능을 하도록 합니다. DB에는 각종 데이터들이 저장됩니다. 사내 기기 반출입 기록을 관리하는 시스템의 특성상 보안과 유지관리에 특별히 많은 신경을 써야 하기 때문에 암호화와 사용자 권한 부여를 통한 보안 강화, 그리고 주기적 백업을 통한 기록의 유지 관리 측면을 강조하였습니다. DB 암호화 암호화 주기적 백업 관리자 관리자+사용자 Project1 Fall, 2013; Midterm
Development Environment Build Target : Android 4.1.2 NFC : Mifare Classic 1k Java Eclipse Github Windows 7 / Linux Ubuntu 11 MySQL 5.0 개발 환경은 다음과 같습니다. 이 중에서 NFC 태그로 사용될 Mifare Classic에 대해 자세히 알아보도록 하겠습니다. Project1 Fall, 2013; Midterm
Architecture Block은 Sector trailer block, Data block, Manufacture block 3가지 존재. Sector trailer block의 경우 6byte의 key A, B, 4byte의 Access bit가 있습니다. 1 Sector는 0번 Sector가 아닌 경우 3 Data block과 1Sector trailer block이 있고, 0번 Sector의 0번 block은 1 Manufacture / 2 Data / 1Sector trailer 각 Sector는 Key A or B(Access bit에서 설정 가능)로 Authentication 이후 접근, 해당 Sector에 대한 접근 권한을 Access bit에서 설정 가능. 총 가용(?) 용량 – 752byte(총 47 Datablock) • Mifare Classic 1k • 1 Block = 6 byte A Key + 4 byte Data + 6 byte B Key • 1 Sector =4 Block • 모든 Sector를 각자 다른 키로 Tag 프로세서 수준 I/O 암호화 • 1 Tag = 16 Sector • 총 가용 용량 = 256 byte NFC 태그에도 여러 종류의 타입이 있는데 이 타입에 따라 구조 자체가 달라져서 사용할 수 있는 메소드, 사용 방법이 달라지게 됩니다. 저희는 NFC와 어플리케이션 간의 암호화를 위해 Mifare Classic 1k를 사용하기로 했습니다. Mifare Classic은 네덜란드 필립스사에서 개발한 NFC의 일종으로, 그림에서 보시다시피 카드 하나가 총 16개의 섹터로 이루어져 있으며 하나의 섹터는 다시 4개의 블락으로 구성됩니다. 이 블락은 6바이트의 보안키 A, 4바이트의 데이터, 6바이트의 보안키 B로 구성되어 있어, 한 섹터의 총 16바이트의 데이터는 48바이트의 키로 보호되고 있습니다. 또한 모든 섹터를 각자 다른 키로 보호하기 때문에 섹터와 2개의 키라는 3중 보안으로 데이터를 보호하게 됩니다. Project1 Fall, 2013; Midterm
Implementation Spec – (1) I/O Interface Timer Out Connect Failure Tag Read onNewIntent() Tag.connect() Authentication Failure Tag. authenticateSectorWithKeyA (int Sector, byte[24] key) NFC 태그 입출력에 대한 순서도를 다음과 같이 나타낼 수 있습니다. NFC 태그 인식을 위해 NFC 기능을 켜 놓은 상태에서는 통신을 위한 전자기 신호가 발생되고 NFC 태그를 접촉함으로써 통신 주파수가 감지되면 NFC 태그 감지 인텐트가 발생하게 됩니다. 인텐트란 안드로이드 어플리케이션에서 다른 화면으로 전환하는 등 무언가 작업을 수행하기 위해 사용되는 일종의 전달 수단입니다. 이러한 인텐트가 발생하면 태그와 연결을 시도하게 되고 일정 시간 내에 연결을 성공하지 못하면 프로세스를 중단합니다. 연결에 성공하면 A키와 B키로 타겟이 되는 섹터에 대한 복호화를 진행하고, 이 과정에서 잘못된 키로 실패하면 다시 프로세스를 중단합니다. 이 과정이 완료되면 해당 섹터의 블락을 읽거나 데이터를 쓰게 됩니다. 여기서 다시 I/O에 실패하면 프로세스를 중단하고, 정상적으로 마치면 태그와의 통신을 마치면서 I/O 프로세스가 종료됩니다. Tag. authenticateSectorWithKeyB (int Sector, byte[24] key) Authentication Success byte[16] Data = Tag.readBlock(int Block) Tag.writeBlock(int Block, byte[16] Data) Tag Write Tag.close() I/O Failure Project1 Fall, 2013; Midterm
Implementation Spec – (2) Inter Module MainActivity - SubNameTV : TextView - EnrollBtn : Button + OnCreate() + OnClick() Enroll_NewActivity - ItemIDText : EditText - ItemNameText : EditText - PurchaseDateText : EditText - PriceText : EditText - Manager1Text : EditText - Manager2Text : EditText - SectionText : EditText - ClassText : EditText - SubmitBtn : Button - TagGenBtn : Button - NFCIDText : EditText + OnCreate() + OnClick() + CheckInput() NFCProcess + OnCreate() + OnResume() + OnPause() + DetectProcess(intent : intent) NFCGenActivity - MessageTV : TextView + OnCreate() ExportActivity NFCDetectActivity - MessageTV : TextView - ConfirmBtn : Button - ItemIDText : EditText + OnCreate() + OnClick() EnrollActivity - SubNameTV : TextView - NewBtn : Button - ModifyBtn : Button - DeleteBtn : Button + OnCreate() + OnClick() 어플리케이션에서 볼 수 있는 화면 각각은 각각의 액티비티 클래스를 갖게 됩니다. 등록,반입,반출내역 입력을 하는 액티비티 클래스와 NFC 태그 처리를 하는 클래스, DB에 대한 클래스를 화면에서 보실 수 있습니다. 액티비티 클래스들은 초기화면 생성을 담당하는 OnCreate 메소드와 터치 동작을 처리하는 OnClick 메소드를 공통적으로 가집니다. 화살표는 상속받은 클래스를 의미하며 부모에게서 상속받아 공통적으로 사용할 수 있는 메소드들을 포함합니다. ImportActivity Export_NewActivity - DstnText : EditText - DueDateText : EditText - SubmitBtn : Button - GateRadio : RadioGroup - OwnerRadio : RadioGroup + OnCreate() + OnClick() + CheckInput() Export_ModifyActivity - ConfirBtn: Button - DeleteBtn : Button + OnCreate() + OnClick() Enroll_ModifyActivity + OnCreate() + OnClick() DBProcess + DBConn() +SQLExe() Project1 Fall, 2013; Midterm
Implementation Spec – (3) Modules NFCProcess + OnCreate() + OnResume() + OnPause() + DetectProcess(intent : intent) NFCGenActivity - MessageTV : TextView + OnCreate() public void onResume(){ super.onResume(); NfcAdapter.enableForegroundDispatch (DetectActivity, DetectActivity’s PendingIntent, TECH_DISCOVERED Filter, MifareClassic Tech Filter); } NFCDetectActivity - MessageTV : TextView - ConfirmBtn : Button - ItemIDText : EditText + OnCreate() + OnClick() NFC 태그 처리하는 클래스에 대해서 살펴보도록 하겠습니다. NFCProcess 화면에서 OnResume()메소드가 실행된 상태에서 NFC 태그를 접촉하면 DetectProcess() 메소드가 실행되면서 인텐트에 따라 NFC 읽기/쓰기 동작을 합니다. 실제 NFC 읽기/쓰기 동작은 작동하는 UI 화면이 다르기 때문에 읽기 화면은 NFCDetectActivity 클래스에서, 쓰기 화면은 NFCGenActivity 클래스에서 실행되지만 실질적인 동작 자체는 동일하기 때문에 NFCProcess 클래스에서 처리하게 됩니다. 태그를 성공하면 현재 액티비티를 닫는 onPause()메소드가 실행되며 완료되게 됩니다. 태그 성공, 액티비티 닫기 public void onPause(){ super.onPause(); NfcAdapter.disableForegroundDispatch(DetectActivity); } Project1 Fall, 2013; Midterm
Current Status – (1) User Interface 현재 구현된 사항입니다. UI를 보시는 바와 같이 사용자의 편의를 고려하여 한 눈에 알아보기 쉽도록 다른 사항은 최대한 배제하고 반드시 필요한 정보만 입력할 수 있도록 구현하였습니다. Project1 Fall, 2013; Midterm
Current Status – (2) Database 데이터베이스를 다음과 같이 권한/사용자/로그/회사/기기 등의 5개의 테이블로 구성하였습니다. Project1 Fall, 2013; Midterm
Result - 어플 동작 미리 등록한 기기 반출요청 반출물품승인 관리자 로그인 반출물품조회 반입 반출물품조회 NFC 태그 동작 확인 데모 계획입니다. 먼저 스마트폰 화면을 대형 화면에서 볼 수 있도록 케이블을 연결하고, 빠른 시연을 위해 모든 기능을 이용할 수 있는 관리자 모드로 로그인합니다. 마찬가지로 빠른 시연을 위해 기기 정보를 미리 등록해 놓은 후, 이 기기를 반출 요청하여 반출 양식을 작성한 후 NFC 칩을 태그하여 반출합니다. 관리자 모드이므로 반출물품 승인을 할 수 있고, 반출물품 조회를 통해 물품이 정상적으로 반출되었음을 보여주도록 합니다. 반입 또한 마찬가지로 하여 물품의 반출이 끝났음을 물품조회를 통해 보여주도록 하면서 시연을 마치도록 합니다. 반출물품조회 반입 반출물품조회 NFC 태그 동작 확인 Project1 Fall, 2013; Midterm
Results - 권한 권한 그룹 생성 및 관리 Project1 Fall, 2013; Final 안드로이드 어플의 각 메뉴에 접근하기 위해서는 권한이 필요합니다. 이러한 권한 관리를 위해 화면과 같이 별도의 웹이 제공 됩니다. 보시는 봐와 같이 그룹별로 메뉴에 접근 할 수 있는 권한을 설정 할 수 있습니다.. Project1 Fall, 2013; Final
Results - 권한 회원 가입한 유저에게 권한 그룹을 부여 Project1 Fall, 2013; Final 앞에서 생성한 권한을 유저에게 부여할 수 있습니다. 각종 그룹별로 유저를 분류해 역할을 분담 할 수 있습니다. 그룹별로 권한을 관리해 개인별로 관리하는 것보다 빠르고 편리합니다. Project1 Fall, 2013; Final
Results - 조회 각종 정보 조회 Project1 Fall, 2013; Final 안드로이드 어플 중의 조회 메뉴를 웹에서도 사용할 수 있습니다. Project1 Fall, 2013; Final
Results - 조회 추가 정보 조회 가능 Project1 Fall, 2013; Final 안드로이드 어플 중의 조회 메뉴를 웹에서도 사용할 수 있습니다. Project1 Fall, 2013; Final
Results - NFC 복제 방지 모든 MifareClassic tag는 0번 섹터의 0번 블록에 4byte 태그 고유 ID 가 저장 태그 고유 ID는 수정이나 복제가 불가능 태그 고유 ID를 그대로 물품 ID에 사용 동일한 ID를 가진 NFC태그 생성은 불가능 하므로 NFC 태그는 복제 불가 일단 NFC 태그에 접근하기 위해서는 섹터 번호와 그 섹터의 키가 필요합니다. 섹터 키는 총 192byte여서 키를 모르면 데이타를 알 수 없습니다. 태그는 2가지 종류가 있는데 보안 기능이 있는 태그는 비정상적인 방법으로 데이타 접근을 막아 줍니다. Project1 Fall, 2013; Final
안드로이드 어플과 웹서버 간 무선 통신 data 암호화 Results - 무선전송 data 암호화 안드로이드 어플과 웹서버 간 무선 통신 data 암호화 https 안드로이드 어플에서 웹서버로 데이타를 전송 할 때 data 노출 및 위,변조 방지를 위해 AES 방식의 암호화를 사용합니다. Project1 Fall, 2013; Final
Results – 회사 평가 사용자 인증 및 권한 Data 보안 기능 사용자 인증 기능 별도의 웹서버에 사용자의 아이디와 비밀번호가 저장되어 있으며 사용자 마다 별도의 권한이 존재한다. 사용자 권한에 따른 가용 기능 구분 사용자 권한 그룹을 생성할 수 있으며 권한에 따라 메뉴 접근 유무가 다르다 NFC Tag 복제 방지 기능 UID를 태그 ID로 사용하여 복제가 불가능하다. 일단 NFC 태그에 접근하기 위해서는 섹터 번호와 그 섹터의 키가 필요합니다. 섹터 키는 총 192byte여서 키를 모르면 데이타를 알 수 없습니다. 태그는 2가지 종류가 있는데 보안 기능이 있는 태그는 비정상적인 방법으로 데이타 접근을 막아 줍니다. Project1 Fall, 2013; Final
Results – 회사 평가 NFC Tag 반출입등을 위해 읽기/쓰기가 가능 하다. 개발결과물의 기능구현 Android 기기로 Tag 정보 쓰기 및 읽기 NFC Tag 반출입등을 위해 읽기/쓰기가 가능 하다. Webpage에서의 기기의 출입관리 Webpage의 조회 메뉴에서 각종 정보를 조회 할 수 있다. Android app에서 현황보기 기능 어플리케이션의 조회 메뉴에서 각종 정보를 조회 할 수 있다. 일단 NFC 태그에 접근하기 위해서는 섹터 번호와 그 섹터의 키가 필요합니다. 섹터 키는 총 192byte여서 키를 모르면 데이타를 알 수 없습니다. 태그는 2가지 종류가 있는데 보안 기능이 있는 태그는 비정상적인 방법으로 데이타 접근을 막아 줍니다. Project1 Fall, 2013; Final
Results – 회사 평가 NFC Tag를 읽어 DB에 저장된 내용과 비교해 반출/입 가능 여부를 확인한다. Tag를 이용한 개발결과물의 기능구현(50점) Tag를 이용한 기기 반 출입 기능 NFC Tag를 읽어 DB에 저장된 내용과 비교해 반출/입 가능 여부를 확인한다. 기기 자산코드 부여 기기등록 할 때 자산번호를 입력 및 수정 할 수 있다. 일단 NFC 태그에 접근하기 위해서는 섹터 번호와 그 섹터의 키가 필요합니다. 섹터 키는 총 192byte여서 키를 모르면 데이타를 알 수 없습니다. 태그는 2가지 종류가 있는데 보안 기능이 있는 태그는 비정상적인 방법으로 데이타 접근을 막아 줍니다. Project1 Fall, 2013; Final
Demo 회원 가입 폼 웹페이지 admin 접속 후 권한 설정 실제 어플사용 영상 비디오 웹페이지 조회 기능 설명 유투브 링크 : http://www.youtube.com/watch?v=ICdoSjgvBkw&edit =vd 웹페이지 : http://nfc.ze.am 일단 NFC 태그에 접근하기 위해서는 섹터 번호와 그 섹터의 키가 필요합니다. 섹터 키는 총 192byte여서 키를 모르면 데이타를 알 수 없습니다. 태그는 2가지 종류가 있는데 보안 기능이 있는 태그는 비정상적인 방법으로 데이타 접근을 막아 줍니다. Project1 Fall, 2013; Final
Division and Assignment of Work 항목 담당자 DB 관리 김택현 UI 설계 및 관리 김효중 NFC 입출력 화면 개발 김휘연 등록 화면 개발 반입 반출 화면 개발 조회 화면 개발 Push 메시지 개발 보안 설계 및 개발 김효중, 김휘연 테스트 및 디버깅 김택현, 김효중 김휘연 남은 구현 사항에 따른 일 분담을 보시는 바와 같이 나누었습니다. Project1 Fall, 2013; Midterm
감사합니다 김택현 lkyunl@naver.com Project1 Fall, 2013; Midterm 이상으로 발표를 마치겠습니다. 감사합니다. 김택현 lkyunl@naver.com Project1 Fall, 2013; Midterm