SRTP is an RTP profile intended to provide encryption, message authentication and integrity, and relay attach protection to the RTP data.
SIP TLS protocol aims primarily to provide privacy and data integrity between two or more communicating computer applications.
Verify Your Version of HMP Elements
To implement these security protocols, HMP Elements must be at Version 2.2.9.3 or later.
To update your Voice Elements Platform, you must be enrolled in our support program. If your enrollment has expired, contact Support and we can renew your enrollment and assist in updating your software to the latest version. For more information, see our Support Policy.
Set up HMP Elements to Receive Secure Calls
To receive secure calls, the sender must include a cryptography key in the INVITE for the new call.
This is done by sending an INVITE with a crypto attribute of AES_CM_128_HMAC_SHA1_80, and SAVP in the m=audio line like this:
INVITE sip:184@123.45.67 SIP/2.0 ... v=0 o=- 20038 20038 IN IP4 192.168.50.22 s=SDP data c=IN IP4 192.168.50.22 t=0 0 m=audio 11848 RTP/SAVP 0 8 18 9 101 a=rtpmap:0 PCMU/8000 a=ptime:20 a=sendrecv a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15 a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:YjU5OWUwZTdddIyMTdjzzUzMzE5ODk5NjJj5WZi
This method is known as SDES (Session Description Protocol Security Descriptions) and is defined in RFC 4568.
(When using the above method, it is best to have the user or carrier connecting to HMPelements using TLS so that the SDP is encrypted. Otherwise the session key is sent in plain text.) But it will still work with UDP or TCP.
Placing Secure Calls
To PLACE secure calls you must cast the ChannelResource to a SipChannel:
SipChannel sipChannel = m_ChannelResource as SipChannel;
if (sipChannel != null)
{
sipChannel.OriginatingCallerIdName = nextStationData.CallerIdName;
sipChannel.TransportProtocol = TransportProtocol.TLS;
sipChannel.RtpEncryptionMode = RtpEncryptionMode.SecuredOnly;
}
m_channelResource.Dial(...);
Where Transport Protocol is:
// Summary:
// The Transport Protocol used for the SIP Session
public enum TransportProtocol
{
//
// Summary:
// Transport is unspecified
Unspecified = 0,
//
// Summary:
// UDP Transport
UDP = 1,
//
// Summary:
// TCP Transport
TCP = 2,
//
// Summary:
// TLS over TCP Transport
TLS = 3,
//
// Summary:
// WebRTC Socket
WebRTC = 101
}
And:
// Summary:
// The requested encryption mode for the call's RTP stream
public enum RtpEncryptionMode
{
//
// Summary:
// Only unsecured RTP will be used
UnsecuredOnly = 0,
//
// Summary:
// Only secured RTP will be used
SecuredOnly = 1,
//
// Summary:
// Secure RTP is preferred but unsecured is allowed
SecuredPreferredUnsecuredAllowed = 2,
//
// Summary:
// Unsecured RTP is preferred but secured is allowed
UnsecuredPreferredSecuredAllowed = 3
}