Views
No views yet
corpus_v1.0–corpus_v1.5 under NullRabbit's pre-registration discipline. The model is one demonstrable outcome of that methodology; the methodology is the contribution.cipher-agnostic-v2 — a manifest of seven byte-amplification features that detect the attack mechanism without relying on any chain-protocol-specific signal. Cross-chain transfer follows from that property: V8 trained on Sui detects Solana byte-amplification attacks at the wire because the wire shape is the same.CalibratedClassifierCV(HistGradientBoostingClassifier, method='isotonic', cv=5)) over seven features, calibrated for operating-point selection. Single-bundle scoring; not a packet-level streaming detector.CalibratedClassifierCV(HistGradientBoostingClassifier, method='isotonic', cv=5).cipher-agnostic-v2 (7 features). See feature_names in the joblib payload.corpus_v1.0–corpus_v1.5 (897 attack + 1,075 benign).lab + lab-tls-fronted.v1.1.cipher-agnostic-v2 manifest names seven features computed from two bundle modalities:| Feature | Source modality | Semantics |
|---|---|---|
resp.req_bytes_max | responses.parquet | Maximum observed request size in the response time-series |
resp.resp_bytes_max | responses.parquet | Maximum observed response size |
resp.amp_ratio_max | responses.parquet | Maximum per-request response:request byte ratio |
resp.amp_ratio_mean | responses.parquet | Mean response:request byte ratio |
resp.amp_ratio_median | responses.parquet | Median response:request byte ratio |
pcap.unique_dst_ports | packets.pcap | Distinct destination TCP ports observed (capped at 5) |
pcap.unique_src_ports | packets.pcap | Distinct source TCP ports observed (capped at 5) |
corpus_v1.0–corpus_v1.10 (and beyond); the model was trained on the subset of v1.0–v1.5 at fidelity_class ∈ {lab, lab-tls-fronted}.nr-bundle-spec (MIT). External researchers building their own corpus against the spec can reproduce the methodology, retrain V8-class detectors on their own data, and compare against this reference model.sui_F10_multi_get_objects_amp and adjacent primitives; transfers cross-chain to Solana SOL_F10_multi_get_accounts_amp at 100% recall in the published cross-chain leave-one-primitive-out evaluation.sui_F10_multi_get_objects_amp at lab-tls-fronted fidelity — extractor-numerical-equivalence between the production extractor (IBSR collect-payload mode at post-term loopback vantage) and the offline reference extractor on all seven features, within PHASE_1_TOLERANCE. The model-side close-gate (PHASE_1_SCORE_CLASS_MATCH per Decision D-025) — which verifies that prediction-class equivalence holds across configuration shifts that move features into and out of the model's training distribution — is still in flight as of this card's date. The numerical-equivalence layer is unblocked; the deployment-claim-load-bearing model-side gate is not.pcap.unique_*_ports features are extracted with a cap-at-5 ceiling that aligns the IBSR and offline extractors above five distinct source/destination TCP ports per direction. Below five distinct ports, the two extractors diverge by +1 due to IBSR's broader observation coverage (TC-layer control-packet observation plus warmup-window timing). Score interpretation below the envelope is regime-conditional; the close-gate clearance is band-bounded at ≥5-port cardinality.--ids-per-request 5/10/25 --workers 1/2/8 --delay-ms 0. The model has been observed to score "benign" on attack-shape configurations outside that distribution — specifically on the --ids-per-request 1 --workers 1 --delay-ms 500 low-volume regime captured for the Phase 1 close-gate paired bundles. This is the gap that Decision D-025's PHASE_1_SCORE_CLASS_MATCH gate exists to close. V8 is not a universal F10 detector. It is an F10 detector inside its training distribution.SOL_F10_multi_get_accounts_amp at 100% recall in the published cross-chain leave-one-primitive-out evaluation. It does not transfer to other Solana classes. The parallel V14 (compute_amp family) and V11 (rate_limiter_bypass family) binary detectors achieve 0% recall on SOL_F14 and 0% recall on SOL_P07 respectively when trained Sui-only and evaluated on Solana. Joint training (the multi-class softmax architecture detailed in companion research) is the architecturally-correct fix for those classes; no feature surgery on V8 will produce a model that detects SOL_F14 or SOL_P07.nmap_slow), service_misconfig (ssh_pwauth, grafana_anon), auth_bypass (admin_rpc_probe), rate_limiter_bypass (simulate_compute_flood) — produce wire shapes V8 does not recognise as attack-shape. V8 will score them "benign". This is correct behaviour for a family-specific detector, not a failure mode. Production deployment must compose V8 with parallel family detectors (V9 recon, V10 auth, V11 app-DoS, V13 misconfig, V14 compute-amp) or use the multi-class softmax model published separately at NullRabbit/multiclass-folded.responses.parquet is missing or zero-rows (typical for passive-workload bundles like sui_BENIGN_passive_fullnode and solana_BENIGN_validator_passive), the five resp.* features collapse to zero. V8's decision tree doesn't have rules covering that part of feature space and may produce a high attack-score on the all-zero vector. The predict.py helper shipped with this model (see How to use) applies a scoreability gate that refuses to predict on zero-rows-or-missing-responses bundles; the gate is the recommended mitigation.SOL_F10_multi_get_accounts_amp is publicly disclosed per NR-2026-001. Other primitives represent methodology-class findings or are referenced in coordinated-disclosure channels with respective ecosystems. Disclosure-status information travels with the bundles in nr-bundles-public; this model card is the inference-layer cross-reference.SOL_F10_multi_get_accounts_amp zero-shot from Sui training.nr-substrate working repo's docs/PHASE-1-CLOSE-GATE-CLEARED-2026-05-06.md + companion artefacts. The substrate paper is in preparation.predict.py (scoreability-gated)predict.py — a thin scoreability-gated inference helper that wraps the raw estimator with two production-side gates:responses.parquet is missing or zero-rows. V8's training distribution doesn't cover all-zero feature vectors (see "Empty-bundle mis-scoring" in Load-bearing limitations above), so the gate returns an explicit verdict: "unscoreable" instead of a spurious attack score on passive-workload bundles.feature_coverage flag ("full" when raw packets.pcap is present; "resp_only" when it isn't) so callers can downweight or ignore predictions where the two cardinality features defaulted to 0.1from huggingface_hub import hf_hub_download
2from predict import load_v8, score_bundle
3
4model_path = hf_hub_download(
5 repo_id="NullRabbit/v8-cipher-agnostic", filename="model.joblib"
6)
7payload = load_v8(model_path)
8
9record = score_bundle("/path/to/some/bundle_dir", payload)
10if record["verdict"] == "unscoreable":
11 print(f"refused: {record['reason']}")
12else:
13 print(f"V8 score: {record['v8_score']:.4f} ({record['verdict']}, "
14 f"coverage={record['feature_coverage']})")predict.py depends on the bundle-spec reference parser:pip install git+https://github.com/NullRabbitLabs/nr-bundle-spec.gitnr-bundles-public via the spec parser, applies the scoreability gate, and renders verdicts on attack + benign + passive-benign samples, see inference_example.py.1import joblib
2import numpy as np
3
4payload = joblib.load(model_path)
5model = payload["model"] # CalibratedClassifierCV
6features = payload["feature_names"] # 7-feature contract
7
8X = np.array([[...]]) # shape (n_samples, 7)
9score = model.predict_proba(X)[:, 1]model.predict_proba, V8 will return ~0.9977, which is spurious. The scoreability gate exists for exactly that case. See the Load-bearing limitations section.nr-bundle-spec. The methodology is open (in preparation as the substrate paper). The specific corpus contents beyond nr-bundles-public are proprietary.nr-bundle-spec (MIT)1@misc{nullrabbit_v8_cipher_agnostic_2026,
2 author = {NullRabbit},
3 title = {V8 cipher-agnostic byte-amplification detector},
4 year = {2026},
5 month = may,
6 version = {1},
7 publisher = {Hugging Face},
8 url = {https://huggingface.co/NullRabbit/v8-cipher-agnostic},
9 note = {Reference binary detector for byte-amplification attacks on validator-infrastructure JSON-RPC endpoints. Trained on the bundle v1 corpus specified at nr-bundle-spec v0.1.0; curated public sample at NullRabbit/nr-bundles-public.},
10}nr-bundle-spec.