As a part of JSR 248 Mobile Service Architecture (MSA) the JSR 177 Security and Trust Services API (SATSA) is finally getting implemented in more and more handsets.

(Image from JSR 248 specification)
SATSA consists of four optional and independent APIs:
- SATSA-APDU
- SATSA-JCRMI
- SATSA-PKI
- SATSA-CRYPTO
The two first are communication APIs for smart card communication. The latter two are security APIs. SATSA is providing security and trust services by integrating a security element. SATSA is optimized for using smart cards as the security element, like the SIM card in GSM devices, but the specification opens for other types of security elements.
Even though the SATSA specification was released in 2004 I haven’t seen it widely implemented in handsets. To be MSA compliant the implementation must include the CRYPTO API. The APDU and PKI APIs must be included if the device supports an applicable security element (such as a smart card). The JCRMI API is not required at all.
I’ve tried to find out which phones supports SATSA, but it’s still hard to get the full picture in the mobile jungle.
According to this page no Nokia devises implements the full MSA specification (only MSA subset), thus SATSA is not required. Still Nokia have implemented parts of the SATSA specification on some of their platforms: Nokia Series 40 3rd edition supports the APDU API while the 5th edition supports APDU and CRYPTO. Series 60 supports CRYPTO and PKI from the 3rd edition.
When it comes to Sony Ericsson they have support for the full MSA specification in their Java Platform 8 (JP-8).
According to their homepage Motorola have one device that supports the MSA-subset and 15 that supports SATSA. I haven’t been able to find out which of the SATSA APIs Motorola have implemented.
For Samsung I didn’t find any devices that support SATSA searching at their developer site. Maybe I missed some?
You should have a look at the new device matrix provided by Sun: http://developers.sun.com/mobility/device/device to find what devices supports different JSRs.
So, the big question: How can we use the features JSR 177 provides?
The PKI API makes it possible to:
- Sign messages
- Create certificate requests
- Add a certificate or certificate URI to a certificate store
- Remove a certificate or certificate URI from a certificate store
The CRYTO API provides:
- Classes for creating message digests
- Classes for verifying digital signatures
- Ciphers to encrypt and decrypt data
The APDU API makes it possible to:
- Communicate with a Smart Card Application
The JCRMI API will most likely not be implemented in any handsets because it’s not a part of the MSA requirement.
An alternative to using the SATSA APIs is to use a 3rd party library like Bouncy Castle. Bouncy Castle is a lightweight cryptography API that can be used with Java Me. So what’s the need for SATSA?
The biggest advantage is that you can store certificates securely in the security element by the use of the PKI API. Since the signing is done inside the security element, the certificates never leave the security element. It also makes the certificates easily portable if the user switches handset. Using Bouncy Castle you have to store certificates in non secure memory like the RMS, even though it’s possible to encrypt the certificates stored in the RMS they have to be decrypted into memory before using them.
The CRYPTO API does not introduce anything we can’t do today with a 3rd party crypto API. It does not interact with the security element at all. Hopefully the cryptographic operations are faster when they are implemented natively on the device. You’ll also get a smaller JAR footprint when all the crypto packages are included in the device.
Unfortunately the SATSA APIs does not include methods for accessing randomness. This is extremely important for creating good cryptographic keys. The access to a good random source is one of the biggest lacks in Java Me security. I think SATSA would have been the right place to include such functionality.
I’m still a little confused about the APDU API. I have no previous experience with smart card communication. As far as I can see the MIDlet has to be signed to the operator domain to be able to communicate with the SIM Application Toolkit. Other applications on the smart card can be accessed by MIDlets that are in the 3rd party domain.
What I haven’t been able to find out is if it’s possible to add my own smart card application on my GSM SIM card. If you know, please leave a comment!
It’s also possible to communicate with other Smart Card slots on the device, but I haven’t seen any devices with a free Smart Card slot.
Almost 4 years after the release of the SATSA API it’s not widely implemented in the handsets. To create secure commercial applications that run on common handsets you still have to rely on 3rd party cryptography libraries (or create your own). Hopefully we’ll see more MSA full stack phones in the future!
References:
http://jcp.org/en/jsr/detail?id=177
http://developers.sun.com/mobility/apis/articles/satsa1/
http://developers.sun.com/mobility/apis/articles/satsa2/
http://developer.sonyericsson.com
“Opening the ERP application on the mobile phone should be a pleasure. That is our only criteria for success.” So says Christer Rehn, Product Director of the Agresso Group, a publicly traded company delivering Enterprise Resource Planning (ERP) systems to thousands of customers around the world.Up to now, however, Agresso’s customers have only had access to the ERP application on their work PC. During the second half of 2008, Agresso will be implementing the mBricks platform, and this will enable customers to get ERP applications directly onto their mobile phones.