knowledge-base
Hoe STIR/SHAKEN werkt (en waarom robocalls toch doorkomen)
Een evergreen kennisbankartikel uit de pronk.it-redactie — Hoe STIR/SHAKEN werkt (en waarom robocalls toch doorkomen).
TL;DR
- STIR/SHAKEN voegt een cryptografisch ondertekende identity‑header toe aan SIP‑verzoeken om het bellersnummer te verifiëren.
- Het werkt met drie attestatieniveaus (full, partial, gateway) die aangeven hoe zeker de provider is over het nummer.
- Ondanks de technologie blijven robocalls soms door vanwege internationale oproepen, legacy‑netwerken, foutieve implementatie en nummer‑spoofing buiten het bereik van de keten.
Inleiding
Robocalls en ongewenste oproepen blijven een grote bron van overlast voor zowel consumenten als bedrijven. Om het probleem van nummer‑spoofing aan te pakken, hebben regelgevers in de Verenigde Staten en steeds meer landen wereldwijd het STIR/SHAKEN‑raamwerk verplicht gesteld. STIR (Secure Telephone Identity Revisited) definieert de cryptografische mechanismen, terwijl SHAKEN (Signature-based Handling of Asserted information using toKENs) de praktische uitwerking binnen SIP‑netwerken beschrijft.
Het doel van STIR/SHAKEN is niet om alle ongewenste oproepen te blokkeren, maar om het vertrouwen in het bellersnummer te herstellen zodat netwerken en eindgebruikers beleidsmatig kunnen besluiten welke verzoeken ze accepteren, markeren of weigeren. In dit artikel wordt de werking van het raamwerk technisch uitgelegd, worden de stappen in de SIP‑signaling belicht en wordt besproken waarom robocalls ondanks STIR/SHAKEN soms toch door kunnen komen.
Wat is STIR/SHAKEN?
STIR/SHAKEN is een reeks standaarden die een vertrouwensketen creëren tussen de oproepende partij, de verzorgende provider en de ontvangende partij. De kern van het systeem is een ondertekend token, het zogenoemde PASSporT, dat wordt meegestuurd in de SIP‑Identity‑header. Dit token bevat informatie over het bellersnummer, het attestatieniveau en een cryptografische handtekening die kan worden geverifieerd met behulp van publieke sleutels die worden gepubliceerd via een certificaat‑autoriteit (CA) of een openbaar sleutel‑repository.
De werking kan worden samengevat in drie stappen:
- Attestatie – de oproepende provider plaatst een PASSporT‑token in de uitgaande SIP‑request, waarbij het attestatieniveau wordt bepaald op basis van de relatie met de bellende partij.
- Transport – het token reist mee met het SIP‑verzoek via tussenliggende proxies en eventuele SBC’s zonder wijziging.
- Verificatie – de ontvangende provider haalt het token uit de Identity‑header, controleert de handtekening tegen de gepubliceerde sleutel van de attesterende partij en neemt een besluit op basis van het attestatieniveau en lokaal beleid.
Omdat de technologie puur cryptografisch is, vereist hij geen wijziging van de bestaande SIP‑structuur, maar voegt hij alleen een extra header toe. Dit maakt geleidelijke uitrol mogelijk zonder bestaande infrastructuur buiten werking te stellen.
Attestatieniveaus en het PASSporT‑token
STIR definieert drie niveaus van attestatie die aangeven hoe zeker de attesterende partij is over de authenticiteit van het bellersnummer:
| Niveau | Beschrijving | Wanneer gebruikt |
|---|---|---|
| A (full) | De provider heeft een directe relatie met de klant en kan met zekerheid stellen dat het nummer toegekend is aan die klant. | Bij eigen klanten, eigen nummer‑range. |
| B (partial) | De provider kent de klant maar kan niet met zekerheid zeggen dat het nummer aan die klant is toegewezen (bijv. nummer‑porting in uitvoering). | Bij resellers of wanneer nummer‑informatie uit een externe database komt. |
| C (gateway) | De provider kan alleen bevestigen dat het nummer afkomstig is van zijn netwerk, maar heeft geen relatie tot de eindgebruiker. | Bij internationale oproepen of wanneer het verkeer via een gateway binnenkomt. |
Het PASSporT‑token is een JSON‑Web‑Token (JWT) dat wordt base64‑url‑gecodeerd en bestaat uit drie delen: header, payload en signature. Een voorbeeld van een minimal PASSporT voor een full attestatie (A) ziet er als volgt uit:
Header:
{"alg":"ES256","typ":"passport"}
Payload:
{
"typ": "shaken-pass",
"iat": 1690843200,
"exp": 1690846800,
"dest": {"tn": "+12125551234"},
"orig": {"tn": "+12125550000", "attest": "A", "origId": "xxxxxxxxxx"},
"destCallingPartyNumber": "+12125551234",
"origCallingPartyNumber": "+12125550000",
"origId": "xxxxxxxxxx"
}
Signature:
[Base64URL-encoded ECDSA‑signature over header.payload]
De header geeft aan welke asymmetrische algoritme wordt gebruikt (doorgaans ES256, een ECDSA‑signature over SHA‑256). De payload bevat onder andere:
typ– altijdshaken-pass.iatenexp– issue‑ en expiration‑time (Unix tijd).origendest– originele en doeltelefoonnummers met het attestatieniveau (attest).origId– een unieke identifier die de attesterende partij publieke sleutel kan koppelen aan zijn certificaat.
De signature wordt gegenereerd met de privésleutel van de attesterende partij. Ontvangende partijen kunnen de publieke sleutel opvragen via een bekend URI (bijv. https://<domain>/shaken/<origId>.json) waarin het certificaat en de bijbehorende publieke sleutel staat.
SIP‑integratie en verificatieproces
In een SIP‑flow wordt de Identity‑header toegevoegd aan het OUTGOING INVITE (of elk ander verzoek dat een bellersnummer transporteert). Een voorbeeld van een SIP‑request met een Identity‑header:
INVITE sip:+12125551234@atlanta.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: <sip:+12125551234@atlanta.com>
From: <sip:+12125550000@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:bob@pc33.atlanta.com>
Identity: <https://atlanta.com/shaken/xxxxxxxxxx.json>;alg=ES256;signature=MEUCIQD...
Content-Length: 0
De Identity‑header bevat drie onderdelen:
- De URL waar het publieke certificaat van de attesterende partij te vinden is.
- Het algoritme (
alg) dat gebruikt is voor de signature. - De zelf‑ondertekende JWT‑waarde (
signature).
Bij ontvangst voert de verifierende partij de volgende stappen uit:
- Header ophalen – lees de Identity‑header en extraheer de URL, algoritme en signature.
- Certificaat ophalen – download het JSON‑document vanaf de opgegeven URL; dit document bevat het X.509‑certificaat van de attesterende partij (vaak in JWK‑formaat).
- Handtekening verifiëren – gebruik de publieke sleutel uit het certificaat om de ECDSA‑signature over de concatenatie van header en payload (in base64‑url) te controleren.
- Payload valideren – controleer of de
typgelijk is aanshaken-pass, of deexpnog niet verstreken is, of deorig.tnovereenkomt met hetFrom‑nummer (of met een toegestane afgezette lijst), en of het attestatieniveau voldoet aan lokaal beleid (bijv. alleen A‑attestatie toestaan voor directe oproepen). - Beslissing nemen – op basis van het resultaat kan de provider het verzoek doorlaten, een
privacy: idtoevoegen, eenwarningheader invoegen of het verzoek afwijzen met een 4xx‑respone (bijv. 403 Forbidden).
Het verificatieproces gebeurt meestal in een SIP‑proxy of SBC voordat het verzoek naar de eindgebruiker wordt doorgestuurd. Omdat de handtekeningcontrole relatief lichtgewicht is (een ECDSA‑verify), kan dit in realtime worden uitgevoerd zonder significante vertraging.
Beperkingen en waarom robocalls toch doorkomen
Hoewel STIR/SHAKEN een krachtig mechanisme biedt voor het verifiëren van het bellersnummer binnen een vertrouwde keten, zijn er verschillende redenen waarom ongewenste oproepen soms toch het netwerk binnen kunnen komen:
-
Internationale oproepen en ongelijke adoptie
STIR/SHAKEN is verplicht in veel landen, maar niet wereldwijd. Een oproep die buiten het bereik van een STIR/SHAKEN‑gebied begint (bijv. vanuit een land zonder verplichte implementatie) kan geen geldig PASSporT‑token meekrijgen. De ontvangende partij ziet dan geen Identity‑header of een ongeldige token en kan, afhankelijk van lokaal beleid, het verzoek toch doorlaten. -
Legacy‑ en niet‑SIP netwerken
Oudere TDM‑circuit‑switched netwerken, ISDN‑PRIs of sommige mobiele netwerken transporteren oproepen zonder SIP‑signaling. Deze netwerken hebben geen mogelijkheid om een Identity‑header toe te voegen of te verifiëren. Wanneer zo’n oproep later wordt omgezet naar SIP (bijv. via een media‑gateway), ontbreekt het token tenzij de gateway zelf attestatie uitvoert, wat niet altijd het geval is. -
Foutieve of zwakke implementatie
Sommige providers plaatsen een Identity‑header maar gebruiken een ongeldige of verlopen sleutel, of ze stellen het attestatieniveau te laag (bijv. altijd C) om kosten te besparen. Een verifierende partij die strikt op volledige attestatie A eist, kan deze oproepen blokkeren, maar als het beleid permissief is (bijv. elke geldige token wordt geaccepteerd) kan een ongeldig of matig attestatie‑token nog steeds worden geaccepteerd. -
Numero‑spoofing buiten de attestatieketen
Een kwaadwillende kan een geldig nummer gebruiken dat wel tot zijn eigen bereik behoort (bijv. een geleasd nummer) en toch een ongewenste oproep plegen. Omdat het nummer rechtmatig aan de partij is toegewezen, zal attestatie A mogelijk zijn en de oproep wordt als “geverifieerd” gezien, ondanks de kwaadwillende inhoud. STIR/SHAKEN lost dus niet de inhoud van de oproep op, maar alleen de authenticiteit van het nummer. -
Ontbrekende of vertraagde publicatie van sleutels
Het verificatieproces is afhankelijk van de beschikbaarheid van het publieke certificaat van de attesterende partij. Als de URI ontoegankelijk is (vanwege DNS‑problemen, firewall‑regels of een tijdelijke storing) kan de verifierende partij het token niet valideren. Afhankelijk van lokale fail‑open‑of‑fail‑closed beleid kan het verzoek toch worden doorgelaten. -
Replay‑aanvallen en beperkte nonce‑gebruik
Het PASSporT‑token bevat eeniatenexpveld, maar geen unieke nonce per oproep. Een aanvaller die een geldig token interceptieert kan dit binnen de geldigheidsduur opnieuw gebruiken voor een andere oproep met hetzelfdeorig.tnendest.tn. Sommige implementaties beperken de hergebruik van een token door een cached‑check op(origId, iat)uit te voeren, maar dit is niet verplicht in de specificatie.
Deze factoren laten zien dat STIR/SHAKEN een belangrijke stap is richting meer vertrouwde signaling, maar dat het geen volledig plug‑and‑play oplossing is voor alle vormen van ongewenste oproepen. Een effectieve strategie combineert STIR/SHAKEN met aanvullende maatregelen zoals:
- Robuuste beleidsregels op basis van attestatieniveau (bijv. alleen A‑attestatie toestaan voor directe klant‑oproepen).
- Real‑time analyse van oproep‑patronen (aanroep frequentie, geografische anomalieën).
- Samenwerking met internationale regelgevende lichamen om de adoptie van STIR/SHAKEN wereldwijd te vergroten.
- Het inzetten van call‑blocking‑lijsten en machine‑learning‑gebaseerde scoring naast de technische verificatie.
Praktische checklist
- Controleer of elke uitgaande SIP‑request een Identity‑header bevat met een geldige URL naar het publieke certificaat van de attesterende partij.
- Valideer de algoritme‑parameter (
alg) in de Identity‑header; alleen sterke algoritmen zoals ES256 of RS256 mogen worden gebruikt. - Implementeer een caching‑mechanisme voor gedownloaded certificaten (bijv. geldig voor 24 uur) om herhaalde HTTP‑calls te verminderen terwijl revocatiecontrole (OCSP/CRL) nog steeds wordt uitgevoerd.
- Log het resultaat van elke verificatie (succes, mislukte handtekening, verlopen token, ongeldig attestatieniveau) samen met de bijbehorende
Call-IDvoor latere analyse. - Definieer een duidelijk beleid: bijvoorbeeld
A→ verzoek doorlaten,B→ verzoek markeren voor verdere screening,C→ verzoek alleen doorlaten als het afkomstig is van een vertrouwde internationale partner.
- Test de stroom met zowel geldige als ongeldige tokens (bijv. handmatig een JWT met een verkeerde signature invoegen) om te controleren of de verifierende partij het juiste foutcode teruggeeft (bijv. 403 Forbidden).
- Zorg dat firewall‑regels de benodigde poorten voor het ophalen van certificaten (HTTPS, poort 443) openhouden, zelfs wanneer de SIP‑media‑poorten (bijv. 10000‑20000) beperkt zijn.
- Voer periodieke audits uit op de attestatieniveaus die daadwerkelijk in het netwerk voorkomen om ongewenste verlagingen (bijv. steeds meer C‑attestatie) vroegtijdig te signaleren.
Verder lezen
- RFC 8224: Authenticated Identity Management in the Session Initiation Protocol (SIP) – kernspecificatie van het PASSporT‑token en de Identity‑header.
- RFC 8225: Personal Assertion Token (PaSSporT) Extension for Telephone Contexts – uitbreiding voor het
tel:‑uri‑formaat en nummer‑specificatie. - RFC 8226: PASSporT: Personal Assertion Token for Diversified Use – algemene PASSporT‑structuur die ook buiten STIR/SHAKEN wordt gebruikt.
- FCC STIR/SHAKEN Order (2020) – Amerikaanse regelgevende kader die verplichting oplegt voor grote voice‑providers.
- GSMA IR.88: STIR/SHAKEN Implementation Guidelines – wereldwijde richtlijn voor carriers en netwerkapparatuur.
- NISTIR 8314: Considerations for Mitigating Robocalls Using STIR/SHAKEN – technische analyse van de effectiviteit en resterende uitdagingen.
Met deze kennis kunnen VoIP‑ingenieurs, PBX‑beheerders en technische besluitvormers een weloverwogen beslissing nemen over de implementatie van STIR/SHAKEN, de bijbehorende beleidsregels en de aanvullende maatregelen die nodig zijn om de impact van robocalls verder te verminderen.