Sprzętowy menedżer haseł do komputera PC

Sprzętowy menedżer haseł do komputera PC

Niemal każda usługa w sieci zabezpieczona jest hasłem dostępu. Konto w banku, poczta, fora internetowe itd. Przy ogromnej liczbie haseł, jakie w dzisiejszych czasach trzeba zapamiętać, urządzenia, które nam w tym pomagają, są na wagę złota. Oczywiście należy mieć świadomość tego, że hasło jest tylko tak bezpieczne, jak bezpieczny jest magazyn, w którym jest przetrzymywane.

Artykuł zawiera menedżera haseł. Jest to urządzenie, które przechowuje różne hasła i pozwala na automatyczne wpisywanie ich w komputerze. Sama idea nie różni się od zapisywania ich na kartce. Kluczowym aspektem jest jednak to, jak dobrze ta „kartka” jest zabezpieczona przed niepowołanym dostępem. Jak zaznacza sam twórca urządzenia – przechowywanie haseł w postaci niezaszyfrowanej jest tym samym, co trzymanie klucza do domu pod wycieraczką. Nasz dom może mieć najlepszy zamek na świecie, ale po co, jeśli klucz znajduje się w łatwo dostępnym miejscu?

Zaprezentowane urządzenie ma rozwiązać ten wskazany wyżej problem. Menedżer haseł ma za zadanie umożliwić bezpieczne przechowywanie haseł, kodów, kluczy, pinów itp. w jednym miejscu, które jednocześnie będzie dobrze zabezpieczone przed niepowołanym dostępem. Omawiany magazyn haseł to urządzenie, które ma możliwość szyfrowania zapisywanych w nim haseł, przechowywania ich we wbudowanej pamięci, a następnie bezpiecznego wysyłania haseł do innego urządzenia.

W urządzeniu można skonfigurować również bezpieczne hasło główne i modyfikowalny wektor inicjalizacji (przełączający cyklicznie klucze), aby uniemożliwić atakującemu odszyfrowanie haseł po uzyskaniu fizycznego dostępu do samego urządzenia menedżera.

Potrzebne elementy

Wszystkie potrzebne do zbudowania systemu elementy pokazano na fotografii 1. Do budowy zasadniczego elementu – magazynu haseł, potrzebne są następujące komponenty:

  • moduł ESP8266,
  • ekran TFT LCD o przekątnej 1,77” z kontrolerem ST7735,
  • moduł Arduino Nano, Uno lub inna kompatybilna płytka z mikrokontrolerem,
  • klawiatura z interfejsem PS/2,
  • złącze PS/2 Port,
  • opornik o rezystancji 580 Ω.

Do zestawienia drugiej części systemu, czyli odbiornika danych (czyli haseł) z ich magazynu, potrzebne będą z kolei:

  • moduł ESP32,
  • wyświetlacz LCD alfanumeryczny o rozdzielczości 16×2 lub 24×2 znaków,
  • adapter I2C dla LCD,
  • klawiatura matrycowa 4×4.
Fotografia 1. Elementy potrzebne do zbudowania odbiornika i nadajnika menedżera haseł

Algorytm szyfrowania haseł

Do szyfrowania haseł urządzenie używa algorytmu złożonego z kilku etapów i różnego rodzaju szyfrowania. Hasła szyfrowane są za pomocą AES-256, następnie wynik tego szyfrowania jest szyfrowany za pomocą Serpenta, a następnie ponownie za pomocą AES-256. Analogiczny algorytm używany będzie do dekodowania haseł.

Algorytm szyfrowania potrzebuje jako wejścia ośmiu znaków (64 bitów) i trzech kluczy. Generowane są 192 losowe bity, a wynikiem działania algorytmu jest ciąg sześćdziesięciu czterech znaków, zapisanych w formie heksadecymalnej. Jeśli szyfrowane hasło nie jest wielokrotnością ośmiu, to algorytm dodaje do niego dodatkowe znaki, aby wyrównać bloki kodu do ośmiu. Dokładny algorytm szyfrowania i deszyfrowania haseł pokazano na rysunku 1.

Rysunek 1. Diagram pokazujący algorytm szyfrowania magazynowanych haseł

Realizuje on po kolei następujące kroki:

  1. Na wejście algorytmu podawany jest blok znaków.
  2. Jeśli długość bloku nie jest równa osiem, to jego długość jest uzupełniana do ośmiu.
  3. Uzupełniony blok podawany jest do algorytmu AES, wraz z 64 losowymi bitami.
  4. Algorytm AES szyfruje wejściowy blok za pomocą pierwszego klucza. Rezultatem jest 128-bitowy blok danych.
  5. Wynik pierwszego szyfrowania dzielony jest na dwa bloki o długości 64 bitów.
  6. Do każdego z bloków dodawane są 64 losowe bity.
  7. Każdy z uzupełnionych, 128-bitowych bloków jest szyfrowany za pomocą algorytmu Serpent.
  8. Każdy z wyników szyfrowania Serpentem jest następnie szyfrowany za pomocą AES z wykorzystaniem drugiego klucza.
  9. Wyniki powyższego szyfrowania są konkatenowane, aby algorytm mógł zwrócić pojedynczy ciąg znaków, będący zaszyfrowanym hasłem.

Każdy z kluczy AES zastosowanych do szyfrowania jest inkrementowany po użyciu, dzięki czemu każde kolejne hasło szyfrowane jest innym kluczem. Dodatkowo, to samo hasło, szyfrowane wiele razy, da za każdym razem inny wynik. Własność ta dotyczy wszystkich algorytmów szyfrowania, stosowanych w omawianym urządzeniu.

Algorytm szyfrowania hasła sieci bezprzewodowej

W przeciwieństwie do poprzedniego algorytmu szyfrowania, ten wymaga tylko dwóch kluczy – jeden dla AES i jeden dla Serpenta. Algorytm szyfrowania komunikacji w sieci bezprzewodowej opiera się na AES-256 + Serpent. Na rysunku 2 pokazano diagram działania szyfrowania i deszyfrowania danych w transmisji bezprzewodowej. Algorytm pobiera osiem znaków (64 bity) jako dane wejściowe (jeśli długość wejściowa nie jest wielokrotnością ośmiu znaków ASCII, stosowane jest dopełnienie), generuje 64 losowe bity (osiem znaków) i przekazuje 128 bitów do szyfru AES. Następnie zaszyfrowany przez AES tekst dzielony jest na połowy, każda po 64 bity. Każda połowa szyfrogramu AES jest następnie przekazywana do szyfrowania przez Serpenta wraz z 64 losowymi bitami. Wreszcie powstały szyfrogram jest generowany jako konkatenacja dwóch szyfrogramów z algorytmu Serpent. Losowe bity generowane podczas procesu szyfrowania są wyrzucane podczas procesu deszyfrowania.

Rysunek 2. Diagram przedstawiający algorytm szyfrowania haseł sieci bezprzewodowej

Oprogramowanie

Środowisko Arduino IDE i niezbędne sterowniki

Oprogramowanie systemu napisane jest w Arduino IDE. Konieczna jest jego instalacja, aby skompilować i wgrać do poszczególnych mikrokontrolerów prezentowane tutaj skrypty. Jeśli dopiero zainstalowaliśmy środowisko Arduino lub nigdy wcześniej nie pracowaliśmy z mikrokontrolerami ESP32 czy ESP8266, konieczne jest zainstalowanie odpowiednich sterowników, pozwalających na przesyłanie do nich oprogramowania.

Oprogramowanie firmware

Po pobraniu i zainstalowaniu środowiska Arduino IDE oraz sterowników do obu wymienionych układów, które są stosowane do komunikacji i programowania ESP8266 oraz ESP32, możemy przystąpić do ich zaprogramowania. Potrzebne firmware dla wszystkich trzech elementów systemu autor umieścił w repozytorium na GitHubie (https://bit.ly/3tEVQCQ). Do pobrania znajdziemy tam trzy foldery ze źródłami dla wszystkich trzech mikrokontrolerów. Z uwagi na ich rozmiar w artykule nie zostaną pokazane kompletne listingi poszczególnych programów.

Wymagane biblioteki

Do uruchomienia i skompilowania oprogramowania projektu potrzebny będzie szereg bibliotek dla Arduino. Należy pobrać i zainstalować następujące biblioteki:

Proces pobierania, rozpakowywania i instalowania bibliotek jest dosyć standardowy. Wszystkie umieszczone są w otwartych repozytoriach na GitHubie, co ułatwia ich pobranie lub sklonowanie. Następnie należy rozpakować pobrane pliki do katalogu ...\Arduino\libraries lub w Arduino IDE kliknąć na przycisk, pozwalający na dodanie biblioteki z pliku ZIP – w takiej sytuacji środowisko programistyczne wykona wszystko za nas.

Generowanie klucza

Aby nieautoryzowane odszyfrowanie haseł stało się niewykonalne obliczeniowo — ważne jest, aby generować własne klucze i nigdy nie używać ich ponownie, chyba że jest to naprawdę konieczne. Najlepszym sposobem na manualne wygenerowanie klucza jest rzucanie 20-ściennymi kostkami.

Sposób postępowania jest bardzo prosty. Musimy rzucić kością tyle razy, ile znaków ma mieć klucz. Jeśli otrzymamy liczbę od 1 do 9, zapisujemy ją. Jeśli otrzymasz liczbę od 10 do 15, zapisujemy literę odpowiadającą tej liczbie w kodzie szesnastkowym: 10=A…15=F. Jeśli otrzymamy 20, zapisujemy do klucza 0. Pozostałe rzuty – z wynikiem od 16 do 19, należy powtórzyć.

Użycie adresu MAC ESP32

Aby pozyskać adres MAC naszego ESP32, musimy załadować i uruchomić na module prosty skrypt, którego kod został pokazany na listingu 1. Następnie możemy otworzyć monitor portu szeregowego i odczytać rzeczony adres. Jeśli wszystko uruchomiło się poprawnie, to w monitorze portu szeregowego zostanie pokazany adres MAC. W przypadku płytki autora adres ten to EC:94:CB:67:3A:4C.

Listing 1. Skrypt, który pozwala pozyskać adres MAC modułu ESP32

#include <WiFi.h>
void setup(){
 Serial.begin(115200);
 Serial.println();
 Serial.print(“ESP Board MAC Address:  “);
 Serial.println(WiFi.macAddress());
}

void loop(){}

Niestety nie wszystkie płytki programują i uruchamiają się bez problemu. Jeśli poprawnie skonfigurowaliśmy IDE, zainstalowaliśmy wszystkie wymagane sterowniki, wybraliśmy odpowiedni port itd. i nadal otrzymujemy krytyczny błąd, mówiący o niemożności połączenia się z modułem (przekroczenie czasu oczekiwania na nagłówek pakietu), to wystarczy do systemu, na czas flashowania, dołączyć kondensator 10 μF pomiędzy pin EN modułu ESP32 a masę.

Uzupełnienie firmware, kompilacja i flashowanie

Po pobraniu adresu MAC możemy wpisać go w odpowiednim miejscu w jednym z szkiców programu. W tym celu otwieramy pliki Firmware_for_ESP8266.ino, aby wymienić adresu MAC odbiorcy w linii:

uint8_t broadcastAddress[] = {0xEC, 0x94, 0xCB, 0x67, 0x3A, 0x4C};

Musimy także zmienić w obu plikach (Firmware_for_ESP8266.ino oraz Firmware_for_ESP32.ino) klucze na te, które wygenerowaliśmy we wcześniejszym kroku. Magazyn danych wymaga czterech różnych kluczy, a odbiornik potrzebuje dwóch kolejnych. Wpisując w obu szkicach klucze, należy upewnić się, że skey i projector_key są takie same na obu urządzeniach. Wpisując poszczególne klucze, należy pamiętać, że wszystkie one są w formacie szesnastkowym.

Budowa urządzenia

Przy budowie systemu konieczne jest złożenie dwóch względnie niezależnych od siebie urządzeń. Są one dosyć proste, więc ich montaż nie powinien nastręczyć większej trudności. Pierwszym modułem, jaki należy zmontować, jest magazyn haseł. Na rysunku 3 został pokazany schemat urządzenia, według którego należy połączyć poszczególne elementy. Jedynym problematycznym elementem, na jaki możemy natknąć się, montując ten układ, jest podłączenie portu PS/2 do płytki. Może to wymagać precyzyjnego lutowania kabli do złączy, jeśli nie uda nam się nabyć gotowego kabla ze złączem tego rodzaju.

Rysunek 3. Schemat ideowy modułu odbiornika

Na rysunku 4 pokazano schemat odbiornika. Montaż tego modułu jest jeszcze prostszy – w zasadzie wymaga tylko podłączenia klawiatury i LCD do płytki z mikrokontrolerem ESP32.

Rysunek 4. Schemat ideowy modułu nadajnika

Uruchomienie urządzenia

Uruchomienie i konfiguracja obu układów (zwłaszcza samego magazynu) to wieloetapowy proces. Jeśli chcemy, aby wszystko poszło poprawnie, postępujmy zgodnie z opisem.

Włączenie urządzenia

Po podłączeniu magazynu do zasilania, na wyświetlaczu powinno być widoczne menu. Jego obsługa jest bardzo prosta – gwiazdka oznacza aktualnie wybrany element, naciskając strzałki w górę i w dół, zmieniamy wybrany element. Cała nawigacja w menu urządzenia i jego obsługa realizowane są za pomocą klawiatury.

Ustawienie głównego hasła

Celem hasła głównego jest uniemożliwienie rozszyfrowania notatek poprzez uzyskanie fizycznego dostępu do urządzenia. Hasło główne służy do uzyskania części klucza i nie jest przechowywane w pamięci stałej. Trzeba je wpisać za każdym razem, gdy włączamy urządzenie. Po odłączeniu zasilania od urządzenia każda zmodyfikowana część klucza zostanie utracona, ponieważ jest przechowywana w pamięci ulotnej.

Po wprowadzeniu hasła głównego jest ono szyfrowane SHA-512, następnie wynik przechodzi przez szyfrowanie Serpent 576 razy, a następnie uzyskany wynik jest używany do modyfikacji części dwóch kluczy AES. Jedna z liczb pochodzących z hasła głównego służy jako numer weryfikacyjny. Numer weryfikacyjny musi być zawsze taki sam dla tego samego hasła. Autor użył następującego hasła głównego:

Your house might have the best lock in the world, but what’s the point in it if you keep the key from it in an easily accessible place i uzyskał numer weryfikacyjny 186.

Ustawienie wektora inicjalizacji

Cel wektora inicjalizacji (IV) jest taki sam jak hasła głównego. To po prostu inaczej działające zabezpieczenie tych samych danych – zamiast wyprowadzać część klucza z ciągu wejściowego, wektor inicjujący (w tym przypadku) ustawia liczbę iteracji pierwszych szesnastu sekcji klucza. Działa jako licznik. Każda sekcja klucza AES może mieć wartość od 0 do 255. IV dotyczy tylko pierwszych szesnastu sekcji klucza. Działa to w następujący sposób: iteruj bieżącą sekcję, aż osiągnie 255, w następnej iteracji ustaw bieżącą sekcję na zero i zwiększ następną sekcję o jeden. Ta sama zasada dotyczy każdej sekcji. IV musi być liczbą, która służy jako punkt wyjścia dla licznika – jest to punkt startowy, który inkrementuje klucz. Autor użył IV równego 321654.

Zaszyfrowanie i zapisanie hasła

Do szyfrowania i zapisywania haseł potrzebny będzie terminal, łączący się z portem szeregowym, ponieważ zaszyfrowany tekst jest drukowany w monitorze portu szeregowego. Można użyć terminalu zintegrowanego ze środowiskiem Arduino.

Aby zaszyfrować hasło, należy wybrać z menu opcję Zaszyfruj hasło, wprowadzić hasło na klawiaturze, a następnie nacisnąć przycisk Enter na klawiaturze. Naciśnięcie przycisku Esc spowoduje przerwanie operacji i powrót do menu głównego. Dotyczy to wszystkich opcji w menu głównym. Autor przetestował, szyfrując fragment tekstu. Wyniki widoczne są na listingu 2.

Listing 2. Przykładowe zaszyfrowane hasło

Zwykły tekst:
This version of the password vault is a device that has the capability to encrypt your passwords, store the encrypted passwords in its built-in memory, hash passwords, and securely send passwords to another device.

Zaszyfrowany tekst:
a727fe32fc0a5e9b2e0b71a1ef3d6f3374c2e0fd01f8114db572a5d9d789aea89e0b4a01d172cb8b0d6ec9e13db8e64cf789aa1131048dae19a59f16e7d4f30c637ff263bbc7d6220a3552455613a2f128389ac5f9a52c005befb23846beb1fe4a2a06bd9a4c410eec106800ca0a5f55ab32504abdf66c74cf1bb60f40d3c56d05442be3ab3358c92c02863e7d0d9a06f78581e02e91b3ddfbe98d9b948d87c42f113a6522295361360b6237a49a1a64835585a66b354b829fc5ae00daf420f157e23bffa26aaf84bad55ef60c9f1362e3a596d0265d2c6d6911381dff998af9947a153e2bf1e8093a3098e6c71632be8f15799d681cad8d8bbc58af51b7362877c8e12bcf30daa5b1b29efd70ef7ffeb91f32325cb85028b335de2f5deb052c1a4c901a4873118cee6769f90b8c380d64310addf8250b9502a7fe8c8b1c3daffe3638da709973b5b31984e2bbd2dd1748f4be8c90739f3e9bb902179635e95894a81883e785421e9f265e6a182ddbd1daa95cd9383b52b80cde75330b3ad2e748f65f99b51a70d3a58507544bf2aee154911d723ad0ea09176dc952729d1f3fc62fee18eab7281ef7c4e42588c1a9b624f59369fba4df428a9414fcd4096c5aa91087029de584054d46bd59e06b4f08acbd622aaca9607f6d5ce101a91972ea3d98e5489caa9ec134809ec5cfac1b7c4c537672e16042361dbf0c87c0f90a0ff7df7f2362651cb5c618c25f4f99d8ff2fdac7de4bb5d495dc59f9cb2b15694f8a179ff7187a78d50c6258e4cc7b69418a8c4f7361a92eae9ad41744779f41d95e703f7634c79da747a114c0a6c74e5eb6e82927022270af99589ed3354d3f02bd63d489b56dd715e07206f427debf89ea9ce5dfc657d384ee6ec0822ad2a8ae5c8d3a335329ee9343f778a2be51d358227bc3cf68dc728f2f2ba93aab7fd4e9c932f66507b0b3e9354437fc9fa2f48f94ce22df76b0abb463d4847cf743cf0b6b9117532328538674d2b7eb3066111de993e6ca31ec82216edb9673d8eb9e0352f18acd5a0a43ec6843e9abd31ec40675e5152d6039ad56ff7382e2dca7726116a5684f67a60cdd032fd262991486acb1b583d7d1f234211a7400bfa92e7cad779792365899eec4a3b94b054761c3befff77b12b059af7bb25a7f8f8c6440b5667f19243b3f484552e71b2d47abf427c6a9290130ded6a23bcf627b8ccb3cc3

Aby zapisać rekord do pamięci wbudowanej, należy wybrać z menu opcję zapisz plik w pamięci, nacisnąć klawisz Enter na klawiaturze, wpisać nazwę pliku w terminalu szeregowym i przesłać informacje do urządzenia. Następnie należy wprowadzić zawartość pliku w polu tekstowym w terminalu szeregowym i ją także wysłać do urządzenia.

Aby załadować zawartość zapisanego pliku, należy otworzyć port szeregowy, wybrać w menu opcję Załaduj plik z pamięci, nacisnąć klawisz Enter na klawiaturze, wpisać nazwę pliku w terminalu szeregowym, a następnie wysłać ją do urządzenia.

Aby usunąć zapisany plik, otwórz Monitor szeregowy, wybierz opcję Usuń plik z pamięci w menu, naciśnij przycisk Enter na klawiaturze, wprowadź nazwę pliku w polu tekstowym w Monitorze szeregowym, a następnie naciśnij przycisk Wyślij Monitor w Monitorze szeregowym.

Przeglądanie i przywoływanie haseł (deszyfrowanie i projekcja do urządzenia)

Aby wyświetlić listę wszystkich zapisanych plików, należy otworzyć terminal, wybrać opcję Lista wszystkich przechowywanych plików w menu i nacisnąć przycisk Enter na klawiaturze. Następnie powinniśmy zobaczyć listę wszystkich zapisanych plików na porcie szeregowym. Jak teraz odzyskać zapisane dane?

Przede wszystkim trzeba ustawić to samo hasło główne i wektor inicjujący, które używane były podczas szyfrowania. Następnie wybieramy opcję Odszyfruj hasło w menu, naciskamy przycisk Enter na klawiaturze, a następnie wklejamy zaszyfrowany tekst do Monitora szeregowego. Na listingu 3 pokazano uzyskane wyniki.

Listing 3. Przykładowe odzyskanie hasła

Hasło główne:
Your house might have the best lock in the world, but what’s the point in it if you keep the key from it in an easily accessible place.

Numer weryfikacyjny: 186
IV: 321654

Zaszyfrowany tekst:
a727fe32fc0a5e9b2e0b71a1ef3d6f3374c2e0fd01f8114db572a5d9d789aea89e0b4a01d172cb8b0d6ec9e13db8e64cf789aa1131048dae19a59f16e7d4f30c637ff263bbc7d6220a3552455613a2f128389ac5f9a52c005befb23846beb1fe4a2a06bd9a4c410eec106800ca0a5f55ab32504abdf66c74cf1bb60f40d3c56d05442be3ab3358c92c02863e7d0d9a06f78581e02e91b3ddfbe98d9b948d87c42f113a6522295361360b6237a49a1a64835585a66b354b829fc5ae00daf420f157e23bffa26aaf84bad55ef60c9f1362e3a596d0265d2c6d6911381dff998af9947a153e2bf1e8093a3098e6c71632be8f15799d681cad8d8bbc58af51b7362877c8e12bcf30daa5b1b29efd70ef7ffeb91f32325cb85028b335de2f5deb052c1a4c901a4873118cee6769f90b8c380d64310addf8250b9502a7fe8c8b1c3daffe3638da709973b5b31984e2bbd2dd1748f4be8c90739f3e9bb902179635e95894a81883e785421e9f265e6a182ddbd1daa95cd9383b52b80cde75330b3ad2e748f65f99b51a70d3a58507544bf2aee154911d723ad0ea09176dc952729d1f3fc62fee18eab7281ef7c4e42588c1a9b624f59369fba4df428a9414fcd4096c5aa91087029de584054d46bd59e06b4f08acbd622aaca9607f6d5ce101a91972ea3d98e5489caa9ec134809ec5cfac1b7c4c537672e16042361dbf0c87c0f90a0ff7df7f2362651cb5c618c25f4f99d8ff2fdac7de4bb5d495dc59f9cb2b15694f8a179ff7187a78d50c6258e4cc7b69418a8c4f7361a92eae9ad41744779f41d95e703f7634c79da747a114c0a6c74e5eb6e82927022270af99589ed3354d3f02bd63d489b56dd715e07206f427debf89ea9ce5dfc657d384ee6ec0822ad2a8ae5c8d3a335329ee9343f778a2be51d358227bc3cf68dc728f2f2ba93aab7fd4e9c932f66507b0b3e9354437fc9fa2f48f94ce22df76b0abb463d4847cf743cf0b6b9117532328538674d2b7eb3066111de993e6ca31ec82216edb9673d8eb9e0352f18acd5a0a43ec6843e9abd31ec40675e5152d6039ad56ff7382e2dca7726116a5684f67a60cdd032fd262991486acb1b583d7d1f234211a7400bfa92e7cad779792365899eec4a3b94b054761c3befff77b12b059af7bb25a7f8f8c6440b5667f19243b3f484552e71b2d47abf427c6a9290130ded6a23bcf627b8ccb3cc3

Zwykły tekst:
This version of the password vault is a device that has the capability to encrypt your passwords, store the encrypted passwords in its built-in memory, hash passwords, and securely send passwords to another device.

Aby zapobiec nieautoryzowanej modyfikacji zaszyfrowanego hasła lub fałszowaniu hasła przy użyciu już uzyskanych zaszyfrowanych tekstów, należy haszować hasło przed jego zaszyfrowaniem – zaszyfrować hash, a następnie zapisać wynikowy hash w postaci zaszyfrowanej.

Funkcja bezprzewodowego wyświetlania hasła umożliwia bezpieczne przesyłanie hasła z jednego modułu do drugiego. Aby skorzystać z tej funkcji, należy najpierw ustawić klucze w obu modułach. W tym celu należy wybrać w menu opcję Hasło projektu, nacisnąć klawisz Enter na klawiaturze, a następnie w odbiorniku wpisać nowo wygenerowany klucz z magazynu haseł na klawiaturze modułu. W obu urządzeniach powinniśmy uzyskać te same numery weryfikacyjne. Jeśli tak nie jest, należy zrestartować odbiornik i ponownie wprowadzić klucz. Aby wygenerować nowy klucz, należy ponownie uruchomić magazyn haseł, a następnie wybrać opcję Hasło projektu lub przejść do dodatkowych funkcji, gdzie istnieje możliwość wygenerowania hasła dla komunikacji z modułem bezprzewodowym.

Aby ustawić inny klucz na płytce odbiornika, należy uruchomić go ponownie i wprowadzić nowy klucz na klawiaturze. Po ustawieniu klucza na obu modułach należy nacisnąć dowolny przycisk na klawiaturze, aby przejść do części, w której wpisuje się hasło, a następnie nacisnąć przycisk Enter na klawiaturze, aby wysłać hasło do odbiornika. Autorowi udało się bez problemu wysłać nawet 500-znakowe hasło pomiędzy urządzeniami

Podsumowanie

Używanie wyświetlacza, który wyświetla tylko kilka znaków, nie jest zbyt wygodne, szczególnie przy tak długich hasłach, ale to najlepsze, co udało się autorowi zintegrować z urządzeniem. Alternatywy, takie jak ekrany OLED oparte na sterowniku SSD1306 czy ekran z Nokia 5110, odmówiły współpracy z włączonym protokołem ESP-NOW.

Mimo wszystkich swoich wad i niedogodności to urządzenie jest w stanie szyfrować, bezpiecznie przechowywać, a następnie odszyfrowywać hasła. Pozwala to na jego w pełni praktyczne wykorzystanie. Zastosowane algorytmy gwarantują niemalże pełne bezpieczeństwo zapisanych haseł. Jak pisze autor, urządzenie jest fuzją kilku jego poprzednich projektów, kodu open source, który zaczerpnął z GitHuba, oraz niektórych funkcji dostarczonych przez producenta mikrokontrolera. Pierwsza wersja magazynu haseł stworzona została mniej więcej pół roku przed opracowaniem finalnego układu, jaki tu zaprezentowano.

Układ, oprócz podstawowych funkcji – magazynowania i bezpiecznego szyfrowania haseł tekstowych – umożliwia bezpieczne przesyłanie danych bezprzewodowo za pomocą protokołu ESP-NOW i obliczanie skrótów haseł za pomocą funkcji skrótu SHA-512. Funkcje te można z powodzeniem również wykorzystać w innych projektach, wymagających tego rodzaju zabezpieczeń.

Nikodem Czechowski, EP

Źródła
https://www.instructables.com/Password-Vault-V30/
https://github.com/Northstrix/Password_Vault_V3.0
https://sparks.gogo.co.nz/ch340.html
https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers
https://github.com/marvinroger/ESP8266TrueRandom
https://github.com/adafruit/Adafruit-ST7735-Library
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/johnrickman/LiquidCrystal_I2C
https://github.com/Chris--A/Keypad
https://github.com/PaulStoffregen/PS2Keyboard

Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2022

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik maj 2022

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio maj - czerwiec 2022

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje kwiecień 2022

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna maj 2022

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2022

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów