코딩 일기장

[LabTop] #1 개요 본문

개발 및 프로젝트/LabTop

[LabTop] #1 개요

캡스락 2026. 9. 3. 03:02

 

LabTop 프로젝트는 비접촉 스마트카드 기반 근태 관리 및 출입 통제 디바이스로,
소속 학부 연구실에서 구성원의 재부재 상태표시를 위해 출입문 옆에 걸어놨던 클립보드를 대체해보고자 개발했던 디바이스이다.
24년도에 만들었던 물건인지라 코딩에서 LLM의 입지가 지금보다는 작았던 만큼 손코딩의 비중이 절대적인 편이었는데,
그래서인지 더 기억에 남는 프로젝트였던것 같다.
기획 단계에서부터 최종 구현까지 살아남은 기능들을 정리해보면 아래와 같다.
1. 카드 태그 기반 재실/부재 처리
2. 재실/퇴실 처리시 도어락 열림 또는 잠금(마지막 퇴실시에만)
3. 관리 페이지를 통한 구성원 프로필 등록/변경/제거와 카드 등록기능
4. 출입내역 상세 조회
5. 관리자 페이지에서 출퇴근 이벤트 훅을 직접 구현하는 기능을 제공하여 이벤트 발생시마다 사용자 지정 작업 처리하기
6. 대기화면에 광고 이미지를 보여주기
여기까지 보면 그다지 평범할 것 없는 프로젝트처럼 보일 수 있다고 생각될 수도 있을 것 같지만, 재미를 위해 그동안 관심있던 기술들도 마음껏 적용해볼 수 있었는데, 크게 아래에 나열한 세 가지이다.


실제로 구성원들에게 배포하여 사용 중인 IC카드


- NFC 스마트카드(Java Card):
내부에 MCU와 그 위에서 돌아가는 JVM을 갖춘 SE(Secure Element) 플랫폼이다. 개발자는 OS 레벨까지 건드릴 수는 없지만 직접 자바로 앱(애플릿)을 작성한 다음 카드에 설치하여 실행해볼 수 있다는 장점이 있다. 모든 ISO7816 스마트카드가 Java Card인 것은 아니지만, 세계 카드(SIM, 신용카드, 교통카드 등) OS 중 과반수 이상을 점유하고 있다고 한다.
선택하게 된 계기는 일상에서 접하는 일부 플라스틱 카드가 OS와 애플리케이션으로 구동되는 컴퓨터 시스템이라는게 신선한 충격으로 다가왔던 점과 그러한 하드웨어에서 구동되는 프로그램을 작성하고 실행해보고 싶었던 단순한 호기심에서 출발했다.
- HCE 모바일 카드:
앱 내부 또는 서버에서 비밀 연산(예: 잔액 변경 처리 등)을 처리한 다음 휴대폰의 NFC 모듈을 통해 ISO7816 APDU 프레임을 전송하거나 수신하며 리더기와 통신하는 방식. 최근 유심 없이 이용이 가능한 교통카드 앱이나 삼성월렛의 NFC 기능이 이에 해당한다.

뒷면 카드 인식부에 부착된 아두이노가 SAM 역할이다

- 아두이노로 SAM 흉내내보기:
버스나 지하철 개찰구에 설치된 교통카드 지불장치는 교통카드 운영사가 자사가 배포한 교통카드와 서로 신뢰할 수 있는 거래 채널을 유지하기 위해 SAM이라는 모듈을 이용한다. 상세한 기술 규격까지는 알지 못하지만 배포한 교통카드와 SAM은 같은 비밀키를 공유하는 secure element 인데, 카드와 통신 자체는 개찰구 하드웨어의 NFC 안테나를 이용할지라도, 그 위에서 실제로 오가는 암호화된 잔액 조작 명령은 키를 공유하는 같은 SE끼리 통신하는 것이기에 지불받은 누적 금액 정보와 승객 교통카드에 저장된 정보를 항상 신뢰할 수 있게 하는게 핵심이다.(실제로 내부에 휴대폰과 같은 IC카드 장착 슬롯이 여러개 존재하는 것으로 보임. )
이번 프로젝트에서는 아두이노와 PN532 NFC 모듈을 사용하여 호스트 PC의 개입 없이 스마트카드와 인증을 위한 암호연산을 처리할 수 있도록 해 보았다. '흉내내보기' 라는 표현을 사용한 것은 아두이노의 ATMega MCU는 물리 보안을 크게 고려하지 않았기에 플래시 메모리를 쉽게 읽어가거나 JTAG 등으로 프로세서를 쉽게 디버깅할 수 있는 위험에 노출되어 있어서 진정한 보안과는 다소 거리가 있기 때문이다.
다음 2편에서는 백엔드 기능들을 정리해 보고자 한다.