Digitalni potpis 101: Primjer UniCredit SmartCard


Video


Uvod

Digitalni potpis zvuči komplicirano, ali zapravo je jednostavan koncept: dokazuješ da si ti potpisao dokument i da niko nije mijenjao sadržaj nakon potpisa.

U ovom članku pokazujem praktičan primjer korištenja UniCredit bankovne kartice (SafeNet eToken 5110) za digitalno potpisivanje na Arch Linux.


Šta je digitalni potpis?

Digitalni potpis koristi asimetričnu kriptografiju:

  1. Privatni ključ - čuvaš ga tajno (na smartcard-u)
  2. Javni ključ - dijeliš sa svima (certifikat)

Kada potpišeš dokument:

  • Kreira se hash dokumenta (otisak)
  • Hash se enkriptuje tvojim privatnim ključem
  • Rezultat je digitalni potpis

Kada neko verificira:

  • Dekriptuje potpis tvojim javnim ključem
  • Kreira hash dokumenta
  • Poredi da li se poklapaju

Ako se poklapaju = potpis je validan i dokument nije mijenjan.


Hardware

UniCredit banka koristi SafeNet eToken 5110 (USB token):

ID 0529:0620 Aladdin Knowledge Systems Token JC

Token sadrži:

  • Tvoj privatni ključ (nikada ne napušta uređaj!)
  • Certifikat sa javnim ključem
  • PIN za pristup

Instalacija na Arch Linux

1. Osnovni paketi

sudo pacman -S ccid opensc pcsc-tools
sudo systemctl enable --now pcscd

2. USB permisije

Kreirati /etc/udev/rules.d/99-etoken.rules:

SUBSYSTEM=="usb", ATTR{idVendor}=="0529", ATTR{idProduct}=="0620", MODE="0666"
sudo udevadm control --reload-rules
sudo udevadm trigger

3. SafeNet Authentication Client (AUR)

OpenSC ne podržava SafeNet eToken nativno. Potreban je proprietary modul:

yay -S sac-core sac-gui

4. Restart servisa

sudo systemctl restart pcscd

Provjera tokena

Lista čitača

opensc-tool --list-readers

Očekivani izlaz:

# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes             SafeNet eToken 5100 00 00

Lista slotova

pkcs11-tool --module /usr/lib/libeToken.so -L

Objekti na tokenu (potreban PIN)

pkcs11-tool --module /usr/lib/libeToken.so --login -O

Digitalno potpisivanje - praktični primjer

Korak 1: Kreiraj dokument

echo "Ovo je moj važan dokument" > dokument.txt

Korak 2: Potpiši dokument

pkcs11-tool --module /usr/lib/libeToken.so \
    --sign \
    --mechanism SHA256-RSA-PKCS \
    --input-file dokument.txt \
    --output-file dokument.sig \
    --login

Unesi PIN kada se zatraži.

Rezultat: dokument.sig sadrži digitalni potpis.

Korak 3: Eksportuj certifikat

# Eksport u DER formatu
pkcs11-tool --module /usr/lib/libeToken.so \
    --read-object --type cert \
    --output-file certifikat.der \
    --login

# Konverzija u PEM format
openssl x509 -inform DER -in certifikat.der -out certifikat.pem

Korak 4: Provjeri certifikat

openssl x509 -in certifikat.pem -text -noout

Primjer izlaza:

Subject: C = BA, O = e-baplus, OU = 4218025900006, CN = 0301970190015
Validity:
    Not Before: Nov  4 11:26:45 2024 GMT
    Not After : Nov  4 11:26:45 2027 GMT

Verifikacija potpisa

Primalac dokumenta može verificirati potpis:

1. Ekstraktuj javni ključ iz certifikata

openssl x509 -in certifikat.pem -pubkey -noout > javni_kljuc.pem

2. Verificiraj potpis

openssl dgst -sha256 \
    -verify javni_kljuc.pem \
    -signature dokument.sig \
    dokument.txt

Očekivani izlaz:

Verified OK

Zašto smartcard?

MetodaPrivatni ključSigurnost
Datoteka na diskuMože biti ukradenNiska
Password-protected fileMože biti kopiranSrednja
Smartcard/TokenNikada ne napušta uređajVisoka

Smartcard obavlja kriptografske operacije interno. Privatni ključ nikada ne izlazi iz uređaja - čak ni ti ne možeš da ga izvučeš!


Troubleshooting

”Permission denied” greška

# Privremeno rješenje
sudo chmod 666 /dev/bus/usb/XXX/YYY

# Trajno rješenje - udev pravilo (gore opisano)

Token se ne detektuje

# Provjeri USB
lsusb | grep -i token

# Restart servisa
sudo systemctl restart pcscd

# Detaljni log
journalctl -u pcscd -f

OpenSC ne vidi certifikat

OpenSC ima ograničenu podršku za SafeNet. Koristi libeToken.so modul umjesto OpenSC-a:

# Umjesto opensc-pkcs11.so
pkcs11-tool --module /usr/lib/libeToken.so ...

Zaključak

Digitalni potpis nije rocket science:

  1. Privatni ključ potpisuje
  2. Javni ključ verificira
  3. Hash osigurava integritet

UniCredit SafeNet eToken je praktičan primjer kako banke implementiraju digitalne potpise za svoje klijente.


Linkovi


Napomena

Članak je napisao Ernad, Claude asistirao sa strukturom.