konto usunięte

Temat: Hasła i dane chronione przez hardware

Jakiś czas temu w jednej z dyskusji na goldenline wspomniałem o kartach rozszerzeń do zabezpieczania danych. Zainspirowało mnie to aby samemu w wolnej chwili zbudować taki sprzęt. Uprościłem nieco całość i zrezygnowałem z komunikacji przez PCI na rzecz RS-232 a właściwie jego emulatora podłączonego przez USB. Dzięki temu można podłączyć taki sprzęt do niemal dowolnego komputera a ja nie musiałem siedzieć kilka dni nad specyfikacją PCI.
Całość działa na zasadzie wywołania w PHP funkcji shell_exec() z programem do obsługi tego urządzenia i parametrami np hashem lub hasłem. W wyniku zostaje zwrócona odpowiedź którą można użyć według własnych upodobań.
A na czym polega idea pomysłu? Mikrokontroler do którego przesyłamy dane jest odrębnym i szczelnym mikrokomputerem. Nie ma w nim systemu operacyjnego ani żadnego oprogramowania, działa jedynie prosty program do komunikacji oparty na odczytywaniu pamięci i operacjach bitowych. Nie ma możliwości wykorzystania jakiejkolwiek dziury w oprogramowaniu aby dostać się do jego wnętrza i odczytać dane. Co więcej wyjścia służące do programowania nie są fizycznie podłączone z serwerem więc nie istnieje sposób aby w jakikolwiek sposób zrobić coś innego niż przewidział twórca. Co prawda istnieją jeszcze jakieś opcje serwisowe i musiałbym doczytać w dokumentacji czy na 100% wszystkie możliwości są wzięte pod uwagę. Jednak samo odłączenie złącz do programowania daje niemal 100% pewności że mikrokontroler jest odcięty od wszelkich opcji serwisowych.
Mając taki szczelny mikrokomputer można w nim trzymać dane które normalnie podczas włamania byłyby kradzione z dysku i pamięci RAM. Mogą to być zarówno hasła, hashe, klucze, bitcoiny czy nawet tabele SQL.
Sam mikrokontroler ma bardzo mało pamięci ale można do niego podłączyć np kartę SD 64GB i stworzyć coś w rodzaju hardware-owego dysku z hasłem. Moim zdaniem możliwości są wspaniałe, kwestia tylko pomysłu jak to wykorzystać.

Podsumuję cechy tego rozwiązania:
- brak możliwości bezpośredniego skopiowania pamięci mikrokontrolera
- brak możliwości otrzymania innych danych niż przewidział twórca
- możliwość sprzętowego opóźnienia odpowiedzi mikrokontrolera (ochrona przed brute force)

Oraz przedstawię kilka pomysłów jak ja bym to użył. Na początek system logowania który porównywałby hash w pamięci mikrokontrolera z tym przesłanym z zewnątrz, odpowiedzią byłoby false lub true. Dodając do tego kontrolę tylko losowych bitów oraz opóźnienie czasowe właściwie uniemożliwiałoby to przejecie włamywaczowi więcej niż kilku hashy w rozsądnym czasie.
Następny pomysł to zaciemniacz XOR, hasło byłoby przesyłane do mikrokontrolera gdzie przechodziłoby przez szereg warunkowych operacji XOR a następnie przez np SHA 512. Włamywacz nawet po wrzuceniu całego zestawu własnych haseł miałby potężną zagadkę po rozszyfrowaniu hashy.
Kolejna możliwość to stworzenie potężnego sejfu z danymi. Jeśli dodać spore opóźnienie sprzętowe oraz hasło o dużej długości to złamanie takiego zabezpieczenia przez włamywacza zajęłoby wiele lat. A co najważniejsze musiałby łamać hasło bezpośrednio z serwera bo skopiowanie hardware jest niemożliwe.

Zapraszam do dyskusji osoby zainteresowane takim rozwiązaniem. W obecnej chwili sprzęt jest w wersji mocno prototypowej. Połączyłem PHP z mikrokontrolerem i przed programowaniem chcę się zorientować jaka funkcjonalność będzie najciekawsza. Niestety mikrokontroler używa swojego własnego assemblera i mało prawdopodobne żeby udało mi się użyć bibliotek C dla architektury zwykłego komputera. Zapewne będę musiał sam implementować SHA 512 itp. a to wiąże się ze stratą sporej ilości czasu.