Europe/Berlin
--:--:--

Embedded Security als Zukunftsthema (Secure Boot, TrustZone)

June 11, 2024Threat-Modeling, Secure-Boot-Ketten und Lifecycle-Updates für Geräteflotten. Monorepo vs. Multirepo, Vendor-Drops und Tooling für Release-Traces. Unit-Tests (Host/Target), Mocks/Stubs, HIL und Release-Qualität messen. Wann welches Protokoll? Edge-bis-Cloud-Pfade mit Praxis-Pattern und Fallstricken.
Wer Sensorgeräte baut, hat zwei Baustellen: Security (damit nur Ihr Code läuft und Daten echt sind) und Signalqualität (damit die Daten stimmen). Beides hängt zusammen: Eine saubere Secure-Boot-Kette schützt Firmware und Schlüssel; eine saubere ADC/DAC-Kette schützt vor aliasenden Störern, Drift und Messchaos. In diesem Artikel verknüpfen wir die Themen praxisnah – mit STM32, Arduino und ESP32-Beispielen.
ADC (Analog->Digital) wandelt Spannungen in Zahlen; DAC (Digital->Analog) erzeugt Testsignale, steuert Aktoren oder speist HIL-Rigs. Wichtige Kennwerte:
  • Auflösung (Bit): bestimmt die LSB-Größe (Vref/2^N).
  • Samplingrate fs: bestimmt, wie schnell Sie messen (Nyquist: ≥ 2·fmax des Signals).
  • Quantisierung/ENOB: reale effektive Bits < Datenblatt-Bits; lässt sich per Oversampling & Averaging verbessern (z. B. +1 Bit bei , +2 Bit bei 16×). (Silicon Labs, Texas Instruments)
Mehr dazu vertiefen TI/ADI-Artikel und App Notes – gleich verlinkt – mit Design-Guides zu Filtern und Oversampling. (Texas Instruments, Analog Devices)
Aliasing macht aus hohen Frequenzen scheinbar langsamere – fatal für Sensorik. Lösung: ein analoger Tiefpass vor dem ADC, meist 1.–2. Ordnung (RC) für “Normalfälle”, Bessel/Butterworth aktiv für anspruchsvollere Anwendungen (gute Phase bzw. steiler Abfall). Als Startpunkt: fc ≈ 0,4…0,45·fs (bei reinen Basisband-Signalen), mehr Reserve bei hartem Störumfeld. TI/ADI liefern konkrete Rechenwege und Beispielschaltungen. (Texas Instruments, Analog Devices) Praxis-Fallen:
  • Eingangsquelle muss den Sample-and-Hold-Kondensator des ADC schnell laden – hohe Quellimpedanz → Fehlsamples. Dazu gibt’s gute Erklärstücke aus der Praxis. (Embedded Related)
  • RC-Filter nahe am Pin, Sternmasse, kurze Leitungen, dedizierte VDDA/VSSA (Decoupling!). (EDN)

Faustregel: Samples → ~+0,5 Bit ENOB; 16×~+2 Bit. Wichtig ist genügend weißes Rauschen (auch dither) und eine stabile Vref. Sauber umgesetzt, gewinnen Sie Auflösung ohne neue Hardware. Gute Schritt-für-Schritt-Anleitungen liefern Silicon Labs, TI und klassische Embedded-Artikel. (Silicon Labs, Texas Instruments, Embedded)
Setup-Idee: Timer triggert ADC-Sampling; DMA (circular) schreibt Samples in einen Ringpuffer – CPU-Last minimal, Jitter gering.
C
// Globale Puffer
#define ADC_BUF 1024
volatile uint16_t adc_buf[ADC_BUF];

// Init: ADC (Scan, Continuous off), externer Trigger z.B. TIM3_TRGO
// DMA: Peripheral->Memory, Half/Full Transfer IRQ, Circular
// Timer: Upcounter, Update-Event als TRGO, Rate = gewünschte fs

void start_adc_dma(void) {
    HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, ADC_BUF);
    HAL_TIM_Base_Start(&htim3); // liefert TRGO an ADC
}

// Callbacks: deterministische Verarbeitung in Blöcken
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc) {
    // adc_buf[0 .. ADC_BUF/2-1] verarbeiten
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
    // adc_buf[ADC_BUF/2 .. ADC_BUF-1] verarbeiten
}
Warum so? Timer-Trigger → konstantes fs, DMA-Double-Buffer → keine Lücken, kein ISR-Sturm. ST-Wiki/App Notes führen ins Thema ADC+DMA/TIM ein; die DMA-Einführung fasst Transfer-Modi gut zusammen. (STMicroelectronics, STMicroelectronics) Tipp: Auf CM7-Cores (z. B. STM32H7) Cache-Kohärenz beachten (D-Cache invalidieren oder DMA-Buffer in non-cacheable Section). ST-Unterlagen und Praxisguides zeigen Stolperstellen und Workarounds. (STMicroelectronics, skybluetrades.net)
Cpp
const int PIN = A0;
const float VREF = 5.0; // oder 3.3V – je Board/analogReference()

void setup() {
  Serial.begin(115200);
}

void loop() {
  const int N = 32;          // einfaches Averaging
  long acc = 0;
  for (int i=0; i<N; ++i) acc += analogRead(PIN);
  float avg = acc / float(N);               // 10-bit -> 0..1023
  float volt = avg * (VREF / 1023.0);
  Serial.println(volt);
}
Dazu: analogReference() passend setzen (DEFAULT/EXTERNAL/INTERNAL je Board). Offizielle Doku beschreibt die Details des analogRead()-Verhaltens. (docs.arduino.cc, Arduino)
Der ESP32 hat zwei 8-Bit-DAC-Kanäle (GPIO25/GPIO26). Für einfache Stimuli reicht der DAC-Treiber; für kontinuierliche Signale (Sägezahn/Sinus) nutzen Sie I2S „built-in DAC mode“ mit Pufferung. (Espressif Docs)
C
#include "driver/dac.h"
void app_main(void) {
    dac_output_enable(DAC_CHANNEL_1); // GPIO25
    for (;;) {
        for (int v=0; v<256; ++v) {
            dac_output_voltage(DAC_CHANNEL_1, v); // 0..255 -> 0..Vref
        }
    }
}
Praktisch: So speisen Sie den STM32-ADC reproduzierbar – ideal für HIL-Tests. (Mehr zu HIL-Prinzipien in gängigen Übersichten.) (Ansys)
  • Referenzspannung (Vref): intern vs. extern, Tempdrift/Noise; separat entkoppeln, kurze Rückführung zur ADC-Masse. Schlechte Vref ruiniert jede Kalibrierung; App Notes zu Oversampling und Praxisartikel zeigen Effekte und Gegenmaßnahmen. (Silicon Labs, EDN)
  • Layout: Trennen Sie AGND/DGND sinnvoll, sternförmig, keine Rückströme quer durch die Messfront; Filter nah am Pin. (EDN)
  • Oversampling/Averaging: N-fach messen, gemittelte Werte nutzen; bei hoher Dynamik adaptiv mitteln. Formale Bits-Zugewinne siehe oben. (Silicon Labs)
  • DMA-Double-Buffer: deterministische Blöcke; bei Caches: non-cacheable Regionen nutzen. (STMicroelectronics)
  • Kalibrierung: 2-Punkt (Offset/Gain), über Temperatur punkten.
  • Anti-Aliasing: Bessel bei Zeitbereich-Signalen (saubere Phase), Butterworth für spektrale Trennung, TI/ADI liefern konkrete Dimensionierung. (Texas Instruments, Analog Devices)

Secure-Boot-Kette: Root of Trust (ROM/Immutable Boot), Signaturprüfung (ECDSA/RSA), Rollback-Schutz (Monotonic Counter), sicherer OTA-Updateweg. Für STM32 existiert SBSFU (Secure Boot & Secure Firmware Update, inkl. Secure Engine/Memory-Mapping), sowie TrustZone-basierte Lösungen mit TF-M (Trusted Firmware-M) als Secure-World-Referenz. (STMicroelectronics, trustedfirmware-m.readthedocs.io) Open-Source-Bootloader: MCUboot (Signierung via imgtool, A/B-Slots, Wiederanlauf). In Zephyr/andere Ökosysteme integriert. (mcuboot, Zephyr Project Documentation) TrustZone-M isoliert „Secure“ (Krypto, Keys, Update-Agent, Secure Storage) von „Non-Secure“ (App/Peripherie). ARM-Doku erklärt die Trennung und Aufrufe zwischen den Welten. TF-M liefert PSA-konforme Secure Services (Crypto, Attestation, Protected Storage) samt Update-API-Leitplanken für den gesamten Lifecycle. (Arm Developer, trustedfirmware-m.readthedocs.io, arm-software.github.io) Firmware-Resilienz: NIST SP 800-193 benennt die Prinzipien Protect-Detect-Recover – relevant auch für Embedded/IoT (angepasst an Ressourcen). Halten Sie diese drei Säulen bei Design & Betrieb präsent. (NIST Publications)
  • MQTT (TCP/TLS, Pub/Sub): super für Telemetrie, „last-will“, QoS 0/1/2; ideal bei Gateway/Cloud-Integration, v5 bringt bessere Fehlerberichte und Eigenschaften. (OASIS Open Docs, mqtt.org)
  • CoAP (UDP/DTLS, REST-artig): leichtgewichtig, Observe/Blockwise; gut für constrained Netze, IPv6/6LoWPAN. (IETF Datatracker)
  • HTTP/2/3: Updates/Downloads, breite Infrastruktur – mit TLS/mTLS und Resume-Mechanismen.
Pattern: Gerät → (optional) Gateway → Cloud. mTLS für Geräte-Identität, Backoff/Store-&-Forward bei Offline, Zeitbasis (SNTP) für Zert-Gültigkeiten nicht vergessen. (CoAP wird inzwischen sogar für PKI-Flows genutzt – CMP via CoAP). (RFC Editor)
  • Monorepo vs. Multirepo: Monorepo vereinfacht Querschnittsänderungen, Multirepo isoliert Komponenten/Produkte. Es gibt kein Dogma – Tooling & Teamgröße entscheiden. Martin Fowler beleuchtet die Trade-offs und Branch-Muster. (martinfowler.com)
  • Vendor-Drops (HAL/SDK): als Submodule/Mirror mit immutable Tags einziehen; Changelogs referenzieren; keine manuelle Patch-Mischung im Projektstamm.
  • Release-Traces: bauen Sie SBOMs (z. B. CycloneDX) und Provenance (SLSA) direkt in die Pipeline ein – Artefakte lassen sich später eindeutig zu Quellen/Builds zurückführen. Für IoT-Flotten Gold wert (Forensik, CVE-Abgleich). (CycloneDX, GitHub, SLSA)

  • Unit-Tests (Host): z. B. Unity/Ceedling – schlankes ANSI-C-Framework, ideal für Treiber-Logik (mit CMock für HAL-Stubs). (Throw The Switch, GitHub) Mini-Beispiel (Skalierung):
    C
    // skaliert ADC rohen Wert (0..4095) nach Volt (Vref=3.3)
    float adc_to_volt(uint16_t raw) { return (3.3f * raw) / 4095.0f; }
    
    TEST(AdcScale, ConvertsCorrectly) {
      TEST_ASSERT_FLOAT_WITHIN(0.005f, 1.650f, adc_to_volt(2048));
    }
    
  • Unit-Tests (Target): kleiner Testsatz on-target (z. B. per semihosting/serial), um Compiler/ABI/Linker-Effekte zu erwischen.
  • HIL: reale Controller-Hardware ↔ simulierte Umwelt (ESP32-DAC speist STM32-ADC; digitale I/Os treiben simulierte Sensoren). Kritisch für Timing-/I/O-Pfade und Sicherheits-Funktionen (z. B. sichere Update-Recovery). (Ansys)
  • Release-Metriken: Code-Coverage (Host), on-target Smoke-Tests, Latenz/Jitter-Messungen der DMA-Kette, ENOB/Noise-Floor, Update-MTTR (Recovery-Zeit gemäß SP 800-193). (NIST Publications)

  1. Threat-Model: Welche Angreifer? (Physisch/Remote). Welche Assets? (Keys, IP, Cloud-Creds, Sensor-Integrity).
  2. Boot-Kette verhärten: ROM-Root, Signaturpflicht, Rollback-Schutz, Secure-Storage. SBSFU/TF-M/MCUboot sind praxiserprobt. (STMicroelectronics, mcuboot)
  3. Isolation: TrustZone-M für Crypto/Keys/Update-Agent. (Arm Developer)
  4. Lifecycle-Update: standardisierte PSA Firmware Update API-Konzepte berücksichtigen; sauberer, wiederholbarer Prozess – vor Serienstart. (arm-software.github.io)
  5. Transports: MQTT/CoAP mit (m)TLS/DTLS, Geräte-Identität per mTLS, robuste Retry/Backoff, Clock-Sync. (OASIS Open Docs, IETF Datatracker)
  6. Lieferkette: SBOM + SLSA-Provenance pro Release. (CycloneDX, SLSA)

Sichere Embedded-Produkte entstehen, wenn die Secure-Boot-Kette und die Messkette gleich ernst genommen werden: Der eine Strang schützt wer Code ausführen darf, der andere stellt sicher, was gemessen wird. Mit ADC+DMA, Anti-Aliasing und Oversampling holen Sie das Maximum aus Ihren Sensoren; mit TrustZone, SBSFU/TF-M/MCUboot und einer sauberen OTA-Strategie bleiben Geräteflotten über Jahre zuverlässig – und sicher.

Bonus-Idee fürs Labor: Nutzen Sie den ESP32-DAC als programmierbaren Stimulus, speisen Sie damit den STM32-ADC (DMA, timergetriggert) und verifizieren Sie Filter/Skalierung in einer HIL-Schleife – inklusive automatisierten Unity-Tests für die Signalverarbeitung. So testen Sie Security-relevante Update-Recovery-Pfade und messen reale ENOB gleich mit. (Espressif Docs, STMicroelectronics, Throw The Switch)