PKCS11-Crypt

Submitted by admin on So, 11.12.2016 - 11:22

Tutorial: Ver- und Entschlüsseln mit PKCS11 kompatiblen Smartcards

Voraussetzungen und Annahmen

Das Tutorial wurde auf einem Ubuntu 10.04 PC mit einem Reiner SCT cyberJack ecom erstellt. Die Reiner SCT Treiber sind installiert. Als SmartCard wurde eine Gemalto egate verwendet. Die Treiber sind unter Reiner SCT Treiber zu finden.
Karte initialisieren

Hier kommen die PKCS15 Tools zur Anwendung

pkcs15-init -ET
pkcs15-init -CT --so-pin 123456 --so-puk 12345678
pkcs15-init -P -a 01 -T -l "test" --pin 123456 --puk 12345678 --so-pin 123456
pkcs15-init -G rsa/2048 -a 01 --key-usage sign,decrypt --pin 123456 --so-pin 123456
pkcs15-tool --read-public-key 45 > public.pem

Statt 45 ist die mit ‘pkcs15-tool -D’ zu ermittelnde ID anzugeben. Bei älteren OpenSC Versionen ist das meist 45, bei Versionen ab 12 ist das etwas in der Form 361d0b1e197b292b6a34d26d3f7a1519d599b825.

Wird ein Class 3 Reader benutzt, dann muss die PIN numerisch sein, denn andere Zeichen kann man
auf dem Keypad nicht eingeben. Die Sicherheit der PIN ergibt sich aus der Tatsache, dass nach 3 fehlerhaften Eingaben keine PIN mehr akzeptiert wird.

Der erste Befehl löscht die Karte komplett. Bemerkenswert ist besonders der 4. Befehl, hier muss unbedingt als Usage sign,decrypt verwendet werden, sonst klappt zwar die Verschlüsselung, aber die Entschlüsselung endet mit einer sehr kryptischen Fehlermeldung.
Verschlüsseln

Da hier nur der Public Key gebraucht wird, klappt das überall mit OpenSSL

openssl rsautl -encrypt -inkey public.pem -pubin -in test.txt -out test.ssl

Das File test.txt darf man 226 Bytes lang sein.

Entschlüsseln

Das Entschlüsseln erfolgt mit OpenSSL. Statt 361d0b1e197b292b6a34d26d3f7a1519d599b825 ist natürlich wieder die richtige Key-Id, die mit ‘pkcs15-tool -D’ ermittelt wird, anzugeben.

$ openssl
OpenSSL> engine -t 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
OpenSSL> rsautl -decrypt -engine pkcs11 -inkey slot_1-id_361d0b1e197b292b6a34d26d3f7a1519d599b825 -keyform engine -raw -in test.ssl -out test.txt2

Im Falle eines Class 3 Readers wird nun auf dem PIN Pad nach der Pin der Smartcard gefragt und im Erfolgsfalle findet man nun das entschlüsselte File vor.