피드로 돌아가기
Dev.toSecurity
원문 읽기
의존성 최소화로 구현한 60라인 규모의 BIP340 Schnorr 서명 시스템
Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain
AI 요약
Context
기존 Nostr SDK들의 과도한 의존성(40MB+)과 플랫폼별 빌드 호환성 문제로 인한 배포 복잡성 발생. BIP340 표준의 특수성으로 인해 일반적인 ECDSA 라이브러리를 사용할 수 없는 기술적 제약 존재.
Technical Solution
- libsecp256k1의 C 구현체를 직접 래핑한 coincurve 채택을 통한 constant-time BIP340 서명 보장
- compressed public key에서 0x02/0x03 접두사를 제거한 x-only 32-byte 포인트 추출 구조 설계
- BIP340의 even-y normalization 로직을 내장한 PrivateKey.sign_schnorr 활용으로 서명 유효성 확보
- NIP-01 명세에 따른 공백 제거 및 UTF-8 인코딩 기반의 Canonical Serialization 프로세스 구현
- SDK 없이 SHA-256 해시와 websocket-client만으로 구성된 초경량 Publisher 루프 구축
Impact
- 과도한 전이 의존성(transitive dependencies)을 제거하여 40MB 규모의 SDK를 60라인의 순수 Python 코드로 대체
Key Takeaway
표준 명세(NIP-01, BIP340)가 명확한 경우, 무거운 SDK보다 핵심 원칙에 기반한 Minimal Implementation이 시스템 안정성과 유지보수성에 유리함.
실천 포인트
- BIP340 적용 시 일반 ECDSA 라이브러리 대신 libsecp256k1 기반 래퍼 사용 여부 확인 - x-only public key 추출 시 compressed form의 첫 바이트 제거 방식을 통한 일관성 유지 - JSON 직렬화 시 ensure_ascii=False 설정 및 구분자 공백 제거를 통한 Canonical form 준수 확인