## Secrets v IoT #### ako bezpečne ukladať heslá na mikrokontroléroch [Mirek Biňas](https://bletvaska.github.io) / [**OSS Conf Žilina 2026**](https://ossconf.fri.uniza.sk/)
> The _S_ in _IoT_ Stands for Security. notes: - neda mi nezacat inac, ako standardnym vtipom na tuto temu a sice, ze oblast bezpecnosti v IoT je stale velmi problematicka
## Čo sú to Secrets?
## Secrets * **citlivé údaje**, ktoré **umožňujú prístup** k systémom, službám alebo dátam * **musia byť bezpečne uložené a chránené pred neoprávneným prístupom** * napr.: heslá, API kľúče, tokeny alebo certifikáty
[![](images/owasp.iot.top.ten.png)](https://wiki.owasp.org/index.php/OWASP_Internet_of_Things_Project#tab=IoT_Top_10) notes: * jednym z jej projektov je vsak aj OWASP IoT Top 10 * zoznam 10 najvacsich hrozieb v oblasti IoT
### #1 Weak, guessable or hard coded passwords
> Use of easily bruteforced, publicly available, or unchangeable credentials, including backdoors in firmware or client software that grants unauthorized access to deployed systems.
![](images/students-js1.jpg) notes: * staticka (hardcoded passwords) konfiguracia pre mqtt pripojenie * TUYA like - posiela to na cinske servery
![](images/students-js2.jpg) notes: * to iste, len zapisane inac * co sa stane, ak dojde k vyzradeniu loginu a hesla a admini prijmu strasne rozhodnutie, ze credentials zmenia?
![](images/students-python1.jpg) notes: * to iste, ale pre zmenu v pythone
![](images/students-python2.jpg) notes: * opat defaults pre mqtt a databazu
![](images/students-python3.jpg)
![](images/students-python4.jpg)
## Ďalšie zdroje * tutoriály - [Random Nerd Tutorials](https://randomnerdtutorials.com/micropython-mqtt-esp32-esp8266/) * knihy * čo na to AI?
## Kde do $I&^% je problém?
## Credentials sú súčasťou kódu! * hodnoty sú uložené v (globálnych) premenných * nedajú sa zmeniť bez zmeny kódu * sú čitateľné
## Čo s tým?
1. **Izolácia** Secrets uložíme do samostatného súboru. 2. **Šifrovanie** Zašifrujeme uložené údaje, aby boli čitateľné iba s kľúčom. 3. **Binárny bytecode** Kód pracujúci so secrets preložíme do binárneho bytecode, čím sťažíme jeho analýzu. notes: * Preklad do .mpy (MicroPython bytecode) sťažuje analýzu zdrojového kódu, ale nie je to bezpečnostný mechanizmus porovnateľný so šifrovaním. Skôr ide o obfuskáciu alebo sťaženie reverzného inžinierstva.
## Krok 1. Izolácia * secrets uložíme do samostatného súboru * použijeme formát, ktorý umožňuje jednoduché čítanie aj zápis * dataclass pre validáciu * vystačíme si s formátom JSON * priama podpora v jazyku MicroPython * umožňuje vnáranie * `/data/settings.json`
```python import json SETTINGS_FILE = '/data/settings.py' # content of settings settings = { "ssid": "OSS Conf 2026", "password": "Linux.Rocks!", } # write settings with open(SETTINGS_FILE, 'w') as file: json.dump(settings, file) # read settings with open(SETTINGS_FILE, 'r') as file: settings = json.load(file) ```
## Krok 2. Šifrovanie * problém - obmedzené zdroje mikrokontrolérov * výpočtový výkon * malá pamäť * spotreba energie
[`cryptolib`](https://docs.micropython.org/en/latest/library/cryptolib.html)
![](images/aes.webp) notes: - https://nordlayer.com/blog/aes-encryption/
![Encoding vs Hashing vs Encryption](images/encoding.vs.hashing.vs.encryption.ng.png) notes: * https://devcookies.medium.com/encoding-vs-hashing-vs-encryption-explained-with-examples-d92b423a4584
## Krok 3. Binárny bytecode
## Otázky?
![qr code](https://api.qrserver.com/v1/create-qr-code/?data=https://bit.ly/4wnlBVO&size=300x300) (**https://bit.ly/4wnlBVO**)