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.Embedded Security trifft Messkette: Warum ADC/DAC heute sicher und präzise sein müssen
1) Kurz eingeordnet: ADC/DAC im Embedded-Alltag
- 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 4×, +2 Bit bei 16×). (Silicon Labs, Texas Instruments)
2) Anti-Aliasing & Signalaufbereitung: das Pflichtprogramm
- 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)
3) Oversampling & Averaging: „kostenlose“ Bits
4) Praxisbeispiel 1: STM32 – ADC mit DMA (Timer-getriggert)
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
}
5) Praxisbeispiel 2: Arduino – ADC-Basics & Spannung rechnen
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);
}
6) Praxisbeispiel 3: ESP32 – DAC-Ausgabe (für Tests/HIL)
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
}
}
}
7) Reproduzierbare Messungen: Checkliste
- 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)
8) Security-Seite: Secure Boot, TrustZone-M & Lifecycle-Updates
9) Edge-bis-Cloud-Pfade: Protokolle pragmatisch wählen
- 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.
10) Engineering-Workflow: Monorepo? Vendor-Drops? Release-Traces!
- 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)
11) Qualitätssicherung: Unit-Tests, Mocks, HIL & Metriken
-
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)
12) Security-Best-Practice kurz & knackig
- Threat-Model: Welche Angreifer? (Physisch/Remote). Welche Assets? (Keys, IP, Cloud-Creds, Sensor-Integrity).
- Boot-Kette verhärten: ROM-Root, Signaturpflicht, Rollback-Schutz, Secure-Storage. SBSFU/TF-M/MCUboot sind praxiserprobt. (STMicroelectronics, mcuboot)
- Isolation: TrustZone-M für Crypto/Keys/Update-Agent. (Arm Developer)
- Lifecycle-Update: standardisierte PSA Firmware Update API-Konzepte berücksichtigen; sauberer, wiederholbarer Prozess – vor Serienstart. (arm-software.github.io)
- Transports: MQTT/CoAP mit (m)TLS/DTLS, Geräte-Identität per mTLS, robuste Retry/Backoff, Clock-Sync. (OASIS Open Docs, IETF Datatracker)
- Lieferkette: SBOM + SLSA-Provenance pro Release. (CycloneDX, SLSA)
13) Fazit
Quellen & weiterführende Links
- Anti-Aliasing & Oversampling TI: Antialiasing Filter Circuit Design…; Designing an anti-aliasing filter… (Texas Instruments) Analog Devices: Guide to Anti-Aliasing Filter Basics; Anti-aliasing filtering considerations… (Analog Devices) Silicon Labs: Improving ADC Resolution by Oversampling and Averaging (Silicon Labs)
- STM32 ADC/DMA ST Wiki: Getting started with ADC (DMA, TIM); ST App Notes: ADC-Modi; DMA-Einführung (STMicroelectronics, STMicroelectronics)
- Arduino/ESP32 Arduino Doku: analogRead() & Beispiele (docs.arduino.cc, Arduino) Espressif Doku: ESP32 DAC (API & TRM) (Espressif Docs, Espressif)
- Secure Boot / TrustZone / Lifecycle ST SBSFU (Produktseite, AN5056), TrustZone-basierte Lösung (AN5447) (STMicroelectronics) ARM/TF-M & TrustZone-M Grundlagen (Arm Developer, trustedfirmware-m.readthedocs.io) MCUboot Doku & Signing-Tool (mcuboot) NIST SP 800-193: Platform Firmware Resiliency (NIST Publications) PSA Firmware Update API (Designziele/Modell) (arm-software.github.io)
- Edge-to-Cloud-Protokolle MQTT (OASIS v3.1.1/v5) (OASIS Open Docs) CoAP (RFC 7252) & Weiterentwicklungen (IETF Datatracker)
- Workflow & Traces CycloneDX SBOM (Spec/Guide) (CycloneDX) SLSA Provenance/Levels (SLSA) Monorepo-Trade-offs (Fowler) (martinfowler.com)
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)