메인 콘텐츠로 건너뛰기

보안 모델

암호학적 기본 요소

기본 요소알고리즘사용
서명Ed25519 (ed25519-dalek)트랜잭션 서명, 블록 서명
블록 해시SHA-512도메인 태그 "BLK"를 사용한 블록 해시
트랜잭션 해시SHA-256서명 메시지 해시
상태 해시BLAKE3상태 루트 계산
스토리지 해시Keccak256컨트랙트 스토리지 슬롯 파생
압축snap, lz4P2P 메시지 압축

전송 보안

P2P 계층

  • 암호화: libp2p의 Noise 프로토콜 (인증된 암호화)
  • 멀티플렉싱: Yamux
  • 신원: Ed25519 피어 키
  • 최대 전송 크기: 메시지당 256KB

RPC 계층

  • TLS: RPC 서버에서 종료되지 않습니다. 프로덕션 배포는 TLS 종료가 있는 역방향 프록시를 사용해야 합니다.
  • CORS: localhost 출처로 제한됩니다. 프로덕션을 위해 허용된 출처를 설정하세요.
  • 본문 제한: 최대 요청 본문 1MB.

속도 제한

수준한도
RPC 전역초당 200 요청1초 슬라이딩 창
RPC IP별초당 50 요청1초 슬라이딩 창
배치 크기100 요청HTTP 요청당
블록 해시 스캔1000 블록chain_getBlockByHash 호출당

입력 검증

RPC

  • JSON-RPC 버전은 정확히 "2.0"이어야 합니다
  • 오류 메시지는 클라이언트에 반환 전 정제됩니다
  • 내부 오류는 일반적인 메시지를 반환합니다 (스택 추적 또는 내부 형식 없음)
  • 멤풀 거부 세부 사항은 오류 응답에서 제거됩니다

멤풀

  • 논스 검증: 순차적 논스 필요 (버스트 복구를 위한 최대 5000 간격 허용)
  • 잔액 확인: 발신자는 금액 + 수수료에 충분한 잔액이 필요합니다
  • 서명 검증: 승인 전 Ed25519 서명 검증
  • 할당량 시스템: 클래스별 제한 (금융: 50K, IoT: 100K, 전역: 100K)
  • 발신자별 제한: 발신자당 최대 512개의 대기 트랜잭션

트랜잭션 파이프라인

상태 비저장 가드 (먼저 실행):

  1. 서명 형식 검증
  2. Ed25519 서명 검증
  3. 공개 키 → 주소 파생 확인

상태 저장 가드 (상태 비저장 통과 후 실행):

  1. 논스 >= 계정 논스
  2. 잔액 >= 금액 + 수수료
  3. 계정이 블랙리스트에 없음

원자적 커밋: 잔액 공제와 논스 증가가 원자적으로 발생합니다.

합의 보안

BFT 쿼럼

  • 쿼럼: 검증자의 2f+1 (67%)이 블록 수락 인증서에 서명해야 합니다
  • 비잔틴 허용: 최대 f = (n-1)/3 비잔틴 노드
  • 인증서 검증: Masternode가 모든 증명 서명을 검증합니다

PoU 게임 방지

  • 점수 댐핑: 지수이동평균이 일시적 동작을 통한 점수 조작을 방지합니다
  • 제안자 순환: 50블록 후 제안자가 교체되어야 합니다 (독점 방지)
  • 최소 점수 임계값: 점수 < 300은 보상에서 제외됩니다

선거 보안

  • 결정론적 그룹 ID: 시스템 시간이 아닌 에포크 기반 (MN 간 불일치 방지)
  • 선거 중복 제거: 라운드당 첫 번째 결과만 커밋됩니다
  • 알 수 없는 그룹의 소프트 거부: Masternode가 알 수 없는 그룹 ID에 대해 경고하지만 처리를 계속합니다

키 관리

SDK Wallet

  • 제로화: 개인 키는 Drop 시 제로화됩니다 (zeroize 크레이트를 통해)
  • 영속성 없음: SDK wallet은 키를 디스크에 저장하지 않습니다
  • HTTPS 강제: 원격 RPC 엔드포인트는 기본적으로 HTTPS를 요구합니다

파우셋

  • 라운드 로빈 키: 논스 경쟁을 방지하기 위해 10개의 키 쌍을 순환합니다
  • 직렬화된 청구: faucet_lock 뮤텍스가 TOCTOU 경쟁 조건을 방지합니다
  • 청구 제한: 청구당 5 SAVT, 주소당 24시간 쿨다운

노드 보안

피어 활성 상태

  • Gossipsub 킵얼라이브: PoU 점수 공유가 last_seen을 업데이트하기 위해 gossipsub을 통해 발행됩니다
  • 비활동 타임아웃: 피어 제거 전 600초 (설정 가능)
  • SlowPeer 연결 해제: gossipsub 전송 큐가 가득 찬 경우 노드가 연결 해제됩니다

리소스 제한

  • 연결 관리자 큐: 50,000 메시지 (LN + MN)
  • Gossipsub 메시: mesh_n=8, mesh_n_high=12, mesh_n_low=4
  • 스택 크기: 스택 오버플로우 방지를 위한 8MB
  • 메모리: 백프레셔가 있는 멤풀 풀 제한

책임감 있는 공개

보안 취약점은 프로젝트의 책임감 있는 공개 절차를 통해 신고하세요. 보안 버그에 대한 공개 이슈를 열지 마세요.