Hi all,
behind the scenes, a team at sysmocom[1] has been helping IoT MVNO onomondo[2] implementing a pure software implementation of the GSM SIM / ETSI UICC / 3GPP USIM.
The resulting software has now finally been released in the onomondo-uicc (see https://github.com/onomondo/onomondo-uicc)
The implementation covers a rather feature-complete implementation of the file system (including access rules / permission model, PIN authentication), authentication (MILENAGE), and even OTA RFM (remote file management).
You can run the code either in software (and access it via the vpcd ifd_handler to make it appear via PC/SC) or you can run it behind a SIMtrace2 in cardem mode. Or you could cross-compile the library to run on a microcontroller (assuming it has a ISO 7816 card-side UART) or directly within a cellular modem/baseband.
Of course, beyond research this is only useful in situations where you are the operator (like in a private network) and hence know the K/OPc key material that allows you access to the cellular network.
There is some overlap to the parallel work of Tomasz Lisowski's swsim[3] - sadly we were not in a position to release the onomondo-uicc code back then, so the duplication of effort could not be avoided.
Regards, Harald
[1] https://sysmocom.de/ [2] https://onomondo.com/ [3] https://github.com/tomasz-lisowski/swsim