Uit OpenSupport

Ga naar: navigatie, zoeken

Inhoud

Aladdin eToken Pro32k

Deze quickguide is oorspronkelijk geschreven door Florian Overkamp. De content is hier geplaatst om aanvullingen en correcties eenvoudiger te maken.

Security is een hot topic. Hoe zorg je dat je je werk doet met een minimaal risico op hackers en andere ellende. Om dit te tackelen zijn een aantal producten op de markt, waarbij het concept van de USB-stick met cryptografie erg populair is. In de regel heb je een pincode nodig om de key te ontsluiten: Een combinatie dus van 'what you know' en 'what you have'.

Als open source adept moet je natuurlijk ook checken of zo'n key wel ondersteund wordt op jouw favoriete platform. Op http://www.opensc-project.org vind je hierover veel informatie. Als je echter goed gaat zoeken kom je tot de conclusie dat veel van de daar genoemde producten toch wat lastig te vinden zijn, of alweer zijn vervangen door nieuwere varianten. En let wel: in crypto-land is backward compatibility vaak ver te zoeken.

Over de Cryptoflex eGate is voldoende geschreven. Deze key, die 2048-bit RSA encryptie ondersteunt, is erg populair in de linux community. Helaas is de key inmiddels steeds slechter te krijgen omdat Gemalto alweer nieuwere keys op de markt brengt. Deze nieuwere keys zijn echter allemaal op java gebaseerd en zijn niet zonder meer onder linux te gebruiken.

Ik werd door een leverancier gewezen op de keys van Aladdin. De eToken Pro32k is een eenvoudig token met 1024-bit RSA encryptie (@@FIXME@@ de specs zeggen dat ie ook 2048-bit kan, maar dat is ons nog niet gelukt. Dit moet nog nader worden uitgezocht). Dit token is leverbaar met verschillende software-revisies op de ingebouwde smartcard. Revisie M4.0.1 is compatible met OpenSC/OpenCT. Dit type is dan ook waarvan in deze guides wordt uitgegaan.

Debian Etch

De Aladdin eToken Pro32k firmware M4.01 werkt standaard al samen met het OpenSC project. Het is practisch om de udev-regels voor deze USB-key aan te passen zodat OpenCT automatisch de insert/remove meekrijgt.

/etc/udev/rules.d/aladdin-etoken.rules:

# OpenCT
ACTION=="add", SUBSYSTEM=="usb_device", \
  SYSFS{idVendor}=="0529", SYSFS{idProduct}=="0514", \
    RUN+="/lib/udev/openct_usb"

# Sigh: Kernel 2.6.22+ changed the SUBSYSTEM name...
 ACTION=="add", SUBSYSTEM=="usb", \
  SYSFS{idVendor}=="0529", SYSFS{idProduct}=="0514", \
    RUN+="/lib/udev/openct_usb"

Voor de volgende toepassingen moet echter nog wat werk worden verzet:

  • ssh: Voor ssh-client moet het openssh-client package worden gelinked aan opensc. Hiervoor is een minieme change nodig in de compilatie, maar omdat dit een extra dependancy oplevert aan libopensc2 wil de Debian package maintainer het nog niet algemeen maken. De benodigde patch staat hier: http://sw.simsplace.com/debian/openssh-with-opensc.patch
  • pam: Voor authenticatie met pam kan op de key een md5-sha1 hash worden gecontroleerd. De standaard RANDOM size van het libpam-p11 package is echter te groot voor deze (en vele andere) smartcard. De benodigde patch staat hier: http://sw.simsplace.com/debian/libpam-smaller-random.patch

We hebben de patches precompiled voor Debian Etch. Voeg de volgende regel aan /etc/apt/sources.list toe:

# Simsplace packages
deb http://sw.simsplace.com/debian etch main

Ubuntu Hardy

Voor udev voeg een * toe op regel 27 zodat de betreffende regel er als volgt uitziet

ENV{MODALIAS}=="usb:v0529p0514*", RUN+="/lib/udev/openct_usb"

Keys aanmaken

Als OpenSC netjes is geinstalleerd en udev signalleert het inpluggen van het eToken op de juiste manier naar OpenCT, dan kun je nu met opensc-tool aan de slag:

florian@minicooper:~$ opensc-tool -l
Readers known about:
Nr.    Driver     Name
0      openct     Aladdin eToken PRO
1      openct     OpenCT reader (detached)
2      openct     OpenCT reader (detached)
3      openct     OpenCT reader (detached)
4      openct     OpenCT reader (detached)
florian@minicooper:~$

De hoogste tijd dus om eens een key-pair aan te gaan maken. Deze commandosequence doet de truuk. Voer waar nodig je eigen gegevens in:

Note: het komende fragment is overgenomen uit de Quarantainenet howto en aangepast om aan te sluiten op de Aladdin keys. Credits where credits are due! 2. Initialisatie van het crypto-token 2.1. Inleiding

Transport Key

Het crypto-token komt standaard met een transport key. Deze key is nodig om de pkcs15 infrastructuur op de kaart te kunnen schrijven. Standaard is deze key ingebakken in de OpenSC software, dus heb je deze key niet nodig.

Security Officer Pin

Bij het aanmaken van de pkcs15 infrastructuur op het crypto-token kun je een 'Security Officer Pin' opgeven. Deze pin heb je vervolgens nodig om identities toe te voegen en te verwijderen uit je pkcs15 "file system". De 'Security Officer Pin' geeft geen toegang tot de identities zelf, dus het is veilig om voor deze pin '00000000' te kiezen.

User Pin

De 'User Pin' is de pincode die je bij normaal gebruik nodig hebt. Deze pincode beveiligt de identity zelf. Het is mogelijk meerdere 'User Pins' te hebben.

pkcs15-init opties

(fixme) Mogelijk is de optie '--reader 1' nodig. 2.2. Klaar maken voor gebruik

Het wissen van het token: (in sommige versies van OpenSC heet deze optie --erase in plaats van --erase-card)

pkcs15-init --erase-card --use-default-transport-keys

Het aanmaken van een key infrastructure op het token:

pkcs15-init --create-pkcs15 --use-default-transport-keys

2.3. Een pin + key op het token zetten

Een user authenticatie-pin aanmaken: (je kunt hier een naam aan hangen, zoals 'mijn_pin')

pkcs15-init --store-pin --auth-id 1 --label "mijn_pin" --use-default-transport-keys

Vervolgens kun je er voor kiezen om de key op het token te generen of zelf te genereren en vervolgens op het token te plaatsen. Je kunt per pin (dus per --auth-id) maar een key hebben, dus als je meerdere keys op het token wilt hebben, dan heb je ook meerdere pins nodig. (vandaar ook dat je de pin een label mee kunt geven) 2.3.1. Een key op het token zelf genereren

Een intern gegenereerde key hieraan knopen:

pkcs15-init --generate-key rsa/1024 --auth-id 1 --split-key --key-usage sign,decrypt

Voor het bouwen van een certificaat is OpenSSL met OpenSC support nodig. Tik voor het bouwen van het certificaat het volgende in:

openssl

Nu moet de engine geladen worden. Voer hiervoor het volgende commando uit (op de OpenSSL prompt):

engine dynamic \
  -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so \
  -pre ID:pkcs11 \
  -pre LIST_ADD:1 \
  -pre LOAD \
  -pre MODULE_PATH:/usr/lib/opensc-pkcs11.so

Er kan nu een certificaat gebouwd worden met:

req -engine pkcs11 -new -key id_45 -keyform engine -x509 -out key-cert.pem

De OpenSSL prompt kan dmv 'quit' verlaten worden, waarna je het certificaat kunt uploaden met:

pkcs15-init --store-certificate key-cert.pem --auth-id 1

In gebruik met OpenSSH

Zo is je key dus klaar voor gebruik. Als je de key nu in je environment wilt laden dan werkt dat grofweg zo:

florian@minicooper:~$ eval `ssh-agent`
Agent pid 8660
florian@minicooper:~$ ssh-add -s 0
Enter passphrase for smartcard:
Card added: 0
florian@minicooper:~$

Deze tools kun je natuurlijk prima inpassen in bijvoorbeeld je .xsession.

Als nu je key ook netjes wordt geinstalleerd op remote machines middels het commando ssh-copy-id dan kun je dit gebruiken om in te loggen op je servers. Als dit eenmaal werkt wordt het zinvol je huidige simpele wachtwoord (de naam van je vriendin of je geboortedatum) eens te vervangen door iets dat wordt opgelepeld door het commando 'pwgen 32 1'. Wel even veilig bewaren 'just in case'.

ssh-agent in je X-sessie knopen

Natuurlijk is het wel zo prettig om je pincode 1 keer in te tikken tijdens je X-sessie. Daarvoor is het volgende nodig:

Een askpass.pl script waarmee in een X-dialoog om je pincode gevraagd kan worden (moet natuurlijk ergens in je pad worden geplaatst):

#!/usr/bin/perl
my $prompt = join(' ', @ARGV);
system("kdialog --title 'SSH Key Passphrase' --password '$prompt' 2> /dev/null")

Een .xsession waarin ssh-agent voor je login-sessie word geladen:

#!/bin/sh
eval `ssh-agent`

En tot slot nog een plek (afhankelijk van je window manager) waar ssh-add wordt aangeroepen. In mijn geval - ik werk met KDE - is .kde/Autostart gebruikt om een ssh-add.sh te plaatsen:

export SSH_ASKPASS=askpass.pl
/usr/bin/ssh-add -s 0

In gebruik met PAM

De key is ook te gebruiken met PAM. Je hebt daarvoor het pakket libpam-p11 nodig. In /etc/pam.d/common-auth voeg je dan de volgende regel in:

auth    sufficient      pam_p11_opensc.so /usr/lib/opensc-pkcs11.so

Deze regel komt boven de aanwezige 'required' regel voor password authenticatie. Als je nu je public key in je homedirectory plaatst in de map '.eid':

mkdir ~/.eid
chmod 0755 ~/.eid
pkcs15-tool -r 45 > ~/.eid/authorized_certificates
chmod 0644 ~/.eid/authorized_certificates

En voila, als je key is ingeplugd kun je authenticeren met de pincode van je key. Voor de echte securitymaniacs: Als dit goed werkt kun je password-authenticatie natuurlijk geheel deactiveren.

Links

Persoonlijke instellingen