Compare commits

...

6 Commits

Author SHA1 Message Date
Philipp Maier 137baef6d8 WIP Add full TUAK support 2023-06-13 19:51:49 +02:00
Philipp Maier 6de38540ee WIP: Prepare support for TUAK / Refactor existing code
- new classes for algorithm parameters
- new classes for key material
- algorithm type checks before reading/writing algorithm specific data
- add return types to methods
- show Ki and OP/OPc in each location
2023-06-12 15:11:13 +02:00
Philipp Maier da7e7b1ded sysmo_isim_sja2: generalize SRES derivation function text
When we print which SRES derivation function is selected, we prefix the
text output with "Milenage: ", this is not entirely correct, other
algorithm also support this setting (TUAK, XOR 3G...), so let's
generalize the text.
2023-06-08 15:51:03 +02:00
Philipp Maier b7e0c6f782 sysmo_isim_sja2: rename use_opc to milenage_use_opc
The OP / OPc parameter is purely milenage specific, so lets express this
by prefixing it with milenage_
2023-06-08 12:52:35 +02:00
Philipp Maier 1e0ea9a6a9 sysmo_isim_sja2: fix docstring 2023-06-08 12:10:22 +02:00
Philipp Maier 628ed33e2a sysmo_isim_sja2: call superclass methods with super()
Currently we call the superclass methods using the class name of the
super class. Let's use super() instead.
2023-06-08 12:08:00 +02:00
7 changed files with 908 additions and 291 deletions

View File

@ -32,7 +32,8 @@ from common import *
class Application(Common):
getopt_dump = False
getopt_show_tuak_cfg = False
getopt_write_tuak_cfg = None
# Automatically executed by superclass
def _banner(self):
@ -46,11 +47,17 @@ class Application(Common):
for opt, arg in opts:
if opt in ("-d", "--dump"):
self.getopt_dump = True
elif opt in ("-w", "--tuak-cfg"):
self.getopt_show_tuak_cfg = True
elif opt in ("-W", "--set-tuak-cfg"):
self.getopt_write_tuak_cfg = arg.split(':', 3)
# Automatically executed by superclass when -h or --help is supplied as option
def _helptext(self):
print(" -d, --dump ..................... Dump propritary file contents")
#TODO: add a help screen to explain what RMCK means
print(" -w, --tuak-cfg ................. Show TUAK configuration")
print(" -W, --set-tuak-cfg R:M:C:K ..... Set TUAK configuration")
print("")
print(" For Option -T, the following algorithms are valid:")
print('\n'.join([' %d %s' % entry for entry in sysmo_isimsja5_algorithms]))
@ -67,11 +74,15 @@ class Application(Common):
if self.getopt_dump:
self.sim.dump()
elif self.getopt_show_tuak_cfg:
self.sim.show_tuak_cfg()
elif self.getopt_write_tuak_cfg:
self.sim.write_tuak_cfg(self.getopt_write_tuak_cfg[0], self.getopt_write_tuak_cfg[1], \
self.getopt_write_tuak_cfg[2], self.getopt_write_tuak_cfg[3])
def main(argv):
Application(argv, "d", ["dump"])
Application(argv, "dwW:", ["dump"])
if __name__ == "__main__":

File diff suppressed because it is too large Load Diff

View File

@ -16,8 +16,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 1=COMP128v1
2g: 1=COMP128v1
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -40,8 +41,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 1=COMP128v1
2g: 1=COMP128v1
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA5 parameterization tool
@ -62,8 +64,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 3=COMP128v3
3G: 1=COMP128v1
2g: 3=COMP128v3
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -86,8 +89,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 3=COMP128v3
3G: 1=COMP128v1
2g: 3=COMP128v3
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA5 parameterization tool
@ -108,8 +112,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 4=MILENAGE
3G: 1=COMP128v1
2g: 4=MILENAGE
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -132,8 +137,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 4=MILENAGE
3G: 1=COMP128v1
2g: 4=MILENAGE
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA5 parameterization tool
@ -154,8 +160,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 5=SHA1-AKA
3G: 1=COMP128v1
2g: 5=SHA1-AKA
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -178,8 +185,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 5=SHA1-AKA
3G: 1=COMP128v1
2g: 5=SHA1-AKA
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA5 parameterization tool
@ -200,8 +208,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 15=XOR
3G: 1=COMP128v1
2g: 15=XOR
3g: 1=COMP128v1
4g5g: 1=COMP128v1
* Programming...
Done!
@ -224,8 +233,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 15=XOR
3G: 1=COMP128v1
2g: 15=XOR
3g: 1=COMP128v1
4g5g: 1=COMP128v1
Done!
sysmoISIM-SJA5 parameterization tool
@ -246,8 +256,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -270,8 +281,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -292,8 +304,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 3=COMP128v3
3G: 15=XOR
2g: 3=COMP128v3
3g: 15=XOR
4g5g: 15=XOR
* Programming...
Done!
@ -316,8 +329,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 3=COMP128v3
3G: 15=XOR
2g: 3=COMP128v3
3g: 15=XOR
4g5g: 15=XOR
Done!
sysmoISIM-SJA5 parameterization tool
@ -338,8 +352,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 2=COMP128v2
2g: 2=COMP128v2
3g: 2=COMP128v2
4g5g: 2=COMP128v2
* Programming...
Done!
@ -362,8 +377,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 2=COMP128v2
2g: 2=COMP128v2
3g: 2=COMP128v2
4g5g: 2=COMP128v2
Done!
sysmoISIM-SJA5 parameterization tool
@ -384,8 +400,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 3=COMP128v3
2g: 1=COMP128v1
3g: 3=COMP128v3
4g5g: 3=COMP128v3
* Programming...
Done!
@ -408,8 +425,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 3=COMP128v3
2g: 1=COMP128v1
3g: 3=COMP128v3
4g5g: 3=COMP128v3
Done!
sysmoISIM-SJA5 parameterization tool
@ -430,8 +448,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 14=XOR-2G
3G: 4=MILENAGE
2g: 14=XOR-2G
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -454,8 +473,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 14=XOR-2G
3G: 4=MILENAGE
2g: 14=XOR-2G
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -476,8 +496,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 6=TUAK
2g: 2=COMP128v2
3g: 6=TUAK
4g5g: 6=TUAK
* Programming...
Done!
@ -500,8 +521,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 6=TUAK
2g: 2=COMP128v2
3g: 6=TUAK
4g5g: 6=TUAK
Done!
sysmoISIM-SJA5 parameterization tool
@ -522,8 +544,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 6=TUAK
3G: 4=MILENAGE
2g: 6=TUAK
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -546,8 +569,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 6=TUAK
3G: 4=MILENAGE
2g: 6=TUAK
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -568,8 +592,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 14=XOR-2G
3G: 6=TUAK
2g: 14=XOR-2G
3g: 6=TUAK
4g5g: 6=TUAK
* Programming...
Done!
@ -592,8 +617,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 14=XOR-2G
3G: 6=TUAK
2g: 14=XOR-2G
3g: 6=TUAK
4g5g: 6=TUAK
Done!
sysmoISIM-SJA5 parameterization tool
@ -614,8 +640,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 4=MILENAGE
3G: 4=MILENAGE
2g: 4=MILENAGE
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -638,8 +665,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 4=MILENAGE
3G: 4=MILENAGE
2g: 4=MILENAGE
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -660,8 +688,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 6=TUAK
3G: 6=TUAK
2g: 6=TUAK
3g: 6=TUAK
4g5g: 6=TUAK
* Programming...
Done!
@ -684,8 +713,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 6=TUAK
3G: 6=TUAK
2g: 6=TUAK
3g: 6=TUAK
4g5g: 6=TUAK
Done!
sysmoISIM-SJA5 parameterization tool
@ -706,8 +736,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -730,8 +761,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -752,8 +784,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 3=COMP128v3
3G: 4=MILENAGE
2g: 3=COMP128v3
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -776,8 +809,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 3=COMP128v3
3G: 4=MILENAGE
2g: 3=COMP128v3
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -798,8 +832,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 4=MILENAGE
2g: 2=COMP128v2
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -822,8 +857,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 4=MILENAGE
2g: 2=COMP128v2
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -844,8 +880,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 6=TUAK
2g: 2=COMP128v2
3g: 6=TUAK
4g5g: 6=TUAK
* Programming...
Done!
@ -868,8 +905,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 6=TUAK
2g: 2=COMP128v2
3g: 6=TUAK
4g5g: 6=TUAK
Done!
sysmoISIM-SJA5 parameterization tool
@ -890,8 +928,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 2=COMP128v2
3G: 14=XOR-2G
2g: 2=COMP128v2
3g: 14=XOR-2G
4g5g: 14=XOR-2G
* Programming...
Done!
@ -914,8 +953,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 2=COMP128v2
3G: 14=XOR-2G
2g: 2=COMP128v2
3g: 14=XOR-2G
4g5g: 14=XOR-2G
Done!
sysmoISIM-SJA5 parameterization tool
@ -936,8 +976,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 5=SHA1-AKA
3G: 15=XOR
2g: 5=SHA1-AKA
3g: 15=XOR
4g5g: 15=XOR
* Programming...
Done!
@ -960,8 +1001,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 5=SHA1-AKA
3G: 15=XOR
2g: 5=SHA1-AKA
3g: 15=XOR
4g5g: 15=XOR
Done!
sysmoISIM-SJA5 parameterization tool
@ -982,8 +1024,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
@ -1006,8 +1049,9 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 1=COMP128v1
3G: 4=MILENAGE
2g: 1=COMP128v1
3g: 4=MILENAGE
4g5g: 4=MILENAGE
Done!
sysmoISIM-SJA5 parameterization tool
@ -1028,8 +1072,9 @@ Authenticating...
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2G: 14=XOR-2G
3G: 6=TUAK
2g: 14=XOR-2G
3g: 6=TUAK
4g5g: 6=TUAK
* Programming...
Done!
@ -1052,7 +1097,8 @@ Reading Authentication parameters...
* Initalizing...
* Reading...
* Current algorithm setting:
2G: 14=XOR-2G
3G: 6=TUAK
2g: 14=XOR-2G
3g: 6=TUAK
4g5g: 6=TUAK
Done!

View File

@ -1,6 +1,30 @@
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 sysmocom - s.f.m.c. GmbH
Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
ISIM Application installed
USIM Application installed
Authenticating...
* Remaining attempts: 3
* Authenticating...
* Authentication successful
* Remaining attempts: 3
Programming Authentication parameters...
* Initalizing...
* New algorithm setting:
2g: 4=MILENAGE
3g: 4=MILENAGE
4g5g: 4=MILENAGE
* Programming...
Done!
sysmoISIM-SJA5 parameterization tool
Copyright (c) 2023 sysmocom - s.f.m.c. GmbH
Trying to find card with ATR: 3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 35 75 30 35 02 59 C4
Initializing smartcard terminal...
* Detected Card IMSI: 901700000046734
@ -18,6 +42,9 @@ Writing OPc value...
* New OPc setting:
OPc: 000102030405060708090a0b0c0d0e0f
* Programming...
2g OPc programmed.
3g OPc programmed.
4g5g OPc programmed.
Done!
sysmoISIM-SJA5 parameterization tool
@ -39,7 +66,9 @@ Reading OP/c value...
* Initalizing...
* Reading...
* Current OP/OPc setting:
OPc: 000102030405060708090a0b0c0d0e0f
2g: OPc: 000102030405060708090a0b0c0d0e0f
3g: OPc: 000102030405060708090a0b0c0d0e0f
4g5g: OPc: 000102030405060708090a0b0c0d0e0f
Done!
sysmoISIM-SJA5 parameterization tool
@ -62,6 +91,9 @@ Writing OP value...
* New OPc setting:
OP: 840337c3d45397ce8ea8609ffdc47224
* Programming...
2g OP programmed.
3g OP programmed.
4g5g OP programmed.
Done!
sysmoISIM-SJA5 parameterization tool
@ -83,6 +115,8 @@ Reading OP/c value...
* Initalizing...
* Reading...
* Current OP/OPc setting:
OP: 840337c3d45397ce8ea8609ffdc47224
2g: OP: 840337c3d45397ce8ea8609ffdc47224
3g: OP: 840337c3d45397ce8ea8609ffdc47224
4g5g: OP: 840337c3d45397ce8ea8609ffdc47224
Done!

View File

@ -1,6 +1,8 @@
#!/bin/sh
. ./test-data
$TOOL -a $ADMPIN -T "MILENAGE:MILENAGE"
$TOOL -a $ADMPIN -C 000102030405060708090a0b0c0d0e0f
$TOOL -a $ADMPIN -o

View File

@ -13,11 +13,14 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing KI value...
Writing Key value...
* Initalizing...
* New KI setting:
KI: a0b1c2d3e4f5061728394a5b6c7d8e9f
* New Key setting:
Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
* Programming...
* 2g: Key programmed.
* 3g: Key programmed.
* 4g5g: Key programmed.
Done!
sysmoISIM-SJA5 parameterization tool
@ -35,11 +38,13 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading KI value...
Reading Key value...
* Initalizing...
* Reading...
* Current KI setting:
KI: a0b1c2d3e4f5061728394a5b6c7d8e9f
* Current Key setting:
2g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
3g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
4g5g: Key: a0b1c2d3e4f5061728394a5b6c7d8e9f
Done!
sysmoISIM-SJA5 parameterization tool
@ -57,11 +62,14 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Writing KI value...
Writing Key value...
* Initalizing...
* New KI setting:
KI: d7882eae7cd14f06108c55f8e5cffe93
* New Key setting:
Key: d7882eae7cd14f06108c55f8e5cffe93
* Programming...
* 2g: Key programmed.
* 3g: Key programmed.
* 4g5g: Key programmed.
Done!
sysmoISIM-SJA5 parameterization tool
@ -79,10 +87,12 @@ Authenticating...
* Authentication successful
* Remaining attempts: 3
Reading KI value...
Reading Key value...
* Initalizing...
* Reading...
* Current KI setting:
KI: d7882eae7cd14f06108c55f8e5cffe93
* Current Key setting:
2g: Key: d7882eae7cd14f06108c55f8e5cffe93
3g: Key: d7882eae7cd14f06108c55f8e5cffe93
4g5g: Key: d7882eae7cd14f06108c55f8e5cffe93
Done!

View File

@ -100,10 +100,13 @@ def id_to_str(table, nr):
# Convert a string back to its ID by looking it up in a given table
def str_to_id(table, string):
def str_to_id(table, string, safe_default = None):
dict_by_name = dict([(name.upper(), nr) for nr, name in table])
id = dict_by_name.get(string.upper())
if id is None:
raise ValueError('identifier (\"%s\") not in table %s' % (string, str(table)))
if safe_default != None:
return safe_default
else:
raise ValueError('identifier (\"%s\") not in table %s' % (string, str(table)))
return id