FreeCalypso > hg > fc-sim-tools
comparison doc/FCSIM1-programming @ 80:711f1641b19c
doc/FCSIM1-programming: update for fcsim1-program
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 09 Apr 2021 08:19:31 +0000 |
parents | 4e5586c7f275 |
children |
comparison
equal
deleted
inserted
replaced
79:2a24e94400e8 | 80:711f1641b19c |
---|---|
28 instead all PINs and IMSIs are freely assigned and programmed by downstream | 28 instead all PINs and IMSIs are freely assigned and programmed by downstream |
29 owners of each individual card. | 29 owners of each individual card. |
30 | 30 |
31 * We did pick a squatted range of ICCID numbers, and our cards have these ICCIDs | 31 * We did pick a squatted range of ICCID numbers, and our cards have these ICCIDs |
32 printed on the plastic, both on the ID-1 carrier and on the little plug-in SIM | 32 printed on the plastic, both on the ID-1 carrier and on the little plug-in SIM |
33 (2FF) piece. The rationale is that we need to able to distinguish one card | 33 (2FF) piece. The rationale is that we need to be able to distinguish one card |
34 from another visually, and because the whole purpose of ICCID is to identify | 34 from another visually, and because the whole purpose of ICCID is to identify |
35 each card as a physical artifact irrespective of logical function, this ID | 35 each card as a physical artifact irrespective of logical function, this ID |
36 number is perfect for the job. It is never transmitted over any air | 36 number is perfect for the job. It is never transmitted over any air |
37 interfaces, hence no one outside of our community needs to know or care that | 37 interfaces, hence no one outside of our community needs to know or care that |
38 we use squatted ICCIDs rather than officially allocated ones. | 38 we use squatted ICCIDs rather than officially allocated ones. |
63 is read directly from /dev/urandom, or from /dev/random if desired. Suggestions | 63 is read directly from /dev/urandom, or from /dev/random if desired. Suggestions |
64 for improvement are welcome.) fcsim1-mkprov emits its output to stdout, hence | 64 for improvement are welcome.) fcsim1-mkprov emits its output to stdout, hence |
65 it will typically need to be run with output append-redirected ('>>') to | 65 it will typically need to be run with output append-redirected ('>>') to |
66 /opt/freecalypso/sim-data/fcsim1-prov-db. | 66 /opt/freecalypso/sim-data/fcsim1-prov-db. |
67 | 67 |
68 Once the desired provisioning data have been captured in fcsim1-prov-db, this | 68 fcsim1-mkprov usage details |
69 database can be used in two ways: | 69 =========================== |
70 | 70 |
71 1) There will be an fcsim1-program utility for programming individual FCSIM1 | 71 The canonical way to run fcsim1-mkprov is as follows: |
72 cards. This program will be a wrapper around fc-simtool: it will take an | 72 |
73 ICCID on the command line (you will need to read and enter the number printed | 73 fcsim1-mkprov -n num start-iccid start-imsi >> /opt/freecalypso/sim-data/fcsim1-prov-db |
74 on the plastic), it will retrieve the right record from fcsim1-prov-db, it | 74 |
75 will construct a one-time (under /tmp, automatically deleted when done) | 75 -n option specifies the number of card entries to generate; if this option is |
76 command script for fc-simtool based on the per-card data, and it will exec | 76 omitted, only one card entry will be generated. The starting ICCID needs to be |
77 fc-simtool with this command script. | 77 given in 18-digit form _without_ the Luhn check digit - fcsim1-mkprov will |
78 | 78 increment this ICCID for the number of card entries to be generated (we will |
79 2) Once I (Mother Mychaela) climb the learning curve for getting Osmocom CNI | 79 always supply consecutively-numbered cards to anyone buying a small batch from |
80 software up and running on a server, I will produce appropriate tools for | 80 us), and it will generate the correct Luhn check digit for each ICCID. However, |
81 extracting IMSI and Ki from fcsim1-prov-db and turning them into whatever | 81 you can use our FC SIM tools shorthand notation for the starting ICCID: for |
82 format is needed for import into OsmoHLR subscriber database. | 82 example, if you enter 8901557-100, that entry will be automatically expanded to |
83 18-digit 890155700000000100. IMSIs are expected to always be 15 digits long, | |
84 but the same shorthand notation can be used here too. | |
85 | |
86 The following additional options are accepted: | |
87 | |
88 -a [0-9] | |
89 | |
90 The argument for this option is a single digit from '0' to '9'; the | |
91 effect is to set ACC for the first card entry to be generated: -a 0 | |
92 corresponds to ACC=0001, -a 1 corresponds to ACC=0002, and so forth | |
93 through -a 9 corresponding to ACC=0200. When many card entries are | |
94 generated (-n option), subsequent card ACCs will automatically increment | |
95 and circle, i.e., bit-shift to the left until ACC=0200 is reached, then | |
96 circle back to ACC=0001 and so on. | |
97 | |
98 -m start-msisdn | |
99 | |
100 By default (in the absence of -m option) each fcsim1-prov-db record | |
101 contains only ICCID, IMSI, ACC and Ki as shown above. Running | |
102 fcsim1-mkprov with -m start-msisdn causes incrementing MSISDN numbers | |
103 to be generated as well, appearing as an extra MSISDN=xxx field in each | |
104 fcsim1-prov-db record. | |
105 | |
106 -r /dev/random | |
107 | |
108 Read random bytes for Ki from /dev/random instead of /dev/urandom. | |
109 | |
110 Programming cards with fcsim1-program and fc-simtool | |
111 ==================================================== | |
112 | |
113 Once the desired provisioning data have been captured in fcsim1-prov-db, the | |
114 following procedure is envisioned for actual card programming: | |
115 | |
116 1) You pick the card to be programmed from the unprogrammed bin; | |
117 | |
118 2) While holding the card in your hand and looking at the ICCID printed on the | |
119 plastic, you enter a command line similar to this example: | |
120 | |
121 fcsim1-program -c fcsim1-defprog 8901557-0008 | fc-simtool -p0 | |
122 | |
123 Type in the needed command line, but don't press Enter yet... | |
124 | |
125 3) Insert the card into your reader stand (assuming that you will be using a | |
126 stand-type card programming station such as HID Omnikey 3121), at which | |
127 point the ICCID printed on the card is no longer visible. | |
128 | |
129 4) Press Enter to execute the command you typed in step 2 above. | |
130 | |
131 Now the explanation: fcsim1-program is a utility that generates per-card | |
132 programming command scripts to be fed to fc-simtool. It requires the ICCID | |
133 (read from the plastic with human eyeballs) to be entered on the command line, | |
134 and this time the ICCID being entered needs to include the Luhn check digit: | |
135 after all, you are simply entering the number from the plastic, and the printed | |
136 ICCID does include the Luhn check digit. Our FC SIM tools shorthand notation | |
137 for skipping the long string of zeros in the middle still works though! | |
138 | |
139 After verifying the Luhn check digit, fcsim1-program will look up the entered | |
140 ICCID in fcsim1-prov-db (if there is no entry for this ICCID, it is an error), | |
141 and it will retrieve all per-card provisioning parameters from there. The | |
142 programming command script generated by fcsim1-program (intended to be piped | |
143 directly into fc-simtool) has the following structure: | |
144 | |
145 verify-ext 11 88888888 # ADM11 authentication | |
146 exec fcsim1-defprog # common command script specified with -c | |
147 write-iccid XXXX # programming per-card ICCID | |
148 write-imsi XXXX # programming per-card IMSI | |
149 write-acc XXXX # programming per-card ACC | |
150 grcard2-set-ki XXXX # programming per-card Ki | |
151 | |
152 If the card record in fcsim1-prov-db includes the optional MSISDN= field | |
153 (generated with fcsim1-mkprov -m option), the script generated by fcsim1-program | |
154 will also include a pb-update-imm command to write the MSISDN record. | |
155 | |
156 Common command scripts: only ICCID, IMSI, ACC, Ki and optional MSISDN are | |
157 expected to be different for each individual card, whereas all other SIM card | |
158 programming is expected to be the same for all cards in a given fiefdom. | |
159 Therefore, each tribal chieftain who is going to run his or her own GSM network | |
160 will need to create their own custom common command script based on | |
161 fcsim1-defprog: for example, for our own Themyscira Wireless operation we have | |
162 our own private themwi-prog script that is based on fcsim1-defprog and takes | |
163 its place. | |
164 | |
165 Philosophy regarding ICCID | |
166 ========================== | |
167 | |
168 Our workflow is set up so that whenever you program or reprogram a card, you | |
169 have to read the ICCID from the plastic with your eyeballs and enter it on the | |
170 command line. Our fcsim1-program | fc-simtool pipeline programs the EF_ICCID | |
171 record, but nowhere in our current workflow do we read it back for further | |
172 database lookups. | |
173 | |
174 We have considered an alternative approach of programming EF_ICCID (to match | |
175 the number printed on the plastic) on all of our FCSIM1 cards at FreeCalypso HQ, | |
176 and then expecting downstream card users to run tools that read EF_ICCID from | |
177 the card. However, this approach has been rejected because unlike | |
178 sysmoISIM-SJA2, GrcardSIM2 cards allow EF_ICCID to be freely rewritten like any | |
179 other admin-write file, thus even if we program it correctly at FreeCalypso HQ, | |
180 it is always possible for EF_ICCID to become messed up further downstream. But | |
181 the laser marking of ICCID on the plastic is truly immutable, hence the most | |
182 reliable workflow for unconditionally bringing each card to the desired correct | |
183 state irrespective of prior programming state is to read the ICCID from the | |
184 plastic with human eyeballs, enter it on the command line, and have the tools | |
185 unconditionally program it. | |
186 | |
187 Philosophy regarding ADM keys | |
188 ============================= | |
189 | |
190 The idea is similar to the one for ICCID: let's eliminate any dependencies on | |
191 prior state of each card as much as possible. Based on this philosophy, we | |
192 currently leave the ADM11 key (SUPER ADM which supersedes ADM5 and all lower | |
193 PINs) at the factory default of 88888888, and we discourage changing it. If | |
194 someone desires the traditional security model where an operator programs SIMs | |
195 and then prevents subscribers from being able to read their Ki, then you will | |
196 have to change your ADM11 key (and ADM5 too, for good measure) to true per-card | |
197 secrets - but then you won't be able to freely rerun programming scripts without | |
198 caring about prior state. | |
199 | |
200 For those who wish to change their ADM11 key, we provide low-level | |
201 grcard2-set-super and grcard2-set-super-hex commands that do the deed, but our | |
202 higher-level fcsim1-mkprov + fcsim1-program suite does not currently have any | |
203 sensible support for secure ADM11 (or ADM5) keys. If someone desires such | |
204 functionality, we can implement it as paid feature development, but probably | |
205 not otherwise. | |
206 | |
207 OsmoHLR integration | |
208 =================== | |
209 | |
210 Once I (Mother Mychaela) climb the learning curve for getting Osmocom CNI | |
211 software up and running on a server, I will produce appropriate tools for | |
212 extracting IMSI and Ki from fcsim1-prov-db and turning them into whatever | |
213 format is needed for import into OsmoHLR subscriber database. |