Historical Fingerprinter v1
Overview
Historical Fingerprinter v1 focuses on establishing a robust hardware fingerprinting baseline and testing the tracker's resilience against various evasion techniques. This version evaluates miners' ability to collect browser metrics across different conditions and link spoofed data to existing entries in a historical database.
The challenge tests fingerprinting capability across 10 distinct test cases and multiple browser engines, with scoring weighted by test case complexity and browser type.
For general challenge information, environment details, and plagiarism policies, please refer to the Historical Fingerprinter README.
Test Cases
The challenge evaluates fingerprinting across 10 different test scenarios:
| Test Case | Weight | Description |
|---|---|---|
| crossbrowser | 3.0 | Establishes raw hardware baseline across different browser engines (Chrome, Firefox, Brave). |
| vpnstealth | 10.0 | Tests if the hardware fingerprint can pierce a disguised network (VPN connection). |
| canvasspoofer | 5.0 | Evaluates the tracking algorithm against rapidly changing graphical math (CanvasBlocker noise). |
| audiohardwareshift | 8.0 | Tests if the tracker can follow when audio hardware configuration changes (headphones/Bluetooth). |
| incognito | 6.0 | Tests if the tracker relies on local storage/cookies rather than pure hardware (Incognito/Private mode). |
| webgpuliar | 6.0 | Analyzes the gap between the older WebGL API and the newer WebGPU API. |
| fontsshielded | 5.0 | Tests tracking with restricted access to highly unique custom system fonts (Brave Shields strict mode). |
| dirtydom | 5.0 | Tests if the tracking script breaks when the website's DOM is heavily modified (uBlock Origin, Grammarly). |
| deepmobilespoof | 7.0 | Tests detection against fake mobile hardware data fed while running on a laptop. |
Scoring System
Weight Configuration
Scores are calculated using weighted multipliers based on test case difficulty and browser type:
Browser Weights
| Browser | Weight |
|---|---|
| tor | 4.0 |
| firefox | 3.0 |
| yandex | 3.0 |
| brave | 2.0 |
| safari | 2.0 |
| chrome | 1.0 |
Penalties
The scoring system applies penalties for incorrect or conflicting submissions:
- Collision Penalty: 0.3 (applied when multiple conflicting fingerprints are detected)
- Fragmentation Penalty: 0.2 (applied when a single session is fragmented into multiple identities)
- Max Collision Threshold: 10
- Max Fragmentation Threshold: 10
Final Formula
The final score is calculated as:
Minimum Score Threshold
To maintain high fingerprinting standards, a minimum performance threshold is required for incentives:
- Minimum Score: 0.4
Miners must achieve a score of 0.4 or higher to be eligible for incentives.
Submission Format
Submissions must follow the three-file Python structure please check the challenge documentation for details:
# initializer.py
def initialize_db(db_path: str | None = None) -> sqlite3.Connection:
"""Initialize SQLite database connection and create tables."""
...
# metrics_collector.py
def preprocess_metrics(raw_metrics: dict[str, Any]) -> dict[str, Any]:
"""Preprocess raw CreepJS browser metrics."""
...
# linker.py
def generate_and_link(payload: dict[str, Any], db_conn: sqlite3.Connection) -> dict[str, Any]:
"""Generate fingerprint and link to existing database entries."""
...
Requirements
- Each file is limited to a maximum of 1000 lines
- Function names must match exactly:
initialize_db,preprocess_metrics,generate_and_link - Miners cannot install additional packages (only pre-installed packages available)
- Each request must be processed within 0.5 seconds
Submission Guide
To build and submit your solution, please follow the Building a Submission Commit guide.