mirror of
https://gitea.osmocom.org/sim-card/pysim.git
synced 2026-05-08 02:15:07 +03:00
Problem: When UICC/eUICC cards are deployed into the field it is often difficult to perform modifications to those cards. One important factor that makes after-deployment modifications often difficult is that the key material needed to perform the task must not be handed to the card holder due to security requirements. The presented Remote Card Procedure Framework solves this problem. It provides a so called Remote Card Procedure Client (RCPC), which is a lightwight software client which can be run by the card holder on the remote machine. With the RCPC, the card holder can access a so called Remote Card Procedure Server (RCPC), to which so called Remote Card Procedure Modules (RCPM) can subscribe and publish their functionality. With the RCPC, the card holder can browse the functionality offered by those connected modules and eventually the card holder may execute a certain procedure by passing a command to the RCPS. When a procedure is carried out, the RCPS automatically retrieves the required key material from a database or CSV file and passes those keys on to the selected RCPM. The RCPM can then use the key material to establish a secure channel to carry out the procedure. The procedure is then protected by a secure channel and the key material is never disclosed towards the card holder on the remote end. The framework is desinged in such a way that existing pySim APIs and functions can be used from the RCPM API user code. Also only minimal boilerplate code is required. The implementation also ships with a comprehensive example. Related: SYS#6959
109 lines
2.2 KiB
JSON
109 lines
2.2 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"title": "RCP Server to RCP Client",
|
|
"type": "object",
|
|
"properties": {
|
|
"rcpc_welcome": {
|
|
"type": "object",
|
|
"properties": {
|
|
"module_descr": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"cmd_descr": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"help": {
|
|
"type": "string"
|
|
},
|
|
"args": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"spec": {
|
|
"type": "object",
|
|
"properties": {
|
|
"required" : {
|
|
"type": "boolean"
|
|
},
|
|
"help": {
|
|
"type": "string"
|
|
},
|
|
"action": {
|
|
"type": "string"
|
|
},
|
|
"pytype": {
|
|
"type": "string"
|
|
},
|
|
"default" : {
|
|
"type": ["string", "integer"]
|
|
}
|
|
},
|
|
"required": [ "help" ],
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"required": [ "name", "spec" ],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [ "name", "help", "args" ],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [ "name", "cmd_descr" ],
|
|
"additionalProperties": false
|
|
}
|
|
}
|
|
},
|
|
"required": [ "module_descr" ],
|
|
"additionalProperties": false
|
|
},
|
|
"rcpc_instr": {
|
|
"type": "object",
|
|
"properties": {
|
|
"print": {
|
|
"type": "string"
|
|
},
|
|
"reset": {
|
|
"type": "null"
|
|
},
|
|
"c_apdu": {
|
|
"type": "string",
|
|
"pattern": "^[0-9,A-F]{0,512}$"
|
|
}
|
|
},
|
|
"oneOf": [
|
|
{ "required": [ "print" ] },
|
|
{ "required": [ "reset" ] },
|
|
{ "required": [ "c_apdu" ] }
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"rcpc_goodbye": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"oneOf": [
|
|
{ "required": [ "rcpc_welcome" ] },
|
|
{ "required": [ "rcpc_instr" ] },
|
|
{ "required": [ "rcpc_goodbye" ] }
|
|
],
|
|
"additionalProperties": false
|
|
}
|