2

Rich Call Data

 

Rich Call Data (RCD) uses the foundational elements of STIR/SHAKEN to deliver additional information about a call, including Caller Display Name, Reason for the Call, a brand icon or logo, and other information. Rich Call Data leverages the framework and infrastructure created by the STIR/SHAKEN framework to securely extend information about the calling party.

For a call to carry the attributes enhanced by RCD, it must follow the authentication, signing, and verification steps defined in the STIR/SHAKEN framework.

Sansay supports RCD via the use of REST and SIP interface standards. RCD can be part of an RCD passport or be included as an rcd claim of a SHAKEN passport. While the industry seems to be leaning towards the rcd claim approach, for educational purposes, we will describe both methods in this article.

For specific technical information on RCD please refer to ATIS-1000094 and IETF STIR PASSPORT RCD.

This is an example of an Identity Header carrying an RCD PASSporT:

eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NTc2NTA3LCJjcm4iOiIiLCJyY2QiOnsibmFtIjogIlNhbnNheSBTdXBwb3J0Igp9LCJyY2RpIjp7Cn19.qWIt6Kejy5rXq6uFjG99KPIAfGHxKnH7Hxc1oA1JieGe30r5nj7bunv03E8PHsvC59G-BI4N0L2sZ0244uyHbA;info=<https://cr.sansay.com/test.pem>;alg=ES256;ppt=\"rcd\"

This is the decoded version of the payload:

{
  "dest": {
    "tn": [
      "18587542211"
    ]
  },
  "orig": {
    "tn": "18587542200"
  },
  "iat": 1697576507,
  "crn": "",
  "rcd": {
    "nam": "Sansay Support"
  },
  "rcdi": {}
}

An RCD PASSporT complements SHAKEN PASSPorTs with information on the caller. In terms of SIP protocol, RCD is delivered as an additional Identity header as illustrated below.

The structure of an RCD PASSporT will vary based on its contents. Here are some of they key-pair values/elements that may exist on a RCD passport:

  • Display Name (nam). This the Display Name often associated with the From or P-Asserted-Identity headers Display Name. nam must exist in an rcd passport.
  • Reason for Call (crn).  Used to convey the reason for the call. When being used for SIP this claim is to be used as a parameter (;call-reason) in the Call-Info header. 
    Call-Info: <cid:12155551000@example.com>;purpose=jcard;call-reason= \
      "Rendezvous for Little Nellie"
  • Alternate Presenation Number (apn). Its intended semantics are to convey a number that the originating user is authorized to show to called parties in lieu of their default number.
  • Icon (icn). Is an optional HTTPS URL reference to an image resource. This icon key value should be used as a base or default method of associating an image with a calling party.  When being used for SIP [RFC3261] this claim key value used to protect the Call-Info header field with a purpose parameter value of "icon" as described in Section 20.9 [RFC3261]. Example as follows:
    Call-Info: <http://wwww.example.com/alice/photo.jpg>;
      purpose=icon
    
  • JSON Card Object (jcd). This is a passport built using a JSON object.

Here are some examples of RCD PASSPorTs with different RCD objects:

eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NjY5NjQwLCJjcm4iOiIiLCJyY2QiOnsibmFtIjogIlNhbnNheSBUQUMiCn0sInJjZGkiOnsKfX0.IfNgK8FzYCCB8UZACJBgjVMCdDkgB6Lbv84WTyyxstFGjw2GRA_ruizLW8a3RV0iZvKmb1kJ9jcKUPl9acgt6w;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"rcd\"

eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NjY5NTY1LCJjcm4iOiJQcm9kdWN0IFVwZGF0ZSIsInJjZCI6eyJuYW0iOiAiU2Fuc2F5LCBJbmMiCn0sInJjZGkiOnsKfX0.3YhaogcKFh7fLXbZ7b3iyFKZ7uJzzMGJpLRhGseO374siCF7tzOnWIj_C63PoGwSZVryyvwKWooX-UvvsSEMhQ;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"rcd\"

A JCard is a JSON object that represents a vCard (Virtual Business Card).

eyJhbGciOiJFUzI1NiIsInBwdCI6ImRpdiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiY3Iuc2Fuc2F5LmNvbS8xMTE3XzF5X25ldyJ9.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NDgwNTA4LCJjcm4iOiJ0ZXN0NCIsInJjZCI6InsgICAgICJqY2QiOiBbInZjYXJkIiwgICAgIFsgWyJ2ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJdLCAgICAgICBbImZuIix7fSwidGV4dCIsIlEgQnJhbmNoIl0sICAgICAgIFsib3JnIix7fSwidGV4dCIsIlNhbnNheSB0ZXN0OiQlXiYqXiJdLCAgICAgICBbInBob3RvIix7fSwidXJpIiwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy8wLzA1L1BhZHJlX2xvZ29fJTI4NjR4NjQlMjkucG5nIl0sICAgICAgIFsibG9nbyIse30sInVyaSIsImh0dHBzOi8vc2NhLWNyLnNhbnNheS5jb20vcmNkL1JDRF90ZXN0XzY0XzIuanBnIl0sICAgICAgIFsibG9nbyIse30sInVyaSIsImh0dHBzOi8vc2NhLWNyLnNhbnNheS5jb20vcmNkL1JDRF90ZXN0XzY0XzIuanBnIl0gICAgIF0gXSwgICAgICJuYW0iOiAiVGVzdCIsICJhcG4iOiIxMjM0NSIgICB9IiwgInJjZGkiOiJ7CiJqY2QvMS8zLzMiIDogInNoYTI1Ni1nczRUeWN6bUxZWmJFMFNrRDJ0SDUyRklNakVlK3NrZWQ3SHFKSWhSK2hVIiwKImpjZC8xLzQvMyIgOiAic2hhMjU2LUFCbmZ4TE10WThFNUtxSmtydElsUEI0TUw3Q1NGdmppekNhYnY3aTdTYlUiLAoiamNkLzEvNS8zIiA6ICJzaGEyNTYtQUJuZnhMTXRZOEU1S3FKa3J0SWxQQjRNTDdDU0Z2aml6Q2FidjdpN1NiVSIKfSJ9.IuxIrsBeIHeOZnSsevAEB6B70MW8CQCtrpAVimMn1rqXqrGSI1hs9AbQctYDP9tlQBJLwNApAeHyvHOkvyeVNw;info=<cr.sansay.com/1117_1y_new>;alg=ES256;ppt=\"rcd\"

SHAKEN PASSPorTs can be extended to support rich call data by adding an "rcd claim" within the passport. Let's take a look at an example:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9zdGktY3IuYnJhbmRlZGNhbGxpbmdpZC5jb20vZmZiODZkYmQzZTZkOWNiYTMwMzMwZTY5NWVkOTI0NTEzY2VhLnBlbSIsInBheWxvYWQiOiJ7XCJhdHRlc3RcIjpcIkFcIixcImRlc3RcIjp7XCJ0blwiOltcIjE2MTkzMzIwMDAyXCJdfSxcImlhdFwiOjE3MjY1ODYyODQsXCJvcmlnXCI6e1widG5cIjpcIjE4NTg3NTQyMjAwXCJ9LFwib3JpZ2lkXCI6XCIxMjJmNDhmYi0yMjIyLTExZWYtYWI4ZS1hMDM2OWY5YTVkYjhcIixcInJjZFwiOntcIm5hbVwiOlwiU2Fuc2F5XCIsXCJpY25cIjpcImh0dHBzOi8vY2RuLnNhbnNheS5jb20vaW1hZ2VzL2V4YW1wbGUuYm1wXCJ9LFwicmNkaSIsImlhdCI6MTcyNjYwMTk0N30.esF1yW4yr06dDA3RCNr5OQ8p3x7r445q6ZuHJr5zQME

Here's the decoded version:

{
  "alg": "ES256",
  "ppt": "shaken",
  "typ": "passport",
  "x5u": "https://sti-cr.brandedcallingid.com/ffb86dbd3e6d9cba3034325ed924513cea.pem",
  "payload": "{\"attest\":\"A\",\"dest\":{\"tn\":[\"16193320002\"]},\"iat\":1726586284,\"orig\":{\"tn\":\"18587542200\"},\"origid\":\"122f48fb-2222-11ef-ab8e-a0369f9a5db8\",\"rcd\":{\"nam\":\"Sansay\",\"icn\":\"https://cdn.sansay.com/images/example.bmp\"},\"rcdi",
  "iat": 1726601947
}

As seen, this shaken PASSPorT carries the standard parameters of SHAKEN:

  • attest
  • dest
  • iat
  • orig
  • origid

Within the passport there's also an rcd claim with the following attributes:

  • nam (required)
  • crn
  • icn (optional)

 

Here's an example request using REST

curl https://nss.sansay.com:3334/stir/v1/signing -k -X POST
  -H 'Content-Type: application/json'
  -H 'Accept: application/json'
  -H 'X-RequestID: 12345678'
  -d "{\"signingRequest\":{\"orig\":{\"tn\":\"18587542200\"},\"dest\":{\"tn\":[\"18587542211\"]},\"iat\":$(date +%s)}}"

Or simplified using get_shaken.sh 

bash get_shaken.sh 8587542200 8587542211 192.168.10.159

< HTTP/1.1 200 OK
< X-DNS-Prefetch-Control: off
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=15552000; includeSubDomains
< X-Download-Options: noopen
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< X-RequestID: 892cb1577741ea562740
< Content-Type: application/json; charset=utf-8
< Content-Length: 911
< ETag: W/"38f-KFYfBnWojDFKqa9RpikTiFdBaZo"
< Date: Wed, 18 Oct 2023 22:54:00 GMT
{"signingResponse":{"identity":["eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxODU4NzU0MjIxMSJdfSwiaWF0IjoxNjk3NjY5NjQwLCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwib3JpZ2lkIjoiMzllNmE1ZjAtNmUwOS0xMWVlLWI3MTAtYzFjMWJmZGM4ODg4In0.VUr3sK-KTsyQ6ChfEpYW79MLaaIAwbYu6OHjbhms4Dv4YCmbx8CSL6FMfXIVay1S0ulEtm7TjomAKEF5yQ4_6Q;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"shaken\"","eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NjY5NjQwLCJjcm4iOiIiLCJyY2QiOnsibmFtIjogIlNhbnNheSBUQUMiCn0sInJjZGkiOnsKfX0.IfNgK8FzYCCB8UZACJBgjVMCdDkgB6Lbv84WTyyxstFGjw2GRA_ruizLW8a3RV0iZvKmb1kJ9jcKUPl9acgt6w;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"rcd\""]}}

Interop testing remains one of the most important aspects of RCD since it requires that not only originating Service Providers support it but also Transit and Termination Providers. We recommend using the Sansay Shaken Test Number tool when testing RCD. 

1 reply

null
    • Director of Network Operations
    • sgarcia
    • 4 mths ago
    • Reported - view

    standing by to stand by...