---
title: "Identity Protocol - Ten Posts Later, The Card Actually Unlocks the Door"
url: "https://maker.wiznet.io/bruno/projects/identity-protocol-ten-posts-later-the-card-actually-unlocks-the-door/"
markdown_url: "https://maker.wiznet.io/bruno/projects/identity-protocol-ten-posts-later-the-card-actually-unlocks-the-door/md"
type: "UCC: User Created Content"
author: "arvindsa"
author_url: "https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/b/projects/posts/identity-protocol---ten-posts-later-the-card-actually-unlocks-the-door"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "arvindsa"
original_url: "https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/b/projects/posts/identity-protocol---ten-posts-later-the-card-actually-unlocks-the-door"
published: "2026-06-05"
language: "en"
likes: 0
views: 277
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# Identity Protocol - Ten Posts Later, The Card Actually Unlocks the Door

> Identity Protocol - Ten Posts Later, The Card Actually Unlocks the Door

Original author: arvindsa (source: https://community.element14.com/challenges-projects/design-challenges/smart-security-and-surveillance/b/projects/posts/identity-protocol---ten-posts-later-the-card-actually-unlocks-the-door)

## Article

[Embedded media](https://www.youtube.com/embed/LaFO2IR8eqk)

## W5500 + ATECC508A로 만드는 하드웨어 보안 인증 출입 시스템

개인키는 절대 칩 밖으로 나오지 않고, 문(door)은 오프라인에서도 스스로 판단한다. WIZnet W5500 이더넷과 Microchip ATECC508A 보안 IC를 결합한, 흔치 않은 하드웨어 기반 보안 출입 인증 사례를 소개합니다.

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906343%2Epng)

### COMPONENTS

**Hardware components**

- WIZnet – W5500 (Ethernet FeatherWing) x 1

- Microchip – ATECC508A (Secure Element / 키 저장 / TRNG) x 1

- Maxim – MAX32630FTHR (MCU 보드) x 2

- BMI160 IMU (탈취 감지용) x 1

- 4x4 Keypad (PIN 입력) x 1

- PCA9685 Motor FeatherWing + 마이크로 모터 (도어 락) x 1

- Magnetic reed switch (문 개폐 감지) x 1

**Software & Tools**

- micro-ecc (ECDSA-P256 서명 검증)

- BTstack (BLE GATT 통신)

- Django (REST API + 관리 대시보드)

- Microchip CryptoAuthLib / Trust Platform Design Suite (TPDS)

> 본 글은 element14 커뮤니티에 공개된 **arvindsa**님의 *Identity Protocol* 프로젝트를 보안 관점에서 재구성·소개한 것입니다. 전체 원문과 코드는 글 하단 링크를 참고하세요.

### PROJECT DESCRIPTION

문을 지날 때마다 카드를 찍고 PIN을 누르는 번거로움을 없애면서도 보안은 더 강하게 만들 수 없을까? 이 프로젝트의 답은 **"비밀은 하드웨어가 지키고, 검증은 문이 직접 한다"** 입니다. 카드 안의 ATECC508A에 저장된 개인키는 어떤 경우에도 칩 밖으로 나오지 않으며, 문(door)은 W5500 이더넷으로 서버와 통신하지만 네트워크가 끊겨도 캐싱된 공개키로 스스로 인증을 처리할 수 있습니다.

#### 0. ATECC508A란? — 키를 "꺼낼 수 없게" 만드는 보안 IC

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906399%2Epng)

보안 설계에서 가장 어려운 문제는 "개인키를 어디에 안전하게 둘 것인가"입니다. 일반 MCU의 플래시에 키를 저장하면, 펌웨어를 덤프하거나 디버그 포트를 통해 키가 유출될 수 있습니다. **ATECC508A**는 바로 이 문제를 하드웨어로 해결하는 Microchip의 CryptoAuthentication 계열 보안 IC입니다.

핵심 특징은 다음과 같습니다.

- **변조 방지 키 저장:** 개인키는 칩 내부의 보호된 영역에 생성·저장되며, 외부로 절대 읽혀 나오지 않습니다. MCU조차 키 값을 알 수 없고, "이 키로 서명해 줘"라고 요청할 수만 있습니다.

- **하드웨어 암호 엔진:** ECC P-256 기반의 **ECDSA(서명/검증)** 와 **ECDH(키 교환)**, 그리고 **SHA-256** 을 하드웨어로 처리합니다.

- **내장 TRNG:** 진정한 난수 생성기를 내장해, 챌린지·키 생성에 필요한 고품질 난수를 제공합니다.

- **간단한 인터페이스 / 초저전력:** 단선(single-wire) 또는 I²C로 연결되며, 대기 전류는 약 2µA 수준으로 배터리 장치에도 적합합니다.

즉, ATECC508A를 쓰면 "물리적으로 장치를 분해해도 키는 안전하다"는 **하드웨어 신뢰 루트(Hardware Root of Trust)** 를 확보할 수 있습니다. 이 프로젝트에서 카드의 개인키가 PIN 인증 후에도 칩 밖으로 나오지 않는 이유가 바로 이것입니다.

> 참고: 본 프로젝트는 ATECC508A를 사용했지만, 신규 설계라면 후속 제품인 ATECC608 계열도 함께 검토하시길 권장합니다(아래 "신규 설계 시 참고" 참조).

#### 1. Trust Platform Design Suite(TPDS) — 보안 IC를 쉽게 시작하는 도구

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906561%2Epng)

보안 IC가 강력해도, "어떤 슬롯에 어떤 키를 넣고, 어떻게 프로비저닝(provisioning)할 것인가"를 처음부터 설계하기는 쉽지 않습니다. Microchip의 **Trust Platform Design Suite(TPDS)** 는 이 진입 장벽을 낮춰 주는 온보딩(onboarding) 도구입니다.

TPDS가 제공하는 것:

- **보안 개념 학습/교육:** 인증, 키 관리 등 보안 개념을 학습할 수 있는 자료를 제공합니다.

- **프로토타이핑:** 더미(dummy) 키 생성과 코드 예제를 인터랙티브 애플리케이션 노트 형태로 제공해, 실제 양산 키 없이도 동작을 먼저 검증할 수 있습니다.

- **프로비저닝 시스템 연계:** 보안 서브시스템 컨피규레이터(configurator)와 안전한 키 교환(secure exchange) 프로세스를 통해 양산 프로비저닝까지 연결됩니다.

실무적으로는, TPDS에서 슬롯 구성(어느 슬롯을 서명용·읽기 금지로 둘지 등)을 설계하고, 코드 예제로 동작을 검증한 뒤, **CryptoAuthLib** 드라이버로 펌웨어에 통합하는 흐름을 권장합니다. 이렇게 하면 이 프로젝트의 `crypto.c`(ATECC508A wake / sign / serial 읽기)처럼 깔끔한 추상화 계층을 빠르게 만들 수 있습니다.

#### 2. 동작 원리 (Challenge–Response)

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906678%2Epng)

1. 카드와 문이 BLE로 1회 페어링합니다.

2. 문이 매 연결마다 새로운 랜덤 챌린지(nonce)를 발급합니다.

3. 카드는 PIN 인증 후, ATECC508A 내부 키로 챌린지에 서명합니다.

4. 문은 서버에서 받은 공개키로 ECDSA-P256 서명을 **로컬에서** 검증합니다.

5. 블랙리스트에 오른 카드라면, 서버 통신 없이 문이 즉시 거부합니다.

#### 3. 카드 장치 – ATECC508A로 키 보호하기

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906715%2Epng)

개인키는 ATECC508A의 슬롯에 봉인되어 절대 추출되지 않습니다. 서명은 **PIN 인증 이후에만** 허용됩니다.

```c
crypto_init();        // ATECC508A wake, 시리얼 읽기 → device_id // PIN 인증 통과 시에만 slot-0 데이터 서명 수행, 그 외에는 거부
```

추가 안전장치로, IMU(BMI160)가 갑작스러운 흔들림(탈취 시도)을 감지하면 카드를 즉시 잠급니다.

```c
if (imu_jerk() > JERK_LOCK_THRESHOLD) pin_state_force_lock(); if (pin_state_timed_out())            pin_state_force_lock();
```

#### 4. 도어 장치 – W5500로 검증 노드 구성하기

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906770%2Epng)

문은 W5500을 통해 고정 IP로 네트워크에 연결되어 서버에서 공개키와 블랙리스트를 동기화합니다. W5500의 하드웨어 TCP/IP 스택이 네트워킹을 MCU에서 분리해 주므로, 펌웨어가 가볍게 유지되고 공격 표면도 좁아집니다.

```c
eth_init();                 // SPI 초기화 후 W5500 구동 eth_static_ip(IP, MASK, GW); keystore_init();            // eth_sync_pubkeys() 시도, 실패 시 컴파일 내장 키로 폴백 auth_server_init();         // BLE "Auth-Door" 광고, 커스텀 GATT
```

#### 5. 매 연결마다 새로운 챌린지 발급

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906814%2Epng)

재전송(replay) 공격을 막기 위해, 문은 연결할 때마다 새로운 32바이트 nonce를 만들어 카드에 전달합니다.

```c
uint16_t on_read_challenge(uint8_t *out) {     crypto_nonce(out, 32);     memcpy(active_nonce, out, 32);     return 32; }
```

#### 6. 서명 검증 + 블랙리스트 로컬 차단

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906865%2Epng)

응답을 받으면 먼저 블랙리스트를 확인하고, 통과한 경우에만 micro-ecc로 서명을 검증합니다. 블랙리스트 차단은 서버 통신 없이 로컬에서 즉시 이루어집니다.

```c
int on_write_response(const uint8_t *buf, uint16_t len) {     if (len != 4 + 64) return -1;     uint32_t device_id = be32(buf);     if (blacklist_contains(device_id)) {     // 로컬 즉시 차단         log_event(device_id, RESULT_BLACKLISTED);         return -2;     }     const uint8_t *pubkey = keystore_lookup(device_id);     // micro-ecc로 ECDSA-P256 서명 검증 → 통과 시 모터 언락 }
```

#### 7. 서버 & 결과

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780906926%2Epng)

Django 기반 서버는 REST API와 관리 대시보드(키, 출입 로그, 블랙리스트)를 제공합니다. 대시보드에서 카드를 블랙리스트에 추가하면, 다음 시도 때 문이 자동으로 거부합니다.

- 카드: PIN 입력 / 흔들림·타임아웃 잠금 정상 동작

- ATECC508A: PIN 인증 후에만 서명, 그 외 거부 정상 동작

- 문: 매 연결 새 nonce 발급, micro-ecc 검증 정상 동작

- 블랙리스트 동기화 왕복(대시보드 → 문) 정상 동작

- W5500 미연결 시 내장 키스토어 폴백 정상 동작

### 보안 설계 포인트 (Takeaways)

![](https://maker.wiznet.io/upload/ckeditor5/627351180%5F1780907002%2Epng)

이 프로젝트는 보안 임베디드 제품 설계의 핵심 3계층을 잘 보여줍니다. 첫째, 물리적 접근이 있어도 키를 복제할 수 없게 하는 **보안 IC(ATECC508A)**. 둘째, 네트워크가 끊겨도 안전하게 동작하는 **로컬 검증**. 셋째, 네트워킹을 단순화하고 펌웨어를 가볍게 유지하는 **하드웨어 이더넷(W5500)** 입니다. 그리고 **TPDS**는 이 보안 IC를 실제 제품에 빠르고 안전하게 적용할 수 있게 해 주는 출발점입니다.

> **개선 여지:** 원작자는 W5500 연결이 약 5회 중 1회 실패했다고 밝혔고(SPI 배선/타이밍·소켓 처리 점검 권장), 문 측 난수가 ADC 노이즈+xorshift라는 점도 한계로 언급했습니다. 양산 시에는 ATECC508A의 **내장 TRNG**를 활용하는 것이 자연스러운 강화 방향입니다.

> **신규 설계 시 참고:** Microchip 공식 기준 ATECC508A는 현재 "신규 설계 비권장" 상태입니다. 새 제품을 설계한다면 후속 제품(예: ATECC608 계열)을 함께 검토하시길 권장합니다. 동작 원리와 TPDS 활용 흐름은 동일하게 적용됩니다.

### Documents

- 원문 프로젝트: element14 커뮤니티 – *Identity Protocol* (by arvindsa)

- code: `https://github.com/arvindsa/identity-protocol-e14-challenge`

- ATECC508A 제품 페이지 / 데이터시트: Microchip 공식 사이트

- Trust Platform Design Suite (TPDS): Microchip 공식 사이트

---

Source: https://maker.wiznet.io/bruno/projects/identity-protocol-ten-posts-later-the-card-actually-unlocks-the-door/
