Uživatel:Pavlape1

Z MAM wiki

Přejít na: navigace, hledání

Obsah

[editovat] Semestrální práce - USB HW Klíč

[editovat] Algoritmus

Vstupem je 32B dlouhá náhodná hodnota. V programu v PC i MCU je obsažen 32B dlouhý "Tajný klíč". Tajný klíč je XORován s náhodnou hodnotou, z výsledku je spočítám MD5 hash, jak na MCU, tak na PC. Oba hashe se následně porovnají.

[editovat] Komunikační protokol

Celkem 38B. Formát rámce: $&OODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@$

   Hlavička 2B: $&
   OP code	2B:	
               GS	-get serial

SS -Set serial GA - GET AUTH SK - Setkey

    DATA 32B
    zápatí 2B: @$

Toto zapisuje PC do MCU, ten na základě toho připraví do bufferu odpověď, kterou si PC musí přečíst, vrátí se ve stejném formátu.


[editovat] Hardware

je velmi jednoduchý. Jedná se pouze o procesor ATMega8. Datové liky USB jsou k procesoru připojeny přes rezistory 33 Ohm na pin INT0 (D-) a INT1 (D+). Datová linka D+ je vybavena pull-up rezistorem 1,5k, což zajišťuje zvolení patřičného komunikačného režimu sběrnice USB. Procesor je taktovám krystalem na 12MHz. Protože USB pracuje s 3.3V logikou, celý procesor je napájen také tímto napětím, napájení 5V by přinášelo další problémy.

[editovat] Program MCU

Je postaven na frameworku VUSB, tzn. sw implementace rozhraní USB host v AVR. Aplikace výchází z příkladu HID-DATA. Zařízení využívá standardní HID třídu, takže není nutné vyvíjet ani instalovat žádná ovladače. Firmware

[editovat] Program PC

Je psám v jazyce C, s využitím knihoven wxWidgets pro vytvoření GUI. Umožňuje ověřit daný algoritmus, a RAW komunikaci se zařízením. MD5 je realizováno stejnou knihovnou, jako v AVR, s mírnými úpravami.

- změna klíče není zatím implementována.

Zdroják: host_app Binárka (win 32) host_app_bin

[editovat] Bugy

- program pro PC je velký, je to způsobeno s linkováním aplikace proti celému wx frameworku - včetně nepoužitých funkcí - toto by bylo možné řešit vhodným nastavením linkeru.

- Při zápisu dat vrátí ovladač chybu, i když vše proběhne správně. Je to způsobeno špatnou návratovou hodnotou funkce usbFunctionWrite(). Řešení by vyžadovalo hlubší studium protokolu HID a knihoven VUSB.

[editovat] Zdroje

Knihovna VUSB [1]

Knihovna md5 [2]

--Pavlape1 24. 4. 2011, 21:58 (UTC)

Osobní nástroje