No, the Android OS doesn't guarantee that intent data is not seen by anyone. Any malicious app implementing the intent filter is able to receive the message and thus get hold of your sensitive data. Encrypting data is good idea but make sure that:
- the key used for encryption is not stored on the SD card.
- you are not hard-coding the key in the app as it is very trivial to get the source from the apk.
Also, make sure that only the app(s) which are intended to receive the message (via intents) are receiving the intent and that no other app is able to receive that intent. If you want to communicate confidential data and if you know the class names the apps that would be communicating via intents, you can either ensure that only that specific app receives the intent by using the setClassname()
method of the intents. For ex:
Intent i = new Intent();
i.setClassName(“your.pkg.name”, “your.pkg.name.Destination”);
or by letting apps having only specific permissions receive the intent. For ex:
Intent i = new Intent();
i.setAction(“your.own.action”);
sendBroadcast(i, “your.own.permission”);
Source: "Seven Ways to Hang Yourself with Google Android" (Defcon 19)