FreeCalypso > hg > fc-sim-tools
comparison doc/Sysmocom-SIM-notes @ 56:b9fc7022f9ac
doc/Sysmocom-SIM-notes: update for current situation
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Mon, 22 Mar 2021 21:30:42 +0000 |
| parents | da6e9d0b2ee6 |
| children | 6ccc4d952830 |
comparison
equal
deleted
inserted
replaced
| 55:a754d4f117cf | 56:b9fc7022f9ac |
|---|---|
| 1 The present suite of tools (fc-simtool and fc-uicc-tool) is NOT a good fit for | 1 The current programmable SIM card model sold by Sysmocom in their webshop |
| 2 programming sysmoUSIM-SJS1 and sysmoISIM-SJA2 cards made by Sysmocom and sold | 2 (sysmoISIM-SJA2) is probably good for people who run their own cellular networks |
| 3 in their webshop, because of the following combination of factors: | 3 of the LTE/5G kind, but it is NOT a good choice for those of us who are only |
| 4 | 4 interested in GSM/2G, to the exclusion of all later G's: |
| 5 1) These cards are primarily USIM/ISIM, with classic GSM 11.11 SIM support | 5 |
| 6 regarded as "backward compatibility" - thus they have a lot of important | 6 * The triple-cut physical form factor is inferior (compared to solid-piece 2FF |
| 7 files under ADF.USIM and ADF.ISIM which are not accessible via the classic | 7 without 3FF or 4FF cuts) for use in classic GSM/2G phones with 2FF SIM |
| 8 GSM 11.11 SIM protocol. | 8 sockets. |
| 9 | 9 |
| 10 2) Our main feature-rich tool is fc-simtool, but this tool speaks only the | 10 * The presence of unwanted USIM and ISIM applications with their associated |
| 11 classic GSM 11.11 SIM protocol, hence it cannot access any of the USIM/ISIM | 11 ADF.USIM and ADF.ISIM file systems is very unpleasant: it forces us to either |
| 12 files. | 12 study up on completely unwanted-to-us USIM and ISIM specs and program all |
| 13 | 13 those files to something sensible (and just what would be sensible programming |
| 14 3) We have fc-uicc-tool which speaks the UICC protocol that is native to these | 14 of USIM and ISIM files for a 2G-only network that exists solely to provide |
| 15 Sysmocom cards, but it is only a low-level debug tool, not a feature match | 15 service to classic GSM/2G phones?), plus expend oodles of time and effort to |
| 16 to fc-simtool. | 16 develop the necessary programming tools that can write all those files under |
| 17 | 17 ADF.USIM and ADF.ISIM, or leave all those files unprogrammed, and take a |
| 18 The proper long-term solution for our 2G-centric GSM community is to get our own | 18 gamble if someone sticks the partially-programmed card (classic SIM |
| 19 SIMs made, either by paying big bucks to Sysmocom to produce a run of custom | 19 programmed, USIM and ISIM left unprogrammed) into a phone that knows about |
| 20 cards (presumably based on their current SJA2 platform) with USIM and ISIM | 20 USIM and/or ISIM. |
| 21 removed, leaving only the file system tree under MF that can be fully | 21 |
| 22 manipulated via the classic SIM protocol, or preferably by resurrecting the | 22 * Some of the advertising which Sysmocom prints on their current webshop cards, |
| 23 older Grcard SIM-only platform if possible - it may take a long time to find out | 23 plus the very name sysmoISIM (emphasizing and glorifying ISIM rather than |
| 24 if the latter option is possible or not. But in the meantime, if someone needs | 24 plain SIM) is offensive at least to me (Mother Mychaela), and should be |
| 25 to program a SIM right now, when Sysmocom webshop cards are the only available | 25 offensive to any truly devoted lover of classic GSM/2G technology. |
| 26 option, we do have limited support for programming these SIMs: | 26 |
| 27 | 27 Because of the above considerations, we (FreeCalypso) are currently in the |
| 28 * It is possible to authenticate with the ADM1 key from within fc-simtool on | 28 process of getting our own community SIMs made, to serve as an alternative to |
| 29 both sysmoUSIM-SJS1 and sysmoISIM-SJA2, as explained below. | 29 Sysmocom webshop product. Our FreeCalypso community SIMs are currently as of |
| 30 | 30 this writing (2021-03) being made for us by Grcard in China, they are a GSM-only |
| 31 * Once you have authenticated with ADM1, you can use fc-simtool admin write | 31 SIM card model (GrcardSIM2) without USIM/ISIM (they don't speak UICC protocol |
| 32 commands (write-imsi, SDN phonebook write operations, manual update-bin-imm | 32 at all, yay!), and we are having them made in a 2FF-only cut, meaning that the |
| 33 on various small transparent EFs) just as if you were working with a Grcard | 33 2FF piece is fully solid. |
| 34 SIM. | 34 |
| 35 | 35 However, despite our general dislike of Sysmocom's current USIM/ISIM-centric |
| 36 * You can also use fc-uicc-tool to access and program every file on Sysmocom | 36 product and our ongoing effort to produce a GSM/2G-centric alternative, we do |
| 37 cards, including files under ADF.USIM and ADF.ISIM - but in this case you will | 37 have some support in FC SIM tools for Sysmocom's current sysmoISIM-SJA2 card |
| 38 have to do everything manually in raw hex, with a hex data file for every | 38 and for their previous sysmoUSIM-SJS1 model. This limited support exists |
| 39 update-bin and update-rec command. | 39 because these webshop cards are very readily and inexpensively available, and |
| 40 | 40 because of natural human curiosity - we've been playing with these readily |
| 41 Authenticating with ADM1 | 41 available Sysmocom webshop cards while enduring the long delays involved in our |
| 42 ======================== | 42 Grcard-based quest for a better alternative. |
| 43 | 43 |
| 44 The method for sending your ADM1 key to the card varies depending on whether | 44 Sysmocom webshop card database |
| 45 you are in an fc-simtool or fc-uicc-tool session, and whether your card is | 45 ============================== |
| 46 sysmoUSIM-SJS1 or sysmoISIM-SJA2. There are 3 possibilities: | 46 |
| 47 | 47 Whenever you buy a 10-pack of sysmoUSIM-SJS1 or sysmoISIM-SJA2 cards from |
| 48 * If you are in an fc-uicc-tool session with either type of card, the command | 48 Sysmocom webshop, they send you an email with per-card identities and keys. |
| 49 to authenticate with ADM1 is as follows: | 49 The information in that email is essential for doing any kind of admin writes |
| 50 | 50 to the cards (the necessary ADM1 key is randomly assigned per card), and also |
| 51 verify-pin 10 xxxxxxxx | 51 for any CHV2 operations: the randomly assigned PIN1 and PUK1 are printed on the |
| 52 | 52 plastic, but not PIN2 or PUK2, which are also randomly assigned. |
| 53 where xxxxxxxx are the 8 digits of the ADM1 secret code. There are no | 53 |
| 54 restrictions as to when this command may be given in an fc-uicc-tool session. | 54 To reduce the need for manual lookups in email data, we have implemented a tool |
| 55 | 55 that converts Sysmocom webshop emails into our own database format, and we have |
| 56 * If you are in an fc-simtool session with sysmoISIM-SJA2, the command becomes: | 56 integrated support for this database into fc-simtool. (Replicating the same |
| 57 | 57 functionality in fc-uicc-tool, as would be appropriate for these UICC-native |
| 58 verify-ext 10 xxxxxxxx | 58 cards, is on the to-do list.) |
| 59 | 59 |
| 60 There are no restrictions as to when this command may be given in an | 60 Sysmocom webshop emails with USIM/ISIM card key material feature a MIME |
| 61 fc-simtool session. | 61 multipart/alternative structure with text/plain and text/html parts, with each |
| 62 | 62 part further encoded in base64. To extract the bits of interest and convert |
| 63 * If you are in an fc-simtool session with sysmoUSIM-SJS1, the command becomes: | 63 them into our sws-card-db format, follow these steps: |
| 64 | 64 |
| 65 verify-sjs1-adm1 xxxxxxxx | 65 1) Extract the text/plain portion from the MIME structure and decode it from |
| 66 | 66 base64. |
| 67 Unlike the other two cases, this command must be issued at the very beginning | 67 |
| 68 of your fc-simtool session, before any other commands. If you issue this | 68 2) Open the extracted and decoded text/plain email portion in your favourite |
| 69 command later, after some GSM 11.11 SIM APDUs have already been exchanged, it | 69 text editor and find the heading block of 19 lines, beginning with a line |
| 70 won't work. | 70 that reads "IMSI" and ending with a line that reads "KIK3". (If you bought |
| 71 the cheaper option without ADM and OTA keys, there will only be 9 lines here, | |
| 72 starting with IMSI and ending with OPC.) Then there should be a blank line, | |
| 73 followed by 19 lines of data per card (or 9 lines for sans-ADM/OTA variant), | |
| 74 with blank lines separating each card data block from the next. Extract the | |
| 75 portion beginning with the heading block and ending with the last card data | |
| 76 block in the batch. | |
| 77 | |
| 78 3) Feed the data extract from the previous step to our sws-email2db utility. | |
| 79 | |
| 80 sms-email2db sends its output to stdout, thus you should run it like this | |
| 81 | |
| 82 sws-email2db email_extract.txt >> /opt/freecalypso/sim-data/sws-card-db | |
| 83 | |
| 84 If you have bought multiple card batches from Sysmocom over the years, you will | |
| 85 need to collect those old emails and repeat the extraction procedure for each of | |
| 86 them, using the '>>' form of output redirection to gather all data in one | |
| 87 sws-card-db file. Edit the finished database file with vi if necessary. | |
| 88 | |
| 89 Using fc-simtool to program Sysmocom webshop cards | |
| 90 ================================================== | |
| 91 | |
| 92 Even though it is a UICC-native card that clearly prefers being admin-programmed | |
| 93 via the UICC protocol, sysmoISIM-SJA2 allows its ADM1 PIN to be entered in a | |
| 94 GSM 11.11 SIM protocol session with a VERIFY CHV command with P2=0x0A. | |
| 95 Therefore, the command to enter sysmoISIM-SJA2 ADM1 manually in fc-simtool is: | |
| 96 | |
| 97 verify-ext 10 xxxxxxxx | |
| 98 | |
| 99 Unlike the situation with sysmoUSIM-SJS1 (see below), there are no restrictions | |
| 100 as to when this command may be given in an fc-simtool session. | |
| 101 | |
| 102 The above is the manual command, requiring the operator to manually look up the | |
| 103 correct ADM1 key for the card being programmed. However, if you have your | |
| 104 sws-card-db file initialized with data from email per above instructions, you | |
| 105 can authenticate with ADM1 as simply as: | |
| 106 | |
| 107 sws-auth-adm1 | |
| 108 | |
| 109 This command reads the ICCID record from the card (totally immutable on SJA2 | |
| 110 cards, and always readable without depending on CHV1 status), looks up this | |
| 111 ICCID in sws-card-db, and sends a VERIFY CHV P2=0x0A command to the card with | |
| 112 ADM1 extracted from the card db record. | |
| 113 | |
| 114 The following additional commands are available that work in a similar manner: | |
| 115 | |
| 116 sws-auth-pin1 -- send VERIFY CHV1 with PIN1 from sws-card-db | |
| 117 sws-auth-pin2 -- send VERIFY CHV2 with PIN2 from sws-card-db | |
| 118 sws-pin1-disable -- send DISABLE CHV with PIN1 from sws-card-db | |
| 119 sws-pin1-enable -- send ENABLE CHV with PIN1 from sws-card-db | |
| 120 | |
| 121 sysmoUSIM-SJS1 difference | |
| 122 ========================= | |
| 123 | |
| 124 Both sysmoUSIM-SJS1 and sysmoISIM-SJA2 are UICC-native cards, and both really | |
| 125 prefer to be admin-programmed via the UICC protocol, rather than GSM 11.11 SIM | |
| 126 protocol. Both cards do allow ADM1 authentication to be performed in a GSM | |
| 127 11.11 SIM protocol session, but sysmoUSIM-SJS1 is less "happy" about it, and | |
| 128 imposes a more burdensome restriction. sysmoISIM-SJA2 allows its ADM1 key to | |
| 129 be submitted via a VERIFY CHV (CLA=A0, P2=0A) APDU in a GSM 11.11 SIM session, | |
| 130 but sysmoUSIM-SJS1 does not allow the same. sysmoUSIM-SJS1 accepts its ADM1 key | |
| 131 only via UICC-style (CLA=00) VERIFY PIN APDUs, thus at first it appears that | |
| 132 these cards cannot be admin-programmed via the classic GSM 11.11 SIM protocol. | |
| 133 They do have one open loophole, however: if the UICC-style VERIFY PIN command | |
| 134 for ADM1 is sent as the very first command in a card session, it can be followed | |
| 135 by other UICC protocol commands (making a regular UICC session), or it can be | |
| 136 followed by GSM 11.11 SIM protocol commands with CLA=A0, thus allowing one | |
| 137 special exception to the general rule which prohibits mixing these two protocols | |
| 138 in the same card session. | |
| 139 | |
| 140 Our fc-simtool command for sending SJS1 ADM1 keys in the manner this card model | |
| 141 requires is as follows: | |
| 142 | |
| 143 verify-sjs1-adm1 xxxxxxxx | |
| 144 | |
| 145 The really big restriction is that this command must be issued at the very | |
| 146 beginning of your fc-simtool session, before any other commands. If you issue | |
| 147 this command later, after some GSM 11.11 SIM APDUs have already been exchanged, | |
| 148 it won't work. For this reason, our sws-auth-adm1 "macro" command cannot be | |
| 149 used in fc-simtool with SJS1 cards: in order to use sws-card-db, one has to read | |
| 150 the ICCID record to identify the specific card out of the pool, and once some | |
| 151 APDUs have been exchanged to make that ICCID read, the special exception to the | |
| 152 protocol mixing prohibition is no longer available. One could develop a more | |
| 153 complicated system where you read the ICCID, then reset the card and have a new | |
| 154 card session beginning with ADM1 authentication - but because this | |
| 155 sysmoUSIM-SJS1 card model is no longer sold by Sysmocom, there is no | |
| 156 justification for expending the effort. | |
| 157 | |
| 158 Using fc-uicc-tool with Sysmocom webshop cards | |
| 159 ============================================== | |
| 160 | |
| 161 The UICC protocol is native to both sysmoUSIM-SJS1 and sysmoISIM-SJA2, thus | |
| 162 fc-uicc-tool works like a charm with both card models. The problem, however, | |
| 163 is that fc-uicc-tool is only a low-level debug and manual tinkering tool: it | |
| 164 can do "everything", but only 100% manually in raw hex. Most of the high-level | |
| 165 functions of fc-simtool are not replicated in fc-uicc-tool, and furthermore, an | |
| 166 approach of mindlessly translating fc-simtool high-level functions to use the | |
| 167 UICC protocol for card file access won't work either: the USIM spec definition | |
| 168 of many important files is quite different from the original DF_GSM and | |
| 169 DF_TELECOM definitions for classic SIM. | |
| 170 | |
| 171 The issue is ultimately one of project purpose and direction: FreeCalypso | |
| 172 focuses on GSM/2G to the exclusion of later G's, our preferred SIM cards are | |
| 173 our own FCSIM1, our primary SIM card manipulation tool is fc-simtool, and | |
| 174 fc-uicc-tool exists only as a bounded-effort side utility. For people who | |
| 175 prefer to work with USIM/ISIM cards natively, programming all of their new | |
| 176 files for later-G functionality, other software tool projects like pysim-shell | |
| 177 would be more appropriate. | |
| 178 | |
| 179 ADM1 and other PIN authentication in fc-uicc-tool | |
| 180 ================================================= | |
| 181 | |
| 182 If you are in an fc-uicc-tool session with either sysmoUSIM-SJS1 or | |
| 183 sysmoISIM-SJA2, the command to authenticate with ADM1 is as follows: | |
| 184 | |
| 185 verify-pin 10 xxxxxxxx | |
| 186 | |
| 187 where xxxxxxxx are the 8 digits of the ADM1 secret code. There are no | |
| 188 restrictions as to when this command may be given in an fc-uicc-tool session. | |
| 189 | |
| 190 sws-auth-* commands have not been ported over fc-uicc-tool yet, but this | |
| 191 omission will be easy to fill. | |
| 71 | 192 |
| 72 Changing the ADM1 PIN | 193 Changing the ADM1 PIN |
| 73 ===================== | 194 ===================== |
| 74 | 195 |
| 75 Experiments show that when speaking the UICC protocol to the card, the standard | 196 Experiments show that when speaking the UICC protocol to the card, the standard |
| 87 We can only surmise that there probably exist some secret commands that can | 208 We can only surmise that there probably exist some secret commands that can |
| 88 reset PUK1 and PUK2 after you've authenticated with ADM1, but they will probably | 209 reset PUK1 and PUK2 after you've authenticated with ADM1, but they will probably |
| 89 remain forever proprietary to Sysmocom, especially given the lack of any | 210 remain forever proprietary to Sysmocom, especially given the lack of any |
| 90 practical need for such downstream changing of PUK1/PUK2. | 211 practical need for such downstream changing of PUK1/PUK2. |
| 91 | 212 |
| 92 Thoughts on card (re)formatting | |
| 93 =============================== | |
| 94 | |
| 95 ETSI and 3GPP specs give many more degrees of freedom to SIM card issuers than | |
| 96 just the content of various EFs: the card issuer gets to decide which DFs and | |
| 97 EFs will be present vs. which ones won't be present at all, and for many EFs | |
| 98 the size (allocated space) is variable per the specs and up to the card issuer. | |
| 99 In the case of record-based EFs, both the record size and the number of records | |
| 100 are often left up to card issuers to tune as desired. | |
| 101 | |
| 102 In the Mother's opinion, a truly programmable SIM would be one where every | |
| 103 downstream owner of each card (not just the initial factory or the party putting | |
| 104 up big bucks for a large custom production run) can do a full reformat: erase | |
| 105 the file system and then create whatever tree of DFs and EFs she desires, with | |
| 106 full control over each file's allocated size, structure and access conditions. | |
| 107 | |
| 108 In the case of Sysmocom webshop SIMs, we (FreeCalypso) are not aware of any | |
| 109 publicly available documents describing how to perform such a reformat - it | |
| 110 appears that Sysmocom keeps this knowledge proprietary. In contrast, the older | |
| 111 Grcard-based SIMs had some publicly documented commands for erasing the card | |
| 112 and creating new directories and files: | |
| 113 | |
| 114 https://osmocom.org/projects/cellular-infrastructure/wiki/GrcardSIM | |
| 115 | |
| 116 It remains to be seen whether we (FreeCalypso) can get new SIMs from Grcard | |
| 117 which are also freely formattable. | |
| 118 | |
| 119 MSISDN misprogramming on early sysmoUSIM-SJS1 cards | 213 MSISDN misprogramming on early sysmoUSIM-SJS1 cards |
| 120 =================================================== | 214 =================================================== |
| 121 | 215 |
| 122 Referring to the previous section regarding formatting degrees of freedom, | 216 Sysmocom webshop cards (both sysmoUSIM-SJS1 and sysmoISIM-SJA2) have their |
| 123 Sysmocom webshop cards have their EF_MSISDN file allocated as 6 records of 34 | 217 EF_MSISDN file allocated as 6 records of 34 bytes each. Record length of 34 |
| 124 bytes each. Record length of 34 bytes translates into 20 bytes of alpha tag | 218 bytes translates into 20 bytes of alpha tag plus the required 14-byte structure |
| 125 plus the required 14-byte structure at the end of each record. | 219 at the end of each record. |
| 126 | 220 |
| 127 When Sysmocom made their early sysmoUSIM-SJS1 cards, they intended to program | 221 When Sysmocom made their early sysmoUSIM-SJS1 cards, they intended to program |
| 128 the first record of EF_MSISDN as +882110xxxxx, where xxxxx are equal to the last | 222 the first record of EF_MSISDN as +882110xxxxx, where xxxxx are equal to the last |
| 129 5 digits of their 901-70 IMSI and also to the last 5 content digits (before the | 223 5 digits of their 901-70 IMSI and also to the last 5 content digits (before the |
| 130 Luhn check digit) of their 8988211 ICCID. A correctly structured EF_MSISDN | 224 Luhn check digit) of their 8988211 ICCID. A correctly structured EF_MSISDN |
