Erste Spielereien mit einem eToken

Sicherheitssysteme sind doch immer wieder nett – vor allem wenn man sich daran versuchen darf, sie zu verstehen und womöglich auszuhebeln. Mein heutiges Opfer ist der sogenannte eToken von Aladdin.

Äußerlich gesehen ist das Ding ein USB Stick, welchen es einmal anzustöpseln gilt. Ist das geschehen gibt es zwei Dinge zu bestaunen: eines davon ist die Ausgabe von ‚lsusb‘:

Bus 003 Device 003: ID 0529:0600 Aladdin Knowledge Systems eToken Pro 64k (4.2)

und das Andere, die Nachrichten im Kernel Log:

usb 3-1: new full speed USB device using uhci_hcd and address 2
usb 3-1: New USB device found, idVendor=0529, idProduct=0600
usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: Product: Token 4.28.1.0 2.7.195
usb 3-1: Manufacturer: Aladdin Knowledge Systems Ltd.
usb 3-1: configuration #1 chosen from 1 choice

Der eToken als Solches wird zur Authentifizierung wie eine SmartCard verwendet. Ich gehe also einmal davon aus, dass es im weitesten Sinne auch eine SmartCard mit eingebautem Reader sein wird, da der Speicherplatz von gerade einmal 32K sicher keinen USB Stick als solches ausmacht. Aus diesem Grund installiere ich mir die entsprechenden OpenSC Pakete:

[ebuild N ] sys-apps/pcsc-lite-1.5.5 USE=“hal usb -static“
[ebuild N ] dev-libs/openct-0.6.17 USE=“pcsc-lite usb -doc“
[ebuild N ] dev-libs/opensc-0.11.9 USE=“nsplugin openct pcsc-lite -doc“

Danach gab es nur noch einen OpenCT Dienst zu starten und wir waren so weit für den ersten Testlauf gerüstet, welchen ich einmal durch simples Auslesen der Fakten:

# opensc-tool -l
[opensc-tool] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[opensc-tool] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
Readers known about:
Nr. Driver Name
0 openct Aladdin eToken PRO 64k
1 openct OpenCT reader (detached)

Ein Resultat und ein Erkennen der Karte nebst einer Fehlermeldung ist schon mal komisch. Also will ich es wissen und beginne mit der Initialisierung indem ich den Token lösche:

# pkcs15-init -E
[pkcs15-init] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-init] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
Using reader with a card: Aladdin eToken PRO 64k

Ob das funktioniert hat, ist abermals fraglich, aber ich bin mal so frech und werte es als Erfolg und mache den nächsten Schritt und lasse ein Profil nebst einem X.509 Zertifikat-Paar darauf generieren:

# pkcs15-init -r 0 –erase-card –create-pkcs15 –no-so-pin –label ‚Stargazers‘
[pkcs15-init] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-init] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found

Da es keine genauere Meldung gab, bin ich nun etwas irritiert. Also überprüfe ich das mal:

# opensc-tool -r 0 -f
[opensc-tool] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[opensc-tool] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
3f00 type: DF, size: 1024
select[N/A] lock[NONE] delete[NONE] create[NONE] rehab[NONE] inval[NONE] list[N/A] sec: 00:00:00:00:00:00:00:00:00:00
prop: 00:67:8C

3f005015 [\xA0\x00\x00\x00cPKCS-15] type: DF, size: 4096
select[N/A] lock[NEVR] delete[NONE] create[NONE] rehab[NONE] inval[NONE] list[N/A] sec: 00:FF:00:00:00:00:FF:00:00
prop: 00:67:8C

3f0050154401 type: wEF, ef structure: transpnt, size: 256
read[NONE] update[NONE] erase[NONE] write[NONE] rehab[NONE] inval[NONE] sec: 00:00:00:00:00:00:00:00:00
prop: 00

00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
3f0050155031 type: wEF, ef structure: transpnt, size: 256
read[NONE] update[NONE] erase[NONE] write[NONE] rehab[NONE] inval[NONE] sec: 00:00:00:00:00:00:00:00:00
prop: 00

00000000: A8 0A 30 08 04 06 3F 00 50 15 44 01 00 00 00 00 ..0…?.P.D…..
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
000000F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
3f0050155032 type: wEF, ef structure: transpnt, size: 62
read[NONE] update[NONE] erase[NONE] write[NONE] rehab[NONE] inval[NONE] sec: 00:00:00:00:00:00:00:00:00
prop: 00

00000000: 30 3C 02 01 00 04 06 27 92 7A 13 21 2C 0C 0E 4F 0<.....'.z.!,..O 00000010: 70 65 6E 53 43 20 50 72 6F 6A 65 63 74 80 0A 53 penSC Project..S 00000020: 74 61 72 67 61 7A 65 72 73 03 02 04 10 85 0F 32 targazers......2 00000030: 30 30 39 30 39 32 30 31 35 33 37 32 32 5A 0090920153722Z 3f0050154946 type: wEF, ef structure: transpnt, size: 128 read[NONE] update[NONE] erase[NONE] write[NONE] rehab[NONE] inval[NONE] sec: 00:00:00:00:00:00:00:00:00 prop: 00 00000000: 01 06 70 6B 63 73 31 35 00 00 00 00 00 00 00 00 ..pkcs15........ 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 3f002f00 type: wEF, ef structure: transpnt, size: 128 read[NONE] update[NONE] erase[NONE] write[NONE] rehab[NONE] inval[NONE] sec: 00:00:00:00:00:00:00:00:00 prop: 00 00000000: 61 20 4F 0C A0 00 00 00 63 50 4B 43 53 2D 31 35 a O.....cPKCS-15 00000010: 50 0A 53 74 61 72 67 61 7A 65 72 73 51 04 3F 00 P.StargazersQ.?. 00000020: 50 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 P............... 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

Der Test zeigt einen Haufen Daten, die offensichtlich auf den Token gepackt wurden. Um die Sache weiterzumachen, lege ich einen PIN- bzw. einen PUK Code an:

# pkcs15-init -r 0 –store-pin –label ‚Stargazers PIN‘ –auth-id 01
[pkcs15-init] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-init] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
New User PIN.
Please enter User PIN:
Please type again to verify:
Unblock Code for New User PIN (Optional – press return for no PIN).
Please enter User unblocking PIN (PUK):
Please type again to verify:

Wenn mich also nicht alles täuscht, haben wir hiermit eine PKCS#15 Struktur mit PIN/PUK angelegt und könnten uns dem ersten Zertifikat widmen und ein erstes ‚Na, wenn das mal gut geht…“ in den Raum werfen. Da wir paranoid sind, generieren wir das Ganze gleich am Key:

# pkcs15-init -r 0 –generate-key ‚rsa/1024‘ –auth-id 01 –label ‚StarKey 01‘ –public-key-label ‚Public StarKey 01‘ –split-key
[pkcs15-init] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-init] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
User PIN required.
Please enter User PIN:

Nach der inzwischen schon obligatorischen Fehlermeldung wurde der PIN prompt akzeptiert, was ich einmal als gutes Zeichen sehe. Aber um ganz sicher zu gehen, lesen wir uns mal alle Informationen aus, die wir kriegen können. Dass das nicht ohne die Fehlermeldungen geht, ist auch klar:

# pkcs15-tool –reader 0 –list-pins
[pkcs15-tool] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-tool] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
PIN [Stargazers PIN]
Com. Flags: 0x3
ID : 01
Flags : [0x32], local, initialized, needs-padding
Length : min_len:4, max_len:8, stored_len:8
Pad char : 0x00
Reference : 1
Type : ascii-numeric
Path : 3f005015

# pkcs15-tool –reader 0 –list-keys
[pkcs15-tool] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-tool] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
Private RSA Key [StarKey 01]
Com. Flags : 3
Usage : [0x4], sign
Access Flags: [0x1D], sensitive, alwaysSensitive, neverExtract, local
ModLength : 1024
Key ref : 16
Native : yes
Path : 3f005015
Auth ID : 01
ID : 45

# pkcs15-tool –reader 0 –list-public-keys
[pkcs15-tool] reader-pcsc.c:906:pcsc_detect_readers: SCardEstablishContext failed: 0x8010001d
[pkcs15-tool] reader-pcsc.c:1015:pcsc_detect_readers: returning with: No readers found
Public RSA Key [Public StarKey 01]
Com. Flags : 2
Usage : [0x4], sign
Access Flags: [0x0]
ModLength : 1024
Key ref : 0
Native : no
Path : 3f0050153048
Auth ID :
ID : 45

Offensichtlich scheint das Ganze geklappt zu haben und wir können uns Gedanken über Authentifizierung und Co machen, was aber aufgrund des Umfangs wieder ein eigenes Thema wird.

Author:

2 thoughts on “Erste Spielereien mit einem eToken”

  • I have tested today reading the token with windows again and failed.

    As a rule of thumb:

    • Linux can only read Tokens initialized with the 3.60-compat options
    • Linux using open source cannot work with windows certificates
    • Windows cannot read the Linux certificates

    Maybe worth looking into the Aladdin Stuff for Linux or dropping the project – depends.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert