## 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
## 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
[](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.

notes:
* staticka (hardcoded passwords) konfiguracia pre mqtt pripojenie
* TUYA like - posiela to na cinske servery

notes:
* to iste, len zapisane inac
* co sa stane, ak dojde k vyzradeniu loginu a hesla a admini prijmu strasne rozhodnutie, ze credentials zmenia?

notes:
* to iste, ale pre zmenu v pythone

notes:
* opat defaults pre mqtt a databazu


## Ď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é
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)

notes:
- https://nordlayer.com/blog/aes-encryption/

notes:
* https://devcookies.medium.com/encoding-vs-hashing-vs-encryption-explained-with-examples-d92b423a4584
## Krok 3. Binárny bytecode
## Odkazy
* [KPI@TUKE](https://kpi.fei.tuke.sk) - [YouTube](https://www.youtube.com/@kpi_fei_tuke), [FB](https://www.facebook.com/kpi.fei.tuke)
* [ED Hackathon](https://www.erstedigital.com/sk/hackathon)
* [Deutche Telekom Hackathon](https://hackathon.deutschetelekomitsolutions.sk/)
* [Namakaný deň](http://www.namakanyden.sk) - [YouTube](https://www.youtube.com/@namakanyden), [FB](https://www.facebook.com/namakanyden)

(**https://bit.ly/4wnlBVO**)