메인 콘텐츠로 건너뛰기

암호학 사양

Savitri Network에서 사용되는 모든 암호학적 기본 요소의 전체 사양입니다.

서명 스키마

속성
알고리즘Ed25519
라이브러리ed25519-dalek
개인 키32바이트
공개 키32바이트 (압축된 Edwards 점)
서명64바이트
주소16진수 인코딩된 공개 키 (64자 hex)

트랜잭션 서명

message = from_hex_bytes || to_hex_bytes || amount_le_u64 || nonce_le_u64 || fee_le_u128
hash = SHA-256(message)
sig = Ed25519_sign(signing_key, hash)

블록 서명

블록은 제안자가 블록 헤더 해시 (SHA-512)에 Ed25519로 서명합니다.

피어 신원

libp2p 피어는 자신의 피어 신원 키에 Ed25519를 사용합니다 (계정 키와 별도).

해시 함수

SHA-256

사용입력출력
트랜잭션 서명 메시지정규 TX 바이트32바이트
Monolith 커밋헤더 필드32바이트
ZKP 문 해시문 필드32바이트
AES 키 파생비밀번호32바이트

SHA-512

사용입력출력
블록 해시"BLK" + 버전 바이트 + 헤더 바이트64바이트
헤더 커밋블록 헤더의 이진 트리64바이트

BLAKE3

사용입력출력
빠른 해시범용가변
상태 계산상태 데이터32바이트

Keccak256

사용입력출력
컨트랙트 스토리지 슬롯address || base_slot8바이트 (u64)
중첩 매핑key || inner_hash8바이트 (u64)

도메인 분리

모든 해시 계산은 도메인 간 충돌을 방지하기 위해 도메인 태그를 포함합니다:

도메인태그해시출력
블록"BLK" + version: u8SHA-51264바이트
TX 루트리프 태그 "TXv1"롤링 누산기32바이트
상태 루트시드 "STATEv1-LE" + 리프 "STATE"사전 순서 스냅샷32바이트

트랜잭션 루트

정규 bincode 트랜잭션에 대한 롤링 누산기로 계산됩니다:

accumulator = H("TXv1")
for tx in transactions:
leaf = bincode::serialize(tx)
accumulator = H(accumulator || leaf)
tx_root = accumulator

상태 루트

데이터베이스의 사전 순서 스냅샷으로 계산됩니다:

seed = H("STATEv1-LE")
for (key, value) in storage.iter_sorted():
leaf = H("STATE" || key || value)
seed = H(seed || leaf)
state_root = seed

암호화

AES-256-GCM (저장 시)

다음에 사용됩니다:

  • SDK의 개인 키 암호화
  • 모바일 데이터베이스 컬럼 암호화
  • IoT 커넥터의 기기 데이터 암호화
속성
알고리즘AES-256-GCM
키 크기256비트
논스 크기96비트 (12바이트)
태그 크기128비트 (16바이트)
키 파생비밀번호 기반

P2P 암호화

속성
프로토콜Noise (XX 핸드셰이크 패턴)
키 교환X25519
암호ChaChaPoly
멀티플렉싱Yamux

키 파생 (모바일)

BIP-39

  • 단어 목록: 영어 (2048 단어)
  • 엔트로피: 128비트 (12 단어) 또는 256비트 (24 단어)
  • 니모닉 → 시드: PBKDF2-HMAC-SHA512 (2048 반복)

BIP-44

  • 경로: m/44'/1337'/0'/0/0
  • 코인 유형: 1337 (Savitri)
  • 계정: 0
  • 변경: 0 (외부)
  • 인덱스: 0

키 계층 구조

mnemonic → seed (512 bits)
→ master_key (via HMAC-SHA512)
→ m/44' → m/44'/1337' → m/44'/1337'/0'
→ m/44'/1337'/0'/0 → m/44'/1337'/0'/0/0
→ ed25519_private_key (32 bytes)
→ ed25519_public_key (32 bytes)
→ address (hex-encoded, 64 chars)

영지식 증명

자세한 내용은 ZKP 아키텍처를 참조하세요.

백엔드커브증명 시스템사용 사례
MockN/A항상 유효테스트
ArkworksBN254Groth16프로덕션
PLONKBN254PLONK범용

보안 속성

상수 시간 연산

모든 서명 검증은 타이밍 기반 사이드 채널 공격을 방지하기 위해 상수 시간 비교를 사용합니다 (subtle 크레이트를 통해).

키 제로화

개인 키는 SDK와 모바일 앱 모두에서 zeroize 크레이트를 통해 drop 시 제로화됩니다.

재생 방지

  • 트랜잭션: 논스 기반 (계정당 단조 증가)
  • FL 업데이트: 트레이너별 라운드당 논스
  • 오라클 피드: 시퀀스 번호 추적
  • P2P 메시지: Gossipsub 중복 제거