Protection du timing de performance par BotBrowser : signaux materiels coherents
Comment BotBrowser controle le timing de performance, la concurrence materielle et la memoire de l'appareil pour maintenir des signaux d'empreinte coherents.
Le risque pour la vie privee
La vitesse d'execution JavaScript et les API de rapport materiel comme navigator.hardwareConcurrency et navigator.deviceMemory varient selon l'appareil. Ces differences peuvent servir de signal de pistage. BotBrowser controle toutes les valeurs liees a la performance via le profil d'empreinte.
Controle materiel base sur le profil
Le chargement d'un profil applique des valeurs materielles coherentes avant l'execution de tout code :
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
navigator.hardwareConcurrency et navigator.deviceMemory rapportent les valeurs du profil, pas le materiel reel de la machine hote.
Echelle de timing de performance
BotBrowser peut ajuster les caracteristiques de timing pour correspondre au materiel cible du profil :
chrome --bot-profile="/path/to/profile.enc" \
--bot-time-scale=1.2
Le flag --bot-time-scale met a l'echelle les signaux de timing pour que les benchmarks JavaScript produisent des resultats coherents avec la classe d'appareil du profil.
Configuration deterministe
Combinez le controle de timing avec d'autres flags deterministes pour une coherence totale :
chrome --bot-profile="/path/to/profile.enc" \
--bot-time-scale=1.0 \
--bot-noise-seed=42 \
--bot-stack-seed=profile \
--user-data-dir="$(mktemp -d)"
Coherence du frame rate
Le timing de requestAnimationFrame s'aligne avec la configuration d'affichage du profil, maintenant le comportement du frame rate coherent avec le materiel rapporte.
Verification
Apres le chargement d'un profil :
console.log('Cores:', navigator.hardwareConcurrency);
console.log('Memory:', navigator.deviceMemory);
const start = performance.now();
for (let i = 0; i < 100000; i++) Math.sqrt(i);
console.log('Timing:', performance.now() - start);
Les valeurs materielles doivent correspondre a la configuration du profil.
Pour commencer
- Telechargez BotBrowser depuis GitHub
- Chargez un profil avec
--bot-profile - Utilisez
--bot-time-scalepour controler les caracteristiques de timing - Verifiez les valeurs materielles sur les sites de test d'empreintes