Biblioteka szyfrowania dla Arduino

9

Korzystam z Arduino, aby odczytać klawiaturę i otworzyć elektrozaczep po wprowadzeniu kodu PIN klawiatury. W tym szkicu chciałem użyć jakiegoś lekkiego szyfrowania do przechowywania kodów PIN w EEProm. Czy ktoś wie o takiej bibliotece? Słyszałem, że możliwe jest użycie TwoFish.

mad_z
źródło

Odpowiedzi:

12

Nie chcesz szyfrować haseł (PIN) - chcesz je haszować . Gdy ktoś wpisze hasło, hashujesz je i porównujesz hash z przechowywanym hash. Zaletą tej metody (stosowanej od ponad 30 lat) jest to, że nawet jeśli ktoś zdobędzie źródło i skróty, nadal nie może powiedzieć, które kody PIN pasują do skrótów, o ile wybierzesz wystarczająco silną funkcję skrótu .

Nie chcesz samodzielnie implementować szyfrowania - chcesz korzystać z czyjejś biblioteki, szczególnie z otwartą implementacją przetestowaną przez dużą społeczność. Szyfrowanie jest trudne, testowanie jest trudne, a testowanie szyfrowania jest cholernie trudne, więc niech ktoś zrobi to za ciebie.

Powinieneś pobrać bibliotekę AVR Crypto Library , która jest licencjonowana na GPLv3. Istnieje również implementacja Skein dla AVR .

Craig Trader
źródło
1
Upvoted - Dobry zasób, który powinien zostać ustawiony jako odpowiedź na pytanie.
Lou
9

Ten link opublikowany przez Hristosa, choć prawdopodobnie przydatny, z pewnością nie liczy się jako „szyfrowanie”. To tak naprawdę tylko „zaciemnianie”.

Właściwa kryptografia jest bardzo łatwa do popełnienia błędu, nawet dla osób znających matematykę.

W odpowiedzi na oryginalny post - jakie metody ataku umożliwiłyby komuś dostęp do kodów PIN w EEProm? Z pewnością, jeśli masz , że daleko do elektroniki mogą po prostu „ciach czerwony przewód” i otworzyć drzwi?

Jeśli jakoś zrobić mieć system, w którym atakujący może zdobyć zawartości EEPROM bez konieczności już wystarczająco dostępu do otwierania drzwi, prawdopodobnie chcesz go przeprojektować. Państwo mogłoby wyglądać na jednokierunkowych funkcji mieszających podobnych do Unix hasłem mieszaja - ten sposób EEPROM nie potrzebuje t zawierać klucz deszyfrowania - problemem jest przestrzeń poszukiwań dla PIN jest bardzo mała - jeśli mogę pobrać z następujących wersji hashed PIN, mogę dość szybko wypróbować wszystkie 10 000 możliwych PINów, podejrzewam, że każdy nowoczesny laptop uruchomi je wszystkie w ciągu kilku sekund.

bigiain
źródło
Zgadzam się (i uzgodniono powyżej), hash jednokierunkowy byłby użyteczny, a jeśli programujesz system, możesz zrobić pin tak długo, jak chcesz, np. 8 cyfr daje 100 000 000 kombinacji, co powinno zająć znacznie dłużej.
Amos,
1

Problem, który widzę, polega na tym, że jeśli widzą twoje piny, mogą również zobaczyć twój program, który szyfruje / sprawdza / deszyfruje twoje piny. Plus, jeśli mają twój chip, nie mogą po prostu zmienić programu, aby zawsze dawał pozytywny wynik (skutecznie omijając czek) dla każdego wprowadzonego kodu PIN.

Amos
źródło
1

Jak planujesz zdekodować zaszyfrowane kody PIN, aby sprawdzić, czy użytkownik wprowadził prawidłowy kod PIN? Musisz przechowywać klucz odszyfrowujący ... w tym momencie, jeśli atakujący może odczytać twój eeprom, może również odczytać twoją pamięć flash, aby znaleźć klucz szyfrujący. Zasadniczo czynisz całe szyfrowanie całkowicie bezużytecznym. Również, jak powiedzieli inni ludzie, jeśli już umie czytać twój układ, może po prostu napisać nowy program. O wiele łatwiej jest po prostu otworzyć drzwi. Wątpię, czy ktokolwiek kiedykolwiek miałby problem z włamaniem się do chipa.

davr
źródło
1

Oto metoda prostej zapisu w C, którą można łatwo przenieść na Arduino. To wydaje się być najprostszym sposobem szyfrowania danych przy użyciu ograniczonych zasobów arduino.

-EDYCJA- Aby trzymać klucz poza programem, możesz ustawić połowę kodu PIN na klucz. Oznacza to, że Twój program pobiera kluczową połowę kodu PIN, aby odszyfrować zaszyfrowaną 1/2 PIN przechowywaną w EEProm. Jeśli odszyfrowany klucz z EEProm pasuje do tej części kodu PIN, która nie jest kluczem, drzwi się odblokują. Działałoby to tylko w sytuacji, gdy intruz nie mógł wyłamać drzwi ani przeprogramować Arduino.

Hristos
źródło
Ale jeśli nie mają dostępu do Twojego układu, nie musisz szyfrować kodu PIN.
Amos,
1

Nienawidzę nie odpowiadać na pytanie, zadając innym, ale ...

Czy istnieje jakiś powód, dla którego Twoje urządzenie nie jest odporne na manipulacje? Widziałem przełączniki przyciskowe w otworach na śruby zaimplementowane „na stole” w celu wykrycia rodzaju manipulacji, o którą się martwisz. A potem ... oto pojawia się dziecko z mikropankiem z butanem, które udaje się zdobyć twój chip bez odkręcania czegokolwiek (lub uszkodzenia chipa) .. w jakiś sposób znał konstrukcję twojego systemu odpornego na manipulacje, który (miejmy nadzieję) obejmuje także wykrywanie zmian w światło i / lub dźwięk otoczenia. Po zdjęciu okładki oba stają się zupełnie inne ... w dzień iw nocy.

W takim przypadku powinien to być dwuczęściowy system, w którym odsłonięte elementy komunikują się z czymś, w którym szyfrowanie jest łatwiejsze do zaimplementowania. Dodatkowo sumy kontrolne (pomoc) odpowiadają dziecku z pochodnią.

Myślę, że prosisz śrubokręta o młotek.

Tim Post
źródło
1

Te komentarze są naprawdę trafne. Nie ma nic złego w próbach eksperymentowania na temat szyfrowania, ale tak naprawdę nie jest to dobry projekt do nauki takich rzeczy. Naprawdę chcesz dobrego podręcznika i komputera, a jak mówi @bigiain, matematyka jest bardzo łatwa do popełnienia błędu.

Aby lepiej zrozumieć, jak działa kryptografia i co masz do czynienia, Podręcznik kryptografii stosowanej jest doskonały i bezpłatny:

Jeśli chcesz zabezpieczyć swój projekt, jest to nieefektywny sposób. Jeśli interesujesz się kryptografią, zacznij od tej książki i komputera.

Lou
źródło
Rozumiem kryptografię, czytam Bruce'a Schneiera i programuję od ponad dwudziestu lat. Rozumiem, że prawdziwym zagrożeniem jest po prostu wyważenie drzwi i przejście obok dowolnego kontrolera Arduino. Po prostu nie mogę z czystym sumieniem zainstalować kodu PIN z wyraźnym tekstem w EEProm, jeśli można tego uniknąć. Fly
Istnieje wiele prostych metod zaciemniania, które byłyby równie skuteczne w tej roli, jeśli chcesz uniknąć zapisywania czystego tekstu PIN-ów. Odpowiedzi powyżej próbowali tylko pomóc ci zrozumieć, co kryptografia robi, a czego nie. Oto biblioteka AES: hoozi.com/Articles/AESEncryption.htm Chciałbym również powiedzieć, że tylko dlatego, że programujesz od 20 lat, nie oznacza to, że „rozumiesz” kryptografię. To jest zupełnie inna dziedzina. 20-letni mechanik samochodowy to fachowiec, ale nie spodziewałbym się, że zaprojektuje od podstaw magistralę CAN. Proszę sprawdzić swoje nastawienie.
Lou
O Boże ... 20 lat kodowania i myślisz, że można szyfrować dane środowiska uruchomieniowego ????? Porzucić.
MickLH