RustChain Hardware Fingerprinting

May 28, 2026 · View on GitHub

Overview

Hardware fingerprinting is the core anti-emulation mechanism in RustChain. The system performs 6 independent checks to verify that miners are running on authentic physical hardware, not virtual machines or emulators.

The 6+1 Checks

┌─────────────────────────────────────────────────────────────┐
│                   6 Hardware Checks                         │
├─────────────────────────────────────────────────────────────┤
│ 1. Clock-Skew & Oscillator Drift   ← Silicon aging pattern  │
│ 2. Cache Timing Fingerprint        ← L1/L2/L3 latency tone  │
│ 3. SIMD Unit Identity              ← AltiVec/SSE/NEON bias  │
│ 4. Thermal Drift Entropy           ← Heat curves are unique │
│ 5. Instruction Path Jitter         ← Microarch jitter map   │
│ 6. Anti-Emulation Checks           ← Detect VMs/emulators   │
│                                                              │
│ +1. Behavioral Heuristics          ← Hypervisor signatures  │
└─────────────────────────────────────────────────────────────┘

Check 1: Clock Skew & Oscillator Drift

Principle

Every physical CPU has a crystal oscillator with manufacturing imperfections and aging. Real hardware has measurable drift (5-50 ppm) and jitter (100-2000 ns). VMs use the host's clock, which is too perfect.

Detection Thresholds

Hardware TypeDrift (ppm)Jitter (ns)Verdict
Real vintage (G4/G5)15-50500-2000✅ Pass
Real modern (x86)5-20100-800✅ Pass
VM (VMware/QEMU)<1<10❌ Fail
Emulator (SheepShaver)<0.5<5❌ Fail

Fingerprint Structure

{
  "clock_skew": {
    "drift_ppm": 24.3,
    "jitter_ns": 1247,
    "oscillator_age_estimate": 24
  }
}

Check 2: Cache Timing Fingerprint

Principle

Real CPUs have multi-level cache hierarchy (L1 → L2 → L3) with distinct latencies. L1 is 3-5 cycles, L2 is 10-20 cycles. Emulators flatten this hierarchy.

Detection Thresholds

Hardware TypeL1 (ns)L2 (ns)L2/L1 RatioVerdict
PowerPC G44-612-183.0-3.5✅ Pass
x86_64 (modern)1-24-83.0-4.0✅ Pass
VM (VMware)10-2015-251.2-1.5❌ Fail
Emulator (QEMU)50-10050-100~1.0❌ Fail

Fingerprint Structure

{
  "cache_timing": {
    "l1_latency_ns": 5,
    "l2_latency_ns": 15,
    "l3_latency_ns": null,
    "hierarchy_ratio": 3.0
  }
}

Check 3: SIMD Unit Identity

Principle

Each SIMD instruction set (AltiVec, SSE, NEON) has unique pipeline characteristics. By timing vector operations, we fingerprint the exact implementation.

Detection Thresholds

SIMD TypePipeline BiasVerdict
AltiVec (G4/G5)0.65-0.85✅ Pass
SSE2 (x86)0.45-0.65✅ Pass
NEON (ARM)0.55-0.75✅ Pass
Emulated AltiVec0.3-0.5❌ Fail

Fingerprint Structure

{
  "simd_identity": {
    "instruction_set": "AltiVec",
    "pipeline_bias": 0.76,
    "vector_width": 128
  }
}

Check 4: Thermal Drift Entropy

Principle

Real CPUs generate heat under load with natural variance. VMs report static temperatures or pass through host temps that don't correlate with workload.

Detection Thresholds

Hardware TypeIdle (°C)Load (°C)VarianceVerdict
Real G4/G535-5060-852-6✅ Pass
Real x8630-4550-801-4✅ Pass
VM (VMware)4040<0.1❌ Fail

Fingerprint Structure

{
  "thermal_entropy": {
    "idle_temp_c": 42.1,
    "load_temp_c": 71.3,
    "variance": 3.8,
    "sensor_count": 3
  }
}

Check 5: Instruction Path Jitter

Principle

Real silicon has nanosecond-scale execution variance due to branch prediction, cache conflicts, and pipeline stalls. VMs have deterministic execution with near-zero jitter.

Detection Thresholds

Hardware TypeMean (ns)Stddev (ns)Verdict
Real G4/G52000-5000500-2000✅ Pass
Real x86500-200050-500✅ Pass
VM (QEMU)10000-50000<10❌ Fail

Fingerprint Structure

{
  "instruction_jitter": {
    "mean_ns": 3200,
    "stddev_ns": 890,
    "samples": 10000
  }
}

Check 6: Anti-Emulation Checks

Principle

Hypervisors leave detectable signatures in CPUID, MAC address OUI, DMI/SMBIOS data, and PCI device IDs.

VM Signatures Detected

CheckVM Indicator
CPUIDHypervisor bit set
MAC OUI00:05:69, 00:0C:29 (VMware), 08:00:27 (VirtualBox), 52:54:00 (QEMU)
DMI"vmware", "virtualbox", "qemu" in system info
Processesvmware, vbox, qemu running

Fingerprint Structure

{
  "behavioral_heuristics": {
    "cpuid_clean": true,
    "mac_oui_valid": true,
    "no_hypervisor": true,
    "dmi_authentic": true
  }
}

ARM / AArch64 Classification Notes

Issue reports for device_family: arm and device_arch: modern should be triaged with the raw CPU and platform evidence, because ARM covers very different reward and risk profiles. Use the installer and miner probes as the source of truth, then map the result into one of these buckets:

BucketEvidence to collectRecommended device_archReward guidance
Raspberry Pi 3/4/5/proc/device-tree/model includes Raspberry Pi; lscpu shows Cortex-A53/A72/A76 class coresrpi, rpi4, or rpi5Minimal mining multiplier (0.0005x); prefer arcade or educational mining
Apple Siliconuname -m is arm64; sysctl machdep.cpu.brand_string reports Apple M1/M2/M3/M4apple_siliconDesktop-class ARM, currently 1.2x
Cloud/server ARMlscpu reports ARM vendor with Neoverse cores such as N1/V1/N2, or DMI/cloud VM indicators are presentaarch64Treat as modern/cloud ARM; keep the minimal ARM multiplier unless a maintainer creates a separate server bucket
Generic SBC / embedded ARMlscpu reports Cortex-A class cores but the board is not a Raspberry Piaarch64Modern ARM baseline; do not infer vintage status from ARM alone
Legacy ARMPhysical legacy boards with dated ARM2/ARM6/StrongARM/XScale evidencemaintainer-defined vintage ARM bucketNeeds explicit maintainer review before any antiquity bonus

Data collection checklist

Ask the miner for the exact command output rather than a summary:

cat /proc/cpuinfo | head -30
uname -a
cat /sys/firmware/devicetree/base/model 2>/dev/null || echo "N/A"
lscpu | grep -i "model\|arch\|vendor\|cpu"

For macOS ARM miners, collect:

uname -a
sysctl -n machdep.cpu.brand_string
sysctl hw.optional.arm64
system_profiler SPHardwareDataType | grep -E "Model Name|Model Identifier|Chip|Memory"

Validation guidance

  • Do not upgrade a generic aarch64 miner just because it is ARM. Most modern ARM boards and ARM cloud instances should remain at the minimal ARM mining multiplier unless they have a dedicated profile.
  • Use VM/container indicators before reward classification. A Neoverse cloud VM may be useful test coverage, but it should not be treated like rare physical hardware.
  • Apple Silicon is a physical desktop/laptop ARM platform and should map to apple_silicon, not generic aarch64, when the macOS probes confirm it.
  • Raspberry Pi detection should prefer /proc/device-tree/model over CPU model names because multiple Pi generations share broad Cortex family labels.

Combined Validation

Scoring System

Must pass at least 5 out of 6 checks:

graph TD
    A[Fingerprint Received] --> B{Clock Skew OK?}
    B -->|Yes| C{Cache Timing OK?}
    B -->|No| F1[+1 Fail]
    C -->|Yes| D{SIMD OK?}
    C -->|No| F2[+1 Fail]
    D -->|Yes| E{Thermal OK?}
    D -->|No| F3[+1 Fail]
    E -->|Yes| G{Jitter OK?}
    E -->|No| F4[+1 Fail]
    G -->|Yes| H{Heuristics OK?}
    G -->|No| F5[+1 Fail]
    H -->|Yes| I[Count Passes]
    H -->|No| F6[+1 Fail]
    
    I --> J{≥5 Passes?}
    J -->|Yes| K[✅ Valid Hardware]
    J -->|No| L[❌ VM Detected]

Penalty Multipliers

Failed ChecksMultiplierEffect
01.0×Full rewards
10.5×50% penalty
2+0.0000000025×1 billionth (VM penalty)

Example Comparisons

Real PowerPC G4 ✅

{
  "clock_skew": {"drift_ppm": 24.3, "jitter_ns": 1247},
  "cache_timing": {"hierarchy_ratio": 3.0},
  "simd_identity": {"pipeline_bias": 0.76},
  "thermal_entropy": {"variance": 3.8},
  "instruction_jitter": {"stddev_ns": 890},
  "behavioral_heuristics": {"cpuid_clean": true, "no_hypervisor": true}
}

Result: All 6 checks pass → 2.5× multiplier

SheepShaver Emulator ❌

{
  "clock_skew": {"drift_ppm": 0.3, "jitter_ns": 4},
  "cache_timing": {"hierarchy_ratio": 1.04},
  "simd_identity": {"pipeline_bias": 0.42},
  "thermal_entropy": {"variance": 0},
  "instruction_jitter": {"stddev_ns": 2},
  "behavioral_heuristics": {"no_hypervisor": false}
}

Result: 5 checks fail → 0.0000000025× multiplier

Security Considerations

Why 6 Checks?

Single checks can be spoofed. Multiple independent checks create defense-in-depth:

  • Clock spoofing requires kernel modifications
  • Cache timing requires hardware-level emulation
  • Thermal data requires sensor emulation
  • Combined spoofing is economically infeasible

Known Bypass Attempts

AttackMitigation
Clock injectionCross-reference with cache timing
Fake thermal dataCorrelate with instruction jitter
MAC spoofingCombine with DMI checks
CPUID maskingBehavioral analysis

Next: See token-economics.md for RTC supply and distribution.