Data encryption
Data encryption ensures that only the authorized users in a channel communicate with each other. This ensures that potential eavesdroppers cannot access sensitive and private information shared in a channel. While not every use case requires data encryption, Signaling provides built-in encryption methods that guarantee data confidentiality during transmission.
This page shows you how to integrate built-in data encryption into your app using Signaling.
Understand the tech
The following figure shows the call flow for the data encryption:
All users in a channel must use the same encryption configuration to initiate agoraEngine
and enable encryption before joining a channel. If you don’t have the correct configuration, you cannot decrypt channel content. Best practice is that your authentication system generates a new key and salt regularly.
Signaling provides security for user applications in the following ways:
- Transport layer encryption: for data transmission between your app and Agora SD-RTN™.
- Message encryption: each message is protected with end-to-end AES_256_GCM encryption protection.
- Token authorization - time-based access access control strategy.
To ensure secure communication, your app uses the same SSL key and salt to encrypt and decrypt data in the channel. You use the key and salt to create an encryption configuration. Agora SD-RTN™ uses the encryption configuration to encrypt a stream and sends it to remote users. When the remote user receives the encrypted data stream, the remote app decrypts the data stream using the same salt and key.
If your app must be highly secure, or meet security compliance standards like HIPAA or SOC 2 type 2, use message-level encryption. For a higher levels combine TLS encryption with end-to-end AES encryption.
Prerequisites
To follow this page, you must have:
- Setup the Signaling SDK reference app.
- Installed the latest version of OpenSSL
Implement Agora data stream encryption
To implement data encryption, do the following:
Set encryption configuration
-
Add a method to convert a hex string to ascii
-
Add a method to convert a
base64String
to aByteArray
-
Create the encryption configuration object
Apply the configuration to the Signaling Engine
Test data encryption
To test the data encryption functionality:
-
Configure the project
-
Open the file
<samples-root>/signaling-manager/src/main/res/raw/config.json
-
Set
appId
to the AppID of your project. -
Choose one of the following authentication methods:
- Temporary token:
- Generate an RTM token using your
uid
. - Set
token
to this value inconfig.json
.
- Generate an RTM token using your
- Authentication server:
- Setup an Authentication server
- In
config.json
, set:token
to an empty string.serverUrl
to the base URL for your token server. For example:https://agora-token-service-production-yay.up.railway.app
.
- Temporary token:
-
Create the encryption key and salt
In a production environment, you retrieve the encryption key and salt from an authentication server. For this code example you generate these parameters locally.
-
Create the 32-byte encryption key with the following command:
-
Create the salt with the following command
In
config.json
:- Paste the key into the
cipherKey
variable. - Paste the salt into the
salt
variable. - Set
encryptionMode
to 1.
- Paste the key into the
-
-
-
Run the reference app
- In Android Studio, connect a physical Android device to your development machine.
- Click Run to start the app.
- A moment later you see the project installed on your device.
-
Test data encryption
Login to Signaling, then send and receive secure messages.
Communication between your test devices is end-to-end encrypted. This prevents data from being read or secretly modified by anyone other than the true sender and recipient.
Reference
This section contains information that completes the information in this page, or points you to documentation that explains other aspects to this product.