blob: 2e525c0373ea7ef82b0fef6ffabf216239f7b86f [file] [log] [blame]
..
Copyright 2020 NXP
.. _accessManager:
========================================================================================
Access Manager: Manage access from multiple (Linux) processes to an SE05x IoT Applet
========================================================================================
- DocRevision : 0.93
- Date : 2020-10-20
Summary
========================================================
The Access Manager supports concurrent access from multiple linux processes to an
SE05x IoT applet.
The Access Manager can establish a connection to the SE05x either as a plain connection
or as an SCP03 platform connection.
Client processes connect over the JRCPv1 protocol to the accessManager.
Refer to :ref:`accessManager-concepts` for more details.
.. _accessManager-usage:
Usage
========================================================
::
The accessManager takes two optional arguments 'plain' & 'any'
'accessManager':
Platform SCP03: ON.
Incoming connection: localhost.
'accessManager plain':
Platform SCP03: OFF.
Incoming connection: localhost.
'accessManager any':
Platform SCP03: ON.
Incoming connection: any supported address.
'accessManager plain any':
Platform SCP03: OFF.
Incoming connection: any supported address.
Note:
Product Deployment => Enable Platform SCP03 & restrict incoming connection to localhost
In case STREAM sockets are used (currently the only socket type supported) client processes must connect
to port 8040.
As an example:
- The Access Manager is running on iMX and opens a listening STREAMING socket. Incoming connections can be restricted
to client processes connecting over localhost.
Example invocation. Notice that the Platform SCP03 keys are passed through an environment variable::
root@imx8mqevk:~/mnt/git/simw-top_build_imx8_5_4_24/imx_native_se050_t1oi2c# \
EX_SSS_BOOT_SCP03_PATH=/home/root/plain_scp03.txt bin/accessManager
Starting accessManager (Rev.0.9).
Protect Link between accessManager and SE: YES.
accessManager JRCPv1 (T1oI2C SE side)
******************************************************************************
Server: waiting for connections on port 8040.
Server: only localhost based processes can connect.
- client process connects via JRCPv1 to 127.0.0.1:8040
Example invocation. Notice that the server address is set through an environment variable.
In a product deployment the default server:port address can also be hard-coded to the proper value::
root@imx8mqevk:~/home/root# EX_SSS_BOOT_SSS_PORT=127.0.0.1:8040 se05x_ConcurrentEcc
.. _accessManager-build:
Build
========================================================
- The Access Manager must be built as a statically linked executable as its communication and authentication layer is different from
the client processes that connect to it.
Build settings to support access to SE05x on iMX host platform (to be applied on top of a configured host build area)::
cmake -DSCP:STRING=SCP03_SSS -DSE05X_Auth:STRING=PlatfSCP03 -DSMCOM:STRING=T1oI2C \
-DWithSharedLIB:BOOL=OFF -DPAHO_BUILD_SHARED:BOOL=FALSE -DPAHO_BUILD_STATIC:BOOL=TRUE .
cmake --build . --target accessManager
- The client processes that connect to the Access Manager must be built in a separate build environment.
All session authentication mechanisms are supported, platform SCP03 must be off (platform SCP03 is handled by the Access Manager).
Build settings for client processes connecting via Access Manager, in the example no session authentication is used (to be applied on top of a configured host build area)::
cmake -DSE05X_Auth:STRING=None -DSMCOM:STRING=JRCP_V1 .
cmake --build .
Demo: concurrent access from 2 processes using OpenSSL engine
==============================================================
- The example requires an embedded Linux platform (e.g. an iMX8) with an attached SE05X. Interaction with the iMX8 is over 3 different
shells. These shells can e.g. be established via ssh from a PC on the same network.
- Build the Access Manager in a dedicated workarea, follow build instructions as above. Select static linking, enable Platform SCP03
and use T1oI2C as communication protocol.
- Build the Plug&Trust package in a dedicated workarea, follow build instructions as above. Select None as authentication mode and
use JRCPv1 as communication protocol.
- Start the Access Manager from a dedicated shell (to simplify the demo, Platform SCP03 is not enabled)::
./accessManager plain
- Open another shell and configure the attached Secure Element once using the ssscli tool
(ensure the installed ssscli tool uses JCRPv1 as communication protocol, refer to :ref:`ssscli-interface`)::
cd <plug_and_trust>/simw-top/sss/plugin/openssl/scripts
python3 openssl_provisionEC.py --key_type prime256v1 --connection_data 127.0.0.1:8040
- From the same shell invoke the OpenSSL Engine to perform various sign/verify operations using the provisioned EC key pairs::
python3 openssl_EccSign.py --key_type prime256v1 --connection_data 127.0.0.1:8040
- Open another shell and invoke the OpenSSL Engine to perform various sign/verify operations using the provisioned EC key pairs::
cd <plug_and_trust>/simw-top/sss/plugin/openssl/scripts
python3 openssl_EccSign.py --key_type prime256v1 --connection_data 127.0.0.1:8040 --output_dirname output3
- The respective 'openssl_EccSign.py' invocations can be repeated, ensure both process invocations run in parallel.
Example programs prepared for concurrent access
================================================
The demo folder of the Plug&Trust MW package contains two SSS API based example programs that are compatible with concurrent access
requirements like:
- ability to select a specific (optional) authentication object ID
- provisioned content of secure element is not erased at project start-up
For more details on these examples refer to:
- :numref:`se05x_ConcurrentEcc` :ref:`se05x_ConcurrentEcc`
- :numref:`se05x_ConcurrentSymm` :ref:`se05x_ConcurrentSymm`
.. _accessManager-concepts:
Concepts & Features
=========================
- The Access Manager uses plain communication or platform SCP03 in the communication with the SE. Select the mode at start-up.
- Client processes connect to the accessManager using the JRCPv1 protocol
- The user session authentication type is determined at the client build time.
User session authentication is transparent to the Access Manager.
- The Access Manager ensures APDU command / response pairs associated with a client process are executed without interference
from another client process.
- The Access Manager does not connect to the SE05x at start up. It waits until a client process initiates a connection.
- When a client process selects the SE05x IoT applet the applet response is
cached by the Access Manager, a subsequent SE05x IoT applet select by a client process will simply return the cached
applet response.
- A card manager select command is intercepted by the Access Manager and a pre-cooked response is provided to the
initiating client process. No interaction with the secure element takes place.
The following figure illustrates the Access Manager is an independent process on the Embedded System
providing indirect access to the Secure Element for client processes.
.. image:: block_diagram.png
The following sequence diagram illustrates two processes connecting through the Access Manager to the Secure Element.
.. image:: 0010_2clients_none.png
Restrictions
====================
- Each user session needs to have a different authentication object; i.e. one Authentication Object
cannot be used to open multiple sessions in parallel. This limitation is inherent to the SE05x user
session concept.
- The SE05x does not support more than two active user sessions (based upon either a User ID, AES Key or EC Key
authentication object). The Access Manager does not and - conceptually - cannot monitor the number of active user sessions.
- The Access Manager only supports concurrent access to the SE05x IoT applet. Do not access
other applets than the SE05x applet through the Access Manager.
- The Access Manager does not attempt to re-establish a broken connection to the SE05x. To recognize and recover from a broken
connection, a system integrator must monitor failure to communicate to the Secure Element by the client processes.
As and if required the Access Manager must be restarted and the affected client processes must reconnect to the
Access Manager.
- A client process establishing a user session with the SE05x applet must always close the user session prior to disconnecting
from the Access Manager.
- Selecting another applet than the SE05x IoT applet is possible but strongly discouraged and not supported.
- The Access Manager **does not** :
- Handle power management
- Keep track of Secure Element resources
- In a typical deployment the Access Manager and client processes are controlled by
another product specific - entity on the Embedded System:
- In case of an applet update, the Access Manager must be shut down and control of the
secure element must be handed over to the SEMS Lite update manager.
- A credential update must be coordinated between the consuming processes and the
updating process. Such coordination is out-of-scope of the Access Manager
- Transparent usage of the OpenSSL Engine from different applications implies
either no user session (Auth=None) or using the OpenSSL Engine from
isolated environments (with different authentication settings).
This restriction does not apply to applications built directly on top of the SSS API.
- The SSS layer's implementation of multistep symmetric ciphers does
not allow concurrent execution of ciphers with the same cipher mode (e.g. twice kAlgorithm_SSS_AES_CBC).