CORROBORATE
CORROBORATE
Try Live PoCInspector
All Research Whitepapers
Adversarial AI
August 2026• 7 min read

Inside CHIMERA: Synthesizing Frankenstein Sessions

Pause-boundary segmentation, similarity retargeting, and cross-person keystroke overlays

Executive Summary

A deep dive into how CHIMERA splices genuine sessions at pause boundaries to deceive single-channel classifiers while preserving velocity continuity.

1. Why Naive Splices Get Caught

If an attacker blindly cuts two mouse trajectories mid-flight, the sudden velocity discontinuity or jerk spike will be immediately flagged by derivative-based classifiers like RF-lite.

[!WARNING] Simple copy-paste splicing leaves telltale acceleration spikes ($Delta a > 5000\text{px/s}^2$) at the boundary points.


2. The 5-Stage CHIMERA Pipeline

  1. Pause-Boundary Segmentation: Scans donor sessions to find points where mouse velocity $v \approx 0$ (dwell points). Splicing at stationary pauses is geometrically invisible to acceleration/jerk detectors.
  2. Multi-Source Recombination: Fragments are selected from 3 distinct human donors to ensure the composite matches no single historical session in a DTW database.
  3. Similarity Transform Retargeting: A transformation matrix (translation, rotation, scale) adjusts trajectories to match target input locations while scaling timestamps to preserve natural velocity.
  4. Uniform Retiming & Micro-Jitter: Applies a random scaling factor ($0.90\times - 1.15\times$) to defeat exact-match timing filters.
  5. Cross-Participant Keystroke Overlay: An independent typing stream is overlaid on the composite mouse timeline, creating the fatal cross-modal coherence break that CMCC catches.
python
# CHIMERA Pause-Boundary Segmentation
def extract_dwell_slices(session_events, velocity_threshold=0.05):
    slices = []
    current_slice = []
    
    for event in session_events:
        current_slice.append(event)
        if event.type == "pointermove" and event.velocity < velocity_threshold:
            # Clean pause boundary found
            slices.append(current_slice)
            current_slice = []
            
    return slices