Pozdrav forumaši,

prije nego što počnemo u par rečenica da objasnim šta je 2FA ili ti dvostruka potvrda identiteta za one koji nisu u toku.
Dakle dvostruka potvrda identiteta (engl. Two–step authentification) – je metod kojim korisnik nakon unošenja šifre
mora da potvrdi svoj identitet dodatnom metodom autorizacije i time dodatno potvrde svoj identitet i povećaju bezbednost
ličnih podataka odnosno svog naloga na određenom sajtu.

Ako imate nalog na GitHub-u vjerovatno ste dobili e-mail u kom piše da su počeli sa uvođenjem 2FA i da morate da podesite
2FA za vaš nalog kako bi mogli dalje da koristite njihove usluge. Za 2FA token ćemo koristi klon stlink-ovog V2 programatora
na kom ćemo da napravimo određene izmjene tako da će on da pamti verifikacioni ključ koji ćemo da koristimo za dvostruku porvrdu identiteta.
Sa aliexpressa ćemo da poručimo dva klona st-linkovog programatora koji možete da kupite sa linka
https://www.aliexpress.com/item/32860702733.html , da potrebna su dva komada jer ćemo sa jednim da programiramo drugi.
Naš uređaj nije samo ograničen na GitHub već ga možete koristiti i na drugim sajatovima koji podržvaju Webauthn/FIDO2.

Dobro da počnemo, krenućemo od hardwerskog moda kako bi nam radilo dugme koje ćemo kasnije da zalemimo na dva pina,
dakle treba da odlemimo pull-down otpornik R11



Zatim ćemo da povežemo dva stilink-a kako bi pomoću jednog programirali drugi. Sa host stilinka koji je zakačen na računar
povežite pinove na sledeći način




Sa headera koji je prikazan na slici gore povežite pin4 +3,3v na tespad targetnog stlinka koji je označen sa 3,3v,
zatim povežite pin 6 SWDIO-a sa hosta stlink-a na tespad taget-nog stlinka označenog sa SWDIO,
i na kraju povežite pin 8 SWCLK sa host stilika na testpad targetnog stlinka označenog SWCLK.

Zatim je potrebno da povežemo SWCLK i GND pinove na headeru sa dugmetom koje treba da pritisnemo prilikom autentifikacije tokena,
to bi trebalo da izgleda ovako



Zatim trebamo da kompajliramo firmware za targetni stlink pa kao root korisnik kreirajte fajl

Code:
sudo xed /etc/udev/rules.d/10-u2f-token.rules
u fajl upišite sledeće

Code:
ACTION=="add|change", KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0e90", TAG+="uaccess"
ACTION=="add|change", SUBSYSTEM=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0e90", TAG+="uaccess"
Zatim intalirajte sledeće programe za debian bazirane distribucije komanda je sledeća

Code:
sudo apt install libhidapi-hidraw0 python3-hid build-essential openssl openocd gcc-arm-none-eabi
Zatim je potrebno da instaliramo asn1crypto
Code:
pip install --user --upgrade asn1crypto
Zatim je potrebno da kloniramo u2f git repo

Code:
git clone https://github.com/gl-sergei/u2f-token.git
cd u2f-token
git submodule update --init
cd src
zatim unesite sledeću komandu
Code:
make TARGET=ST_DONGLE ENFORCE_DEBUG_LOCK=1
ta komanda će proizvesti datoteku u2f.bin u build direktorijumu
Za generisanje privatnog EC ključa potrebno je da unesete sledeću komandu

Code:
openssl ecparam -name prime256v1 -genkey -noout -outform der -out key.der
preporučujem da šifrujete svoj key.der ključ i napravite rezervnu kopiju.
Da pačujete firmware datoteku odnosno da unesete vaš ključ u firmware potrebno je da pokerente sledeću komandu

Code:
./inject_key.py --key key.der --ctr 1
Za flašovanje je potrebno da u jednom terminalu pokrenete OpenOCD

Code:
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
U drugom terminalu unesite sledeće komande

Code:
telnet localhost 4444
> reset halt
> stm32f1x unlock 0
> reset halt
> program build/u2f.elf verify reset
> shutdown
A ako nameravate da izvršite nadogradnju firmvarea proverite brojač autentifikacija a to možete da videti na Yubikey demo sajtu na adresi https://demo.yubico.com/webauthn-technical/registration.
Ako je brojač recimo na 1000 onda bi komanda bila

Code:
./inject_key.py --key key.der --ctr 1001
Za novi uređaj, možete preskočiti parametar ctr ili ga postaviti na 1

Code:
./inject_key.py --key key.der --ctr 1