Tapo Rust/Python 라이브러리, TP-Link의 TPAP 프로토콜 지원 추가
요약
Tapo Rust/Python 라이브러리가 TP-Link의 비공개 프로토콜인 TPAP 지원을 추가했습니다. 이는 스마트홈 기기 연동 시 전용 앱에 종속되는 문제를 해결하고, Home Assistant 같은 플랫폼에서 사용하기 용이하게 만듭니다. 특히 AI를 활용한 바이너리 역공학 기술 발전으로 인해 이러한 라이브러리 개발 난이도가 크게 낮아졌습니다.
핵심 포인트
- Tapo 라이브러리가 TP-Link의 비공개 프로토콜(TPAP)을 지원하여 연동성이 향상됨.
- 스마트홈 기기 제어 시 전용 앱 종속성을 벗어나 Home Assistant 등에서 사용 가능해짐.
- AI를 활용한 바이너리 역공학 기술 발전으로 인해 라이브러리 개발이 쉬워졌음.
- 하드웨어 제조사는 개방적인 생태계와 명세 공개에 힘써야 함.
GLM 5.2부터는, 어쩌면 그전부터도 바이너리만 있으면 원하는 비공개 프로토콜을 역공학하기가 놀라울 정도로 쉬워짐. 예전에는 수작업이 너무 많이 필요해서 95%는 들일 만한 가치가 없었음.
이제는 IDA나 Ghidra MCP, 바이너리, 대충 적은 지시만 있으면 됨. 최근 일부 모델은 따로 시키지 않아도 가능할 경우 실행 중인 바이너리를 계측해 프로토콜을 파악하기까지 함.
MCP 없이도 가능함. 나는 에이전트에게 헤드리스 Ghidra용 스크립트를 작성하게 함. MCP는 잘 깨지고 학습 데이터에도 사용법이 별로 없지만, Ghidra 스크립트와 제대로 된 API 문서는 풍부함.
구체적으로 뭘 했다고 밝히지는 않겠지만, 라이브러리에 새 프로토콜 지원을 추가하는 데 시간이 너무 적게 걸려 놀랐음. MCP 서버조차 필요하지 않았음.
더 쉬운 대상을 공략해 좋은 결과를 얻었음. Android APK, Java, .NET 바이너리는 대개 고급 도구 없이도 AI로 쉽게 역공학할 수 있음.
내가 이해력이 부족한 건지, 대상 독자가 아닌 건지 모르겠음. Tapo가 뭔지도 모르겠는데, 정체 모를 Tapo 기기를 조작하는 라이브러리이고 이제는 뭔지 모를 TPAP도 지원한다고 함. TP-Link가 나오니 공유기겠거니 하고 넘어가게 됨.
Tapo 기기는 기본적으로 스마트홈 제품임. 보통 전용 앱 등 해당 생태계를 써야 제어할 수 있음. 이런 앱에 종속되기 싫고 Home Assistant 같은 플랫폼에서 사용하고 싶으니, 이런 방법으로 연동할 길을 찾는 것임.
사용자에게 비우호적인 하드웨어 업체의 제품을 사지 않도록 서로 권해야 함. TP-Link는 명세를 공개해 구매한 하드웨어와 최대한 쉽게 연동하도록 해야지, 종속을 극대화하거나 폐쇄적인 생태계를 강요해서는 안 됨.
돈을 받았다면 하드웨어와 함께 효과적이고 안전하게 사용하고 나중에 수리하는 데 필요한 정보도 합리적인 범위에서 최대한 제공해야 함.
소비자에게 시장에서 아무런 힘도 없는 것처럼 주는 대로 받아들이는 데 익숙해져 버렸음. 우리를 돈 내는 고객으로 대우할 때까지 TP-Link 구매를 중단하고 다른 이들에게도 권해야 함. 역공학으로 어떻게든 작동하게 만들어도 제조사가 펌웨어로 계속 막는다면, 그런 시도에 매달리며 우리를 방해하는 쪽에 돈을 대줘서는 안 됨.
좋은 글을 쓰려면 좋은 책을 읽으라고 배웠음. AI가 썼든 사람이 썼든 이런 문체라면 별로 상관없음. 계속 읽느니 차라리 다른 무엇이든 하고 싶어짐.
첫 다섯 문단까지만 읽고 더는 못 읽겠더라 싶음. “적어도 아홉 개의 이슈가 같은 이야기를 함”, “모든 변경 사항이 양쪽에 동시에 반영됨” 같은 표현이 Claude 특유의 문체임. Claude와 대화하는 데 많은 시간을 쓰는 커뮤니티라면 당연히 알아챌 만함.
“좋은 말을 할 게 아니면 아무 말도 하지 말라”는 것도 배우지 않았는지? 이렇게까지 날카롭게 굴 이유는 없음. 문체가 싫으면 건너뛰면 됨. 내가 보기에는 명확하고 요지가 잘 전달되는 글임.
관심 가는 주제인데 글이 별로라 읽기 힘듦. 이제는 핑계도 대기 어려움. 최신 Opus/Astra 모델의 문장은 꽤 견딜 만하니, 꼭 써야 한다면 그런 모델을 쓰면 됨.
글의 어떤 부분이 나쁘다는 것인지? 내게는 괜찮아 보임. “이런 식으로 썼다”는 게 구체적으로 무엇을 뜻하는지?
작성자임. tapo는 TP-Link Tapo 기기인 플러그, 조명, 허브, 카메라를 위한 비공식 Rust 클라이언트 라이브러리이며, 같은 크레이트에 기반한 Python 래퍼도 제공함. TP-Link와는 무관함.
2025년 말부터 펌웨어 업데이트로 인해 Tapo 앱의 “Third-Party Compatibility”를 켜지 않으면 기기가 서드파티 클라이언트를 거부하게 됨. 이 설정은 기존 KLAP 로그인을 다시 활성화함. 꺼두면 기기는 SPAKE2+(RFC 9383)로 로그인하는 비공개 프로토콜 TPAP를 사용함. 이제 라이브러리에서 TPAP를 지원하므로 이 설정을 꺼둬도 됨.
가장 흥미로웠던 부분은 보안 수준의 차이임. KLAP 로그인 기록을 확보하면 오프라인으로 비밀번호 추측을 검증할 수 있지만, SPAKE2+에서는 불가능함. 나중에 비밀번호를 알아내도 이전에 수집한 세션을 복호화할 수 없음. 결국 “호환성” 설정은 보안 수준을 낮추는 기능이며, TP-Link의 FAQ에도 활성화하면 “기기의 보안이 약화될 수 있다”고 적혀 있음.
아직 설정을 끈 상태에서 모든 기기가 작동하지는 않음. 펌웨어 1.5.2를 사용하는 C210 등 일부 카메라는 여전히 켜야 함. 프로토콜 작업이나 라이브러리에 관한 질문도 환영함.
같은 코드를 Swift로 구현했으며, 프로토콜에 관해 정확히 같은 결론에 도달함. Claude Code가 내 로컬 플러그와 통신하고 응답 형태와 RFC 9383을 살펴보는 것만으로 SPAKE2+임을 알아내고 TPAP 호환 기능을 구현하게 했음.
마지막 세부 사항을 파악하는 데는 시간이 좀 걸렸음. 비밀번호의 SHA-1 해시에 플러그의 솔트를 넣어 PBKDF2를 적용하고 결과를 두 절반으로 나누며, 컨텍스트는 PAKE V1과 양쪽 난수로 구성하고 양측 식별자는 비워두는 구조임.
AI 자동 생성 콘텐츠
본 콘텐츠는 RSS: GeekNews (한국어)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기