*

COLDSTAR

Air-Gapped Security for Solana

v0.2.0 · 12 crates · Rust

Overview

How It Works

Coldstar splits wallet operations across two physically separated devices. Private keys never touch a network-connected machine.

💻

Hot Device

Build unsigned transactions via Solana RPC. Fetch balances, token accounts, and recent blockhashes.

📦

QR / USB Shuttle

Transfer unsigned transaction bytes via QR code scan or encrypted USB drive. No network required.

🔒

Cold Device

Air-gapped machine signs the transaction with Ed25519 keys. Returns signed bytes via QR/USB.

Crate Ecosystem

Architecture

12 modular Rust crates, each independently publishable and auditable. Compose only what you need.

coldstar 0.2.0

Root orchestrator crate. Air-gapped cold wallet for Solana and Base with CLI entry point and mode routing.

$ cargo add coldstar
coldstar-signer 0.2.0

Secure signing core with AES-256-GCM encryption, Argon2id key derivation, Ed25519 and secp256k1 signing, ZK proofs, and mlock'd memory.

$ cargo add coldstar-signer
coldstar-wallet 0.2.0

Wallet management with key generation, encrypted storage, and backup/restore workflows.

$ cargo add coldstar-wallet
coldstar-transaction 0.2.0

Transaction building, signing, and serialization. Constructs Solana transactions for air-gapped signing.

$ cargo add coldstar-transaction
coldstar-network 0.2.0

Solana RPC client with full JSON-RPC 2.0 support, SPL token fetching, and transaction submission.

$ cargo add coldstar-network
coldstar-privacy 0.2.0

Privacy transaction layer with mode selection, signing policy engine, privacy validation, and SPL Token-2022 confidential transfers.

$ cargo add coldstar-privacy
coldstar-zk 0.2.0

Zero-knowledge proof engine with Schnorr ownership proofs, Pedersen range proofs, and policy compliance proofs.

$ cargo add coldstar-zk
coldstar-tui 0.2.0

Terminal UI built on ratatui. Interactive wallet interface for key management, signing, and transaction review.

$ cargo add coldstar-tui
coldstar-usb 0.2.0

USB drive detection, mounting, and transaction shuttle for transferring signed payloads between devices.

$ cargo add coldstar-usb
coldstar-iso 0.2.0

Bootable Alpine Linux image builder and USB flasher. Creates minimal OS images for dedicated cold signing devices.

$ cargo add coldstar-iso
coldstar-validation 0.2.0

Input validation for device paths, Solana addresses, passwords, and transaction amounts.

$ cargo add coldstar-validation
coldstar-config 0.2.0

Configuration constants and settings. Default paths, timeout values, and feature flags for the Coldstar ecosystem.

$ cargo add coldstar-config

Getting Started

Installation

Install the full toolkit or pick individual crates for your use case.

Full Installation

# Install the complete Coldstar cold wallet
$ cargo install coldstar

# Or add to your project
$ cargo add coldstar

Individual Crates

# Just the signing engine
$ cargo add coldstar-signer

# Transaction builder + network client
$ cargo add coldstar-transaction coldstar-network

# Privacy layer with ZK proofs
$ cargo add coldstar-privacy coldstar-zk

# USB shuttle for air-gap transfer
$ cargo add coldstar-usb

# Terminal UI
$ cargo add coldstar-tui

Build a Bootable Cold Device

# Build a minimal Alpine Linux ISO with Coldstar pre-installed
$ cargo install coldstar-iso
$ coldstar-iso build --output coldstar.iso

# Flash to USB drive
$ coldstar-iso flash --iso coldstar.iso --device /dev/sdX

System Requirements

# Minimum
Rust   >= 1.75.0
OS     Linux (x86_64, aarch64), macOS (aarch64)

# For cold device ISO builds
Docker >= 24.0  (Alpine rootfs builder)

# For USB shuttle
Linux  udev rules for USB detection

Threat Model

Security Model

Coldstar assumes the hot device is compromised. Every design decision enforces that private keys never leave the air-gapped cold device.

🛡

Air-Gap Enforcement

The cold device has no network stack. WiFi, Bluetooth, and ethernet drivers are stripped from the ISO image. Key material exists only in memory-locked (mlock'd) pages.

  • No network interfaces on cold device
  • Keys zeroed on process exit
  • Memory pages locked against swap
🔐

Encryption at Rest

Wallet files encrypted with AES-256-GCM. Key derivation uses Argon2id with tunable memory and iteration parameters to resist brute-force attacks.

  • AES-256-GCM authenticated encryption
  • Argon2id (memory-hard KDF)
  • Unique salt per wallet file
🔏

Signing Isolation

Ed25519 and secp256k1 signing happen exclusively on the cold device. Unsigned transaction bytes are the only input; signed bytes are the only output.

  • Ed25519 for Solana transactions
  • secp256k1 for Base/EVM chains
  • Transaction review before signing
🧮

Zero-Knowledge Proofs

Prove wallet ownership or balance thresholds without revealing keys or exact amounts. Built on Schnorr and Pedersen commitment schemes.

  • Schnorr ownership proofs
  • Pedersen range proofs
  • Policy compliance proofs
💾

USB Shuttle Protocol

Encrypted payloads transferred via USB with integrity verification. The shuttle carries only serialized transaction bytes, never key material.

  • HMAC integrity checks
  • Payload size limits enforced
  • Auto-wipe on tamper detection
🚨

Threat Assumptions

The security model assumes the worst case: the hot device is fully compromised by malware, the network is monitored, and USB drives may be tampered with.

  • Hot device = compromised
  • Network = adversarial
  • Cold device = trusted perimeter

Reference

API Overview

Key types and functions from the core crates. Full docs on docs.rs.

Wallet Creation

coldstar-wallet

use coldstar_wallet::{Wallet, WalletConfig};

let config = WalletConfig {
    name: "my-cold-wallet".into(),
    network: Network::Mainnet,
    encryption: Encryption::Aes256Gcm,
};

let wallet = Wallet::create(config, &password)?;
let pubkey = wallet.public_key();

Transaction Signing

coldstar-signer

use coldstar_signer::{Signer, SigningRequest};

// On the cold device:
let signer = Signer::from_encrypted_key(&keyfile, &password)?;
let request = SigningRequest::deserialize(&unsigned_bytes)?;

// Review transaction details before signing
request.display_summary();

let signed = signer.sign(&request)?;
let output = signed.serialize();  // bytes for QR/USB

Network Client (Hot Device)

coldstar-network

use coldstar_network::{RpcClient, Cluster};

let client = RpcClient::new(Cluster::Mainnet);
let balance = client.get_balance(&pubkey).await?;
let tokens = client.get_token_accounts(&pubkey).await?;

// Build unsigned transaction
let unsigned = client.build_transfer(
    &pubkey, &recipient, amount
).await?;

// Submit signed transaction
let sig = client.submit(&signed_bytes).await?;

USB Shuttle

coldstar-usb

use coldstar_usb::{UsbShuttle, Payload};

// Detect and mount USB drive
let shuttle = UsbShuttle::detect()?;

// Write unsigned tx to USB (hot device)
shuttle.write_payload(Payload::unsigned(&tx_bytes))?;

// Read and sign on cold device
let payload = shuttle.read_payload()?;

// Write signed result back
shuttle.write_payload(Payload::signed(&signed_bytes))?;

Zero-Knowledge Proofs

coldstar-zk

use coldstar_zk::{SchnorrProof, PedersenRange, Verifier};

// Prove you own a key without revealing it
let proof = SchnorrProof::generate(&keypair, &challenge)?;
assert!(Verifier::verify_ownership(&pubkey, &proof));

// Prove balance is within range
let range = PedersenRange::prove(balance, min, max)?;
assert!(Verifier::verify_range(&commitment, &range));
#62 / 400+
teams worldwide
Colosseum Hackathon 2026

Coldstar ranked #62 out of 400+ teams in the Colosseum Hackathon, competing against projects across the entire Solana ecosystem. Built from scratch in Rust with zero external wallet dependencies.

Open Source

Contributing

Coldstar is open source under the MIT license. We welcome contributions from security researchers and Rust developers.

Report Issues

Found a bug or security vulnerability? Open an issue on GitHub Issues. For security-sensitive reports, email directly.

Submit PRs

Fork the repo, create a feature branch, and submit a pull request. All code must pass cargo clippy and cargo test.

Audit Crates

Each of the 12 crates can be independently audited. We especially welcome reviews of coldstar-signer and coldstar-zk.