Matter 프로토콜 코덱
스마트홈 개발을 위한 Matter TLV 데이터 디코딩 및 인코딩
Matter 디바이스 또는 프로토콜 분석기에서 캡처한 TLV 데이터를 붙여넣기
클릭하여 예제 로드
디코딩 결과
TLV 데이터를 입력하고 디코딩을 클릭하세요
바이트 뷰어
타입 주석이 있는 JSON 표기법으로 TLV 요소를 정의
클릭하여 인코딩 예제 로드
C/C++ 문법으로 데이터 구조를 정의하세요. // tag N 주석으로 TLV 태그를 지정합니다.
분석 결과
필드 값 입력
인코딩 결과
JSON을 입력하고 인코딩을 클릭하세요
바이트 뷰어
인코딩 통계
Matter QR 코드 문자열(MT:...) 또는 수동 페어링 코드(11/21자리)를 입력하세요
클릭하여 예제 로드
온보딩 정보 분석 결과
QR 코드 문자열 또는 수동 페어링 코드를 입력하여 분석
기본 정보
범위: 1-99999998. 무효: 0, 11111111, 22222222 등
커미셔닝 플로우
검색 방법
출력 형식
생성 결과
매개변수를 입력하고 생성을 클릭하세요
TLV 요소 타입
| 타입 이름 | 타입 코드 | 값 크기 |
|---|---|---|
| 부호 있는 정수 | 0x00-0x03 | 1, 2, 4, 8 bytes |
| 부호 없는 정수 | 0x04-0x07 | 1, 2, 4, 8 bytes |
| 불리언 | 0x08-0x09 | 0 bytes |
| Float | 0x0A | 4 bytes |
| Double | 0x0B | 8 bytes |
| UTF-8 문자열 | 0x0C-0x0F | 1/2/4/8-byte length + data |
| 바이트 문자열 | 0x10-0x13 | 1/2/4/8-byte length + data |
| Null | 0x14 | 0 bytes |
| 구조체 | 0x15 | End-of-Container (0x18) |
| 배열 | 0x16 | End-of-Container (0x18) |
| 리스트 | 0x17 | End-of-Container (0x18) |
| 컨테이너 종료 | 0x18 | 0 bytes |
Matter 프로토콜 기술 레퍼런스
C 구조체 스키마 사용 가이드
C 구조체 스키마 모드를 사용하면 익숙한 C/C++ 구문을 사용하여 데이터 구조를 정의할 수 있습니다. 파서는 구조체 정의에서 필드 이름, 타입, TLV 태그를 추출한 후 데이터 입력 및 TLV 인코딩을 위한 시각적 폼을 생성합니다.
지원되는 구문
// Supported syntax forms:
typedef struct { ... } StructName;
typedef struct Tag { ... } StructName;
struct StructName { ... };
지원되는 데이터 타입
| 카테고리 | C/C++ 타입 | TLV 타입 |
|---|---|---|
| 부호 있는 정수 | int8_t, int16_t, int32_t, int64_t, char, short, int, long | int (1-8B) |
| 부호 없는 정수 | uint8_t, uint16_t, uint32_t, uint64_t, unsigned char/short/int/long, size_t | uint (1-8B) |
| 불리언 | bool, _Bool | bool |
| 부동 소수점 | float, double | float/double |
| 문자열 | char[], char[N], char* | UTF-8 string |
| 바이트 배열 | uint8_t[], uint8_t[N], uint8_t* | byte string |
태그 주석 방법
주석을 사용하여 각 필드의 TLV 컨텍스트 태그를 지정합니다. 태그가 지정되지 않으면 0부터 자동으로 할당됩니다.
uint8_t field1; // tag 0 uint16_t field2; // tag: 1 uint32_t field3; /* tag 2 */ @tag(3) uint64_t field4;
배열 지원
고정 크기 배열(예: uint32_t data[4])과 가변 크기 배열(예: uint8_t data[])이 지원됩니다. 폼에서는 동적 배열 요소 관리를 위한 '항목 추가' 버튼이 제공됩니다.
uint32_t subjects[4]; // Fixed-size array (max 4 items) uint8_t data[]; // Variable-size array
현재 제한 사항
- 전처리기 지시문(#define, #ifdef)은 지원되지 않습니다
- typedef 별칭(예: typedef uint8_t BYTE)은 지원되지 않습니다
- 열거형, 공용체, 비트 필드는 지원되지 않습니다
- 중첩된 구조체 편집은 한 레벨로 제한됩니다
- 익명 구조체는 지원되지 않습니다
Matter란
Matter는 CSA(Connectivity Standards Alliance)에서 개발한 통합 스마트홈 연결 표준으로, 원래 Project CHIP이라는 이름으로 시작되었습니다. Apple HomeKit, Google Home, Amazon Alexa, Samsung SmartThings 등 서로 다른 생태계 간의 상호 운용성을 보장합니다. Matter 디바이스는 Wi-Fi, Thread, Ethernet을 통해 IPv6 기반 전송 프로토콜로 통신합니다. Matter 1.0은 2022년 10월에 출시되었습니다.
Matter TLV 인코딩 형식
Matter는 구조화된 데이터 직렬화를 위해 컴팩트한 TLV(Tag-Length-Value) 바이너리 인코딩 방식을 사용합니다. 이 형식은 인터랙션 모델 메시지, 디바이스 인증 데이터, 커미셔닝 페이로드 등 프로토콜 스택 전반에 걸쳐 사용됩니다.
제어 바이트 구조
제어 바이트는 각 TLV 요소의 첫 번째 바이트입니다. 하위 5비트는 요소 타입을, 상위 3비트는 태그 형식을 지정합니다.
| 비트 필드 | 설명 |
|---|---|
| Bits [4:0] | 요소 타입 (부호 있는/없는 정수, 불리언, 부동소수점, UTF-8 문자열, 바이트 문자열, Null, 구조체, 배열, 리스트, 컨테이너 종료) |
| Bits [7:5] | 태그 형식: 000=익명, 001=컨텍스트 지정(1바이트 태그), 010-110=프로파일 지정 태그, 111=완전 지정 |
TLV 요소 타입
요소 타입 필드는 값 부분의 인코딩 방법을 결정합니다. 정수 타입은 1, 2, 4, 8바이트를 사용합니다. 불리언 값은 타입 필드에 직접 인코딩되어 값 바이트가 불필요합니다. 문자열과 바이트 배열은 길이 접두사 뒤에 데이터가 따릅니다.
온보딩 페이로드 형식
Matter 디바이스 커미셔닝 시, 설정 정보는 QR 코드에 포함되거나 숫자 수동 페어링 코드로 제공됩니다. QR 코드 페이로드는 "MT:" 접두사 뒤에 Base38 인코딩된 바이너리 문자열이 이어지며, 버전, 벤더 ID, 제품 ID, 커미셔닝 플로우, 검색 방법, 디스크리미네이터, 설정 패스코드가 포함됩니다.
Base38 인코딩
Matter QR 코드 페이로드는 Base38 문자 집합(0-9, A-Z, -.)을 사용하여 효율적인 영숫자 표현을 합니다. 3바이트마다 5개의 Base38 문자로 인코딩됩니다.
수동 페어링 코드
11자리 수동 페어링 코드는 QR 코드 스캔이 불가능할 때 대체 커미셔닝 수단을 제공합니다. 디스크리미네이터(짧은 형식), 설정 패스코드, Verhoeff 체크 디짓이 인코딩됩니다. 21자리 버전은 벤더 ID와 제품 ID를 추가로 포함합니다.
Verhoeff 체크 디짓
수동 페어링 코드는 Verhoeff 알고리즘을 사용하여 오류를 감지합니다. 이 알고리즘은 모든 단일 자릿수 오류와 대부분의 인접 전치 오류를 감지할 수 있습니다.
개발 활용 사례
- 디바이스 통신에서 캡처한 Matter TLV 페이로드 디버깅
- 인터랙션 모델 요청 및 응답 메시지 검사
- QR 코드에 포함된 커미셔닝 페이로드 검증
- 디바이스 인증 인증서의 TLV 구조 유효성 검사
- Matter 프로토콜 적합성 테스트용 테스트 페이로드 구축
사양 참조
Matter 사양은 Connectivity Standards Alliance(CSA)에서 관리합니다. TLV 인코딩 형식은 코어 사양 부록 A에 정의되어 있습니다. 온보딩 페이로드 인코딩은 섹션 5.1에서 다룹니다.
- Matter 코어 사양 - CSA에서 다운로드
- 오픈소스 저장소 - github.com/project-chip/connectedhomeip
- SDK 개발 문서 - project-chip.github.io/connectedhomeip-doc
- Matter 개발자 핸드북 - handbook.buildwithmatter.com
관련 도구
CBOR 코덱
CBOR 바이너리 형식 인코딩/디코딩, JSON 변환, Hex 뷰어, 시맨틱 태그 지원 IoT 개발 도구
Protocol Buffers 도구
온라인 Protocol Buffers 인코더/디코더. .proto 스키마를 구문 분석하고 JSON을 바이너리로 인코딩하거나 바이너리를 JSON으로 디코딩합니다
MQTT 코덱
상세 필드 분석, Hex 뷰어 및 패킷 빌더로 MQTT 프로토콜 패킷 인코딩 및 디코딩
ECDSA 서명 도구
secp256k1, P-256, P-384, P-521 곡선을 사용하여 ECDSA 키 쌍 생성, 메시지 서명 및 서명 검증