← Terug naar de blog

Wat is een spraakvingerafdruk in de browser? Hoe de stemmenlijst van SpeechSynthesis je omgeving blootlegt

Kernconclusie: een spraakvingerafdruk leest welke gesynthetiseerde stemmen er op een apparaat staan. Het is een configuratielijst die bij het besturingssysteem hoort; van proxy wisselen of cookies wissen verandert er niets aan. Bij het toetsen van de signaalconsistentie van een multi-account-omgeving is dit, na Canvas en AudioContext, het punt dat het makkelijkst wordt gemist.

"Proxy gewisseld, cookies gewist, maar waarom komt de omgevingscheck nog steeds niet overeen?" Wie accounts controleert, vindt het antwoord vaak in parameters op apparaatniveau. Spraak is het onderdeel dat daarbij het vaakst over het hoofd wordt gezien. Een website hoeft geen toegang te hebben tot de microfoon en hoeft geen geluid af te spelen: met één API-aanroep haalt het al een lijst binnen die aan de systeemconfiguratie hangt.

Die lijst wordt bepaald door het besturingssysteem en de taalpakketten en reist met het apparaat mee. Het IP-adres wisselt, de lijst niet. MostMate is een anti-detect browser die voor dit soort vraagstukken is gebouwd: elke account krijgt een eigen, onafhankelijke browseromgeving. Ook parameters op apparaatniveau vallen onder dat beheer, en spraak is er één van.

Wat is een spraakvingerafdruk? En hoe verschilt die van een stemprint via opnames

Een spraakvingerafdruk put uit de configuratiegegevens van spraaksynthese; een stemprint die via de microfoon wordt vastgelegd, is een volledig ander verhaal.

Houd eerst drie begrippen uit elkaar. Spraaksynthese is het vermogen van de browser om tekst om te zetten in spraak, de techniek achter het voorlezen van webpagina's. De stemmenlijst is het aanbod aan stemmen dat die functie in de huidige omgeving ter beschikking staat. Volgens de MDN-documentatie geeft een aanroep van getVoices() de lijst met beschikbare stemobjecten op het apparaat terug. De spraakvingerafdruk ten slotte is de manier waarop een website kenmerken uit die lijst benut als signaal om de omgeving te herkennen. Met elk begrip wordt het één stap concreter.

Zet het naast stemherkenning en het verschil is meteen duidelijk. Een stemprint vraagt om een opname, om toestemming en om geluid dat echt klinkt. Een spraakvingerafdruk blijft het hele proces stil en vraagt om geen enkele toestemming. Wat de website binnenhaalt is een menu, geen geluid. Precies daar zit het verschil, en ook de reden waarom het zo makkelijk wordt gemist: geen pop-up, je merkt er niets van, en de gegevens zijn allang gedeeld.

Hoe geeft SpeechSynthesis de stemmenlijst aan websites?

De website leest de lijst via speechSynthesis.getVoices(): één aanroep en de volledige inventaris ligt op tafel.

Elk stemobject draagt vijf velden. Dit betekenen ze:

VeldBetekenisTypische waarden
namenaam van de stemMicrosoft David, Samantha
langtaaltagen-US, zh-CN
localServicelokaal gesynthetiseerd of via de cloudtrue is lokaal, false is online
defaultstandaardstem of niethooguit één per taal
voiceURIidentificerend adres van de stemdienstkan interne systeemcodes bevatten

De naam is vaak niets meer dan een persoonsnaam; de onderliggende informatie zit in voiceURI. Kijk naar wat Firefox op macOS teruggeeft: waarden zoals urn:moz-tts:osx: plus een interne systeemcode. De privéregistratie van systeemstemmen wordt zo zomaar via een openbare interface naar buiten gedeeld.

Nog een detail dat de uitlezing beïnvloedt. In Chrome, Edge en Firefox geeft de eerste aanroep vaak een lege array terug; pas als de gebeurtenis voiceschanged is afgelopen, is de lijst compleet. Het laadmoment is op zichzelf al een signaal: de ene browser vuurt de gebeurtenis meteen af, de andere pas later, en wie al klaar is met laden vuurt helemaal niets meer af. In de Web Speech API-specificatie staat dit onderdeel nog steeds als concept; voor de details ben je aangewezen op hoe elke browser het zelf inricht.

Welke vier soorten omgevingskenmerken legt de stemmenlijst bloot?

Eén stemnaam zegt niets; het onderscheid zit in de samenstelling.

Soort één: besturingssysteem en apparaat. De stemmen komen uit de spraakdienst van het systeem. Op Windows staan namen als Microsoft David en Zira, op macOS Samantha en Daniel, op Android krijg je de set van Google. Heeft een Linux-desktop geen spraakdienst geïnstalleerd, dan blijft de lijst vaak gewoon leeg.

Soort twee: taal en regio. De combinatie van lang-tags verraadt welke taalpakketten op de machine zijn gezet. Een lijst met naast elkaar Japanse, Arabische en Hindi-stemmen vertelt de website dat hier iemand meertalig bezig is, iets waar de gebruiker zelf misschien niet eens meer bij stilstaat.

Soort drie: verschillen tussen browsers. Chrome stapelt bovenop de systeemstemmen ook de cloudstemmen van Google. Aan localService is af te lezen of een stem lokaal wordt gesynthetiseerd of via internet loopt. Dezelfde machine kan in Chrome en Firefox dus een lijst met een andere samenstelling tonen.

Soort vier: standaardwaarden en het geheel. Aantal, volgorde, taaltags en de standaardstem vormen samen een omgevingssignaal dat behoorlijk onderscheidend is. Eén nuance nog: dit is maar één van de aanwijzingen; pas als een website meerdere soorten signalen combineert, trekt die een conclusie. Aan één stemmenlijst is geen concreet persoon te herkennen.

Vier soorten omgevingskenmerken die websites uit de stemmenlijst lezen

Hoe verhoudt de spraakvingerafdruk zich tot AudioContext- en Canvas-fingerprints?

Ze worden vaak in één adem genoemd, maar kijken naar totaal andere dingen. Eerst de vergelijking:

DetectiemethodeWaarnaar gekeken wordtHoe het verloopt
SpeechSynthesis-spraakvingerafdrukbeschikbare stemmen en hun veldenlijst lezen, volledig geluidloos
AudioContext-fingerprintresultaat van audioverwerkingberekening uitvoeren en uitvoer vergelijken
Canvas-fingerprintkenmerken van grafische uitvoerafbeelding renderen en pixels vergelijken
Vingerafdruk van lettertypengeïnstalleerde lettertypen en renderingbeschikbaarheid van lettertypen testen

De stemmenlijst uitlezen en audio renderen zijn twee verschillende wegen: de ene leest een statische lijst, de andere rekent een dynamisch resultaat uit. Gooi ze niet op één hoop. Hoe de tweede weg werkt en hoe je die instelt, lees je in het artikel over de AudioContext-fingerprint. De vingerafdruk van lettertypen kijkt, net als de stemmenlijst, naar een statische inventaris: beide lezen rechtstreeks af wat het apparaat geïnstalleerd heeft.

Hoe controleer je welke spraakgegevens je browser prijsgeeft?

De ontwikkelaarstools zijn genoeg; binnen vijf minuten heb je precies de lijst die ook de website kan zien.

  1. Open de Console in de ontwikkelaarstools, typ speechSynthesis.getVoices() en druk op Enter: bekijk wat er terugkomt.
  2. Klap de stemobjecten in de lijst uit en noteer de waarden van name, lang, localService en voiceURI.
  3. Ververs de pagina en controleer meteen opnieuw of de eerste aanroep een lege array geeft; zo bevestig je het asynchrone laden.
  4. Herhaal de stappen op een andere computer of met een ander besturingssysteem en kijk of het verschil uit de systeemdienst komt of uit de browserimplementatie.
  5. Zet er een proxy op en controleer nog een keer: de lijst verandert doorgaans niet, wat bevestigt dat het een signaal op apparaatniveau is.

Bij het lezen van de resultaten horen twee kanttekeningen. Een lege lijst betekent niet dat er geen spraakvingerafdruk is: leegte is op zichzelf ook informatie. Linux zonder spraakdienst en een deel van de automatiseringssystemen geven vaak een lege array terug. En een lange lijst maakt iemand niet herkenbaarder. De beoordeling draait om de vraag of de hele omgeving klopt, niet om het aantal losse parameters.

Hoe beheert MostMate de spraakkenmerken van een omgeving?

De stemmenlijst is een parameter op apparaatniveau; een anti-detect browser pakt die op in de omgevingsconfiguratie in plaats van de lijst aan het toeval over te laten.

Maak of bewerk je in MostMate een omgeving, dan vind je in de Vingerafdrukinstellingen een eigen parameter genaamd SpeechVoices, naast Canvas, AudioContext, ClientRects en WebGL-afbeeldingen. Er zijn twee standen: Real en Noise, waarbij Noise de ruismodus is.

Kies je voor Noise, dan toont het voorvertoningspaneel bij SpeechVoices een waarde met een code van zes tekens. Canvas en AudioContext hebben elk hun eigen codes; die zijn niet onderling uitwisselbaar. De code identificeert de ruisconfiguratie. Welke hash er in werkelijkheid wordt prijsgegeven, zie je pas als je de omgeving opent en de detectietestpagina bezoekt.

De parameter SpeechVoices in de Vingerafdrukinstellingen van MostMate

Spraak stel je niet op zichzelf in. Het besturingssysteem, de taal en de tijdzone van een omgeving bepalen hoe de stemmenlijst eruit hoort te zien. Een Windows-omgeving met een set macOS-stemmen is een flagrante tegenspraak. De verstandige volgorde: eerst het besturingssysteem en de proxy vastleggen, daarna parameters op apparaatniveau zoals spraak nalopen. Dat werkt betrouwbaarder dan lukraak per instelling proberen.

Wil je alles afzonderlijk instellen, dan loop je langs de checklist voor handmatige vingerafdrukinstellingen op de website. Wil je tijd besparen, kies dan bij het aanmaken van een omgeving de aanbevolen configuratie, die deze parameters meteen mee inpakt, en loop daarna alleen de losse punten na. Ook hier geldt een grens: een anti-detect browser stuurt de omgevingsconfiguratie bij, maar kan niet garanderen dat een website de omgeving niet herkent, en al evenmin dat een account nooit een verificatie door het platform uitlokt. Aan de platformregels van de account zelf ontkom je niet.

Veelgestelde vragen

Neemt een spraakvingerafdruk mijn stem op?

Nee. De hele uitlezing raakt de microfoon niet en speelt geen audio af. De website krijgt alleen de configuratie van de systeemdienst voor spraak te zien. Stemherkenning vraagt om toestemming voor een opname; een spraakvingerafdruk vraagt om helemaal niets.

Waarom wijkt de stemmenlijst van twee computers af?

Stemmen worden bepaald door het besturingssysteem, de taalpakketten en de spraakdienst. Windows en macOS hebben andere ingebouwde stemmen, de geïnstalleerde taalpakketten lopen uiteen en elke browser voegt zijn eigen cloudstemmen toe. De lijsten komen dus vanzelf niet overeen.

Betekent een lege stemmenlijst dat er geen spraakvingerafdruk is?

Een lege lijst is op zichzelf ook een signaal. Linux zonder spraakdienst en een deel van de automatiseringssystemen geven vaak een lege array terug. Voor een website is dat een afwijkend kenmerk. Zie het niet als onzichtbaarheid.

Is een spraakvingerafdruk hetzelfde als een AudioContext-fingerprint?

Het zijn niet dezelfde soort. Een spraakvingerafdruk leest een statische configuratielijst; AudioContext rekent een dynamisch audioresultaat uit. De detectieroutes verschillen, dus controleer ze bij een omgevingscontrole apart.

Kan je in MostMate de lijst van SpeechSynthesis apart aanpassen?

In het product is dat de parameter SpeechVoices onder de Vingerafdrukinstellingen, met de standen Real en Noise. Hoe fijnmazig je kunt instellen, hangt af van de clientinterface. Na het instellen is het verstandig om de omgeving te openen, de detectietestpagina te bezoeken en de lijst die echt wordt prijsgegeven te controleren.

Tot slot

De kern van de spraakvingerafdruk: het apparaat vertelt de website wat erop geïnstalleerd is. Er wordt niet opgenomen en er is geen toestemming nodig, en toch reist de lijst met het besturingssysteem mee. Het IP-adres wisselt, de lijst blijft staan. Daardoor is ook duidelijk waarom een aantal gangbare aanpakken tekortschiet: wie alleen cookies wist of alleen van proxy wisselt, moet de parameters op apparaatniveau meenemen om de omgeving weer te laten kloppen.

Vanuit het product: MostMate stopt SpeechVoices samen met Canvas en AudioContext in de Vingerafdrukinstellingen, met de standen Real en Noise. Wat je verder nog kunt, bekijk je zelf op de website van MostMate.

Wil je weten wat je eigen omgeving op dit moment prijsgeeft? Loop de stemmenlijst na met de stappen uit het vijfde hoofdstuk, of download MostMate, maak een omgeving aan en leg alles naast elkaar.

MOSTMATE

Veilig meerdere accounts beheren, heel eenvoudig

Begin met je eerste account en bouw met MostMate aan veiligere, slimmere en efficiëntere multiaccountactiviteiten.

  • Onafhankelijke profielen. Consistente identiteiten.
  • AI-automatisering · Accountgezondheid · Teamwerk
MostMate downloaden