TagMe NFC 스마트 태그 플랫폼

기술 스택
Django DRF AWS DOCKER PostgreSQL NFC
프로젝트 개요
TagMe는 NFC 하드웨어와 직접 연동하여 실시간 태그 검증을 수행하는 스마트 태그 플랫폼입니다.
사용자들이 각각의 프로젝트를 생성하고 설정한 URL로 도착할 수 있도록 AES-CMAC 기반 데이터 검증 시스템과 다층 보안 아키텍처를 구현했습니다.
핵심 기술 성과
🔐 NFC 암호화 데이터 복호화 시스템 구현
문제 상황:
NFC 태그에서 전송되는 암호화된 데이터를 안전하게 복호화하고 검증해야 하는 복잡한 보안 요구사항
기술적 해결:
AES-CMAC 기반 NFC 데이터 복호화 및 검증 시스템
- NFC 하드웨어에서 전송되는 암호화 데이터를 안전하게 복호화하고 무결성을 검증하는 시스템 구현
AES CBC 복호화
: 암호화된 PICC 데이터를 복호화하여 UID와 읽기 카운터 추출CMAC 무결성 검증
: 수신된 데이터의 변조 여부를 검증하여 보안성 확보동적 키 관리
: UID 기반으로 각 태그별 고유한 복호화 키 생성 및 관리
바이너리 프로토콜 파싱 및 데이터 추출
- NFC 하드웨어 바이너리 데이터 형식을 정확히 해석하기 위한 프로토콜 파싱 로직 구현
플래그 비트 확인
: 데이터의 첫 번째 바이트에서 UID 사용 여부, 카운터 사용 여부 확인바이트 순서 변환
: 3바이트로 온 카운터 값을 4바이트 정수로 변환메모리 효율적 처리
: BytesIO를 활용한 메모리 효율적 바이너리 데이터 처리
보안 검증 및 리플레이 어택 방지
- 암호화된 데이터의 복호화뿐만 아니라 보안 위협에 대한 다층 방어 시스템을 구축
메시지 인증
: CMAC을 통한 데이터 무결성 검증으로 변조 공격 차단카운터 기반 검증
: 읽기 카운터를 활용한 리플레이 어택 방지UID 기반 격리
: 각 NFC 태그별 독립적인 암호화 키 사용
🛡️ 다층 보안 아키텍처 설계
문제 상황:
프로젝트별로 다른 보안 정책과 접근 권한을 동적으로 관리해야 하는 복잡한 Multi-tenant 환경
기술적 해결:
동적 CORS 관리 시스템
corsheaders
의 Signal을 통한 데이터베이스 기반 CORS 시스템 관리 구현- 요청이 들어올 때마다 Origin 헤더를 파싱하여 해당 도메인이 등록된 프로젝트인지 실시간으로 검증
- 새로운 프로젝트 추가 시 별도의 서버 재시작 없이 CORS 정책이 자동 적용
JWT 기반 프로젝트별 API 키 시스템
- 각 프로젝트마다 독립적인 JWT API 키를 발급하여 완전한 격리를 보장
- API 키 발급 시간과 토큰의 iat 값 차이를 1초 이내로 제한하여 토큰 재사용 방지
🔄 Private 모드 시스템
문제 상황:
개별 프로젝트별로 독립적인 보안 정책과 접근 제어가 필요한 Multi-tenant 환경
기술적 해결:
상태 기반 보안 전환
- 프로젝트의 Private 모드 활성화/비활성화에 따라 자동으로 JWT API 키를 생성/삭제 시스템 구현
- Private 모드 전환 시 원자적 연산으로 데이터 일관성 보장 및 동일 상태로의 중복 전환 방지
개별 프로젝트 격리
네트워크 레벨
: Origin 기반 CORS 정책으로 도메인별 접근 제어인증 레벨
: 프로젝트별 독립 JWT 키로 완전 격리데이터 레벨
: 사용자-프로젝트 매핑으로 데이터 접근 제어
보안 중심 에러 처리
- 보안 정보 노출을 방지하기 위해 복호화 실패나 인증 오류 발생 시 마스킹된 에러 메시지를 반환