VoIP Security Guide

STIR/SHAKEN Explained

8 min read  ·  Updated April 2026

STIR/SHAKEN is the FCC-mandated framework for authenticating caller ID in VoIP networks. Carriers are required to implement it, and calls that fail attestation get flagged as potential spam or dropped entirely. Here's what every VoIP engineer needs to know.

In this guide

1. What is STIR/SHAKEN?

STIR (Secure Telephone Identity Revisited) and SHAKEN (Signature-based Handling of Asserted information using toKENs) are two complementary standards that together create a framework for cryptographically signing caller ID information at the originating carrier and verifying it at the terminating carrier.

The problem they solve: VoIP made it trivially easy to spoof caller ID. Bad actors could set any number they wanted as their caller ID, enabling robocalling, fraud, and social engineering attacks. STIR/SHAKEN creates a chain of trust so terminating carriers can verify whether the calling number was legitimately assigned to the originating carrier.

The FCC mandated STIR/SHAKEN implementation for US voice carriers in 2021 under TRACED Act requirements. Non-compliant carriers face call labeling and blocking. International adoption is following, with OFCOM in the UK and CRTC in Canada implementing similar frameworks.

2. How it works technically

The STIR/SHAKEN flow has three components:

Authentication Service (originating carrier)

When a call originates, the originating carrier's Authentication Service verifies whether the caller is authorized to use the claimed calling number, then generates a PASSporT (Personal Assertion Token) — a JSON Web Token (JWT) signed with the carrier's private key. This token is inserted into the SIP INVITE as an Identity header.

Verification Service (terminating carrier)

The terminating carrier's Verification Service extracts the Identity header, retrieves the originating carrier's public certificate from a certificate repository, and validates the JWT signature. If valid, it confirms the calling number was authenticated by the originating carrier.

Certificate Repository

A public infrastructure (STI-CR) where carriers publish their public certificates. The certificate URL is embedded in the PASSporT token so verifying parties know where to retrieve it.

; STIR/SHAKEN Identity header in SIP INVITE Identity: eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jZXJ0LmV4YW1wbGUuY29tL2NlcnQucGVtIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxMjAyNTU1MDEwMCJdfSwiaWF0IjoxNzA5MDAwMDAwLCJvcmlnIjp7InRuIjoiMTIwMjU1NTAxMDAifSwib3JpZ2lkIjoiMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5YWJjIn0.signature;info=;alg=ES256;ppt=shaken

3. Attestation levels — A, B, and C

The attest field in the PASSporT indicates how confident the originating carrier is that the caller is authorized to use the claimed number:

Level A — Full Attestation
Highest trust
The carrier has a direct relationship with the customer and can verify the customer is authorized to use the calling number. The number is assigned to the customer's account. This is the gold standard — calls with A attestation are treated as legitimate by terminating carriers.
Level B — Partial Attestation
Medium trust
The carrier authenticated the originating gateway or device but cannot verify the calling number itself. Common when a carrier routes calls through an intermediary or when the customer is a business using a number that isn't in the carrier's number inventory.
Level C — Gateway Attestation
Lowest trust
The carrier received the call from an upstream carrier or gateway and cannot make any assertion about the calling number. The carrier is just passing the call through. C-attested calls are most likely to be flagged as spam or dropped by analytics engines.

From an engineering perspective: if your calls are being labeled as spam or dropped, check your attestation level. Most legitimate business VoIP deployments should be getting A or B attestation from their carrier.

4. Common failure modes

Failure 01
No Identity header (unsigned calls)
The originating carrier doesn't support STIR/SHAKEN or failed to sign the call. Calls without an Identity header receive no attestation. Terminating carriers may label these as "Unverified" or apply analytics-based spam scoring. Increasingly common as carriers implement strict blocking policies.
Failure 02
Certificate retrieval failure
The verifying carrier can't retrieve the originating carrier's certificate from the URL in the Identity header. Causes verification failure. Often due to the certificate URL being unreachable, the certificate being expired, or the STI-CR being temporarily unavailable.
Failure 03
Signature validation failure
The JWT signature doesn't validate against the retrieved certificate. Can be caused by the Identity header being modified in transit (by an intermediary that doesn't understand STIR/SHAKEN), clock skew between carriers (the iat timestamp is too old), or a certificate rotation issue.
Failure 04
Number mismatch
The calling number in the PASSporT doesn't match the From header in the SIP INVITE. This happens when intermediaries modify the From header without updating the PASSporT, or when a call is forwarded and the original calling number isn't preserved correctly.

5. STIR/SHAKEN in SIP headers

Three SIP headers are involved in STIR/SHAKEN:

Identity — Contains the signed PASSporT JWT. The info parameter points to the certificate URL. The alg parameter specifies the signing algorithm (ES256 for ECDSA). The ppt parameter specifies the PASSporT profile (shaken for STIR/SHAKEN).

From — Contains the calling number that must match the orig.tn field in the PASSporT.

P-Asserted-Identity (PAI) — Used in some implementations alongside or instead of From for the calling number assertion.

; Full INVITE with STIR/SHAKEN headers INVITE sip:[email protected] SIP/2.0 From: ;tag=abc123 To: Identity: eyJ...JWT...signature; info=; alg=ES256;ppt=shaken P-Asserted-Identity:

6. Diagnosing failures from a trace

When a STIR/SHAKEN failure is suspected:

  1. Check for the Identity header — Is it present in the outbound INVITE? If not, your originating carrier isn't signing the call.
  2. Decode the JWT — The Identity header value before the semicolon is a base64-encoded JWT. Decode it at jwt.io to inspect the attestation level, timestamp, and number claims.
  3. Check the iat timestamp — The iat (issued at) field must be within a few seconds of the current time. Calls with stale timestamps fail verification. Clock sync issues between carriers can cause this.
  4. Verify the certificate URL is reachable — Curl the URL in the info parameter. If it returns an error, the verifying carrier can't validate the signature.
  5. Compare From header to PASSporT orig.tn — These must match. If an intermediary modified the From header, the signature will fail.

7. Implementation checklist

8. Analyze your trace automatically

Paste your SIP trace into SIPSymposium for an instant AI-powered analysis. Get specific findings, severity rankings, and actionable recommendations in seconds.

Frequently asked questions

What is STIR/SHAKEN?

STIR/SHAKEN is a framework for cryptographically signing caller ID on VoIP calls. The originating carrier signs a PASSporT token (a JWT) asserting that the calling number is authorized, inserts it in the SIP Identity header, and the terminating carrier verifies the signature. It was mandated by the FCC in 2021 under the TRACED Act to combat caller ID spoofing.

What are STIR/SHAKEN attestation levels A, B, and C?

Attestation A (Full) means the carrier verified the caller is authorized to use the calling number — highest trust. Attestation B (Partial) means the carrier authenticated the device but not the specific number. Attestation C (Gateway) means the carrier is just passing the call through and cannot make any assertion about the number — most likely to be flagged as spam.

Why are my calls being flagged as spam despite STIR/SHAKEN?

Calls get flagged as spam when they receive C attestation (gateway only), when the PASSporT signature fails verification, when the iat timestamp in the token is stale, or when the certificate URL is unreachable. Check your carrier portal to confirm you are receiving A or B attestation and that your SBC is not modifying the From header after signing.

Getting calls flagged as spam or dropped?

Paste your SIP trace into SIPSymposium. The analyzer checks for STIR/SHAKEN Identity headers, decodes attestation levels, identifies missing signatures, and flags number mismatches between the PASSporT and SIP headers.

Analyze my trace Create free account
Related guides