článek pro Praktická elektronika – zřejmě 05/2025
(prosím nešířit)
v plánu jsou dva (možná i tři) články – díly bych nečísloval, uvidí se, jak to budeme stíhat, možná to bude ob jedno číslo (je to poměrně dost práce a studování)
díl první:
TROPIC01 – malý velký čip (obecné seznámení a základy)
díl druhý:
TROPIC01 – první jednoduché experimenty (s ESP32 a Micropythonem)
díl třetí:
jak to vyjde – pokud bude zájem a budeme mít relevantní materiál k nějakým „projektům“
– generáror entropie
– zabezpečení PINem
– …
TROPIC01 – malý velký čip
Ing. Jan Čopák
Je to teprve několik týdnů, co náš pražský hackerspace OctopusLAB obdržel první vzorky nového bezpečnostního čipu TROPIC01. Tento inovativní produkt by měl zajistit velmi dobrou ochranu proti nejsofistikovanějším útokům, což z něj činí klíčový prvek pro moderní IoT zařízení, kryptopeněženky či digitální identity. Nabízí navíc i nezvyklou transparentnost, ověřitelnost a mohl by tak zásadním způsobem změnit pravidla hry v oblasti hardwarové bezpečnosti. Vyvíjí ho společnost Tropic Square a co je pro nás také velmi zajímavé, jedná se o českou firmu!

Česká společnost Tropic Square je součástí skupiny SatoshiLabs. Prosazuje se svým inovativním přístupem k hardwarové bezpečnosti. Její čip představuje takřka revoluční posun v oboru, kde tradiční řešení často zakládají bezpečnost na utajení. TROPIC01 je první auditovatelný čip s otevřenou architekturou, což umožňuje nezávislé testování a ověřování jeho bezpečnostních vlastností nejen odborníky, ale i širokou open-source komunitou.

Pouzdro QFN32 (4x4mm) ve srovnání s „klasickým“ rozestupem dvou 2.5mm pinů. Takovou součástku si umí připájet jen málokdo (ale jde to).
Co znamená TROPIC? Je to TRuly OPen IC, což je plně otevřený integrovaný obvod. Takřka všechny elektronické čipy byly totiž do této chvíle navrhovány jako „closed hardware“ (uzavřený hardware). Tak označujeme hardwarové systémy, jejichž návrh, architektura a výrobní postupy jsou chráněny jako obchodní tajemství a nejsou volně přístupné veřejnosti či nezávislým vývojářům. Takový hardware nelze snadno modifikovat nebo vylepšovat třetími stranami. Výrobci totiž úzce kontrolují celý životní cyklus produktu – od návrhu přes výrobu až po aktualizace a opravy a nikoho dalšího nenechají pod pokličku ani nakouknout.
Trh elektronických čipů je proto vnímán jako „uzavřená chráněná oblast“. Důvody k tomu jsou docela logické, shrňme si alespoň zásadní z nich: ochrana vysoké vstupní investice a technologické bariéry, udržení dominance několika klíčových hráčů, státní regulace nebo strategický význam, ochrana duševního vlastnictví.
Tento model sice pomáhá firmám udržet si konkurenční výhodu, ale zároveň omezuje otevřenost, spolupráci a potenciál k inovacím ze strany menších subjektů či komunitních projektů. Co však vývojáře z oblasti „počítačové“ bezpečnosti trápilo nejvíce, byla nemožnost důkladného auditu bezpečnostních prvků s nutností důvěřovat netransparentním certifikačním autoritám a k čipům přistupovat jako k „black boxu“ – černé skříňce, které MUSÍME důvěřovat.

Nebudeme zde zacházet do detailů. Základní dokumentace (technický datasheet spolu s API) má totiž dohromady skoro dvě stovky stránek. Proto zde probereme jen to podstatné nebo důležité.
Centrální procesorová jednotka (CPU) obvodu TROPIC01 je postavena na otevřené architektuře RISC-V.
Hlavní funkcí „secure elementu“ není jen generování a ochrana kryptografických klíčů, ale i bezpečné provádění kryptografických operací (např. ECDSA, EdDSA a X25519). Díky plně auditovatelnému designu mají jednotlivci i firmy možnost provádět vlastní testy a ověřovat, zda čip neobsahuje žádné zranitelnosti či zadní vrátka. Transparentnost, kterou Tropic Square prezentuje, zaručuje, že výsledky testů jsou veřejně dostupné a podporují princip „Don’t Trust, Verify“ (nevěř, ale ověřuj).
Velmi zajímavým prvkem čipu je využití PUF (physically unclonable function) – fyzikálně neklonovatelné funkce. Tato technologie využívá přirozené fyzické variace v polovodičových součástkách k vytvoření jedinečného hardwarového otisku. Ten pak může posloužit jako základ pro generování kryptografických klíčů bez nutnosti jejich permanentního uložení. PUF však není přímo dostupný jako samostatný výstup; jeho hodnota je integrována do mechanismu Key and Entropy Distribution Engine, který využívá unikátní otisk čipu například pro šifrování dat. Součástí tohoto mechanismu jsou také dva nezávislé generátory kryptograficky bezpečných náhodných čísel s dobrou entropií – TRNG1 a TRNG2. Zatímco TRNG2 poskytuje náhodná čísla pro šifrovací operace a autentizační protokoly, TRNG1 je primárně využíván interně k podpoře redundantních kontrol a zajištění integrity systému.
Co se týče paměťové architektury, TROPIC01 obsahuje různé typy Non-Volatile Memory (NVM). K dispozici je I-Memory (Immutable Memory) s pevně zakódovanými výrobními daty, dále R-Memory (Rewritable Memory), rozdělená do chráněných oblastí pro uložení klíčů, konfiguračních registrů a uživatelských dat. Velikost jednotlivých oddílů umožňuje uložení několika desítek ECC klíčů, stovek uživatelských slotů či monotónních čítačů. Tato paměť zajišťuje trvalé uchování dat i po odpojení napájení a její obsah je chráněn jak přístupovými právy, tak detekcí pokusů o manipulaci. Veškerá data jsou silně šifrována s využitím jedinečného „otisku“ čipu z PUF a tak ani data, která by mohla být pracně získána pomocí elektronového mikroskopu, by se nedala zneužít.
TROPIC01 integruje Security Hardened Encryption Engine, který poskytuje pokročilé kryptografické operace jako je ECDSA, EdDSA nebo X25519 s důrazem na ochranu proti fyzickému i logickému narušení. Modul PIN verifikace je navržen s ohledem na odolnost vůči „brute-force“ útokům, využívá redundantní kódování a je úzce propojen s interním alarmovým systémem čipu. Kryptografické operace probíhají výhradně uvnitř bezpečné oblasti, kde jsou soukromé klíče chráněny nejen softwarově, ale především hardwarově. Výsledný obvod je totiž navržen tak, aby odolal takřka veškerým představitelným fyzickým útokům, k čemuž slouží samostatná bezpečnostní vrstva čipu označovaná jako Physical Security. Fyzická bezpečnost je zde podpořena celou řadou integrovaných senzorů, včetně teplotních senzorů, glitch detektorů, laserových a EM pulzních detektorů, detekce přístupů přes sondy či manipulaci s kovovými vrstvami čipu. Tyto senzory umožňují čipu reagovat na pokusy o fyzickou manipulaci či útoky, jako jsou side-channel analýzy, laserové nebo elektromagnetické pulzní útoky.
Kerckhoffův princip říká, že bezpečnost kryptografického systému by měla vycházet pouze z tajnosti klíče, nikoli z utajení samotného algoritmu. Jinými slovy, i když by byl algoritmus veřejně znám, systém by měl zůstat bezpečný, pokud klíč zůstane tajný. Tento princip podporuje transparentnost a umožňuje nezávislé ověření bezpečnosti kryptografických metod.
Projekt se řídí Kerckhoffovým principem a proto je kladen zvláštní důraz na ochranu klíčů. Právě privátní klíče by měly být bezpečně uloženy ve speciálně navrženém zabezpečeném čipu, který by měl poskytnout nadstandardně vysokou úroveň ochrany proti neoprávněnému přístupu a dalším bezpečnostním hrozbám.
V době, kdy kyberkriminalita narůstá a regulace se zpřísňují, je nezbytné mít k dispozici dostatečně silné bezpečnostní prvky. Je to právě otevřená architektura TROPIC01, která umožňuje výrobním partnerům a designérům plnou kontrolu nad bezpečností jejich zařízení.

Čip TROPIC01 se připojuje ke zákaznickému systému prostřednictvím sběrnice SPI, která umožňuje rychlou a spolehlivou výměnu dat. Důležitá komunikace probíhá po šifrované lince, což zaručuje vysokou úroveň bezpečnosti a ochranu před neoprávněným přístupem.
A ještě tu mám jednu novinku, o které jsem se dozvěděl až v průběhu psaní článku: TROPIC01 získal první místo v prestižní kategorii Embedded Award for Safety and Security na Embedded World 2025 v Norimberku, čímž potvrzuje svojí důležitou pozici na trhu bezpečnostních prvků. Vývojáři tak budou moci konečně obdržet řešení odpovídající nárokům moderní digitální éry.
Pokračování příště…
možná by šla i nějaká „soutěž“ – popište nám, do jakého projektu by se vám čip mohl hodit, deset nejzajímavějších získá testovací modul…
TROPIC01 – první jednoduché experimenty
V další části si ukážeme pár základních principů, jak s čipem pracovat a co od něj můžeme očekávat. V OctopusLABu vytváříme …
Tento repozitář obsahuje srozumitelná vysvětlení, příklady a testy pro bezpečnostní prvek TROPIC01. Naším cílem je snížit vstupní bariéru pro pochopení fungování tohoto čipu a umožnit tak rychlý začátek experimentů. Díky zjednodušeným ukázkám a detailním návodům se vývojářům podaří rychle se seznámit s funkcemi TROPIC01 a efektivně jej integrovat do svých systémů, což usnadňuje práci s touto moderní technologií.
Čip TROPIC01 má 16 monotónních čítačů (mcounter), indexovaných od 0 do 15 (tropic01_user_api).
Monotónní čítače jsou důležité pro zajištění neměnnosti a bezpečnosti, typicky ve scénářích, kde je potřeba počítat nebo omezovat počet operací. V projektech s TROPIC01 mohou sloužit pro:
- Zajištění nezfalšovatelné sekvence událostí – např. proti přehrání starších zpráv nebo rollbacku.
- Počítání omezeného množství operací – např. počet podpisů nebo přístupů k citlivým datům.
- Zajištění jednorázových operací – jako „self-destruct“ po několika pokusech.
from time import sleep_ms
import uhashlib, ubinascii
from upy_esp32_tropic01.tropic_upy_lib import SW, print_head, ts, pkey_index_0, sh0priv, sh0pub
print_head("upy_03mcounter | Monotonic Counter",True)
print("Starting secure session...\n")
ts.start_secure_session(pkey_index_0, bytes(sh0priv), bytes(sh0pub))
sleep_ms(300)
print("ts.mcounter_init()",ts.mcounter_init(3,123))
print(ts.mcounter_get(3))
print("ts.mcounter_update()", ts.mcounter_update(3))
print(ts.mcounter_get(3))
"""
MPY: soft reboot
--------------------------------------------------
Lib. TropicSquareMicroPython | version: 0.0.1
upy_03mcounter | Monotonic Counter
--------------------------------------------------
Starting secure session...
ts.mcounter_init() True
123
ts.mcounter_update() True
122
"""
Asymetrická kryptografie využívá dvojici klíčů: soukromý klíč (private key), který je tajný a nikdy neopouští zařízení, a veřejný klíč (public key), který je určen ke sdílení. Tyto klíče jsou matematicky propojené, ale z veřejného klíče nelze prakticky získat klíč soukromý. Nejčastějšími aplikacemi jsou digitální podpisy (kdy se podepisuje zpráva soukromým klíčem a ověřuje veřejným), šifrování a autentizace. Bezpečnost vychází z obtížnosti určitých matematických operací – např. výpočet diskrétního logaritmu nebo eliptických bodů.
TROPIC01 využívá eliptické křivky (ECC – Elliptic Curve Cryptography), které poskytují vysokou úroveň bezpečnosti při relativně malých velikostech klíčů. Podporuje dvě konkrétní křivky:
- P256 (0x01) – standardizovaná NIST křivka používaná v algoritmu ECDSA. Veřejný klíč má 64 bajtů (32 bajtů pro souřadnice X a Y). Hodí se tam, kde je potřeba kompatibilita s běžnými kryptosystémy.
- Ed25519 (0x02) – modernější křivka navržená pro vyšší výkon, bezpečnost a jednoduchost, používaná v algoritmu EdDSA. Její veřejný klíč má pouze 32 bajtů. Díky deterministickému podepisování a nižší chybovosti je vhodná např. pro embedded systémy nebo firmware podpisy.
Asymetrické klíče uložené a chráněné uvnitř čipu TROPIC01 mohou být využity pro digitální podepisování zpráv, ověření integrity firmware, bezpečné přihlašování zařízení nebo šifrování citlivých dat. Díky tomu, že privátní klíč nikdy neopouští čip a operace (např. podpis hashe) se provádí uvnitř něj, zajišťuje TROPIC01 ochranu před odcizením klíče i při fyzickém napadení zařízení. Takové řešení je ideální pro IoT, embedded systémy, platební terminály nebo hardwarové peněženky.
from time import sleep_ms
import uhashlib, ubinascii
from upy_esp32_tropic01.tropic_upy_lib import SW, print_head, ts, pkey_index_0, sh0priv, sh0pub
print_head("Signing SHA256 hash with TROPIC01 (SECP256R1)",True)
print("Starting secure session...\n")
ts.start_secure_session(pkey_index_0, bytes(sh0priv), bytes(sh0pub))
sleep_ms(300)
def print_ecc_key(slot):
print("-" * 32)
print("[Slot]", slot)
try:
# Attempt to read the ECC key from the specified slot.
ecc_tuple = ts.ecc_key_read(slot)
except Exception as e:
# If an error occurs (e.g., key not present), print the error message.
print("Error reading ECC key from slot", slot, ":", e)
print("Generating new ECC key in slot", slot)
try:
# Generate a new ECC key in the given slot using P256 (curve value 1).
ts.ecc_key_generate(slot, 1)
except Exception as gen_err:
print("Error generating ECC key in slot", slot, ":", gen_err)
return
try:
# Try reading the key again after generation.
ecc_tuple = ts.ecc_key_read(slot)
except Exception as e2:
print("Error reading ECC key after generation from slot", slot, ":", e2)
return
# Print the tuple returned from ecc_key_read.
# The third element of the tuple contains the public ECC key.
ecc_key = ecc_tuple[2]
print("ecc_key:", ecc_key.hex())
message = b"abc"
sha256 = uhashlib.sha256()
sha256.update(message)
hashed_message = sha256.digest() # hashed_message má délku 32 bajtů
print("hashed_message:",hashed_message.hex())
print_ecc_key(1)
rs = ts.ecdsa_sign(1, hashed_message) # slot: int, hash: bytes
print("R:",rs[0].hex())
print("S:",rs[1].hex())
"""
MPY: soft reboot
--------------------------------------------------
Lib. TropicSquareMicroPython | version: 0.0.1
Signing SHA256 hash with TROPIC01 (SECP256R1)
--------------------------------------------------
Starting secure session...
pkey_index_0: 0
Exception: Response status is not OK (status: 0x7f)
hashed_message: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
--------------------------------------------------
[Slot] 1
ecc_key: 90cf272a6b284f33f20a5e3506b0ebf29b5259db4323f9e21036961eba98e09c678ab1db7ea681f07a09b5e09072c4d4f97003da6937da695440ed43aefa52f9
R: 4cc9f47d24b6cb2d8edc82b71a62a0e0e354fa9027805385cd4e73778ecbf757
S: be798b2122cd9313055e245a81ed80f5060ba83903c7ff31b090de3a4a07f99d
...
"""
—————————–
Desig foto TrSq od TrSq
k čemu všemu? ikonky – https://tropicsquare.com/applications/crypto-wallets
Možná i „foto čipu“
Foto octopus
– připojení – schema
– foto s ESP
– foto šum? ….
– screen micropython
Digitální podpis v ECDSA funguje tak, že se ze zprávy vypočítá hash, který se podepíše pomocí tajného klíče, čímž vzniknou dvě hodnoty: R (náhodné číslo) a S (výsledek výpočtu). Tyto hodnoty spolu se zprávou odešlete příjemci, který pomocí veřejného klíče ověří, zda podpis odpovídá zprávě. Každý podpis je unikátní, protože při podpisu se pokaždé generuje jiné R – to zabraňuje zpětnému odhalení tajného klíče. Díky tomu si příjemce může být jistý, že zpráva pochází od vás a nebyla změněna.
github.com/octopusengine/tropic01_examples | github.com/petrkr/pytropicsquare/tree/develop | github.com/tropicsquare