13.01.2015 Aufrufe

Abschlussbericht

Abschlussbericht

Abschlussbericht

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

BSI, Bonn<br />

IHP, Frankfurt (Oder)<br />

<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Version 1.00<br />

13. Oktober 2011<br />

IHP: Prof. Dr. Peter Langendörfer / Frank Vater / Thomas Basmer / Oliver Stecklina<br />

BSI: Frank Gehring, Christian Wieschebrink


2<br />

<strong>Abschlussbericht</strong><br />

Trusted Sensor Node


Inhaltsverzeichnis<br />

1 Einleitung 13<br />

1.1 Beschreibung des Gesamtsystems . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2 Hardware 15<br />

2.1 Beschreibung der Teilkomponenten . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.2 LEON2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.3 AMBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.4 Konfigurationsregister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

2.5 Memory-Controller und Integration der Hardwarebeschleuniger . . . . . . . 18<br />

2.6 Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

2.7 Parallel I/O-Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

2.8 UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

2.9 DSU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.10 Interrupt-Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.11 Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.12 Memory-Like Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

2.13 AES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.13.1 Arithmetische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.13.2 Algorithmusbeschreibung des AES . . . . . . . . . . . . . . . . . . . 24<br />

2.13.3 Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

2.14 ECC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

2.14.1 Arithmetische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

2.14.2 Multiplizierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

2.14.3 Reduktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

2.14.4 System-Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.14.5 Parameter im TSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

2.15 SHA-1 / PRNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

2.15.1 Secure Hash Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

2.15.2 Pseudo Random Number Generator (PRNG) . . . . . . . . . . . . . 36<br />

2.15.3 Hardwarebeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

2.16 SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

2.17 Pads und Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

2.18 Vom VHDL zum ASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

2.19 Layoutgenerierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

2.20 Boardbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

2.21 Systemtest und Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

2.22 Energie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

2.23 Debug- und Diagnoseschnittstellen . . . . . . . . . . . . . . . . . . . . . . . 44


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

3 Software 45<br />

3.1 Das Betriebssystem eCos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

3.1.1 eCos im Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

3.1.2 Hinzufügen von Komponenten . . . . . . . . . . . . . . . . . . . . . 48<br />

3.1.3 build-Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

4 Softwarearchitektur des TSN 57<br />

4.1 Gerätetreiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

4.1.1 UART Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

4.1.2 SPI Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

4.1.3 MMIO Treiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

4.1.4 General Purpose Input/Output (GPIO) Treiber . . . . . . . . . . . . . 61<br />

4.2 Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />

4.2.1 CryptAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />

4.2.2 SensorAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

4.3 Protokollstapel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

4.3.1 lightweight IP Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

4.3.2 Point to Point Protocol (PPP) . . . . . . . . . . . . . . . . . . . . . . 66<br />

4.3.3 Bluetooth Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />

4.3.4 Sensor Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

4.4 TSN Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

4.4.1 Bridge Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

4.4.2 Schlüsselaustausch Thread . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.4.3 Sensorik Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.4.4 Management Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

5 Simulation und Messergebnisse 73<br />

5.1 Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

5.2 Messaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

5.3 Messprogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

5.4 Messungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

5.5 Lebensdauertest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />

6 Future Work 77<br />

6.1 System-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

6.1.1 Mikrokern-basierter TSN mit Security Compartments . . . . . . . . . 78<br />

6.1.2 Trusted Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

6.1.3 TCP/IP Netzwerk-Stack . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

6.2 Optimiertes Hardwarekonzept . . . . . . . . . . . . . . . . . . . . . . . . . . 95<br />

6.2.1 Einfügen neuer Komponenten . . . . . . . . . . . . . . . . . . . . . 96<br />

6.2.2 Veränderungen an vorhandenen Komponenten . . . . . . . . . . . . 100<br />

6.2.3 Schutzkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />

6.3 Energieversorgung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

6.3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

6.3.2 Boardkomponenten . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

6.3.3 Alternativen zur Energieversorgung aus Primärbatterien . . . . . . . 112<br />

Abkürzungsverzeichnis 115<br />

4


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Literaturverzeichnis 117<br />

5


Tabellenverzeichnis<br />

1.1 Eigenschaften des TSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.1 Signale eines Memory-Like Interface . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.2 Struktur des Kontrollregisters . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

2.3 Adressen der SHA-1-Register . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

2.4 Simulation der Leistungsaufnahme für Einzelkomponenten und das Gesamtsystem<br />

bei 16 MHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

3.1 Speichergrößen verschiedener Konfigurationen von eCos 3.0 . . . . . . . . 45<br />

4.1 Konfigurationskommandos des MMIO Treibers . . . . . . . . . . . . . . . . 61<br />

4.2 AT-Kommandos des Bluebear SP-S . . . . . . . . . . . . . . . . . . . . . . 68<br />

5.1 Messungen der Stromaufnahme für den AES . . . . . . . . . . . . . . . . . 76<br />

5.2 Messungen der Stromaufnahme für den ECC . . . . . . . . . . . . . . . . . 76<br />

6.1 Vergleich verschiedener Multiplizierer für Punktmultiplikation der ECC Komponente<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104


Abbildungsverzeichnis<br />

1.1 Anwendungsbeispiel des TSN . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.1 Blockschaltbild des TSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.2 Grafische Darstellung der fünfstufigen Pipeline des LEON2 (entnommen<br />

aus LEON2 Processor User’s Manual) [3] . . . . . . . . . . . . . . . . . . . 17<br />

2.3 Aufbau des AMBA-Bus-Systems im TSN . . . . . . . . . . . . . . . . . . . . 17<br />

2.4 Verwendung eines AES-Blocks mit einem memory-like Interface . . . . . . 19<br />

2.5 Schlüsseladdition für 128 Bit . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

2.6 Schematischer Aufbau der AES-Implementierung . . . . . . . . . . . . . . . 24<br />

2.7 Spaltenweise Generierung des nächsten Rundenschlüssels . . . . . . . . . 26<br />

2.8 Da das Ergebnis einer Multiplikation länger als die maximale Feldlänge ist,<br />

benötigt man einen Reduktionsschritt, der das Ergebnis innerhalb des Feldes<br />

reduziert. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

2.9 Blockschaltbild des 233-Bit-ECC-Beschleunigers. Ein 233 Bit breiter, von<br />

einer Controller-Einheit kontrollierter Bus verbindet die Rechen- und Registereinheiten.<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

2.10 Resultate der verschiedenen ECC-Beschleuniger-Schaltungen. Die Balken<br />

zeigen die benutzte Siliziumfläche. Die Linien entsprechen dem Energieverbrauch.<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

2.11 Ablauf der Signatur mit Hilfe von Soft- und Hardware . . . . . . . . . . . . . 33<br />

2.12 Blockschaltbild des SHA-1-Moduls . . . . . . . . . . . . . . . . . . . . . . . 37<br />

2.13 Gehäuse des TSN vom Typ QFP128 . . . . . . . . . . . . . . . . . . . . . . 40<br />

2.14 Test eines entwickelten Hardware-Modells . . . . . . . . . . . . . . . . . . . 41<br />

2.15 Layout des TSN-Chip nach der Verdrahtung. Insbesondere die Verdrahtung<br />

auf den beiden obersten Metallebenen (hier: gelb und braun) treten hervor 41<br />

2.16 Analyse der Leistungsaufnahme des Gesamtsystems (rot) sowie selektierter<br />

Einzelkomponenten. Der grüne Plot zeigt exemplarisch den deutlich erhöhten<br />

Stromverbrauch des ECC-Beschleunigers in seiner Aktivitätsphase. 43<br />

3.1 eCos-Systemarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

4.1 Softwarearchitektur des TSN . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

4.2 SPI Chip Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

4.3 Die Protokollstapel des TSN . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

4.4 Zustandsautomat der Sensorüberwachung . . . . . . . . . . . . . . . . . . 71<br />

4.5 Management der TSN Threads . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

6.1 Auswirkung von Fehlern in Betriebssystemen ohne Security Compartments 79<br />

6.2 Schutz von Betriebssystemkomponenten durch Security Compartments . . 79


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

6.3 Aufteilung von Diensten und Services in monolithischen und µKern-Betriebssystemen<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />

6.4 Integration des Sicherheitsmoduls in den Trusted Sensor Node (TSN) . . . 83<br />

6.5 Trusted Boot eines L4-basierten Systems mit Signatur-basierter Modulauthentifizierung<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

6.6 Kryptographisch gesichertes Programmcode Update . . . . . . . . . . . . . 87<br />

6.7 Kategorisierung der Ansätze zur Verbesserung der TCP-Performanz in heterogenen<br />

Netzwerken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94<br />

6.8 Anzahl der in den drahtlosen Kanal gesendeten Bytes in Abhängigkeit von<br />

der Anzahl der Übertragungswiederholungen im Medium Access Control<br />

(MAC) und der Bitfehlerrate (BER) . . . . . . . . . . . . . . . . . . . . . . . 95<br />

6.9 Datenrate in Abhängigkeit von der Paketgröße auf MAC bzw. Transmission<br />

Control Protocol (TCP) Ebene, und der Bitfehlerrate (BER) . . . . . . . . . 96<br />

6.10 Clockgating-Controller bestehend aus Latch und OR-Gatter . . . . . . . . . 97<br />

6.11 Finite-State-Machine mit 5 Zuständen . . . . . . . . . . . . . . . . . . . . . 98<br />

6.12 Zunahme der Leckströme bei Verkleinerung der Strukturgröße[1] . . . . . . 98<br />

6.13 Darstellung eines Power-Gating-Controllers . . . . . . . . . . . . . . . . . . 99<br />

6.14 Darstellung einer Power-Gating Architektur . . . . . . . . . . . . . . . . . . 99<br />

6.15 Veränderte Anbindung der kryptografischen Komponenten zwischen Memory-<br />

Controller und Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

6.16 BGA-Gehäuse (Unterseite) . . . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />

6.17 TSN in einem offenen PQFP-128-Gehäuse . . . . . . . . . . . . . . . . . . 106<br />

6.18 Trägerplatine mit aufgebondeten ASICs . . . . . . . . . . . . . . . . . . . . 107<br />

6.19 Chip in einem BGA-Gehäuse . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />

6.20 Trägerplatine mit teilweise vergossenen Kondensatoren . . . . . . . . . . . 108<br />

6.21 Anbindung der Authentifizierungskomponente in den TSN . . . . . . . . . . 108<br />

6.22 Authentifizierung des Nutzers am TSN, um Man-In-The-Middle Attacken zu<br />

vermeiden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />

6.23 Authentifizierung zwischen Nutzer und TSN zum Start einer neuen Session<br />

mit Schutz Replay-Attacken . . . . . . . . . . . . . . . . . . . . . . . . . . . 110<br />

10


Listings<br />

2.1 Beispielcode zum Ansprechen des AES am Memory-Controller . . . . . . . 22<br />

2.2 Unterfunktionen f und K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

2.3 Der Algorithmus von G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

3.1 Package–Verzeichnisbaum . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

3.2 Package–Defintion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

3.3 Package–Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

3.4 Device Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

3.5 Device IO Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

3.6 Application Skeleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

5.1 Code für maximalen Datendurchsatz des AES . . . . . . . . . . . . . . . . 74<br />

6.1 Schreibbefehl für die Verschlüsselung von Daten mit expliziten Adressen . 101<br />

6.2 Schreibbefehl für die Verschlüsselung von Daten auf eine Adresse . . . . . 101


1 Einleitung<br />

Drahtlose Sensornetze werden heute in vielen Bereichen, wie zum Beispiel der Industrieautomatisierung,<br />

Umweltdatenerfassung und Überwachung von Infrastrukturen eingesetzt.<br />

Aus Gründen des Schutzes vor Ausspähung von Betriebsgeheimnissen, Manipulation und<br />

Sabotage von Anlagen, zum Beispiel im Bereich der biologischen und chemischen Prozesstechnologie,<br />

aber auch im Bereich der Homeland Security, werden hohe Sicherheitsanforderungen<br />

an drahtlose Sensorknoten gestellt. Insbesondere die Verwendung des Mediums<br />

Luft macht diese Geräte leicht angreifbar, da kein physikalischer Zugang für das<br />

Abhören oder die Manipulation der Daten und Geräte benötigt wird. Dem Einsatz starker<br />

kryptographischer Mechanismen stehen jedoch im Regelfall die begrenzten Ressourcen<br />

der drahtlosen Sensorknoten entgegen.<br />

Im Rahmen des Projekts „Trusted Sensor Node“ (TSN) sollte ein vertrauenswürdiger Sensorknoten<br />

für das Bundesamt für Sicherheit in der Informationstechnik (BSI) entwickelt<br />

werden. Dieser Knoten fungiert als Bridge zwischen „einfachen“ Sensorknoten, die der<br />

Detektion von Ereignissen dienen, und einer Datensenke. Für die Kommunikation im Sensornetzwerk<br />

wird IEEE 802.15.4 eingesetzt. Die Kommunikation mit der Datensenke erfolgt<br />

auf Basis der Bluetooth-Technologie. Dieser TSN soll zudem die erste vertrauenswürdige<br />

Instanz in der Netzwerktopologie bilden. Deshalb wurde eine Unterstützung starker kryptographischer<br />

Verfahren durch entsprechende Hardwarebeschleuniger vorgesehen.<br />

IEEE 802.15.4<br />

iSense<br />

iSense<br />

IEEE 802.15.1<br />

TSN<br />

iSense<br />

Basestation<br />

iSense<br />

iSense<br />

Abbildung 1.1: Anwendungsbeispiel des TSN


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

1.1 Beschreibung des Gesamtsystems<br />

Der TSN-Knoten setzt sich zusammen aus einem Singlechip, welcher aus einem Prozessor<br />

und den Hardwarebeschleunigern besteht und den externen Komponenten wie Funkmodulen<br />

und zusätzlichem Speicher, die auf dem Board mit dem Core kombiniert werden.<br />

Der Knoten fungiert als Bridge zwischen Bluetooth und IEEE 802.15.4 (siehe Abbildung<br />

1.1). Um dies zu ermöglichen, muss der TSN mit zwei unterschiedlichen externen Radiomodulen<br />

ausgestattet sein. Neben diesen Funkmodulen müssen auch Sensoren und<br />

zusätzliche Speicher (RAM, Flash) an den TSN angeschlossen werden. Die notwendigen<br />

Schnittstellen sind in den TSN integriert. Das Blockschaltbild in Abbildung 2.1 verdeutlicht<br />

den Aufbau des Sensorknotens.<br />

Um die Sicherheitsanforderungen erfüllen zu können wurde der TSN abweichend vom<br />

LEON2-Referenz-Design [1] um Co-Prozessoren für AES, SHA-1/PRNG sowie ECC erweitert.<br />

Sie werden zum Ver- und Entschlüsseln von Daten sowie zur Signierung von<br />

Nachrichten eingesetzt. Die Zusatzmodule dienen somit einer sicheren Verarbeitung und<br />

Übertragung von Daten.<br />

Für die Anbindung externer Sensoren steht der Serial Peripheral Interface (SPI)-Master zur<br />

Verfügung. An diesen können bis zu drei SPI-Slave-Komponenten angeschlossen werden.<br />

Die vorgesehenen Radiomodule werden über zwei UART-Schnittstellen mit dem System<br />

verbunden. Der externe Speicher wird direkt an den Memory Controller angeschlossen.<br />

Tabelle 1.1 zeigt die Systemeigenschaften des TSN-ASICs. Er wird mit der IHP-eigenen<br />

0,25-µm-Technologie gefertigt.<br />

Fläche 30mm 2<br />

Signalpins 87<br />

Powerpins 24<br />

BIST/Scan-Ports 5<br />

Cache<br />

2x4kByte<br />

Maximale Taktfrequenz 16 MHz<br />

Corespannung 2,5 V<br />

Padspannung<br />

3,3 V<br />

Tabelle 1.1: Eigenschaften des TSN<br />

14


2 Hardware<br />

2.1 Beschreibung der Teilkomponenten<br />

Wie im Blockschaltbild (siehe Abbildung 2.1) zu erkennen ist, setzt sich der TSN aus verschiedenen<br />

Hardwarekomponenten zusammen. Diese werden in diesem Kapitel genauer<br />

erläutert.<br />

Programming<br />

Interface<br />

Sensors<br />

802.15.4<br />

Module<br />

D-Cache<br />

I-Cache<br />

Scanchain<br />

DSU<br />

SPI<br />

(Master)<br />

UART<br />

Bluetooth<br />

Module<br />

LEON2<br />

Processor<br />

Core<br />

AMBA AHB<br />

Bridge<br />

(Master)<br />

AMBA APB<br />

Memory Controller<br />

Intr<br />

Ctrl<br />

Timer<br />

GPIO<br />

Sensors<br />

AES<br />

ECC<br />

SHA1<br />

PRNG<br />

Flash<br />

RAM<br />

Abbildung 2.1: Blockschaltbild des TSN<br />

2.2 LEON2<br />

Das Herz des TSN bildet der LEON2, ein 32-Bit-RISC-Prozessor. Der Chip ist als VHDL-<br />

Modell von Gaisler Research [2] entwickelt worden und steht als „Open Source“-Komponente<br />

unter der Lesser GNU Public License (LGPL) [31] zur Verfügung.<br />

Als Grundlage dient die SPARC-V8-Architektur, die in IEEE 1754 beschrieben ist. Der Chip<br />

enthält separate Befehls- und Datencaches, Interrupt-Controller, Timer, Debug-Unterstüt-


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

zung und ein einfaches Powermanagement. Als zentrales Bussystem dient der AMBA-Bus<br />

[4], über den auch zusätzliche Peripherie angeschlossen werden kann.<br />

Der LEON2 besitzt eine fünfstufige Pipeline für die Befehlsverarbeitung (siehe Abbildung<br />

2.2) und in der vorliegenden Konfiguration einen Satz von 8 Register-Windows. Die Instruktions-Pipeline<br />

ist folgendermaßen aufgebaut:<br />

• Stufe 1: Instruktion holen (Fetch)<br />

Instruktion aus dem Instruktionscache oder über den Memory-Controller aus dem<br />

Speicher holen.<br />

• Stufe 2: Instruktion dekodieren (Decode)<br />

Instruktion wird dekodiert und die Operanden werden aus dem entsprechenden Register-Window<br />

gelesen.<br />

• Stufe 3: Instruktion ausführen (Execute)<br />

Operation der Arithmetisch-Logischen Einheit wird ausgeführt.<br />

• Stufe 4: Speicherzugriff (Memory)<br />

Ergebnisse aus der Stufe 3 werden in den Datencache zurückgeschrieben.<br />

• Stufe 5: Schreiben (Write)<br />

Ergebnisse der Operationen aus Stufe 3 werden in entsprechende Register-Windows<br />

zurückgeschrieben.<br />

Unter der Voraussetzung, dass sich die nötigen Daten im Cache befinden, wird ein Großteil<br />

der Instruktionen in einem Clockzyklus abgearbeitet. Ausgenommen hiervon sind die<br />

Jump-, Load- und Store-Operationen.<br />

In der Konfiguration des LEON2 besteht die Möglichkeit, einen Hardwaremultiplizierer in<br />

das Design zu integrieren. Dadurch werden die Multiplikationsoperationen beschleunigt.<br />

Die hierdurch beschleunigten Operationen würden, falls überhaupt, als Teil der kryptographischen<br />

Operationen benötigt. Da für diese bereits Hardwarebeschleuniger vorgesehen<br />

sind, wurde zur Minimierung der Chipfläche auf die Integration eines solchen Multiplizierers<br />

verzichtet.<br />

2.3 AMBA<br />

Der Advanced Microcontroller Bus Architecture (AMBA)-Bus wird zur Kommunikation der<br />

Komponenten auf einem Application Specific Integrated Circuit (ASIC) verwendet [4]. Er<br />

besteht in der Regel aus zwei Untersystemen, dem Advanced High-performance Bus<br />

(AHB) und dem Advanced Peripheral Bus (APB).<br />

Der AHB wird verwendet, um Komponenten mit hohen Datentransferraten zu verbinden.<br />

Prozessor, Speicher sowie gegebenenfalls Co-Prozessoren sind über diesen schnellen<br />

Datenbus angebunden.<br />

16


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Abbildung 2.2: Grafische Darstellung der fünfstufigen Pipeline des LEON2<br />

(entnommen aus LEON2 Processor User’s Manual) [3]<br />

Der APB hingegen ist auf Energieeffizienz optimiert und besonders geeignet, langsame<br />

Peripherie, wie z.B. serielle Schnittstellen, in das System zu integrieren. Der AHB und der<br />

APB sind über eine Bridge miteinander verbunden. Durch das Hinzufügen des APB bleibt<br />

die hohe Leistungsfähigkeit des AMBA-Busses auch im Fall des Zugriffs auf langsame<br />

Komponenten erhalten.<br />

Der AHB im TSN (siehe Abbildung 2.3) enthält einen AHB-Master mit dem LEON2-Prozessor<br />

und zwei AHB-Slaves, den Memory-Controller sowie die APB-Bridge. Ein AHB-Master<br />

kann einen Zugriff auf den AHB initialisieren, während ein AHB-Slave nur auf Transaktionen<br />

(Lese- oder Schreibbefehl) reagieren kann.<br />

Prozessor mit<br />

Pipeline<br />

D-Cache I-Cache<br />

AHB-Master<br />

AHB<br />

AHB/APB-Bridge<br />

(AHB-Slave)<br />

Memory-Controller<br />

(AHB-Slave)<br />

UART<br />

SPI<br />

Abbildung 2.3: Aufbau des AMBA-Bus-Systems im TSN<br />

17


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

2.4 Konfigurationsregister<br />

Am APB sind die Konfigurations- und teilweise auch die Datenregister der Komponenten<br />

angeschlossen. Dazu gehören die Register für den Memory-Controller, für UART, SPI,<br />

PIO, Timer und den Interrupt-Controller.<br />

2.5 Memory-Controller und Integration der<br />

Hardwarebeschleuniger<br />

Der Memory-Controller übernimmt die wesentliche Aufgabe, alle Zugriffe auf die Speicherelemente<br />

zu koordinieren und durchzuführen. Das umfasst als Speicher- und speicherähnliche<br />

Elemente den Flash, den memory-mapped I/O sowie den SRAM.<br />

Unter „memory-mapped I/O“ versteht man den Zugriff auf Blöcke, die zwar ein Interface<br />

wie ein Speicher besitzen, dessen Funktionalität jedoch eine andere ist (z.B. Co-Prozessor<br />

zur Datenverarbeitung). Der I/O-Bereich wird so in den Arbeitsspeicher eingeblendet.<br />

Man kann ein neues Hardwaremodul mit einem proprietären Interface ausstatten, das von<br />

der jeweiligen Funktion der Hardwarekomponente bestimmt wird. Für den AES könnte<br />

das zum Beispiel bedeuten, dass die Schnittstelle einen Eingang für Clock und Reset<br />

sowie Eingänge mit einer Breite von 128 Bit für die Daten und weiteren 128 Bit für den<br />

Schlüssel hat. Der Ausgang für die Daten wäre ebenso 128 Bit breit. Dieses, zunächst<br />

nahe liegende, Interface ist jedoch nicht brauchbar, da es keine passende Hardware gibt,<br />

an die die Komponente angeschlossen werden kann.<br />

Es muss also ein etwas höherer Aufwand betrieben werden, um die neue Komponente mit<br />

der gleichen Schnittstelle wie von Speicherblöcken auszustatten. Diese Art der Schnittstelle<br />

wird „memory-like Interface“ genannt. Durch das vergleichsweise einfach ausgeführte<br />

Interface eines Speichers (Clock, Daten- und Adressbus, Read- und Write-Enable) ist<br />

diese Art der Anbindung weit verbreitet. Daher wurde für den AES, SHA-1 und den ECC<br />

ein solches Interface gewählt (siehe Abbildung 2.4). Prinzipiell ließen sich die Komponenten<br />

auch als SRAM anschließen. Das hat jedoch den Nachteil, dass dieser „cacheable“<br />

ist und somit oftmals bei Lesevorgängen auf den Cache zugegriffen wird anstelle eines<br />

direkten Lesezugriffs. Der Cache enthält an dieser Stelle jedoch veraltete Daten, da der<br />

Co-Prozessor die Daten modifiziert hat. So werden falsche Ergebnisse zurück geliefert.<br />

Mit der Verwendung von memory-mapped I/O wird das Problem vollständig umgangen.<br />

In der Ausgangskonfiguration erlaubt der LEON2 die Anbindung einer Komponente an<br />

den memory-mapped I/O. Dieses ist für den TSN nicht ausreichen, da AES, ECC und<br />

SHA-1 angeschlossen werden muss. Durch die Aufteilung des Adressbereich für memorymapped<br />

I/O in drei Unterbereiche wird der Anschluß aller Komponenten ermöglicht.<br />

Während memory-mapped I/O den nicht gepufferten Zugriff mittels Memory-Controller auf<br />

die Komponente meint, ist das memory-like Interface die Beschreibung der Schnittstelle.<br />

18


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Zu Konfigurationszwecken besitzt der Memory-Controller drei Konfigurationsregister. Mit<br />

dessen Hilfe werden die Wortbreite (8, 16 oder 32 Bit), Zugriffszeiten sowie Speichergrößen<br />

definiert. Alle Signale liegen jederzeit an den angeschlossenen Komponenten an. Einzige<br />

Ausnahme bildet hierbei das „Chip-Select“-Signal, welches exklusiv für jede Komponente<br />

ist. Anhand dieses Signals erkennt das Modul, ob es angesprochen wird. Unabhängig<br />

vom Memory-Controller agiert der Cache, welcher direkt mit dem Prozessor verbunden<br />

ist.<br />

CHIP_SELECT<br />

CLOCK<br />

Memory-Controller<br />

RESET<br />

WRITE<br />

RAM<br />

DATA_OUT<br />

ADDR<br />

DATA_IN<br />

AMBA-Bus<br />

AES<br />

DATA_OUT<br />

LEON2<br />

CHIP_SELECT<br />

Abbildung 2.4: Verwendung eines AES-Blocks mit einem memory-like Interface<br />

2.6 Speicher<br />

Der TSN verfügt über verschiedenartige Speicher. Der 4-KByte-Befehlscache und der 4-<br />

KByte-Datencache beschleunigen das System durch ihre direkte Anbindung an den Prozessor.<br />

Der TSN ist mit RAM ausgestattet, der auf dem Board untergebracht ist. Dessen<br />

Größe ist variabel zwischen 16 Kilobyte und 16 Megabyte. Derzeit ist das Board mit einem<br />

2-Megabyte-Modul bestückt.<br />

Der RAM ist über den Memory-Controller mit einer Wortbreite von 32 Bit an den schnellen<br />

AMBA-AHB-Bus angeschlossen. Zur Minimierung der Chipfläche wurde nur der Cache in<br />

den Chip integriert. Durch die Art der Ausführung des Memory-Controllers ist sichergestellt,<br />

dass der Zugriff auf den externen RAM genauso schnell ist, wie auf dem internen<br />

RAM. Aufgrund der beschränkten Anzahl an I/O-Pins (siehe Abschnitt 2.17) kann der externe<br />

Speicher nur mit 16 Bit Wortbreite angesprochen werden, so dass für das Schreiben<br />

und Lesen eines 32-Bit-Wortes jeweils zwei Zugriffe stattfinden müssen. Durch die Verwendung<br />

von Cache wird der Geschwindigkeitsnachteil im laufenden Betrieb so weit wie<br />

möglich kompensiert werden.<br />

Ein sicherer Speicher ist in der vorliegenden Entwicklungsstufe nicht das Entwurfsziel, da<br />

zunächst die Gesamtarchitektur des Systems geprüft werden soll. Um in späteren Entwicklungsstadien<br />

einen sicheren Speicher zu realisieren, genügt es nicht, den Speicher<br />

vollständig on-Chip auszuführen. Er wird vielmehr dadurch erreicht, dass alle Daten verschlüsselt<br />

abgelegt werden. Dies ist notwendig, um eine Abfrage des internen Speichers<br />

19


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

durch physikalische Angriffe zu verhindern. RAM-Strukturen sind besonders problematisch,<br />

da die Speicherelemente in einem gefertigten Design sehr gut zu identifizieren und,<br />

mit der richtigen Technik auch auslesbar sind.<br />

Eine Komponente zur Ansteuerung eines sicheren Speichers ermöglicht es auch, externen<br />

Speicher „sicher“ anzuschließen und lässt somit genügend Spielraum für die Speichererweiterung.<br />

2.7 Parallel I/O-Port<br />

Der Parallel I/O-Port ist ein bitweise programmierbarer I/O-Port (PIO). In der Basiskonfiguration<br />

des LEON2 werden alle 32 Bit nach außen geführt. Dabei werden die Pins für die<br />

Ports 0 bis 15 mit den UART-Ports sowie Konfigurationspins für den Bootvorgang geteilt<br />

um Pins einzusparen. Über ein Konfigurationsregister wird die jeweils gewünschte Funktion<br />

ausgewählt, also als Eingang oder Ausgang. Für den Fall, dass der Pin als Eingang<br />

agiert, kann der Wert, der am Pin von außen anliegt, über ein Register abgefragt werden.<br />

Ist der Pin als Ausgang konfiguriert, so muss der Wert am Ausgang gesetzt werden<br />

(logisch „0“ oder „1“).<br />

Durch das mögliche bitweise Ansprechen der Datenpins ist es auch möglich, Kommunikationsprotokolle<br />

in Software nachzubilden. Zum Beispiel sieht die aktuelle Umsetzung des<br />

TSN kein Modul für die I 2 C-Schnittstelle vor. Sollte sich die Notwendigkeit einer solchen<br />

ergeben, wird diese in Software, zu Lasten der gesamten Systemperformance, abgearbeitet.<br />

2.8 UART<br />

Die beiden Universal Asynchronous Receiver Transmitter (UART)-Komponenten sind Bestandteil<br />

des LEON2-Prozessors. Um Pins am Prozessor zu sparen, teilen sich die UARTs<br />

ihre Anschlüsse mit einigen PIO-Pins.<br />

Für die Datenübertragung muss der UART, der direkt an den APB angeschlossen ist, konfiguriert<br />

werden. Dabei können der UART-Takt, die Übertragungsrichtung und zahlreiche<br />

Sicherungsmechanismen eingestellt werden. Um Daten übertragen zu können, müssen<br />

diese in die entsprechenden Register geschrieben werden.<br />

Getestet wurden die UART-Schnittstellen, indem beide miteinander verbunden wurden.<br />

Abwechselnd wurden sie als Sender und Empfänger konfiguriert und Datenübertragungen<br />

initiiert.<br />

20


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

2.9 DSU<br />

Die Debug Support Unit (DSU) unterstützt die Fehlersuche und den Test des Systems.<br />

Sie ist integraler Bestandteil des LEON2-Prozessors und mit dem AMBA-AHB verbunden.<br />

Dies ermöglicht, den TSN in einen Debugmodus zu versetzen. Dabei wird der Prozessor<br />

angehalten, um Daten an jeder beliebigen Adresse lesen und schreiben zu können.<br />

2.10 Interrupt-Controller<br />

Der Interrupt-Controller dient als zentrale Instanz zur Signalisierung von Ausnahmezuständen.<br />

Ein Ausnahmezustand kann z. B. sein, dass in einem UART-Block Daten zur Abholung<br />

bereitstehen. Solange die CPU diese Daten nicht ausgelesen hat, können keine weiteren<br />

Daten empfangen werden. Daher ist es notwendig, die CPU über den Erhalt dieser Daten<br />

zu informieren und eine zügige Abarbeitung zu forcieren. Diese erfolgt durch das Auslösen<br />

eines Interrupts. Mittels des Interrupt-Controllers kann die CPU auswerten, welche<br />

Komponente den Interrupt ausgelöst hat und wie der Ausnahmezustand zu behandeln ist.<br />

2.11 Timer<br />

Die Timerkomponente besteht aus einem Prescaler und zwei Timern. Der Prescaler dient<br />

dazu, den Takt der Systemclock zu reduzieren. Die Timer dekrementieren einen vorher<br />

festgelegten Wert. Erreicht ein Timer den Wert „Null“, so wird mit Hilfe des Interrupt-<br />

Controllers ein Interrupt ausgelöst, den der Prozessor entsprechend beantworten muss.<br />

Dafür setzt der Prozessor zunächst den Interrupt zurück und signalisiert, dass der Interrupt<br />

bearbeitet wird. Anschließend wird eine vom Programmierer vorgegebene Softwareroutine<br />

abgearbeitet.<br />

2.12 Memory-Like Interface<br />

Die Schnittstellen des Advanced Encryption Standard (AES), Elliptic Curve Cryptography<br />

(ECC) und Secure Hash Algorithmus 1 (SHA-1) sind so ausgelegt, dass sie an den<br />

Memory-Controller angeschlossen werden können (siehe Tabelle 2.1).<br />

Das Listing 2.1 zeigt einen Beispielcode wie ein AES mit einem memory-like Interface<br />

in Software angesprochen wird. Die Funktion „writeReg“ hat als erstes Argument den zu<br />

schreibenden Wert und als zweites die Zieladresse. Es werden keine gesonderte Compilerbefehle<br />

benötigt, so dass auch keine Veränderungen am Compiler vorgenommen werden<br />

müssen.<br />

21


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

RESETN<br />

CLK<br />

CE<br />

OEN<br />

WE<br />

A [15 ... 0]<br />

d_in[31 ... 0]<br />

d_out[31 ... 0]<br />

ist ein low-aktiver Eingang. Es setzt das Modul zurück, in dem es die<br />

Register mit dem Startwert „0“ belegt. Die State-Machine geht in den<br />

Startzustand.<br />

ist der Eingang für das externe Taktsignal.<br />

ist ein low-aktiver Eingang. Er selektiert und aktiviert die Komponente.<br />

ist ein low-aktiver Eingang. Er wird während eines Lesezyklus auf aktiv<br />

gesetzt.<br />

ist der low-aktive Eingang, der einen Schreibzugriff signalisiert.<br />

ist der Adressbus. Dieser Eingang beinhaltet die Adressen der verschiedenen<br />

Register.<br />

ist ein 32 Bit Dateneingang. Er enthält die Daten, die in die adressierten<br />

Register geschrieben werden sollen.<br />

ist ein Datenausgang, der die Daten beinhaltet, die aus den Registern<br />

gelesen werden.<br />

Tabelle 2.1: Signale eines Memory-Like Interface<br />

// AES base address<br />

#define AESBASE 0x20200000 //memory mapped IO<br />

//Write key<br />

writeReg(0x2b7e1516, AESBASE + KEYBASE + 0);<br />

writeReg(0x28aed2a6, AESBASE + KEYBASE + 1);<br />

writeReg(0xabf71588, AESBASE + KEYBASE + 2);<br />

writeReg(0x09cf4f3c, AESBASE + KEYBASE + 3);<br />

writeReg(0x3243f6a8, AESBASE + DATABASE + ENCRYPTION + 0);<br />

writeReg(0x885a308d, AESBASE + DATABASE + ENCRYPTION + 0);<br />

writeReg(0x313198a2, AESBASE + DATABASE + ENCRYPTION + 0);<br />

writeReg(0xe0370734, AESBASE + DATABASE + ENCRYPTION + 0);<br />

//Wait 77 Clock cycles or for interrupt<br />

//READ_OUT<br />

Listing 2.1: Beispielcode zum Ansprechen des AES am Memory-Controller<br />

2.13 AES<br />

In symmetrischen Verschlüsselungsverfahren wird sowohl zur Verschlüsselung als auch<br />

zur Entschlüsselung der gleiche geheime Schlüssel benutzt. Ist einem Dritten dieser Schlüssel<br />

bekannt, so kann dieser den Kommunikationsprozess abhören und selbst verschlüsselte<br />

Datenpakete in Umlauf bringen. Ein bekanntes Beispiel für symmetrische Verschlüsselungsverfahren<br />

ist der DES-Algorithmus. Dieser wurde 2001 durch den AES abgelöst.<br />

Am häufigsten wird derzeit die 128-Bit-Version im Electronic Code Book (ECB)-Modus genutzt.<br />

Der ECB-Modus ist nicht rückgekoppelt, d.h. es wird jeder Datenblock unabhängig<br />

von anderen verarbeitet. So ist ein wahlfreier Zugriff auf verschlüsselte Blöcke möglich.<br />

Nachteilig ist, dass so gleiche Eingangsdaten zu gleichen Ausgangsdaten führen. Es gibt<br />

Anwendungsfälle, in denen der ECB-Modus nicht vermieden werden kann. Gehen z.B. in<br />

einem rückgekoppelten Modus wie Cipher Block Chaining (CBC) Datenpakete verloren, so<br />

22


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

ist das nachfolgende Datenpaket nicht mehr zu entschlüsseln. Insbesondere bei unzuverlässigen<br />

Verbindungen (wie Funk) ist daher der CBC-Modus nicht geeignet. In Systemen,<br />

die neben dem AES über eine CPU verfügen, können rückgekoppelte Modi so nachgebildet<br />

werden, dass zunächst die Verschlüsselung im AES-Coprozessor durchgeführt wird<br />

und anschließend die Operationen zur Rückkopplung in Software ausgeführt werden.<br />

2.13.1 Arithmetische Grundlagen<br />

Der Advanced Encryption Standard (AES) ist ein symmetrisches Verschlüsselungsverfahren.<br />

Im Gegensatz zu Stromchiffren, welche bit- oder byteorientiert arbeiten, werden beim<br />

AES jeweils Blöcke von 128 Bit (16 Byte) der Ver- oder Entschlüsselung unterzogen. Daher<br />

ist der AES eine Blockchiffre. Ein Datenblock wird in einer Matrix mit 4x4 Byte angeordnet<br />

(siehe Formel 2.1).<br />

⎡<br />

⎤<br />

32 88 31 e0<br />

3243f68a885a308d313198a2e0370734 ⇒ ⎢43 5a 31 37<br />

⎥<br />

⎣f6 30 98 07⎦ (2.1)<br />

8a 8d a2 34<br />

Nicht in jedem Fall wird die Länge eines zu verschlüsselnden Datenblocks (in Bit) einem<br />

ganzzahligen Vielfachen von 128 entsprechen. Hier müssen höhere Schichten durch die<br />

Auswahl geeigneter Padding-Algorithmen die tatsächliche Datenlänge an die geforderte<br />

Datenlänge anpassen.<br />

Durch das National Institute of Standards and Technology (NIST) [37] ist die Datenblocklänge<br />

von 128 Bit bei Schlüssellängen von 128, 192 sowie 256 Bit standardisiert. Dazu<br />

kommen Modi, die eine Kopplung zwischen verschiedenen Datenblöcken ermöglichen.<br />

Diese verhindern Attacken, bei denen einzelne Datenblöcke durch den Angreifer ausgetauscht<br />

werden. Ein grundlegender Unterschied zwischen den Versionen mit unterschiedlichen<br />

Schlüssellängen besteht in der Anwendung des Rundenschlüssels auf die Daten.<br />

Unabhängig von der Länge des Eingangsschlüssels werden in jeder AddKey-Operation<br />

der 128 Bit lange Datenblock mit einem 128 Bit langen Schlüsselteil verknüpft (siehe Abbildung<br />

2.5).<br />

Während für einen 128-Bit-Schlüssel jeweils der komplette Rundenschlüssel auf die 128<br />

Bit Daten angewendet wird, wird die Anwendung des 256-Bit-Schlüssels auf zwei Verarbeitungsrunden<br />

aufgeteilt. Bei jeder dieser Runden werden 128 Bit als Teilschlüssel verwendet.<br />

Ähnlich verhält es sich mit dem 192-Bit-Schlüssel. Die ersten 128 Bit des Rundenschlüssels<br />

werden auf die 128 Bit Daten angewandt. In der folgenden Runde wird<br />

zunächst aus dem Schlüssel der nächste Rundenschlüssel erzeugt. Anschließend werden<br />

die verbleibenden 64 Bit aus dem Initialschlüssel und die 64 Bit aus dem erzeugten<br />

Rundenschlüssel zusammen auf den 128-Bit-Datenblock angewendet. Aufgrund der Überlappungen<br />

eines Schlüssels auf mehrere Runden wird bei der Schlüssellänge von 192 Bit<br />

die Rundenzahl auf 12 und bei einem 256-Bit-Schlüssel auf 14 erhöht.<br />

23


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

128 Bit Datenpfad<br />

Runde n<br />

128 Bit<br />

128 Bit<br />

XOR<br />

Abbildung 2.5: Schlüsseladdition für 128 Bit<br />

Input key<br />

Calc<br />

key<br />

10 Rounds<br />

xor<br />

S-Box<br />

Shift<br />

row<br />

Mix<br />

Column<br />

Input data<br />

Output data<br />

Abbildung 2.6: Schematischer Aufbau der AES-Implementierung<br />

2.13.2 Algorithmusbeschreibung des AES<br />

Die Abbildung 2.6 zeigt schematisch den Ablauf der Verschlüsselung. Der Algorithmus wird<br />

für einen 128-Bit-Schlüssel in elf Runden auf die Daten angewendet. Jede dieser Runden<br />

besteht aus mehreren Teilschritten, wobei jeweils in der ersten und in der letzten Runde<br />

nicht alle Teilschritte ausgeführt werden. In den Beschreibungen der Teilschritte werden<br />

die Zeilen mit i (0 bis 3) sowie die Spalten mit j (0 bis 3) gekennzeichnet.<br />

• 1. Runde<br />

data=AddKey(data, key)<br />

• 2. Runde bis 10. Runde<br />

data=S-Box(data)<br />

data=ShiftRow(data)<br />

data=MixColumn(data)<br />

data=AddKey(data, key)<br />

• 11. Runde<br />

data=S-Box(data)<br />

data=ShiftRow(data)<br />

data=AddKey(data, key)<br />

24


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

AddKey<br />

Die Schlüsseladdition wird durch eine binäre XOR-Operation ausgeführt.<br />

S-Box Die Substitutions-Box (S-Box) ist eine nichtlineare Abbildung eines Bytes auf ein<br />

anderes. Dazu wird vom Eingangswert x in GF(2 8 ) das multiplikative Inverse x −1 (in Formel<br />

2.2 gilt: x −1 entspricht z0 bis z7) gebildet. Anschließend wird eine Matrixmultiplikation<br />

mit der vorgegebenen Matrix c ausgeführt und der Vektor (11000110) addiert (siehe Formel<br />

2.2). Die Ausführung der S-Box ist so gewählt, dass kein Bytewert auf sich selbst<br />

abgebildet wird, da dies ein potentieller Ansatzpunkt für Kryptoanalysen wäre. Da die S-<br />

Box-Transformation jeweils auf ein Byte angewendet wird, sind 16 dieser Transformationen<br />

pro Runde notwendig.<br />

⎡ ⎤ ⎡<br />

⎤ ⎡ ⎤ ⎡ ⎤<br />

y0 1 0 0 0 1 1 1 1 z0 1<br />

y1<br />

1 1 0 0 0 1 1 1<br />

z1<br />

1<br />

y2<br />

1 1 1 0 0 0 1 1<br />

z2<br />

0<br />

y3<br />

y4<br />

=<br />

1 1 1 1 0 0 0 1<br />

z3<br />

1 1 1 1 1 0 0 0<br />

z4<br />

+<br />

0<br />

0<br />

⎢y5<br />

⎥ ⎢0 1 1 1 1 1 0 0<br />

⎥ ⎢z5<br />

⎥ ⎢1<br />

⎥<br />

⎣y6⎦<br />

⎣0 0 1 1 1 1 1 0⎦<br />

⎣z6⎦<br />

⎣1⎦<br />

y7 0 0 0 1 1 1 1 1 z7 0<br />

(2.2)<br />

ShiftRow Die Bytes der Matrix rotieren in Abhängigkeit von der Zeilennummer i (i = 0 bis<br />

3) um i Stellen nach links (zyklisches Shiften, siehe Formel 2.3).<br />

⎡<br />

⎤ ⎡<br />

⎤<br />

00 01 02 03 00 01 02 03<br />

⎢10 11 12 13<br />

⎥<br />

⎣20 21 22 23⎦ ⇒ ⎢11 12 13 10<br />

⎥<br />

⎣22 23 20 21⎦ (2.3)<br />

30 31 32 33 33 30 31 32<br />

MixColumn Während die S-Box-Operation sich byteweise auswirkt, ist die MixColumn-<br />

Transformation eine Interaktion zwischen den 4 Bytes einer Spalte y0, j bis y3, j für j = 0<br />

bis 3 in GF(2 8 ). Dazu wird eine Matrixmultiplikation der Spalte j (j = 0 bis 3) mit der Matrix<br />

c ausgeführt (siehe Formel 2.4).<br />

⎡ ⎤ ⎡<br />

⎤ ⎡ ⎤<br />

y0, j 02 03 01 01 z0, j<br />

⎢y1, j<br />

⎥<br />

⎣y2, j⎦ ⇐ ⎢01 02 03 01<br />

⎥ ⎢z1, j<br />

⎥<br />

⎣01 01 02 03⎦<br />

⎣z2, j⎦ ∀j ∈ [0, 1, 2, 3] (2.4)<br />

y3, j 03 01 01 02 z3, j<br />

Schlüsselexpansion In jeder der elf Runden wird ein neuer Rundenschlüssel mit der<br />

Länge von 128 Bit benötigt. Der Schlüssel wird analog zu den Eingangsdaten auf eine<br />

4x4-Byte-Matrix abgebildet. Die Generierung eines neuen Rundenschlüssels besteht aus<br />

25


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

4 Teilschritten, in denen jeweils eine Spalte mit 4 Byte erzeugt wird. Gemäß Abbildung<br />

2.7 wird die erste Spalte des Folgeschlüssels durch die Ausführung einer Funktion F, die<br />

auf der S-Box basiert, auf die Spalte 3 sowie der XOR-Verknüpfung von F mit der Spalte<br />

0 gebildet. Die drei folgenden Spalten werden durch eine Addition der vorhergehenden<br />

Spalte mit der gleiche Spalte des vorhergehenden Schlüssels berechnet.<br />

Abbildung 2.7: Spaltenweise Generierung des nächsten Rundenschlüssels<br />

2.13.3 Implementierung<br />

Die im TSN genutzte Implementierung ver- und entschlüsselt Datenblöcke mit einer Länge<br />

von 128 Bit mit einem 128 Bit langen Schlüssel im ECB-Modus und ist auf niedrige bis<br />

mittlere Datenraten optimiert. Durch das 32-Bit-Dateninterface ist es notwendig, jeweils<br />

4 Datenblöcke á 32 Bit in das AES-Modul zu schreiben, um einen vollständigen 128-Bit-<br />

Datenblock zu erhalten. Vier weitere Schreiboperationen sind erforderlich, um den Schlüssel<br />

im AES-Modul abzulegen. Insgesamt werden so theoretisch nur 8 Adressen benötigt.<br />

Der zu Verfügung stehende Adressraum ist jedoch um einiges größer und wird auch ausgenutzt,<br />

um den notwendigen Kommandoblock und die dazugehörige Schreiboperation<br />

einzusparen. Dem AES-Modul muss mitgeteilt werden, ob die Daten zur Entschlüsselung<br />

oder zur Verschlüsselung abgeliefert wurden. Die Auswahl wird mit Hilfe eines Adressbits<br />

codiert. Die Daten zur Verschlüsselung werden beginnend mit der Adresse 0x90 und die<br />

Daten zur Entschlüsselung beginnend mit Adresse 0xA0 geschrieben. Für einen Datenblock<br />

werden insgesamt 78 Clocktakte benötigt, um die Daten zu ver- oder entschlüsseln.<br />

2.14 ECC<br />

Bei asymmetrischen Verschlüsselungsverfahren wird ein Schlüsselpaar, bestehend aus einem<br />

öffentlichen und einem privaten Schlüssel, eingesetzt. Der öffentliche Schlüssel des<br />

26


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Empfängers ist frei zugänglich (z.B. über dessen Homepage) und die Daten können hiermit<br />

verschlüsselt werden. Der private Schlüssel ist geheim zu halten. Mit diesem kann<br />

die Nachricht wieder entschlüsselt werden. Aus dem öffentlichen Schlüssel kann der private<br />

Schlüssel nicht mit vernünftigem Aufwand errechnet werden, so dass verschlüsselte<br />

Nachrichten ausschließlich mit dem privaten Schlüssel zugänglich sind. Eine alternative<br />

Anwendung von asymmetrischen Verschlüsselungsverfahren ist das Unterschreiben einer<br />

Nachricht mit dem privaten Schlüssel. Mit dem entsprechenden öffentlichen Schlüssel<br />

kann dann die Echtheit dieser Signatur überprüft werden, da davon ausgegangen werden<br />

kann, dass einzig der Besitzer des privaten Schlüssels diese Nachricht so verschlüsseln<br />

beziehungsweise digital unterschreiben konnte. Ein asymmetrisches Verschlüsselungsverfahren<br />

eignet sich nicht für größere Datenmengen. Der Berechnungsaufwand für die Verschlüsselung<br />

der gleichen Datenmenge liegt mehrere Größenordnungen über dem für ein<br />

symmetrisches Verschlüsselungsverfahren.<br />

Das derzeit populärste Verfahren ist die RSA-Verschlüsselung, benannt nach den drei Erfindern<br />

Rivest, Shamir und Adleman [44]. Die Elliptic Curve Cryptography (ECC) auf Basis<br />

elliptischer Kurven ist ein modernerer alternativer Verschlüsselungsansatz. Im Vergleich<br />

zum RSA bietet der ECC-Ansatz einen gleichwertigen Sicherheitsgrad bei wesentlich kürzeren<br />

Schlüssellängen. Soll zum Beispiel die Sicherheit von verschlüsselten Daten für<br />

die nächsten 20 Jahre gewahrt sein, ist empfohlen, für RSA 2048 Bit lange Schlüssel zu<br />

nutzen. Das ECC-Verfahren erreicht den gleichen Grad an Sicherheit schon mit 233 Bit<br />

langen Schlüsseln [29]. Kürzere Schlüssel sind besonders wichtig, wenn Kryptographie<br />

auf mobilen Geräten mit wenig Speicher und begrenzter Rechenstärke eingesetzt wird.<br />

2.14.1 Arithmetische Grundlagen<br />

ECC ist ein kryptographisches Verfahren, das mit 2-dimensionalen Punkten (x, y) auf einer<br />

elliptischen Kurve arbeitet. Die x- und y-Koordinaten sind Elemente eines finiten Feldes,<br />

des so genannten Basisfeldes. Auf den Punkten dieser Kurve sind algebraische Operationen,<br />

wie die Addition zweier Punkte definiert. Die wichtigste, kryptographisch eingesetzte<br />

Operation ist die k*P-Multiplikation, bei der ein Punkt mit einer ganzen Zahl multipliziert<br />

wird. Diese Operation ist recht einfach zu berechnen. Die Umkehroperation ist allerdings<br />

nicht in polynomineller Zeit zu lösen.<br />

Für das ECC-Verfahren eignen sich zwei Arten von generellen Basisfeldern: Restklassenfelder<br />

basierend auf einer großen Primzahl (GF(p)) und Restklassenfelder basierend auf<br />

erweiterten Binärfeldern (GF(2 m )). Beide Arten gelten als sicher. Geeignete Parameter<br />

wurden bereits von Standardisierungsgremien empfohlen. Für energie- und flächeneffiziente<br />

Implementierungen in Hardware eigenen sich insbesondere die binären Kurven, da<br />

deren Arithmetik eine vereinfachte Darstellung in Hardware (GF(2 m )) erlaubt. Desweiteren<br />

sind additive Operationen einfache XOR-Operationen und benötigen daher keine Überträge.<br />

Diese Eigenschaften begründen die Entscheidung, bei dem Design binäre Felder als<br />

Basisfeld zu nutzen.<br />

ECC-Operationen nutzen intensiv Operationen des Basisfelds. Zum Beispiel benötigt eine<br />

k*P-Multiplikation in (GF(2 233 )) etwa 1500 Feldmultiplikationen. Deshalb sind genaue<br />

27


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Untersuchungen der Operationen im Basisfeld für eine effiziente ECC-Implementierung<br />

unumgänglich. Bei den Betrachtungen der mathematischen Grundlagen im Basisfeld der<br />

elliptischen Kurve stellen sich insbesondere folgende Operationen als kritisch heraus:<br />

• Feldmultiplikation<br />

• modulare Reduktion.<br />

2.14.2 Multiplizierer<br />

Die Feldmultiplikation ist die mit Abstand aufwändigste Operation im Basisfeld. Eine 256-<br />

Bit-Multiplikation benötigt zum Beispiel je über 65000 XOR- und AND-Operationen, wenn<br />

sie nach der Methode der klassischen Schulmultiplikation ausgeführt würde. In der Literatur<br />

werden verbesserte Verfahren wie die klassische Karatsuba-Multiplikation und die iterative<br />

Karatsuba-Multiplikation vorgestellt [14]. Letztere verringert vor allem die Anzahl der<br />

notwendigen AND-Operationen (auf 6561) aber kaum die Anzahl der XOR-Operationen<br />

(62000). In dem Design wird eine rekursive Anwendung der iterativen Karatsuba-Methode<br />

(RAIK) [39], die auch die Anzahl der XOR-Operationen (auf unter 43000) reduzieren<br />

kann, genutzt. Bei den rekursiven Karatsuba-Methoden wird eine Multiplikation durch kleinere<br />

Multiplikationen mit kürzerer Bitlänge ersetzt, die dann wiederum mit der Karatsuba-<br />

Methode gelöst wird. Da festgestellt wurde, dass sich für kürzere Multiplikationen mit Bitlängen<br />

von unter 8 Bit eine weitere rekursive Zerlegung nach der Karatsuba-Methode nicht<br />

positiv auf den Gesamtaufwand auswirkt, werden für diese kurzen Multiplikationen andere<br />

Verfahren angewandt. Als Beispiel sei hier die klassische Schulmultiplikation genannt,<br />

wodurch der Gesamtaufwand für rekursive Multiplikation signifikant reduziert wird. Diese<br />

theoretischen Betrachtungen der polynominellen Multiplikation sind die Basis für eine effiziente<br />

Implementierung dieser Operation in Hardware, wie sie in dem Design realisiert<br />

wurden. Der Ansatz ist detaillierter in [45] diskutiert.<br />

2.14.3 Reduktion<br />

Die zweite kritische Operation ist die Reduktion. Diese Operation muss nach jeder Feldmultiplikation<br />

ausgeführt werden. Das ist begründet durch den finiten Charakter des Basisfeldes.<br />

Die Multiplikation zweier m Bit langen Faktoren ergibt ein 2m-1 Bit langes Produkt<br />

(siehe Abbildung 2.8). Da die Elemente des Feldes genau m Bit lang sind, muss zu dem<br />

2m-1 Bit langen Element ein in dem Feld äquivalentes Element mit der Länge m berechnet<br />

werden. Ein klassisches Verfahren für diese Operation ist die Division mit Rest durch das<br />

Generatorpolynom, wobei der Rest der Division das äquivalente Element darstellt.<br />

Ähnlich wie eine Division in „normalen“ Zahlensystemen ist auch die Division in GF(2 m )<br />

sehr komplex und deshalb nach jeder Feldmultiplikation nicht sinnvoll. In der Literatur werden<br />

Verfahren beschrieben, welche die Reduktion als eine einfache Abbildung mit konstantem<br />

Aufwand herausstellen. Diese Verfahren können sowohl in Software- als auch<br />

in Hardwareimplementierungen angewendet werden. Das Problem bei dieser Vorgehens-<br />

28


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

weise ist, dass für jedes Feld und damit für jede Schlüssellänge eine spezielle Abbildung<br />

generiert werden muss. Hier ergibt sich das Problem der Reduktion: Entweder man hat<br />

eine schnelle, effiziente Implementierung, die aber nur eine bestimmte Kurve unterstützt<br />

oder einen komplexen Algorithmus, der dann aber nicht an bestimmte Kurven gebunden<br />

ist.<br />

In dem Design wurde sich auf die Beschleunigung einer einzigen Kurve konzentriert. Ziel<br />

war es, eine möglichst schnelle und kleine Hardwarelösung für die ECC-Operation mit<br />

einer Bitbreite von 233 Bit zu realisieren. Hierfür kann das Reduktionspolynom direkt in<br />

dem Design verdrahtet werden. Die Reduktionsoperation benötigt somit 0,034 mm 2 Siliziumfläche,<br />

während eine flexible Lösung die Fläche und auch die letztendliche Laufzeit<br />

signifikant erhöht hätten.<br />

Die Kurve mit Operanden von 233 Bit ist seitens der NIST unter der Bezeichnung „B 233“<br />

standardisiert [13]. Diese Kurve wurde ausgewählt, da die Sicherheit in etwa der Sicherheit<br />

des eingesetzten, symmetrischen Verschlüsselungsverfahren AES entspricht [6a].<br />

Abbildung 2.8: Da das Ergebnis einer Multiplikation länger als die maximale<br />

Feldlänge ist, benötigt man einen Reduktionsschritt, der das<br />

Ergebnis innerhalb des Feldes reduziert.<br />

2.14.4 System-Design<br />

Im ECC-Design wurde eine Prozessorarchitektur gewählt, die der Transport-getriggerten<br />

Architektur (TTA) entspricht. Alle Funktionseinheiten (siehe Abbildung 2.9), also Multiplizierer<br />

(MUL), Addierer, Quadrierer (beides als Teil der Arithmetisch-Logischen-Unit (ALU))<br />

sowie Register (Register File) sind mit einem 233 Bit breiten Bus verbunden. Der Zugriff<br />

auf den Bus wird von einer zentralen Kontrollsteuerung (Controller) geregelt. In dieser Einheit<br />

befindet sich das fest verdrahtete Ausführungsprogramm der ECC-Einheit. Die Testbit-<br />

Einheit verbindet die ansonsten komplett getrennten Datenfluss- und Kontrollflussteile der<br />

Schaltung. Diese Testbit-Einheit überprüft, ob ein bestimmtes Bit auf dem Datenbus gesetzt<br />

wurde. Bei der TTA sind die Operationen der Funktionsblöcke durch den Bustransfer<br />

getriggert. Der Start einer Multiplikation wird beispielsweise aktiviert, wenn zwei Datenworte<br />

(die Faktoren) zum Multiplizierer transportiert wurden. Späteres Lesen vom Multiplizierer<br />

liefert dann automatisch das Produkt. Diese Art der Architektur ist sehr einfach, da<br />

Komponenten hinzugefügt oder entfernt werden können ohne andere Komponenten oder<br />

Kontrollstrukturen ändern zu müssen. Neben dieser Flexibilität erlaubt diese Architektur eine<br />

explizite Parallelität. In der Zeit, in der beispielsweise eine Multiplikation berechnet wird,<br />

können weitere Operationen, wie Additionen oder Registertransfer, ausgeführt werden.<br />

29


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Das Programm in der Kontrolleinheit führt die Punktmultiplikation entsprechend dem Lopez-Dahab-Algorithmus<br />

[32] aus. Dieser Algorithmus erlaubt die Ausführung einer EC<br />

Punktmultiplikation (ECPM) mit lediglich einer Division im Basisfeld. Diese eine Division<br />

wird mittels des Itoh-Tsujii-Ansatzes [22] berechnet. Durch den im Design vorhandenen<br />

schnellen Quadrierer und Multiplizierer ist dieser Algorithmus schneller und ressourcensparender<br />

als zum Beispiel der alternative erweiterte Euklidische Algorithmus. Die Algorithmen<br />

sind Teil des fest verdrahteten Programms in der Kontrolleinheit, die den Fluss der<br />

Daten zwischen den Rechen- und Registereinheiten steuert.<br />

Die Flexibilität des Designs bezüglich der Funktionseinheiten erlaubt es, eine praxisnahe<br />

„Design-Space-Exploration“ durchzuführen. Mittels dieser Exploration wird der Einfluss<br />

der Anzahl und der Geschwindigkeit der einzelnen Funktionseinheiten auf die Leistung<br />

des gesamten Systems ermittelt. Die Untersuchung ergab, dass die Geschwindigkeit der<br />

Feldmultiplikation die wichtigste Einflussgröße für die Leistung des Gesamtsystems darstellt.<br />

Mehrere Multipliziereinheiten können allerdings überraschenderweise die Leistung<br />

nicht entscheidend verbessern. Deshalb werden letztlich drei Designs für die 233-Bit-ECC-<br />

Beschleunigung näher untersucht. Deren wesentlicher Unterschied liegt in der Geschwindigkeit<br />

und damit der Größe des Feldmultiplizierers.<br />

Für eine Feldmultiplikation erfordert das schnellste und damit auch das größte Design drei<br />

Taktzyklen. Das mittelgroße Design benötigt neun und das kleinste 27 Taktzyklen. Die Gesamtzeit<br />

für eine ECPM beträgt 60 µs für das schnellste, 80 µs für das mittlere und 230<br />

µs für das kleinste Design. Die schnelleren beiden Designs gehören zu den schnellsten<br />

bisher veröffentlichten Implementierungen. Dabei ist die erforderliche Siliziumfläche von<br />

2,1 mm 2 für das größte bis zu 1,3 mm 2 für das kleinste Design im Vergleich zu anderen<br />

Implementierungen mit vergleichbarer Geschwindigkeit sehr gering. Die benötigte Energie<br />

der vorgestellten Designs für eine ECPM ist geringer als bei allen anderen bisher veröffentlichten<br />

Implementierungen. Entsprechend dem 233-Bit-Design wurden auch Designs<br />

für andere elliptische Kurven bis zu 571 Bit implementiert, vermessen und verglichen. Abbildung<br />

2.10 zeigt die verschiedene Flächen und Energieverbräuche für eine ECPM der<br />

untersuchten Designs von 163 bis 571 Bit.<br />

Für den TSN wurde die 233-Bit-Implementierung mit der mittleren Geschwindigkeit, d.h. 9<br />

Clockzyklen pro Feldmultiplikation, gewählt.<br />

Dies wird dadurch begründet, dass die 233-Bit-Implementierung das beste Verhältnis zwischen<br />

Fläche und Energie und Leistung (Geschwindigkeit) verspricht und dabei eine hohe<br />

Sicherheit bietet. Für eine noch höhere Sicherheit besteht die Möglichkeit der Nutzung<br />

größerer Schlüssellängen, wobei das entsprechend mehr Fläche in der Schaltung, mehr<br />

Berechnungszeit und auch mehr Stromverbrauch implizieren würde.<br />

Die 233-Bit-Implementierung wurde bereits in einem System-on-Chip (SoC) integriert, das<br />

neben einem eingebetteten 32-Bit-Prozessor Hardwareblöcke für die Verarbeitung von<br />

Netzwerkprotokollen und symmetrischer Verschlüsselung umfasst. Auf diesem Chip, der<br />

bereits im IHP in 0,25-µm-CMOS-Technologie gefertigt wurde, kann die Leistung des Hardwaredesigns<br />

gut mit einer alternativen Softwareimplementierung (MIRACL [47]), die auf<br />

dem eingebettetem Prozessor läuft, verglichen werden. Im Vergleich mit der Softwareim-<br />

30


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

plementierung ist die dedizierte Hardware hierbei 1000-mal schneller und benötigt insgesamt<br />

ein 500stel der Energie für eine 233-Bit-ECPM.<br />

Abbildung 2.9: Blockschaltbild des 233-Bit-ECC-Beschleunigers. Ein 233 Bit<br />

breiter, von einer Controller-Einheit kontrollierter Bus verbindet die<br />

Rechen- und Registereinheiten.<br />

Abbildung 2.10: Resultate der verschiedenen ECC-Beschleuniger-Schaltungen. Die<br />

Balken zeigen die benutzte Siliziumfläche. Die Linien entsprechen<br />

dem Energieverbrauch.<br />

2.14.5 Parameter im TSN<br />

Im TSN befindet sich eine Recheneinheit für die 233-Bit-Elliptische-Kurven-Punkt-Multiplikation<br />

im Feld (GF(2 233 )). Das Design der ECC-Recheneinheit entspricht derjenigen, die<br />

in Abbildung 2.9 dargestellt ist. Es beinhaltet:<br />

31


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

• Acht 233-Bit-Register, von denen vier von außen zugreifbar sind, die anderen vier<br />

sind für die interne Berechnung.<br />

• Eine Arithmetisch-Logische-Einheit (ALU), die die Addition und die Quadrierungsoperation<br />

ausführt. Beide Operationen können innerhalb eines Taktzyklus berechnet<br />

werden.<br />

• Einen Multiplizierer, der die Multiplikation im Basisfeld (GF(2 233 )) inklusive der Reduktion<br />

ausführt. Basierend auf den Ergebnissen der Design-Space-Exploration haben<br />

wir uns für das Design, welches neun Taktzyklen pro Multiplikation benötigt (also das<br />

4-Segment-Design), entschieden. Eine detaillierte Untersuchung des Multiplizierers<br />

kann in [14] gefunden werden.<br />

• Einen Controller und Testbit-Einheit, die den Datenfluss steuern. Das Programm<br />

selbst ist Teil des VHDL-Codes und ist optimiert auf die Busstruktur und den gewählten<br />

Multiplizierer.<br />

Sowohl die Quadrierungseinheit als auch der Multiplizierer führen automatisch und innerhalb<br />

eines Taktzyklus die fest verdrahtete Reduktionsoperation mit dem für das Feld standardisierten<br />

Reduktionspolynom (r(x) = x 233 + x 74 + 1) aus. Die Ausführung des Lopez-<br />

Dahab-Algorithmus benötigt<br />

• 232 mal 55 (12760) Taktzyklen für die Punktmultiplikation<br />

• 314 Taktzyklen für die Inversion im Basisfeld<br />

• 119 Taktzyklen für die Koordination und Bereitstellung des Ergebnisses,<br />

also insgesamt 13193 Taktzyklen. Die ECC-Punktmultiplikation wird gestartet, indem der<br />

Faktor k, die Koordinaten des Basispunktes x und y und der Parameter der Kurve b in<br />

die entsprechenden Register (siehe Anhang) geschrieben werden. Anschließend wird das<br />

32-Bit-Kommandowort, welches die Gesamtoperation startet an die Kontrolleinheit übergeben.<br />

2.15 SHA-1 / PRNG<br />

Das SHA-1-Modul ist nach den NIST-Standards FIPS 180-1 [34], FIPS 186-1 [35] und FIPS<br />

186-2 [36] aufgebaut. Der SHA-1 ist ein Teil des Digital Signature Standard (DSS), der eindeutige<br />

Hashwerte für einen Datenblock erzeugt. Anhand dieser kann man feststellen, ob<br />

ein Datenblock nachträglich verändert wurde oder nicht. Weiterhin kann die Komponente<br />

als Pseudozufallszahlengenerator (engl. Pseudo Random Number Generator (PRNG))<br />

verwendet werden. Derartige Zufallszahlen werden für viele kryptographische Algorithmen,<br />

wie zum Beispiel ElGamal, benötigt. In Abbildung 2.11 ist das Blockdiagramm des SHA-1-<br />

Moduls dargestellt. Der zugrunde liegende Algorithmus und die Funktionalität der Komponente<br />

werden in den folgenden Abschnitten genauer beschrieben. Die Implementierung<br />

des SHA-1 ist auf 32-Bit-Lese- und Schreibzugriffe ausgelegt. Für einen einfachen Zugriff<br />

32


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

wurde das Modul mit einer Schnittstelle mit einem memory-like Interface ausgestattet. Die<br />

Implementierung setzt nicht den kompletten SHA-1 um. Sie enthält nur die Funktion G,<br />

die den Hauptteil des Algorithmus darstellt. Die restlichen Funktionen, wie zum Beispiel<br />

Bitstuffing, werden sinnvollerweise in höheren Schichten umgesetzt.<br />

Software<br />

Split data into 512-Bit blocks;<br />

Bitstuffing for the last data block;<br />

Write and read controlregister;<br />

Write data to registers H0 to H4(160-bit KEY);<br />

Write data and W0 to W15 (512-bit data block);<br />

Function G<br />

Function K<br />

Function f<br />

Hardware<br />

Algorithm of G<br />

Software<br />

Read registers H0 to H4 (160-bit Signature of the data);<br />

Abbildung 2.11: Ablauf der Signatur mit Hilfe von Soft- und Hardware<br />

2.15.1 Secure Hash Algorithmus<br />

Für den SHA-1 werden die Daten, über die der Hashwert gebildet werden soll, in 512 Bit<br />

lange Blöcke zerlegt. Lässt sich das Datum nicht in ein Vielfaches von 512 zerlegen, muss<br />

der letzte Block aufgefüllt werden. Dies wird als „Bitstuffing“ bezeichnet. Zur Realisierung<br />

sind die letzten 64 Bit des letzten Datenblocks reserviert. Sie enthalten die Länge der zu<br />

signierenden Nachricht. Mit Hilfe dieses Wertes kann festgestellt werden, wie viele Bits des<br />

letzten Blocks nicht mehr für die Nachricht benötigt werden und aufgefüllt werden müssen.<br />

Das Auffüllen wird umgesetzt, indem nach dem letzten für die Nachricht relevanten Bit eine<br />

binäre „1“ eingeführt wird. Die restlichen Bitstellen werden mit „0“ belegt.<br />

Für die Integritätsprüfung mit Hilfe des SHA-1 gibt es zwei unterschiedliche Verfahren.<br />

Das erste Verfahren basiert darauf, dass beide Kommunikationspartner einen geheimen,<br />

frei gewählten Schlüssel kennen. Die zu signierende Nachricht wird dabei zunächst auf ein<br />

Vielfaches von 512 Bit vervollständigt und anschließend in 512 Bit lange Blöcke zerlegt.<br />

Diese werden dann blockweise an den SHA-1 übergeben. Neben den Datenblöcken benötigt<br />

der Algorithmus einen definierten Startwert. Dieser ist 160 Bit lang und wird als der<br />

geheime „Schlüssel“(KEY) bezeichnet. Er sollte nur den Kommunikationspartnern bekannt<br />

sein, da mit diesem eine eindeutige Signatur für die Daten erzeugt wird und diese auch<br />

verifiziert werden kann. Die erstellte Signatur wird mit den Daten übertragen. Der Empfänger<br />

führt ebenfalls den SHA-1 mit dem gleichen Schlüssel auf die empfangenen Daten<br />

aus. Wurden die Daten bei der Übertragung durch Dritte verändert, führt dies zu einer anderen<br />

Signatur. Derartige Veränderungen werden dann beim Vergleich beider Signaturen<br />

entdeckt. Um eine sichere Signierung der Daten zu gewährleisten, muss der Schlüssel<br />

für den SHA-1 zwischen den Kommunikationspartnern geheim übertragen werden. Dafür<br />

33


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

werden Schlüsselaustauschverfahren, wie zum Beispiel das Verfahren von ElGamal, benötigt.<br />

Mit deren Hilfe wird verhindert, dass Dritte unerlaubt in den Besitz des geheimen<br />

Schlüssels kommen.<br />

Die zweite Möglichkeit zur Signierung von Daten mittels SHA-1 besteht in der Nutzung des<br />

ECC als asymmetrisches Verfahren, so dass der Sender der Nachricht einen privaten und<br />

einen öffentlichen Schlüssel besitzt. Der private Schlüssel dient der Signierung durch den<br />

Absender und der öffentliche Schlüssel der Prüfung der Signatur durch den Empfänger.<br />

Dieses Verfahren wird als „ECDSA“ bezeichnet und ist unter ANSI X9.62 standardisiert.<br />

Hierbei fungiert der sogenannte „Key“ als standardisierter Initialisierungswert (h0 bis h4).<br />

Im Folgenden wird der Ablauf und der Aufbau des Secure-Hash-Algorithmus vorgestellt.<br />

Wie bereits erläutert, erhält der Algorithmus als Eingabe die zu signierenden Daten und<br />

den geheimen Schlüssel. Zu Beginn wird das „Bitstuffing“ für die zu signierenden Daten<br />

ausgeführt. Der letzte Block wird der oben beschriebenen Vorgehensweise nach mit einer<br />

„1“ und „0“ aufgefüllt. Diese Vorverarbeitung der Daten wird vorzugsweise in Software<br />

realisiert, da hier kaum eine Optimierung durch die Verwendung von Hardware erreicht<br />

werden kann. Im Anschluss wird der geheime 160-Bit-Schlüssel in die entsprechenden<br />

Register (H-Register) des SHA-1-Hardware-Moduls geschrieben. Dazu ist es notwendig,<br />

den Schlüssel in fünf 32-Bit-Blöcke zu unterteilen. Der Datenblock wird in sechzehn 32-Bit-<br />

Blöcke aufgeteilt und in die W-Register der Komponente geschrieben. Nachdem das letzte<br />

der W-Register geschrieben wurde, beginnt die SHA-1-Hardwarekomponente mit der Generierung<br />

der Signatur. Ist der Algorithmus nach 80 Taktzyklen abgeschlossen, kann der<br />

nächste Datenblock in die W-Register geschrieben werden. Dies wird für alle 512-Bit-Blöcke<br />

durchgeführt. Nachdem alle Daten die SHA-1-Komponente passiert haben, befindet<br />

sich in den H-Registern des Moduls die Signatur des Datenpakets. Diese kann nun ausgelesen<br />

werden, um zum Beispiel mit der Nachricht verschickt zu werden. Der innere Aufbau<br />

der Hardwarekomponenten umfasst drei Funktionen, die zur Generierung der Signatur benötigt<br />

werden. Bei diesen handelt es sich um die Funktionen f, K und G. In Abbildung 2.11<br />

ist der Aufbau des SHA-1 dargestellt mit der Unterteilung nach Soft- und Hardware.<br />

Die Arbeitsweise dieser drei Funktionen f, K und G steht in Abhängigkeit zur Anzahl der<br />

verstrichenen Taktzyklen. Die Funktion G stellt die Hauptfunktion des SHA-1 dar. Mit ihr<br />

wird aus dem eingegebenen 160-Bit-Schlüssel und dem 512 Bit langen Datenblock die<br />

Signatur erzeugt. Die Funktion K liefert in Abhängigkeit der aktuellen Laufzeit des Algorithmus<br />

eine Konstante, die in der Funktion G genutzt wird, um einen Teil der Zwischenergebnisse<br />

für die Signaturerzeugung zu generieren. Diese Zwischenergebnisse werden nach<br />

jedem Takt in den Registern A bis E abgelegt. Nach 80 Takten wird der Inhalt dieser Register<br />

in den H-Registern verrechnet. Diese enthalten dann die Signatur des Datenblocks.<br />

Die Funktion f erzeugt, ebenfalls in Abhängigkeit von der aktuellen Taktanzahl, einen Teil<br />

dieser Zwischenergebnisse und bezieht bei der Berechnung ihres neuen Wertes die Zwischenergebnisse<br />

in den Registern B, C und D des vorherigen Taktes ein. Listing 2.2 zeigt<br />

den Aufbau der Funktionen f und K.<br />

f(j) with 0


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

f(j,B,C,D)= (B and C) or (B and D) or (C and D) for 40


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Zu Beginn jedes der 80 Takte der Funktion G ermitteln die Funktionen f und K ihre Zwischenergebnisse.<br />

Als Ergebnis von K wird eine 32 Bit lange Konstante ausgegeben, die in<br />

Abhängigkeit der aktuellen Anzahl von Takten bestimmt wird. Die Funktion F ermittelt ihr<br />

32-Bit-Ergebnis aus der Verknüpfung der Werte aus den Registern B, C und D. Zu Beginn<br />

des Algorithmus enthalten diese, wie die H-Register auch, den geheimen Schlüssel und<br />

im weiteren Verlauf die Zwischenergebnisse der Signatur. Der Aufbau der Verknüpfung ist<br />

ebenfalls von der aktuellen Taktanzahl abhängig. Nachdem diese beiden Funktionen ihre<br />

Ergebnisse generiert haben, startet die Funktion G. Als erstes wird ein weiteres Zwischenergebnis<br />

in Abhängigkeit von der aktuellen Taktzahl ermittelt. Dieses entspricht entweder<br />

dem Inhalt des Registers W0 oder der XOR-Verknüpfung der Register W13, W8, W2 und<br />

W0 mit einer zusätzlichen Bitschiebeoperation des Ergebnisses nach links (in Richtung der<br />

höherwertigen Bits). Im Anschluss werden alle W-Register um ein Register nach rechts,<br />

das heißt in Richtung der niederwertigen Register, geschoben. Der Wert des Registers W0<br />

wird in dem Register W15 abgelegt.<br />

Aus all den bis zu diesem Zeitpunkt ermittelten Werten wird durch Addition der Ergebnisse<br />

das Zwischenergebnis eines Teilblocks der Signatur ermittelt. Dessen Wert setzt sich aus<br />

einer fünfmaligen Bitschiebeoperation des Registerinhalts von A nach links zusammen.<br />

Auf diesen Wert werden anschließend der Registerinhalt von E sowie die Ergebnisse von<br />

f, K und der Verknüpfung der drei W-Register addiert. Dieses Ergebnis wird später in dem<br />

Register A abgelegt. Zuvor werden die Inhalte der Register B bis E um ein Register nach<br />

links verschoben. Der neue Wert des Registers C wird zudem noch um 30 Bit nach links<br />

verschoben. Nun enthält das Register A den zuvor berechneten Wert.<br />

Nach 80 Takten werden die Zwischenergebnisse aus den Registern A bis E mit den Inhalten<br />

der H-Register addiert. Der Wert in Register B wird zudem noch um 30 Bit nach<br />

links verschoben. In den H-Registern steht nun die Signatur der bis dahin behandelten<br />

Datenblöcke. Die Signatur kann über Software aus den H-Registern ausgelesen werden.<br />

2.15.2 Pseudo Random Number Generator (PRNG)<br />

Es besteht die Möglichkeit, das SHA-1-Modul als Generator für Pseudozufallszahlen zu<br />

verwenden. Dies wird in FIPS 186-2 [36] genauer erläutert. Für die Generierung derartiger<br />

Zahlen mit Hilfe des Secure Hash Algorithmus ist es zu Beginn notwendig einen Schlüssel<br />

und einen Datenblock in die entsprechenden H- und W-Register des Moduls zu schreiben.<br />

Die Kombination aus Schlüssel und Daten bilden den Ausgangswert (Seed) für die<br />

Generierung der Pseudozufallszahl. Verwendet man stets den gleichen Seed, wird immer<br />

eine identische Folge von Zufallszahlen erzeugt. Aufgrund der Wiederholbarkeit nennt<br />

man diese Werte auch pseudozufällige Zahlen. Ist der Seed jedoch unbekannt, wirken die<br />

Ergebnisse des Algorithmus wie zufällig generierte Zahlen. Nach dem derzeitigen Kenntnisstand<br />

kann man nicht anhand dieser Zahlenfolgen auf den Seed schließen. Wurden<br />

alle Register mit den Ausgangswerten belegt, kann der Algorithmus gestartet werden. Am<br />

Ende jedes Durchlaufs steht eine Pseudozufallszahl von 160 Bit in den Registern H0 bis<br />

H4.<br />

36


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Möchte man die Komponente für die Generierung von Hashwerten und als PRNG verwenden,<br />

ist es notwendig, beim Wechsel zwischen beiden Funktionalitäten die Werte der H-<br />

und W-Register zu speichern. Darüber hinaus müssen bei der Wiederaufnahme der Funktionalität<br />

die gespeicherten Werte in die Register zurückgeschrieben werden. Für einen<br />

Wechsel von PRNG zu SHA-1 muss die letzte ermittelte Zufallszahl und der Inhalt aller W-<br />

Register gespeichert werden. Im Anschluss können der Schlüssel und der Datenblock für<br />

den SHA-1 in die Register geschrieben werden.<br />

Möchte man im Anschluss an einen SHA-1-Durchlauf wieder eine Pseudozufallszahl generieren,<br />

muss der Hashwert und der Inhalt der W-Register gespeichert werden. Dies ist<br />

nur dann notwendig, wenn im Folgenden ein Hashwert in Abhängigkeit von diesen Werten<br />

erzeugt werden soll. Ansonsten reicht es aus, die letzte generierte Zufallszahl in die H-<br />

Register zurück zu schreiben und auch den Inhalt der W-Register wieder so herzustellen,<br />

wie er vor dem Wechsel von PRNG auf SHA-1 war.<br />

2.15.3 Hardwarebeschreibung<br />

Das implementierte SHA-1-Modul, welches in Abbildung 2.12 gezeigt wird, besitzt ein Memory-Like-Interface<br />

und fünf 32-Bit-Register für den 160 Bit langen Schlüssel und den<br />

Hashwert. Weiterhin sind sechzehn 32-Bit-Register für den Datenblock und die Zwischenergebnisse<br />

vorhanden. Der Schlüssel und der Datenblock werden in 32-Bit-Blöcke aufgeteilt<br />

und in die Register geschrieben. Ein zusätzliches 8-Bit-Kontrollregister wird verwendet,<br />

um die Komponente zu konfigurieren und zu steuern. Im folgenden Abschnitt werden die<br />

verschiedenen Register genauer beschrieben.<br />

Abbildung 2.12: Blockschaltbild des SHA-1-Moduls<br />

W0 ... W15:<br />

Diese sechzehn 32-Bit-Register beinhalten den 512-Bit-Datenblock. Das Ergebnis des Algorithmus<br />

ist ein 160 Bit langer Hashwert für diesen Datenblock. Um diese Register lesen<br />

und schreiben zu können, muss man diese über die SHA-1-Basisadresse (0x20000000)<br />

plus einen Offset zwischen 0 und 15 adressieren. Nachdem das Register W15 geschrieben<br />

wurde, beginnt der SHA-1 automatisch mit der Generierung der Signatur.<br />

H0 ... H4:<br />

Diese fünf 32-Bit-Register enthalten den 160 Bit langen Schlüssel zu Beginn des Algorithmus<br />

und am Ende den Hashwert des Datenblocks. Adressiert werden diese Register über<br />

37


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

die SHA-1-Basisadresse plus einen Offset zwischen 16 und 20. Nachdem der Algorithmus<br />

durchlaufen wurde, ist ein entsprechendes Interruptflag im Kontrollregister gesetzt. Dieses<br />

wird über das Auslesen des Registers H0 zurückgesetzt.<br />

CTRL:<br />

Das 8-Bit-Kontrollregister beinhaltet Konfigurations- und Statusinformationen des SHA-1-<br />

Moduls (siehe Tabelle 2.2). Es wird über die SHA-1-Basisadresse plus einen Offset von 21<br />

adressiert.<br />

Bit Beschreibung<br />

7 run<br />

6 irpend<br />

5 reserved<br />

4 reserved<br />

3 reserved<br />

2 new block<br />

1 BRDYN<br />

0 reserved<br />

Tabelle 2.2: Struktur des Kontrollregisters<br />

Bit 1 (BRDYN) schaltet den BRYDN (Bus ready)-Port des SHA-1-Moduls zu. Wenn dieses<br />

Bit gesetzt wurde, wird der AMBA-Bus, an welchen die Komponente über den Memory<br />

Controller angeschlossen wurde, als besetzt angezeigt. BRYDN ist „0“ (aktiv), während<br />

der SHA-1 läuft.<br />

Bit 2 (new block) zeigt an, dass ein neuer Datenblock beginnt. In diesem Fall wird ein initialer<br />

Schlüssel, der in einigen Konstanten gespeichert ist, verwendet. Diese Funktionalität<br />

kann auch realisiert werden, in dem man den Schlüssel von außen in die entsprechenden<br />

Register schreibt. Werden keine neuen Daten in die H-Register geschrieben, wird<br />

der Hashwert des zuvor verwendeten Datenblocks als Ausgangspunkt für den nächsten<br />

Datenblock verwendet. Dadurch wird eine Abhängigkeit des Hashwertes von vorangegangenen<br />

Ergebnissen realisiert und es können Datenblöcke, die größer als 512 Bit sind,<br />

behandelt werden.<br />

Bit 6 (irpend) zeigt den anliegenden Interrupt, wenn der SHA-1 durchlaufen wurde. Um<br />

den Interrupt zurückzusetzen, kann dieses Bit überschrieben werden oder das Register<br />

H0 ausgelesen werden.<br />

Bit 7 (run) zeigt an, ob der Algorithmus noch läuft oder bereits beendet wurde. Dieses<br />

Bit wird auf „1“ gesetzt, nachdem Register W15 geschrieben und auf „0“, nachdem der<br />

gesamte Algorithmus durchlaufen wurde.<br />

Bit 6 und 7 darüber können die Werte von „Bus Ready“ und „Interrupt“ abgerufen werden.<br />

38


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Register Adresse<br />

W0 ... W15 SHA1_BASE + [0 ... 15]<br />

H0 ... H4 SHA1_BASE + [16 ... 20]<br />

CTRL SHA1_BASE + 21<br />

Tabelle 2.3: Adressen der SHA-1-Register<br />

2.16 SPI<br />

Das SPI wurde aus der „Synopsys DesignWare“-Bibliothek [51], die dem IHP zur Verfügung<br />

steht, übernommen. Es ist direkt mit dem APB verbunden. Das Interface besitzt drei<br />

„Chip-Select“-Pins mit denen jeweils eine SPI-Slave-Komponente angesprochen werden<br />

kann. Für die Datenübertragung stehen ein Data-Out- und ein Data-In-Pin zur Verfügung.<br />

Weiterhin gibt es einen Pin für den SPI-Takt, der die Geschwindigkeit der Datenübertragung<br />

festlegt.<br />

Der SPI-Master kann durch das Schreiben der entsprechenden Kontrollregister konfiguriert<br />

werden. Hierzu zählen das Einstellen des SPI-Takts, der aktiven Taktflanke und der<br />

Phasenverschiebung des Takts. Der SPI-Master wurde mit Hilfe einer einfachen, angeschlossenen<br />

Slavekomponente getestet. Zwischen dieser und dem Master wurden anschließend<br />

Datenübertragungen ausgeführt.<br />

2.17 Pads und Pins<br />

Die Pads sind die Kontaktfelder auf einem Chip, über die mit Hilfe von Bonddrähten die<br />

Verbindung zu den Pins eines Gehäuses geführt wird. Das hier verwendete QFP-Gehäuse<br />

(siehe Abbildung 2.13) besitzt 128 Pins, von denen 87 I/O-Pins und 24 Pins für die<br />

Spannungsversorgung. Die übrigen 17 Pins nicht belegt sind (siehe Abbildung 2.15). Hinsichtlich<br />

der Pinverteilung werden 26 Pins an der kurzen und 38 Pins an jeder langen<br />

Kante untergebracht.<br />

Über die Pins erfolgt die Kommunikation des TSN mit externen Komponenten. Insbesondere<br />

das Speicherinterface sowie UART und SPI sind über die Pins nach außen geführt.<br />

Außerdem gibt es eine Schnittstelle zur DSU sowie Pins für Testzwecke, um die Funktionsfähigkeit<br />

des Speichers zu überprüfen.<br />

Die Basiskonfiguration des LEON2 sieht vor, dass für das Speicherinterface alle 32 Datenleitungen<br />

nach außen geführt werden. In der vorliegenden Umsetzung ist die Anzahl der<br />

nach außen geführten Datenleitungen auf 16 reduziert worden, um nötige Siliziumfläche<br />

möglichst gering zu halten.<br />

39


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Für die Spannungsversorgung sind 24 Pins vorgesehen, die sich in je 8 Pins für die Corespannung,<br />

die Padspannung und die Masse aufteilen. Die Anzahl der Pins und deren<br />

Position für die Spannungsversorgung ist vom IHP-eigenen Testsystem vorgegeben.<br />

Um eine Interoperabilität mit anderen Chips zu gewährleisten, beträgt die Padspannung<br />

3,3 V. So liegt der Spannungswert für eine logische Null bei 0 V und für eine logische Eins<br />

bei 3,3 V. Die Werte entsprechen dem Standard von Low Voltage Transistor Transistor<br />

Logic (LVTTL). Die Corespannung beträgt 2,5 V und wird von der verwendeten Technologie<br />

vorgegeben.<br />

Abbildung 2.13: Gehäuse des TSN vom Typ QFP128<br />

2.18 Vom VHDL zum ASIC<br />

Die Generierung des ASIC aus dem VHDL ist ein mehrstufiger Prozess. Zunächst werden<br />

die Funktionen des Chips in einer Hochsprache beschrieben.<br />

VHDL bietet dafür die so genannte Verhaltensbeschreibung. Hierbei werden die entsprechenden<br />

Schnittstellen der Schaltung mit der Außenwelt und die Funktionalität des Systems<br />

beschrieben. Diese Form erinnert stark an die Programmierung in anderen Programmiersprachen<br />

wie C++, Java oder Python und macht es somit einfach für Entwickler im<br />

Bereich der digitalen Schaltungen solche zu beschreiben.<br />

Der nächste Schritt ist die funktionale Simulation, in der mittels einer Testbench die Hardwarebeschreibung<br />

in VHDL auf ihre Korrektheit geprüft wird. In einer Stimuli-Datei im<br />

VHDL-Format werden die Eingänge des simulierten Bausteins mit Werten belegt und nach<br />

Abschluss der Simulation liegen die Ausgangswerte an den Ausgangsports an. Die Abbildung<br />

2.14 zeigt den Aufbau für die funktionale Simulation einer Hardwarekomponente.<br />

Ist die Hardware korrekt beschrieben, erfolgt durch die Synthese der nächste Schritt zur<br />

Generierung des ASICs, die Umsetzung in eine Gatternetzliste. Dabei werden Informationen<br />

aus einer Zellbibliothek, bestehend aus den Grundgattern, mit der funktionalen<br />

40


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Beschreibung so verknüpft, dass die Gatternetzliste entsteht. Nach der Synthese muss<br />

erneut die Korrektheit der Datenverarbeitung in der Hardwarekomponente geprüft werden.<br />

Dieses erfolgt analog zur Prüfung in der Pre-Synthese-Simulation unter Zuhilfenahme einer<br />

Testbench (die i.d.R. die gleiche Testbench wie für die Pre-Synthese-Simulation ist).<br />

Neben dem funktionalen Test kann hier geprüft werden, ob die gewünschte Clockfrequenz<br />

erreicht wird.<br />

Abbildung 2.14: Test eines entwickelten Hardware-Modells<br />

Abbildung 2.15: Layout des TSN-Chip nach der Verdrahtung. Insbesondere die<br />

Verdrahtung auf den beiden obersten Metallebenen (hier: gelb und<br />

braun) treten hervor<br />

2.19 Layoutgenerierung<br />

In der Phase der Layoutgenerierung wird der Schritt von der Gatternetzliste, die lediglich<br />

aus Grundgattern besteht, zum eigentlichen Chip vollzogen. Zunächst werden die<br />

41


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Außenmaße festgelegt. In der Regel werden diese durch die Anordnung der Pads, dem<br />

sogenannten Padring, vorgeben. Dieser Padring muss so gestaltet sein, dass die Anzahl<br />

der Pads an jeder Kante der Pinanzahl an der Kante des Gehäuses entspricht. Anschließend<br />

werden die Black-Box-Komponenten manuell platziert. In diesem Fall sind das die<br />

Speicherblöcke für den Cache. Diese Black-Box-Komponenten sind vorgefertigte Instanzen,<br />

die bereits dem Layoutprozess unterzogen wurden und daher wie Bibliothekselemente<br />

verwendet werden. In der verbleibenden Fläche werden die Grundgatter platziert und<br />

anschließend der „Clock tree“ generiert. Dieser sorgt mit Hilfe von schnellen Treiberelementen<br />

dafür, dass das Clocksignal möglichst gleichmäßig auf dem Chip verteilt wird.<br />

Zudem bestimmt er später wesentlich die maximal mögliche Taktfrequenz mit. Die Verdrahtung<br />

ist der letzte Schritt in der Layoutgenerierung. Die Abbildung 2.15 zeigt den TSN nach<br />

der Verdrahtung. Dabei werden die Gatter über 5 Metallebenen miteinander verbunden.<br />

2.20 Boardbeschreibung<br />

Das Kernstück auf der Platine ist der TSN-Prozessor. Daneben wird externer Speicher<br />

in Form von RAM und Flash den ASIC vervollständigen. Als Sensorik sind Infrarot- und<br />

Beschleunigungssensoren vorgesehen, die mögliche Ortsveränderungen detektieren können.<br />

Zur Kommunikation mit weiteren Knoten und dem Server kommen ein Zigbee-Funkmodul<br />

nach dem IEEE-802.15.4-Standard sowie ein Bluetooth-Modul zum Einsatz.<br />

Überdies soll das Board eine Elektronik zur Bereitstellung der Spannungsversorgung besitzen.<br />

Dieses ist so gestaltet, dass entweder ein Brennstoffzellensystem, Batterien/Akkus<br />

oder gegebenenfalls ein Solarzellensystem zum Einsatz kommen kann.<br />

2.21 Systemtest und Software<br />

Wie in Abschnitt 2.18 beschrieben existiert für den TSN eine Testbench. Durch die Komplexität<br />

des Systems gibt es einen angepassten Aufbau.<br />

Die Testroutinen sind in der Programmiersprache C verfasst. Ein Cross-Compiler erzeugt<br />

ein ausführbares Programm, das in einem simulierten Speicher abgelegt wird. Dieser simulierte<br />

Speicher ist Teil der Testbench. Die CPU des TSN arbeitet das Programm regulär<br />

ab und wird damit in ihrer Funktion getestet.<br />

Zurzeit existieren einzelne Testroutinen in Software, die stapelweise abgearbeitet werden.<br />

Diese Testroutinen senden Daten an das zu testende Modul und werten im Anschluss<br />

die Ergebnisse aus. Für alle Komponenten (UART, SPI, AES, ECC, SHA-1) sind solche<br />

Prozeduren vorhanden. Ein Auszug der Testdaten befindet sich im Anhang. Die jeweiligen<br />

Testvektoren wurden den Standardisierungsdokumenten entnommen [34], [35], [36], [37].<br />

42


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

2.22 Energie<br />

Vor allem im Bereich von batteriebetriebenen Geräten ist es von Interesse, die voraussichtliche<br />

Leistungsaufnahme der Hardware bestimmen zu können. Das ermöglicht die<br />

Auswahl einer geeigneten Spannungsquelle, die weder unter- noch überdimensioniert ist.<br />

Eine schnelle, aber ungenaue Angabe der Leistungsaufnahme ist durch das Synthesetool<br />

möglich. Dieser Wert ist allerdings ausreichend, um die Anzahl der Pads für die Stromversorgung<br />

festzulegen (je Pad ca. 100 mA) sowie die Breite der stromzuführenden Leitungen<br />

zu bestimmen.<br />

Sinnvoller ist es, spezielle Programme einzusetzen, die die Leistungsaufnahme anhand<br />

der tatsächlichen Umschaltvorgänge der Gatter ermittelt. Die Abbildung 2.16 zeigt die Simulation<br />

des TSN mit der Aufgliederung in die einzelnen Komponenten. Die Aktivitätsphasen<br />

stechen jeweils durch erhöhte Leistungsaufnahme hervor. Ein Analysewerkzeug<br />

hilft die Leistungsaufnahme in jedem Clocktakt zu summieren, so dass, wie in Tabelle 2.4<br />

gezeigt, die exakte Leistungsaufnahme einer Operation (z.B. Hashwertberechnung oder<br />

Verschlüsselung) ermittelt werden kann. Die Leistung ist nach den einzelnen Komponenten<br />

aufgeschlüsselt. Durchschnittlich benötigt der TSN 95 mW, von denen 47 mW auf die<br />

CPU entfallen. Die verbleibende Leistung verteilt sich auf die Komponenten SHA-1, AES<br />

und ECC. Für die kryptographischen Funktionen sind jeweils die Leistungsaufnahme und<br />

Laufzeit in Tabelle 2.4 für eine typische Operation angegeben.<br />

Die tatsächliche Leistungsaufnahme kann abweichen, da die Pads Transistoren enthalten,<br />

die mit 2,5 V versorgt werden. Diese werden in der Simulation der Leistungsaufnahme<br />

nicht mit berücksichtigt.<br />

Abbildung 2.16: Analyse der Leistungsaufnahme des Gesamtsystems (rot) sowie<br />

selektierter Einzelkomponenten. Der grüne Plot zeigt exemplarisch<br />

den deutlich erhöhten Stromverbrauch des ECC-Beschleunigers in<br />

seiner Aktivitätsphase.<br />

43


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Komponente Leistungsaufnahme Laufzeit Taktanzahl<br />

SHA-1 8,12 mW 5.125 ns 82<br />

AES 3,94 mW 4.875 ns 78<br />

ECC 29 mW 822.875 ns 13.166<br />

LEON-Kern 47,2 mW ≈6,25 ms ≈100.000<br />

TSN-System (ohne Pads) 95 mW ≈6,25 ms ≈100.000<br />

Tabelle 2.4: Simulation der Leistungsaufnahme für Einzelkomponenten und das<br />

Gesamtsystem bei 16 MHz<br />

2.23 Debug- und Diagnoseschnittstellen<br />

Ein komplexes System, wie der TSN, lässt sich hinreichend simulieren, solange die Simulationen<br />

auf den Chip beschränkt sind. Eine Simulation mit extern angeschlossenen<br />

Modulen (z.B. den Radiomodulen) ist schwer umzusetzen. Für diesen Zweck müssten<br />

Verhaltensmodelle der externen Komponenten zur Verfügung stehen welche jedoch, bedingt<br />

durch ihre hohe Komplexität, nicht vorhanden sind. Anstelle derer nutzt man simple<br />

Modelle von externen Komponenten, die z.B. einfach Daten wieder zurücksenden.<br />

Darüber hinaus kann der Test eines komplexen Systems in der Simulation nie so umfassend<br />

sein, dass alle Komponenten exzessiv validiert werden. Die Simulationszeiten sind<br />

sehr lang, so dass eine ausführliche Simulation nach der Erstellung des Layouts bis zu<br />

mehrere Stunden in Anspruch nehmen kann, obwohl nur einige Millisekunden simuliert<br />

werden.<br />

Aufgrund der nicht vollständigen Simulation des ASICs in seiner Arbeitsumgebung ist es<br />

notwendig, Diagnoseschnittstellen, wie die in Abschnitt 2.23 beschriebene DSU, bereitzustellen.<br />

Das erleichtert die Fehlersuche bei Hardware- oder Softwareproblemen. Die Fehler<br />

in der Hardware können dann im nächsten Fertigungszyklus behoben werden.<br />

44


3 Software<br />

3.1 Das Betriebssystem eCos<br />

eCos ist ein frei verfügbares Betriebssystem für eingebettete Systeme mit Echtzeitanforderungen.<br />

Es wird unter einer angepassten GPL-Lizenz [33] verbreitet. Diese erlaubt die<br />

Integration eigener Module in eCos ohne die Verpflichtung, diese auch unter der GPL verbreiten<br />

zu müssen.<br />

In diesem Abschnitt geben wir zunächst einen kurzen Überblick über die Funktionsweise<br />

von eCos und den von der eCos User Community bereitgestellten Funktionsumfang. Anschließend<br />

beschreiben wir das Erstellen und Integrieren von neuen Funktionen. Im letzten<br />

Teil des Abschnittes wird die Toolchain und der build-Prozess von eCos erläutert.<br />

3.1.1 eCos im Detail<br />

Bei eCos handelt es sich um ein feingranular konfigurierbares Betriebssystem. Es bietet<br />

die Möglichkeit den Kern sehr spezifisch an die eigenen Anforderungen anzupassen.<br />

Hierbei wird der Anwender durch ein Konfigurationswerkzeug unterstützt. Für viele Anwendungsfälle<br />

existieren bereits Lösungen, die je nach Bedarf eingebunden werden können.<br />

Tabelle 3.1: Speichergrößen verschiedener Konfigurationen von eCos 3.0<br />

Speicherbedarf in kB<br />

Nr. Konfiguration Gesamt TCP/IP-Stack<br />

1 Standardumfang übersetzt ohne Optimierung 320,994<br />

2 Standardumfang optimiert auf Größe 175,094<br />

3 (2) mit Lightweigtht-TCP/IP-Stack 399,6 224,5<br />

4 (2) mit OpenBSD-TCP/IP-Stack 3624,3 3372,5<br />

5 Minimalkonfiguration optimiert auf Größe 52,722<br />

6 uIP-Stack 16,26<br />

In Tabelle 3.1 sind die Code- und Datenbereichsgrößen verschiedener Konfigurationen von<br />

eCos 3.0 angegeben. Anhand der Daten wird deutlich, wie entscheidend die Auswahl der<br />

richtigen Komponenten und Optionen ist, wenn insbesondere hinsichtlich des zur Verfügung<br />

stehenden Speicherplatzes optimiert werden muss. Der Ausgangspunkt des TSN ist<br />

die Konfiguration 3, welche dann entsprechend den Anforderungen erweitert wurde. Allerdings<br />

wird von Gaisler Research die Version 1.3 verwendet, so dass der Ausgangspunkt<br />

für den TSN etwas weniger Programmcode umfasst.


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Das Betriebssystem eCos ist vollständig in C implementiert, ist damit leicht erweiterbar<br />

und portierbar und bietet darüber hinaus eine C++-Schnittstelle.<br />

Basisprimitive<br />

eCos Applikationen können in mehrere Threads aufgeteilt werden, die nebenläufig ausgeführt<br />

werden. Jeder Thread besitzt einen eigenen Kontext, Stack und Priorität. Der Kern<br />

sorgt für eine nebenläufige Ausführung der Threads entsprechend ihrer Priorität. Hierbei<br />

kann zwischen einem Multi-Level- und einem Bitmap-Scheduler gewählt werden. Der<br />

Multi-Level-Scheduler erlaubt die Ausführung von mehreren Threads auf einem Prioritätslevel<br />

und wird für den TSN verwendet.<br />

Für die Kommunikation zwischen Threads werden verschiedene Primitive wie:<br />

• Flags,<br />

• Zähler,<br />

• Semaphore,<br />

• Mutexe mit Ereignisvariablen,<br />

• Mailbox,<br />

• Synchronisierte dynamische Speicherverwaltung und<br />

• Spinlocks<br />

bereitgestellt. Die Auswahl des Primitivs ist abhängig vom Anwendungsfall: Flags zum<br />

Beispiel benötigen sehr wenig Speicher, während Spinlocks ein atomares Sperren von<br />

gemeinsam genutzten Datenstrukturen bieten.<br />

Darüber hinaus enthält eCos bereits einen Hardware Abstraction Layer (HAL), über welchen<br />

der Kern ein einheitliches Interface zu den Hardware-Funktionen, wie Timer, Interrupts,<br />

Gerätetreiber usw. anbietet.<br />

Außerdem stellt eCos eines dynamisches Speichermanagement zur Verfügung. Eine statische<br />

Speicherkonfiguration des Systems ist somit nicht zwingend erforderlich. Der Speicherplatzbedarf<br />

kann zur Laufzeit an die Anforderungen angepasst werden.<br />

Netzwerkprotokoll-Stacks<br />

eCos bietet bereits eine breite Auswahl an Implementierungen des TCP/IP-Stacks. So<br />

kann zwischen einem FreeBSD, einem OpenBSD und einem lightweight TCPIP (lwIP)<br />

Stack gewählt werden. Die Stacks enthalten neben dem TCP/IPv4 Stack auch Implementierungen<br />

für IPv6, IPsec und verschiedene Routing Protokolle. Auf der Anwendungsschicht<br />

sind Implementierungen für SNMP, HTTP, (T)FTP und DHCP vorhanden.<br />

Die einzelnen Implementierungen unterscheiden sich hinsichtlich ihrer Schnittstellen bzw.<br />

Kompatibilität zu Programmschnittstellen anderer Betriebssysteme. So ist der lwIP-Stack<br />

46


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

auf Größe optimiert, jedoch vom Programmierinterface nicht kompatibel zu anderen Systemen.<br />

So stellt der lwIP-Stack eine eigenes API bereit, dass nicht kompatible zu POSIX<br />

ist. Bereits existierende Anwendungen müssen demzufolge für die Verwendung mit dem<br />

Stack angepasst werden. Für den TSN wurde jedoch aufgrund der geringen Größe und<br />

dem nicht Vorhandensein von alter Software der lwIP-Stack gewählt.<br />

Hardwareunterstützung<br />

Für eCos ist eine große Anzahl an Treibern für serielle Geräte, Ethernet-Controller und<br />

Flash sowie Anbindungen an PCMCIA, USB und PCI verfügbar.<br />

Anwendung<br />

Treiber<br />

API Bibliotheken<br />

Betriebssystemkern<br />

HAL<br />

GDB-Unterstützung<br />

Abbildung 3.1: eCos-Systemarchitektur<br />

Wie in der Systemarchitektur in Abbildung 3.1 dargestellt, bildet die HAL die unterste<br />

Schicht von eCos und stellt das Bindeglied zwischen den hardwareunabhängigen Teilen<br />

des Systems und der Hardware selbst dar. Im Konfigurationsprozess wird dies durch die<br />

Verwendung von Templates unterstützt. Ein Template bildet die Basis für eine Konfiguration<br />

und beinhaltet bereits die Auswahl der verwendeten Hardwareplattform. Anschließend<br />

können verschiedene Packages zu dieser Konfiguration hinzugefügt werden, wobei bei<br />

den Hardware-Treibern die Auswahl bereits auf die Zielplattform abgestimmt ist.<br />

Eine Portierung von eCos für den LEON-Prozessor (LEON2 und LEON3) inklusive Konfigurations-<br />

und Entwicklungswerkzeuge ist bei Gaisler Aeroflex[2] verfügbar. Bei dem Konfigurationswerkzeug<br />

handelt es sich um das Standard-Konfigurationswerkzeug von eCos.<br />

Bei den Entwicklungswerkzeugen handelt es sich um die GNU Compiler Collection, die<br />

als Cross-Compiler für die Zielplattform SPARC auf den Entwicklungsplattformen Linux,<br />

MinGW und Cygwin zur Verfügung steht. Die eCos-Quellen wurden vom Main-Branch bei<br />

der Version 1.0.8 abgespalten und können ebenfalls als Tarball bei Gaisler Aeroflex heruntergeladen<br />

werden.<br />

47


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

C-Standardbibliotheken<br />

eCos stellt eine uITRON- und eine POSIX-API [57], [42] zur Verfügung, welche die Portierung<br />

von Anwendungen, die diese Schnittstellen nutzen, erleichtert. Weiterhin ist eine vollständige,<br />

multitasking-sichere ISO-C-Standardbibliothek verfügbar. Die ISO-C-Bibliothek<br />

umfasst zahlreiche Funktionen für Dateiein- und -ausgabe, String-Manipulation und Internationalisierung.<br />

Darüber hinaus existieren Portierungen für Bibliotheken wie zlib, mathlib und OpenSSL.<br />

Leider ist die OpenSSL-Implementierung bei der für den TSN eingesetzten eCos-Version<br />

nicht vollständig, sondern bietet nur eine Untermenge der aktuellen OpenSSL-Funktionalität.<br />

Da insbesondere Implementierungen für die Krypto-Module (AES, SHA1, ECC)<br />

des LEON2-Prozessorkerns nicht vorhanden sind, wird die OpenSSL-Komponente aktuell<br />

nicht verwendet.<br />

3.1.2 Hinzufügen von Komponenten<br />

Beim Hinzufügen von neuen Funktionen in das eCos kann zwischen zwei verschiedenen<br />

Vorgehensweisen gewählt werden. Zum einen kann man die neue Funktionalität in die<br />

Applikation integrieren. In diesem Fall steht sie nur dieser Applikation zur Verfügung und<br />

kann nur schwer erneut genutzt werden. Diese Variante empfiehlt sich für spezielle Funktionen,<br />

die nur einmal genutzt werden sollen. Sie hat den Vorteil, dass hiermit ein schnelles<br />

Prototyping möglich ist und man auf keine APIs von eCos achten muss. Die zweite Vorgehensweise<br />

ist das Erstellen eines neuen Packages. In diesem Fall wird die Funktion in<br />

eCos integriert und kann mittels des Konfigurationswerkszeugs in verschiedene Applikationen<br />

integriert und innerhalb andere eCos-Module verwendet werden.<br />

In diesem Abschnitt wird das Erstellen eines neuen Packages beschrieben. Hierbei wird<br />

zunächst allgemein auf die notwendigen Schritte eingegangen. Im zweiten Teil wird das<br />

Treiber API von eCos, welches die Grundlage für viele neue Funktionen bildet, erläutert.<br />

Packages<br />

Das Hinzufügen eines neuen Packages gliedert sich im Wesentlichen in zwei Schritte:<br />

1. Einbinden in das Repository<br />

2. Registrieren in der eCos-DB<br />

Zunächst muss im Repository ein neues Verzeichnis für die Komponente angelegt werden.<br />

Hierzu wählt man im Verzeichnis packages ein Unterverzeichnis aus, welches die<br />

neue Komponente am besten charakterisiert. Dort legt man einen Verzeichnisbaum, wie<br />

in Listing 3.1 beschrieben, an.<br />

48


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

<br />

current<br />

cdl<br />

include<br />

src<br />

Listing 3.1: Package–Verzeichnisbaum<br />

Das Verzeichnis current gibt die Konfiguration an, in welche das Paket integriert wird.<br />

Hier wird im Rahmen des TSN-Projektes lediglich current verwendet. Darunter müssen<br />

die Verzeichnisse<br />

• cdl (enthält die Konfiguration für die eCos-DB),<br />

• include (enthält die öffentlichen Header des Paketes) und<br />

• src (enthält die Paketquellen)<br />

angelegt werden. Im Verzeichnis include kann ein beliebiger Baum eingehangen werden,<br />

der dann komplett in den build-Baum 1 von eCos kopiert wird. Die Paketquellen sollten<br />

ohne Unterverzeichnisse unter src abgelegt werden. Das Erstellen eines Makefiles<br />

ist nicht notwendig. Dies erfolgt automatisch beim build-Prozess. Die hierfür notwendigen<br />

Definitionen werden im Verzeichnis cdl vorgegeben.<br />

Im Verzeichnis cdl wird die Konfigurationsdatei für das Paket abgelegt. Sie ist zwingend<br />

erforderlich für das Registrieren der Komponente in der eCos DB. Listing 3.2 zeigt die<br />

Definition für einen seriellen Treiber für den LEON2 Prozessor.<br />

cdl_package CYGPKG_IO_SERIAL_SPARC_LEON {<br />

display "SPARC Leon2 serial device drivers"<br />

parent<br />

active_if<br />

active_if<br />

requires<br />

include_dir<br />

description<br />

CYGPKG_IO_SERIAL<br />

CYGPKG_IO_SERIAL<br />

CYGPKG_HAL_SPARC_LEON<br />

CYGPKG_ERROR<br />

cyg/io<br />

"This option enables the serial device drivers for<br />

the SPARC Leon2."<br />

}<br />

compile -library=libextras.a leon_ser.c<br />

Listing 3.2: Package–Defintion<br />

Hier kann angegeben werden, wie der Name des Pakets ist (im Beispiel CYPPKG_IO_<br />

SERIAL_SPARC_LEON). Dieser sollte eindeutig sein. Über das Schlüsselwort include_<br />

dir legt man fest, wo die Header im build-Baum zu finden sind. Für eine detailierte Beschreibung<br />

der Konfigurationsdatei sei an dieser Stelle auf [5] verwiesen.<br />

1 Eine genauer Beschreibung des build-Baumes erfolgt im Abschnitt 3.1.3.<br />

49


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Um das neue Paket letztendlich in der eCos-DB zu registrieren, muss es in die Datei<br />

ecos.db eingetragen werden. Listing 3.3 zeigt dies für das in Listing 3.2 eingeführte Beispiel.<br />

package CYGPKG_IO_SERIAL_SPARC_LEON {<br />

alias<br />

{"SPARC Leon2 serial device drivers"<br />

devs_serial_sparc_leon leon_serial_driver }<br />

hardware<br />

directory<br />

devs/serial/sparc/leon<br />

script<br />

ser_sparc_leon.cdl<br />

description "SPARC Leon2 serial device drivers"<br />

}<br />

Listing 3.3: Package–Registration<br />

Hardware-Treiber, wie in unserem Beispiel, müssen einem target zugewiesen werden.<br />

Hierfür muss der Paketname beim zugehörigen Target in die package-Liste aufgenommen<br />

werden. Das Aktivieren des Paketes erfolgt dann zusammen mit der Auswahl der<br />

Zielplattform.<br />

Treiber API<br />

eCos bietet für Treiber ein einheitliches API, so dass die Nutzung von verschiedenen Treibern<br />

analog erfolgt. Jeder Treiber bietet die folgenden Funktionen an:<br />

cyg_io_lookup() Diese Funktion empfängt einen Treibernamen, sucht den Namen in der<br />

Systemtreibertabelle und liefert der Anwendung eine Referenz (Handle) auf den Treiber<br />

zurück. Diese Referenz wird von den nachfolgend beschriebenen Methoden benötigt.<br />

cyg_io_get_config(), cyg_io_set_config() Die API-Aufrufe ermöglichen das Lesen und<br />

Schreiben von Konfigurationsdaten des Gerätetreibers.<br />

cyg_io_read(), cyg_io_write() Diese API-Aufrufe dienen dazu, Daten vom Treiber zu lesen<br />

bzw. an diesen zu übergeben.<br />

Beim Hinzufügen eines neuen Treibers, ob als Package oder in der Applikation, müssen<br />

diese Funktionen implementiert werden. Darüber hinaus muss der Gerätetreiber außerdem<br />

die folgenden Elemente definieren:<br />

• eine DEVTAB_ENTRY-Struktur und<br />

• eine DEVIO_TABLE-Struktur.<br />

Die DEVTAB_ENTRY-Struktur definiert den Namen und die Einsprungpunkte für die Initialisierungsroutinen<br />

des Treibers. Listing 3.4 zeigt die Definition für einen seriellen Gerätetreiber,<br />

der anschließend mittels cyg_io_lookup(¨/dev/ser0¨) angesprochen werden<br />

kann.<br />

50


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

DEVTAB_ENTRY(_leon_ser_io1,<br />

"/dev/ser0",<br />

0, // Does not depend on a lower level interface<br />

&cyg_io_serial_devio,<br />

_leon_ser_init,<br />

_leon_ser_lookup, // Serial driver may need initializing<br />

&_leon_ser_channel1<br />

);<br />

Listing 3.4: Device Table<br />

Die Initialisierungsfunktion _leon_ser_init() wird bei Starten des Systems aufgerufen.<br />

Der Treiber kann hier allgemeine Initialisierungen durchführen. Der Aufruf der Funktion<br />

_leon_ser_lookup() erfolgt bei der Anforderung des Treibers durch die Applikation.<br />

Weiterhin verweist die Struktur auf eine DEVIO_TABLE-Struktur, die die Einsprungpunkte<br />

der Treiberfunktionen enthält. Für einen seriellen Treiber sind dies zum Beispiel die Funktionen<br />

aus dem Listing 3.5.<br />

DEVIO_TABLE(cyg_io_serial_devio,<br />

serial_write,<br />

serial_read,<br />

serial_select,<br />

serial_get_config,<br />

serial_set_config<br />

);<br />

Listing 3.5: Device IO Table<br />

Die Funktionen serial_write() und serial_read() werden zur Datenübertragung<br />

an den bzw. vom Treiber verwendet. Mittels der Funktion serial_select() kann auf ein<br />

Ereignis, z.B. das Eintreffen von Daten, gewartet werden. Das Konfigurieren des Treibers<br />

erfolgt über die Funktionen serial_get_config() und serial_set_config().<br />

3.1.3 build-Prozess<br />

Das Erstellen einer eCos Applikation unterteilt sich in zwei Schritte. Im ersten Schritt muss<br />

eCos konfiguriert und übersetzt werden. Als Ergebnis wird eine Bibliothek erstellt, die im<br />

zweiten Schritt in die Zielapplikation eingebunden wird. Dieser Abschnitt enthält eine Beschreibung<br />

dieser Schritte, zuvor wird kurz auf die notwendige Toolchain eingegangen.<br />

Toolchain<br />

Der LEON2-Prozessor basiert auf der SPARC-Architektur, so dass die GnuTools für SPARC<br />

verwendet werden können. Beim Erstellen der Toolchain muss man zwischen den Entwicklungsplattformen<br />

unterscheiden. Während für Windows die Tools nahezu vollständig von<br />

[2] heruntergeladen werden können, müssen sie für Linux selbst erstellt werden.<br />

51


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Microsoft Windows Entwicklung Für die Entwicklung unter Microsoft Windows 2 muss<br />

die Cygwin Umgebung von RedHat [11] verwenden werden. Hierzu muss zunächst Cygwin<br />

inklusive der Entwicklungswerkzeuge (gcc, make, autoconf und automake) installiert werden.<br />

Anschließend kann die Toolchain entpackt werden, dies kann mittels des folgenden<br />

Kommandos erfolgen:<br />

cd /usr/local<br />

tar xjf /tmp/sparc-rtems-4.6.5-gcc-3.2.3-1.0.16-cygwin.tar.bz2<br />

Hierbei wird davon ausgegangen, dass das Paket zuvor in dem Verzeichnis c:\cygwin\<br />

tmp abgelegt wurde. Die Installation kann auch in ein anderes Verzeichnis erfolgen, jedoch<br />

gehen die folgenden Beschreibungen davon aus, dass sich der Compiler unter /usr/local<br />

befindet.<br />

Nach der Installation der Compiler-Suite muss das eCos Konfigurationstool configtool-<br />

-2.11-setup.exe installiert werden. Dieses kann ebenfalls unter [2] heruntergeladen<br />

werden. Das Tool wird als natives Windows-Programm angeboten, welches direkt installiert<br />

und anschließend über das Startmenü ausgeführt werden kann.<br />

Für das Übersetzen von eCos auf der Kommandozeile, ohne Nutzung des Configtools,<br />

wird ein Makefiles für cygwin-Umgebung bereitgestellt. Es befindet sich im Verzeichnis<br />

oberhalb der ecos-Quellen. Diese Makefile nutzt für den Aufbau der build-Trees und zum<br />

Überprüfen der Konfigurationsdatei das Kommandozeilentool ecosconfig. Dieses kann<br />

nicht direkt heruntergeladen, sondern muss manuell erstellt werden. Hierzu lädt man von<br />

eCosCentric [16] einen Snapshot ecos-trunk-full.tar.bz2 des ecos-CVS herunter.<br />

Anschließend ist dieses wie folgt zu übersetzen:<br />

mkdir /tmp/src<br />

cd /tmp/src<br />

tar xjf /tmp/ecos-trunk-full.tar.bz2<br />

cd ..<br />

mkdir build<br />

cd build<br />

../src/ecos/configure<br />

make<br />

cp host/tools/configtool/standalone/common/ecosconfig.exe \<br />

/usr/local/bin/<br />

Das Programm ecosconfig.exe wird von den IHP-Makefiles ohne Pfadangabe aufgerufen,<br />

so dass darauf zu achten ist, dass /usr/local/bin im Suchpfad enthalten ist.<br />

Linux Entwicklung Unter Linux muss zunächst die Toolchain erstellt werden. Hier zu ist<br />

unter [55] eine Anleitung zu finden. Als TARGET sollte sparc-elf verwendet werden.<br />

2 Die Beschreibungen zur Entwicklungsumgebung wurden ausschließlich unter Microsoft Windows XP Professional<br />

(Service Pack 3) getestet.<br />

52


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Nach der Installation der Toolchain muss das eCos Konfigurationstool installiert werden.<br />

Dieses kann wiederum bei Gaisler Aeroflex (ecosconfig.zip) heruntergeladen werden.<br />

Das zip-Archiv enthält sowohl die GUI- als auch die Kommandozeilenversion des Programmes.<br />

Für die GUI-Version ist die Bibliothek wxGTK-2.4.2 notwendig. Auf aktuellen<br />

Distributionen, z.B. debian lenny, ist meist eine neuere Version der Bibliothek installiert.<br />

Da das Programm jedoch direkt auf die Version 2.4.2 der Bibliothek verweist, empfiehlt<br />

es sich diese mit der korrekten Version aus den Quellen zu übersetzen und zusätzlich zu<br />

installieren.<br />

eCos konfigurieren und übersetzen<br />

In diesem Abschnitt wird das Konfigurieren und das Übersetzen von eCos beschrieben.<br />

Hierbei wird davon ausgegangen, dass die Toolchain unter /usr/local installiert ist und<br />

die eCos-Quellen vom IHP bezogen wurden. Das Wurzelverzeichnis der Quellen sollte die<br />

folgende Struktur aufweisen:<br />

apps Verzeichnis mit den Quellen der eCos Applikationen.<br />

cfg Verzeichnis mit den Konfigurationsdateien.<br />

ecos-rep-1.0.8 Verzeichnis mit den Quellen des eCos Betriebssystems.<br />

Makefile Globale Steuerungsdatei zum Erstellen von eCos.<br />

Im Verzeichnis cfg sollte eine Datei mit dem Namen tsn.ecc vorhanden sein. Hierbei<br />

handelt es sich um die Konfigurationsdatei für eCos. Um die Datei zu bearbeiten, muss<br />

das Programm configtool gestartet werden. Beim Start des Programms muss als Repository<br />

das Verzeichnis ecos-rep-1.0.8 angegeben werden. Anschließend kann über<br />

den Menüpunkt Datei/Öffnen die Konfiguration geladen werden. Es ist darauf zu achten,<br />

dass die Datei nach den Änderungen wieder unter cfg/tsn.ecc gespeichert werden<br />

muss.<br />

Anschließend kann eCos durch den Aufruf make übersetzt werden. Wurde die Konfiguration<br />

unter einem anderen Namen gespeichert, kann die neue Konfiguration mittels make<br />

TARGET= verwendet werden. Nach jeder Änderung an der Konfiguration<br />

ist eCos komplett neu zu übersetzen. Hierzu kann mittels make distclean das Kompilat<br />

gelöscht werden.<br />

Wurde die Toolchain in einem anderen Verzeichnis installiert, muss die Option Configuration/Global<br />

build options/Global command prefix entsprechend konfiguriert<br />

werden.<br />

Nach dem Übersetzen von eCos sollten die Verzeichnisse tsn_build und tsn_install<br />

vorhanden sein. Das Verzeichnis tsn_install enthält die Header und die Bibliotheken<br />

zum Erstellen von eCos Applikationen. Beim Verzeichnis tsn_build handelt es sich um<br />

den build-Tree von eCos.<br />

53


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Applikation erstellen<br />

In der, vom IHP erstellten, Verzeichnisstruktur werden Applikationen im Unterverzeichnis<br />

apps abgelegt. Hier existiert für jede Applikation ein separates Verzeichnis mit den<br />

Quellen und einem Makefile. Darüber hinaus wurde hier das Verzeichnis lib für Applikationsbibliotheken<br />

angelegt. Im Folgenden wird das Erstellen und Übersetzen einer<br />

eCos-Applikation für den TSN erläutert. Dies umfasst das Anpassen der Makefiles, die<br />

Vorstellung eines Skeleton 3 für eine einfache Applikation und das Erstellen einer Applikationsbibliothek.<br />

Basiskonfiguration Die Basiskonfiguration für die build-Umgebung wird in die Datei<br />

defs.mk eingetragen. Hierbei handelt es sich um ein Include für die Makefiles der Applikationen.<br />

Die Variablen haben hierbei die folgende Bedeutung:<br />

VPATH legt den Pfad zur Toolchain fest. Die Variable muss auf das Verzeichnis mit den<br />

Binaries, in der Regel bin, verweisen.<br />

PREFIX gibt den Prefix der Binaries an. Hier sollte der gleiche Prefix, wie für eCos verwendet<br />

werden. Unter Windows ist dies sparc-rtems- und unter Linux sparc-elf-.<br />

VERSION gibt den Namen der zu verwendenden Konfiguration an.<br />

Die Datei build.sh aus dem Verzeichnis apps muss nicht angepasst werden. Sie wird<br />

von den Makefiles zur Erstellung der build-Nummer 4 verwendet.<br />

Skeleton einer Applikationen Das Erstellen einer Applikation erfolgt durch den Aufruf<br />

von make im Applikationsverzeichnis. Anschließend sollte eine Datei mit dem gleichen<br />

Namen wie des Verzeichnisses vorhanden sein. Die Datei kann dann mittels grmon 5 auf<br />

die Zielhardware übertragen werden.<br />

Um eine neue Applikation zu erstellen, legt man unter apps ein neues Verzeichnis an und<br />

kopiert ein Makefile aus einem der anderen Applikationsverzeichnisse hinein. In dieser<br />

Datei sind anschließend die folgenden Variablen anzupassen:<br />

TARGET legt den Namen der Applikation fest, sollte identisch mit dem Verzeichnisnamen<br />

sein.<br />

OBJS enthält eine Auflistung aller Objektdateien des Programms.<br />

3 Grundgerüst, dass durch den Anwendungsprogrammierer aufgefüllt wird<br />

4 Bei der build-Nummer handelt es sich um die globale Variable build_ver die über das Include<br />

build.h eingebunden werden kann. Sie wird bei jedem Aufruf von make inkrementiert und mittels make<br />

distclean zurückgesetzt.<br />

5 Bei grmon handelt es sich um den General Debugging Monitor von Gaisler Aeroflex. Das Programm wird<br />

kommerziell über die Homepage von Gaisler (http:\\www.gaisler.com) mit einem Hardware-Dongle vertrieben.<br />

54


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

DEFINES enthält eine Auflistung von Defines, die dem Compiler übergeben werden sollen.<br />

Die Angabe muss ohne das Prefix -D erfolgen, dieses wird automatisch hinzugefügt.<br />

ULIBS enthält eine Liste von Bibliotheken, die mit in das Programm eingebunden werden<br />

sollen. Hierbei sind nicht die eCos Bibliotheken anzugeben.<br />

Im eCos des TSN wird keine main() Funktion unterstützt. Eine Applikation beginnt immer<br />

mit der Funktion cyg_user_start(). Listing 3.6 zeigt das Grundgerüst für eine TSN<br />

eCos Applikation.<br />

#include <br />

#include <br />

#include "build.h"<br />

static cyg_handle_t _simple_thread;<br />

static cyg_thread _thread_s;<br />

static char _stack[4096];<br />

static void _app_thread(cyg_addrword_t data)<br />

{<br />

diag_printf("\r\neCos Application (build %d)\r\n",<br />

(unsigned int) data);<br />

for (;;) {<br />

/* waiting forever */<br />

}<br />

}<br />

return;<br />

void cyg_user_start(void)<br />

{<br />

(9, _app_thread, (cyg_addrword_t) build_ver, "app",<br />

(void *) &_stack[0], 4096, &_simple_thread,<br />

&_thread_s);<br />

}<br />

cyg_thread_resume(_simple_thread);<br />

Listing 3.6: Application Skeleton<br />

Die Applikation des Skeleton startet einen neuen Thread mit der Priorität 9 und der Funktion<br />

_app_thread(). Als Argument wird ihr die externe Variable build_ver, die von dem<br />

Skript build.sh erzeugt wird, übergeben. Die Funktion gibt eine kurze Meldung auf der<br />

Debug-Konsole des LEON2 Prozessor aus und wartet anschließend in einer Endlosscheife.<br />

Bibliothek erstellen Erstellt man Funktionen, die in mehreren Applikationen genutzt<br />

werden sollen, kann es zweckmäßig sein, diese in eine Bibliothek auszulagern. Hierzu<br />

55


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

erstellt man unter apps ein Verzeichnis mit dem Namen der Bibliothek und darin die Verzeichnisse:<br />

include enthält die Header der Bibliothek und<br />

lib enthält die Quelltextdateien der Bibliothek.<br />

In das Verzeichnis libs wird ein Makefile aus einer bereits vorhandenen Bibliothek<br />

kopiert. Hier müssen, wie bei einer Applikation, die Variablen TARGET und OBJS angepasst<br />

werden. Es ist darauf zu achten, dass die Bibliothek keine Funktion mit dem Namen<br />

cyg_user_start() enthält.<br />

56


4 Softwarearchitektur des TSN<br />

Nach der Einführung in eCos wird in diesem Abschnitt die Softwarearchitektur des TSN im<br />

Detail vorgestellt. Als Basis für das System wird eCos mit einer minimalen Konfiguration<br />

gewählt. Darauf aufbauend wurden alle Services und Treiber hinzugefügt, die für den TSN<br />

benötigt werden. Abbildung 4.1 zeigt die Architektur im Überblick.<br />

Management Thread<br />

Application<br />

eCos<br />

Driver/Services<br />

Sensor<br />

Thread<br />

Sensor API<br />

Sensor<br />

Protocol<br />

Bridge<br />

Thread<br />

LwIP<br />

PPP<br />

KeyExchange<br />

Thread<br />

CryptAPI<br />

GPIO drv SPI drv UART drv<br />

MMIO drv<br />

TSN<br />

Hardware<br />

GPIO SPI UART<br />

ECC<br />

SHA1<br />

AES<br />

ext.<br />

Hardware<br />

PIR<br />

Sensor<br />

Accelerator<br />

Sensor<br />

802.15.4<br />

Radio<br />

Bluetooth<br />

Radio<br />

Abbildung 4.1: Softwarearchitektur des TSN<br />

Die Module des TSN lassen sich in zwei Funktionsgruppen unterteilen. Dies ist zum einen<br />

die Sensorik des Knotens. Hierzu gehört der Sensor-Thread und das SensorAPI inklusive<br />

der zugehörigen Treiber. Der zweite Teil umfasst das Sensor-Protokoll, den lwIP-Stack,<br />

PPP und das CryptAPI mit den zugehörigen Threads. Diese Funktionsgruppe ist für die<br />

Weiterleitung der Sensordaten aus dem 802.15.4 in ein TCP/IP-Netzwerk verantwortlich.<br />

Hierbei werden die Daten mittels des CryptAPI verschlüsselt. Die Schlüsselaushandlung<br />

übernimmt der KeyExchange-Thread. Für die Steuerung der Threads ist der Management-<br />

Thread verantwortlich.<br />

Bis auf den lwIP-Stack und PPP, welche bereits Bestandteil von eCos sind, wurden alle<br />

Komponenten der Architektur im Rahmen des TSN-Projektes implementiert. Hierbei wurden<br />

Frameworks und APIs erstellt, die entsprechend den letztendlichen Anforderungen an<br />

den TSN im Detail implementiert werden müssen.


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

4.1 Gerätetreiber<br />

Bei der Beschreibung von eCos im Kapitel 3.1 wurde bereits erwähnt, dass von Gaisler<br />

Aeroflex ein Portierung für den LEON2Prozessor erstellt wurde. Diese Portierung umfasst<br />

im Wesentlichen den HAL für den Prozessor. Im Rahmen des TSN-Projektes war es notwendig,<br />

zusätzliche Treiber für die Peripheriegeräte zu erstellen. Hierzu gehören Treiber<br />

für die seriellen Schnittstellen UART und SPI, für GPIO und für das memory-like Interface<br />

der kryptografischen Komponenten.<br />

Dieser Abschnitt enthält eine Beschreibung der im Rahmen des TSN-Projektes zu eCos<br />

hinzugefügten Treiber. eCos unterstützt eine Vielzahl zusätzlicher Peripheriegeräte für die<br />

bereits Treiber existieren. Eine Beschreibung dieser Treiber ist nicht Bestandteil dieses<br />

Abschnittes, hier sei auf die Dokumentation von eCos [15] verwiesen.<br />

4.1.1 UART Treiber<br />

Der LEON2-Prozessor verfügt, wie in Abbildung 2.1 dargestellt, über zwei UART-Schnittstellen.<br />

An eine dieser Schnittstellen wird das Bluetooth-Modul angeschlossen. Eine Erläuterung<br />

hierzu erfolgt im Abschnitt 4.3.3. Die Schnittstelle wird durch den PPP Netzwerk-<br />

Layer für die Übertragung der Netzwerkpakete an die Basisstation verwendet.<br />

In der Portierung von Gaisler Aeroflex wurde die UART1 als Diagnoseschnittstelle genutzt.<br />

Diese Schnittstelle kann über /dev/haldiag geöffnet und verwendet werden. Allerdings<br />

ist die Hardware nur eingeschränkt nutzbar, da Lesezugriffe das System blockieren und<br />

nicht beliebige Zeichen übertragen werden können. Aus diesem Grund kann der vorhandene<br />

Treiber nicht genutzt werden und wird daher durch einen neuen Treiber ersetzt, welcher<br />

das in Abschnitt 3.1.2 beschriebene Interface in vollem Umfang unterstützt.<br />

Die Implementierung des Treibers ist in den Quellen von eCos im Verzeichnis devs/serial/sparc/leon/<br />

zu finden. Das Package ist Bestandteil des LEON2-Hardware und<br />

kann nur zusammen mit dieser konfiguriert werden. Die Konfiguration des Treibers ist im<br />

eCos Configuration Tool unter<br />

I/O sub-system<br />

Serial device drivers<br />

SPARC Leon2 serial device drivers<br />

SPARC Leon2 serial CON1 port driver<br />

SPARC Leon2 serial CON2 port driver<br />

zu finden. Jede UART-Schnittstelle kann im Konfigurationswerkzeug separat aktiviert und<br />

deaktiviert werden. Darüber hinaus lässt sich festlegen, über welchen Verzeichniseintrag<br />

das Gerät angesprochen werden kann. Zusätzlich existiert eine Option für die Größe eines<br />

Zwischenpuffers. Dieser Puffer wird für den Interrupt-basierten Betrieb der Schnittstelle<br />

benötigt. Im Interrupt-Handler der Schnittstelle werden, bei Vorhandensein des Puffers, die<br />

58


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Daten vom Gerätespeicher in den Puffer kopiert. Die Anwendung liest die Daten in diesem<br />

Fall nur noch aus dem Puffer und nicht mehr direkt aus dem Gerätespeicher. Wenn der<br />

Puffer voll ist und weiterhin Daten eintreffen, werden diese verworfen. Die Verwendung<br />

eines Puffers hat den Vorteil, dass hierin wesentlich mehr Daten zwischengespeichert<br />

werden können als im Gerätespeicher und somit der Datenverlust reduziert werden kann.<br />

Über die Funktion serial_set_config() können die Parameter der Schnittstelle verändert<br />

werden. Hierbei unterstützt das API von eCos jedoch mehr Funktionen als die Hardware<br />

des LEON2. So können hierüber die folgenden Parameter verändert werden.<br />

• Baudrate<br />

• Parität (None, Even und Odd)<br />

• Flowcontrol<br />

Die Datenbreite (8 Bit) und die Anzahl der Stoppbits (1) ist nicht frei konfigurierbar. Eine<br />

andere Konfiguration dieser Parameter lässt die Hardware des LEON2 nicht zu.<br />

4.1.2 SPI Treiber<br />

Neben den, im Abschnitt 4.1.1 beschriebenen UART-Schnittstellen, verfügt der LEON2-<br />

Prozessor über eine SPI-Schnittstelle zum Anschluss von maximal drei Peripheriegeräten.<br />

Die Schnittstelle wird, wie in Abbildung 2.1 dargestellt, für die 802.15.4 Module und für den<br />

Beschleunigungssensor verwendet.<br />

Die von Gaisler Research zur Verfügung gestellten eCos Quellen beinhalten keinen SPI-<br />

Treiber. Die Implementierung musste vollständig im Rahmen des TSN-Projektes erfolgen.<br />

Als Basis für den Treiber wurde der generische IO-Treiber von eCos verwendet. Dieser<br />

stellt Funktionen zum Lesen und zum Schreiben von Daten und zum Konfigurieren der<br />

Schnittstelle bereit. Der Zugriff auf das Gerät erfolgt wiederum über ein zeichenorientiertes<br />

Gerät, welches mittels der Funktion cyg_io_lookup() angefordert werden kann.<br />

Anschließend kann die Applikation mit den Lese- und Schreibfunktionen Daten senden<br />

und empfangen. Das Einstellen der Schnittstellenparameter erfolgt mittels der Funktion<br />

cyg_io_set_config().<br />

Der SPI-Treiber ist im Verzeichnis devs/spi/sparc/leon/ in die eCos Quellen integriert.<br />

Die Konfiguration ist im Konfigurationswerkzeug unter den folgenden Einträgen zu<br />

finden:<br />

I/O sub-system<br />

SPI support<br />

Sparc LEON2 SPI drivers<br />

Enable support for SPI<br />

Enable Chip Select 0<br />

Device name for Sparc LEON2 SPI CS0<br />

Enable Chip Select 1<br />

Device name for Sparc LEON2 SPI CS1<br />

59


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Enable Chip Select 2<br />

Device name for Sparc LEON2 SPI CS2<br />

Das SPI-Modul unterstützt, wie in Abbildung 4.2 dargestellt, bis zu drei Slave-Geräte, die<br />

über das Chip Select Signal (CSn) adressiert werden. Der LEON2-Prozessor agiert immer<br />

als Master und legt fest, zu welchem Slave die Daten übertragen werden sollen. Ein SPI-<br />

Slave kann keinen Datentransfer initiieren, er kann nur auf Anforderungen des Masters<br />

reagieren 1 . Über den Eintrag Enable Chip Select n des Konfigurationswerkzeuges kann<br />

der Nutzer festlegen, ob ein Slave für diese Select Leitung existiert. Beim TSN werden nur<br />

CS0 und CS1 verwendet.<br />

Die Datenübertragung erfolgt über die Leitungen MISO (Master In Slave Out) und MOSI<br />

(Master Out Slave In). Mit jedem Takt auf der Clock Leitung CLK wird ein Bit vom Master<br />

an den Slave und ein Bit vom Slave an den Master übertragen.<br />

CLK<br />

MISO<br />

MOSI<br />

CS0<br />

SPI<br />

Slave 0<br />

SPI<br />

Master<br />

CLK<br />

MISO<br />

MOSI<br />

CS0<br />

CS1<br />

CS2<br />

CLK<br />

MISO<br />

MOSI<br />

CS1<br />

SPI<br />

Slave 1<br />

CLK<br />

MISO<br />

MOSI<br />

CS2<br />

SPI<br />

Slave 2<br />

Abbildung 4.2: SPI Chip Select<br />

4.1.3 MMIO Treiber<br />

Wie in [27] beschrieben, werden die kryptografischen Module des LEON2-Prozessors über<br />

ein Memory Mapped Input Output (MMIO) Interface eingebunden. Zugriffe auf die Module<br />

werden in Speicherschreib- und Speicherleseoperationen gekapselt. Die verschiedenen<br />

Einheiten/Register der Module sind jeweils an spezifischen Adressen im IO-Bereich des<br />

LEON2-Prozessors 2 eingeblendet.<br />

1 Zur Signalisierung vom SPI-Slave zum Master wird ein Pin des TSN als IRQ verwendet. Der Master kann<br />

nach dem Empfang des Interrupt den Status und die Nachricht beim Slave erfragen.<br />

2 Der virtuelle Speicher des LEON2 wird in mehrere Bereiche unterteilt, die jeweils eine andere Hardware-<br />

Einheit adressieren. Der IO-Bereich beginnt an der Adresse 0x20000000 und der physische RAM an<br />

Adresse 0x40000000.<br />

60


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Der Zugriff auf diese Bereiche erfolgt über den MMIO Treiber. Die Implementierung des<br />

Treibers befindet sich in dem Verzeichnis io/mmio und kann über die Option Memory<br />

mapped I/O device drivers konfiguriert werden. Da der Treiber zunächst nur einen strukturierten<br />

Zugriff auf einen beliebigen Speicherbereich bereitstellt, ist dieser nicht an die<br />

LEON2-Hardware und damit an das zugehörige Template gebunden.<br />

Eine Instanz des Treibers kann über /dev/memio/ angefordert werden.<br />

Ein direkter Zugriff auf /dev/memio ist nicht möglich, es ist immer die zusätzliche<br />

Angabe eines Instanznamens notwendig. Nach dem Anfordern der Instanz kann der Bereich<br />

mit den in Tabelle 4.1 beschriebenen Kommandos konfiguriert werden. Anschließend<br />

können mittels cyg_io_read() und cyg_io_write() Daten in Bereich geschrieben<br />

oder von dort gelesen werden.<br />

Der MMIO-Treiber bildet die Basis für die Zugriffe auf die kryptografischen Module des<br />

LEON2-Prozessors. Somit sind keine Treiber für die einzelnen Module notwendig. Das<br />

CryptAPI aus Abschnitt 4.2.1 greift über den MMIO Treiber direkt auf die kryptografischen<br />

Module der CPU zu.<br />

Kommando<br />

CYG_IO_CONFIG_MEMIO_ADRBASE<br />

CYG_IO_CONFIG_MEMIO_LENGTH<br />

CYG_IO_CONFIG_MEMIO_ENABLE_CACHE<br />

CYG_IO_CONFIG_MEMIO_CONTEXT<br />

CYG_IO_CONFIG_MEMIO_GET_ALL_INSTANCES<br />

Beschreibung<br />

Setzt die Basisadresse des Speicherbereichs<br />

Legt die Größe des<br />

Speicherbereichs fest<br />

Aktiviert das Caching der Daten<br />

Erlaubt das Setzen der Option<br />

Address, Length und Cache mit<br />

einem Aufruf<br />

Gibt ein Array auf alle im Treiber<br />

registrierten Bereiche zurück<br />

Tabelle 4.1: Konfigurationskommandos des MMIO Treibers<br />

4.1.4 General Purpose Input/Output (GPIO) Treiber<br />

Der LEON2 verfügt über 32 I/O Pins, welche in 16-Low und 16-High-Pins aufgeteilt werden.<br />

Die oberen 16 Pins (High-Pin) sind nur nutzbar, wenn der Speicherzugriff im 8-bit<br />

oder im 16-bit Modus erfolgt und der SD-Ram Controller nicht genutzt wird. Beim Leon-2<br />

des TSN sind die oberen 16 Pins für die Chip-interne Nutzung vorgesehen, so dass sie<br />

nicht aus dem Chip-Package geführt sind. In eCos können aus diesem Grund lediglich<br />

die unteren 16 Pins über das GPIO-Treiber Interface angesprochen werden. Die meisten<br />

der verfügbaren GPIOs werden für die UART-Schnittstellen des TSN verwendet und wäre<br />

nur verfügbar, wenn man auf diese Schnittstellen verzichtet [3]. Die freien GPIOs werden<br />

für die Anbindung des passiven Infrarotsensors und zum Steuern des Bluetooth-Moduls<br />

verwendet.<br />

Um eine einheitliche Nutzung der Schnittstelle zu gewährleisten, werden alle Pins durch<br />

einen Treiber verwaltet. Der Treiber ist Bestandteil des eCos-Kerns und kann über die Op-<br />

61


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

tion ”Enable gpio support” im Konfigurationswerkzeug aktiviert werden. Der Treiber bietet<br />

Funktionen zum Konfigurieren der GPIOs, zum Auslesen und des Setzen des Levels und<br />

zum Aktiviere sowie Deaktivieren eines Interrupts an.<br />

Mittels der Funktion hal_gpio_set_direc() kann die Richtung des GPIOs festgelegt<br />

werden. Ein GPIO kann als Ausgang oder als Eingang genutzt werden. Ist der GPIO als<br />

Eingang definiert, kann mittels der Funktion hal_gpio_get() das aktuelle Level des Pins<br />

erfragt werden. Das Setzen des Levels erfolgt mittels hal_gpio_set(). Das Auslesen<br />

und Setzen des GPIO-Levels ist jederzeit möglich.<br />

Der LEON2 Prozessor unterstützt bis zu vier Interrupt-Vektoren für seine 16 GPIO-Pins.<br />

Für das Konfigurieren des Interrupt-Handlers wird Funktion hal_gpio_cfg_irq() bereitgestellt.<br />

Die Funktion wählt einen freien Interrupt-Vektor aus und registiert die übergebene<br />

callback-Funktion. Sind bereits alle Interrupt-Vektoren belegt, wird ein Fehler zurückgegeben.<br />

Beim Konfigurieren des Interrupts kann zusätzlich festgelegt werden, ob der<br />

Interrupt bei einem Flankenwechsel (edge-triggered) oder bei einem bestimmten Level<br />

(level-triggered) auslösen soll. Über einen weiteren Parameter wird das Level festgelegt.<br />

Bei einem edge-triggered Interrupt legt das Level fest, ob dieser bei einer fallenden (lowlevel)<br />

oder steigenden Flanke (high-level) ausgelösen soll.<br />

Das Aktivieren des Interrupts erfolgt mittels der Funktion hal_gpio_enable_gpio().<br />

Nach der Ausführung dieser Funktion, wird der Interrupt-Hander aufgerufen, wenn ein der<br />

Konfiguration entsprechender Interrupt aufgetreten ist. Das Deaktivieren des Interrupt erfolgt<br />

mittels der Funktion hal_gpio_disable_gpio(). Zum Reaktivieren des Interrupts<br />

muss dieser nicht erneut konfiguriert werden. Stattdessen ist es ausreichend, wenn die<br />

Funktion hal_gpio_enable_gpio() aufgerufen wird.<br />

4.2 Services<br />

Neben den im Abschnitt 4.1 eingeführten Treibern, wurde eCos um zwei zusätzliche Services<br />

erweitert. Die Services können von beliebigen eCos Applikationen verwendet werden.<br />

Hierzu gehört das CryptAPI, über welches die Hardware-beschleunigten kryptografischen<br />

Funktionen des LEON2-Prozessor angeboten werden, und das SensorAPI, welches<br />

eine einheitliche Schnittstelle für die Sensorik des TSN bietet.<br />

Die beiden Services können über die Packages CryptAPI und SensorAPI ausgewählt werden.<br />

Da sie von Hardwarefunktionen des TSN abhängig sind, sind sie an die LEON2-<br />

Hardware gebunden. In der Konfiguration des TSN tsn.ecc sind beide Packages aktiviert.<br />

4.2.1 CryptAPI<br />

Das CryptAPI stellt eine einheitliche Schnittstelle auf die kryptografischen Module des LE-<br />

ON2-Prozessors bereit. Die Implementierung ist jedoch nicht auf die Hardware-Funktionen<br />

62


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

beschränkt. Das API wurde so definiert, dass zur Laufzeit zusätzliche Algorithmen hinzugefügt<br />

und wieder entfernt werden können. Im Rahmen des TSN-Projektes wurden die<br />

folgenden Algorithmen in das API integriert:<br />

• AES, Software-Implementierung des AES,<br />

• AES_HW, Treiber für die AES-Einheit des LEON2,<br />

• SHA1, Treiber für die SHA1-Einheit des LEON2,<br />

• PRNG, Pseudo-Zufallszahlen Generator auf Basis der SHA1-Einheit des LEON2,<br />

• ECC, Treiber für die ECC-Einheit des LEON2,<br />

• ECDSA, Implementierung von ECDSA nach ANSI X9.62 auf Basis der SHA1- und<br />

der ECC-Einheit des LEON2 und<br />

• EL-Gamal, Implementierung von EL-Gamal nach ANSI X9.63 auf Basis der ECC-<br />

Einheit des LEON2.<br />

Die Implementierung des API befindet sich in dem Verzeichnis services/crypt_api<br />

und ist im Konfigurationswerkzeug direkt unter dem Punkt CryptAPI zu finden. Für den<br />

AES Algorithmus wurden die beiden Modi Electronic Code Book (ECB) und Cipher Block<br />

Chaining (CBC) implementiert, die separat in dem Konfigurationswerkzeug ausgewählt<br />

werden können.<br />

Registrieren von Crypto-Algorithmen<br />

Einleitend wurde erwähnt, dass zur Laufzeit des TSN Algorithmen hinzugefügt und entfernt<br />

werden können. Hierfür stellt das API die beiden Funktionen crypt_api_register()<br />

und crypt_api_unregister() zur Verfügung. Beim Anmelden eines Algorithmus wird<br />

der Funktion ein Objekt vom Type crypt_api_alg_t übergeben. Dieses enthält die Parameter<br />

und Verweise auf die Implementierung des Algorithmus. Zu den Parametern gehört<br />

dessen Name, die Blockgröße und die Schlüsselgröße. Der Name muss eindeutig<br />

sein, da über diesen später eine Instanz des Algorithmus angefordert wird.<br />

Ein Algorithmus kann erst dann aus dem System entfernt werden, wenn keine weitere<br />

Instanz geöffnet ist. Ein genauere Erläuterung hierzu erfolgt im nächsten Abschnitt.<br />

CryptAPI-Verwendung<br />

Die Algorithmen des CryptAPI werden über ein einheitliches Interface aufgerufen, so dass<br />

in einer Applikation Algorithmen des gleichen Typs (Verschlüsselung, Hash oder Signatur)<br />

leicht gegeneinander ausgetauscht werden können.<br />

Für der Nutzung des Algorithmus muss mittels der Funktion crypt_api_lookup() die<br />

ID des Algorithmus ermittelt werden. Über diese ID kann mittels crypt_api_open() eine<br />

Instanz angefordert werden. Wenn eine Applikation eine Instanz angefordert hat, kann der<br />

Algorithmus nicht mehr entfernt werden, bis diese Instanz mittels crypt_api_close()<br />

freigegeben wird. Die Funktion crypt_api_open() gibt die Adresse eines Objektes vom<br />

63


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Typ crypt_api_ctx_t zurück. In diesem Objekt wird der aktuelle Zustand gespeichert.<br />

Damit ist es möglich, mehrere Instanzen eines Algorithmus zu öffnen und gleichzeitig zu<br />

nutzen. Die Funktion erwartet als Parameter den zu verwendenden Schlüssel. Um den<br />

Schlüssel zu tauschen ohne die Instanz freizugeben, kann die Funktion crypt_api_-<br />

reopen() verwendet werden. Sie setzt außerdem den internen Zustand des Algorithmus 3<br />

zurück.<br />

Die Ausführung der Crypto-Funktion wird mittels der Funktion crypt_api_transform()<br />

initiiert. Sie erwartet einen Crypto-Datencontainer für die Input- und die Output-Daten sowie<br />

für den Initialisierungsvektor. Abhängig vom Typ des Algorithmus bestimmt sich die<br />

Größe des jeweiligen Datencontainers bzw. ob dieser angegeben werden muss.<br />

Verwaltung von Crypto-Datencontainern<br />

Die Funktionen des CryptAPI erwarten die Daten in Form eines Crypto-Datencontainers,<br />

welcher durch die Struktur crypt_api_data_t beschrieben wird. Die Struktur enthält<br />

ein Element len, das die Größe des Bereiches angibt, und ein Element data, welches<br />

auf die Daten des Objektes verweist.<br />

Für das Anfordern und das Freigeben eines Crypto-Datencontainers werden die Funktionen<br />

crypt_api_alloc() und crypt_api_free() bereitgestellt.<br />

4.2.2 SensorAPI<br />

Der TSN verfügt mit dem Beschleunigungs- und dem passiven Infrarotsensor über zwei<br />

Sensorquellen, die eine Überwachung des eigenen Zustands gewährleisten sollen. Die<br />

Anbindung erfolgt, je nach Sensor, über SPI (Beschleunigungssensor) und über GPIO<br />

(PIR-Sensor). Im Rahmen des Projektes wurde für beide Sensoren Treiber entwickelt,<br />

die eine einfache Programmierschnittstelle für die Sensorik bereitstellt. Die Nutzung der<br />

Schnittstelle ist exemplarisch im Sensorik Thread, eine Beschreibung hierzu erfolgt im Abschnitt<br />

4.4.3, umgesetzt.<br />

4.3 Protokollstapel<br />

Dieser Abschnitt beschreibt die Protokollstapel des TSN. Der TSN agiert als Gateway zwischen<br />

zwei verschiedenen Netzwerken mit separaten Protokollstapeln und kommuniziert<br />

damit.<br />

1. mit der Basisstation und<br />

3 Bei Hash-Algorithmen ist ein crypt_api_reopen() nach jeder Signaturberechnung notwendig.<br />

64


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

2. mit den Sensorknoten.<br />

In Abbildung 4.3 sind die Protokollstapel des TSN dargestellt. Entsprechend der beiden<br />

Endpunkte sind zwei Stacks, die über den Bridge Thread mit einander verbunden sind,<br />

vorhanden. Das 802.15.4 Module stellt die Verbindung zu den Sensorknoten und das<br />

802.15.1 Modul die Verbindung zur Basisstation her.<br />

Bridge Thread<br />

PPP<br />

Thread<br />

BluezCfg<br />

Thread<br />

Sensor<br />

Protocol<br />

SPI<br />

802.15.4<br />

Module<br />

lwIP<br />

PPP<br />

UART<br />

802.15.1<br />

Module<br />

Abbildung 4.3: Die Protokollstapel des TSN<br />

Für die Kommunikation des TSN mit der Basisstation wurde gefordert, dass TCP als zuverlässiges<br />

Transportprotokoll verwendet werden soll. Hieraus ergibt sich die Verwendung von<br />

IP für die Umsetzung der Netzwerkschicht. In eCos existiert mit lwIP eine kleine und leichtgewichtige<br />

TCP/IP Implementierung, die im Rahmen des Projektes verwendet wird. Für<br />

die Datenübertragung gemäß 802.15.1 (Bluetooth) werden Bluebear-Module von Lesswire<br />

verwendet, die direkt über eine serielle Schnittstelle angesprochen werden können<br />

und damit den Bluetooth-Stack vollständig kapseln. Als Verbindungsschicht zwischen dem<br />

Bluetooth Module und dem TCP/IP-Stack wird PPP verwendet.<br />

Für die Kommunikation zwischen dem TSN und den Sensorknoten wurde die zum Einsatz<br />

kommende Funktechnik, hier IEEE 802.15.4, verbindlich festgelegt. Als Hardware wurden<br />

Module von Jennic ausgewählt, um eine möglichst einfache Kommunikation zu den Knoten<br />

zu ermöglichen. Die Module werden über SPI in eCos eingebunden, hierfür wird der<br />

in Abschnitt 4.1.2 beschriebene Treiber verwendet. Als Transport- und Netzwerkprotokoll<br />

wurde flooding iSense definiert.<br />

4.3.1 lightweight IP Stack<br />

Als TCP/IP Stack Implementierung kommt, der bereits angesprochene, lwIP-Stack zum<br />

Einsatz. Der Stack ist sehr klein und lässt sich auf wenige Protokoll des TCP/IP-Stacks<br />

begrenzen. Der Stack unterstützt die folgenden Protokolle:<br />

• IPv4 ( Internet Protokoll der Version 4),<br />

65


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

• TCP (Transmission Control Protocol),<br />

• UDP (User Datagram Protocol),<br />

• ARP (Address Resolution Protocol) und<br />

• ICMP (Internet Control Message Protocol).<br />

Die Protokolle DHCP und SLIP sind zwar Bestandteil der Implementierung werden jedoch<br />

im TSN nicht verwendet. Ebenso wird auf die Unterstützung von Ethernetgeräten verzichtet.<br />

4.3.2 Point to Point Protocol (PPP)<br />

Das PPP ist ebenfalls Bestandteil des lwIP-Package. Es wird benötigt, um die Datenpakete<br />

aus dem Netzwerkstack über die serielle Schnittstelle des Bluetooth Moduls zu übertragen.<br />

Der Einsatz von PPP ermöglicht eine standardisiert Anbindung an externe Systeme.<br />

Das PPP ist ein Schicht 2 Protokoll des OSI-Models. Auf der Schicht 1 werden vom PPP<br />

zeichenorientierte Geräte verwendet. Das lwIP-Modul nutzt hierfür eine serielle Schnittstelle<br />

von eCos. Die Schnittstelle muss bereits beim Konfigurieren des Systems festgelegt<br />

werden. Beim Initialisieren des PPP-Moduls wird die Schnittstelle dann automatisch mittels<br />

sio_open() geöffnet. Eine Rekonfigurierung zur Laufzeit ist nicht vorgesehen.<br />

Mittels PPP kann zusätzlich eine Authentifizierung in den TSN integriert werden. Bei jedem<br />

Verbindungsaufbau fordert der PPP-Server vom Client eine gültige Nutzernamen-<br />

Passwort-Kombination an. Darüber hinaus enthält PPP bereits Mechanismen für Keep Alive<br />

(LCP Echo) und zum Konfigurieren der Netzwerkparameter.<br />

4.3.3 Bluetooth Stack<br />

Die Kommunikation zur Basisstation erfolgt mittels Bluetooth IEEE 802.15.1. Um die Komplexität<br />

der Software auf dem TSN möglichst gering zu halten, wird für die Übertragung<br />

ein Bluetooth-Modul von Lesswire [30] genutzt. Das Modul kapselt den Bluetooth-Stack<br />

vollständig und bietet für die Kommunikation ein UART-Interface an.<br />

Im Folgenden wird das Modul kurz vorgestellt und die Integration in eCos beschrieben.<br />

Lesswire Module Bluebear SP-S<br />

In den TSN wird das Bluebear SP-S Module von Lesswire integriert. Das Modul bietet ein<br />

Serial Port Profile (SPP) zur Datenübertragung und zur Konfiguration an. Der Bluetooth-<br />

Stack wird vollständig durch das Modul gekapselt, so dass der Zugriff ausschließlich über<br />

die serielle Schnittstelle erfolgt. Das Modul verwendet das ISM Band (2,4 - 2,4835 GHz)<br />

womit eine theoretische Datenrate von 3 MBit/s möglich wäre. Die maximale Datenrate<br />

wird jedoch durch die serielle Schnittstelle auf 115 kBit/s begrenzt.<br />

66


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Das Modul unterstützt die Bluetooth-Protokolle Logical Link Control and Adaption Layer<br />

Protocol (L2CAP) und Service Discovery Protocol (SDP). Damit ist es zu jedem Bluetooth-<br />

Gerät, welches diese Protokolle anbietet und das SPP nutzt, kompatibel. Somit können für<br />

die Basisstation standardisierte bzw. marktübliche Geräte verwendet werden.<br />

Zur Sicherung der Bluetooth-Verbindung unterstützt das Modul einen Pin-geschützten Verbindungsaufbau<br />

und die 128-Bit-Verschlüsselung nach dem Bluetooth-Standard. Diese<br />

Verschlüsselung ist an SAFER+ angelehnt [46].<br />

Initialisierung und Datenübertragung<br />

Für die Datenübertragung wird die Schnittstelle UART0 des LEON2-Prozessor verwendet.<br />

Die Kommunikation mit der Schnittstelle erfolgt über den in Abschnitt 4.1.1 beschriebenen<br />

Treiber. Die Schnittstelle wird mit den folgenden Parametern konfiguriert:<br />

• 38400 baud,<br />

• 8 Datenbits,<br />

• 1 Stoppbit und<br />

• keine Parität.<br />

Der Zugriff auf die serielle Schnittstelle erfolgt über den PPP-Layer des TCP/IP-Stacks. Der<br />

PPP-Layer verwendet direkt read- und write-Funktionen des Treibers. Weitere Funktionen<br />

sind nicht notwendig.<br />

Wie in Abschnitt 4.3.2 beschrieben, wird die serielle Schnittstelle mittels der Funktion<br />

sio_open() geöffnet. Die Funktion gibt einen Zeiger auf ein Objekt vom Typ cyg_io_<br />

handle_t zurück. Über dieses kann anschließend die serielle Schnittstelle konfiguriert<br />

werden. Das Konfigurieren muss vor dem Öffnen der PPP-Verbindung erfolgen. Hierfür<br />

können die im Abschnitt 3.1.2 beschriebenen Funktionen verwendet werden. In der aktuellen<br />

Implementierung des TSN ist es nicht notwendig die Parameter der seriellen Schnittstelle<br />

zu ändern.<br />

Konfigurationsmodus<br />

Für das Setzen der Bluetooth-Parameter verfügt das Modul, wie einleitend erwähnt, über<br />

ein zusätzliches SPP. Für den Zugriff auf das Konfigurations-SPP muss die Datenverbindung<br />

unterbrochen und das Konfigurationsprofil geöffnet werden. Damit ist es möglich,<br />

dass Modul über die Basisstation zu konfigurieren.<br />

Zusätzlich kann das Konfigurieren über die serielle Schnittstelle erfolgen. Hierzu muss das<br />

Modul zuvor über einen I/O-Pin in den Konfigurationsmodus versetzt werden. Diese Leitung<br />

verbindet den Pin CONFMOD des Bluebear-Moduls mit einem GPIO des LEON2-Prozessors.<br />

Das Umschalten in den Konfigurationsmodus erfolgt durch einen Flankenwechsel<br />

67


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

auf der Leitung. Anschließend kann das Modul über AT-Kommandos konfiguriert werden.<br />

Über dieses Interface können die in Tabelle 4.2 beschriebenen Parameter gesetzt werden.<br />

Kommando<br />

Beschreibung<br />

AT name Bluetooth-Name<br />

AT pin<br />

Anzeigen und Setzen der Pin<br />

AT security Anzeigen und Ändern des Security-Modus<br />

AT setdefaults Rücksetzen auf default-Einstellungen<br />

AT slaveaddress MAC-Adresse<br />

AT uart Einstellen der UART-Parameter 4<br />

AT exit<br />

Neustarten des Moduls und übernehmen der Parameter<br />

Tabelle 4.2: AT-Kommandos des Bluebear SP-S<br />

Die aktuelle Version der Firmware des TSN das Konfigurieren des Bluebear-Moduls über<br />

die serielle Schnittstelle nicht möglich. Stattdessen wird eine statische Konfiguration verwendet.<br />

So ist die serielle Verbindung auf die Parameter 38.400 Baud 8N1 und die Pin auf<br />

1234 festgelegt. Änderungen können über die Basisstation vorgenommen werden. Hierbei<br />

ist jedoch zu achten, dass die Parameter der serielle Verbindung nicht geändert werden<br />

können, da sie fest mit der Implementierung der Firmware des TSN verknüpft sind.<br />

4.3.4 Sensor Protokoll<br />

Für die Kommunikation mit den Sensorknoten wird ein Protokoll entsprechend dem Standard<br />

IEEE 802.15.4 verwendet. Dieser Standard, der erstmals 2003 veröffentlicht wurde,<br />

umfasst die Spezifikation eines PHY-Layers und eines MAC-Layers des OSI-Referenzmodells.<br />

Im Jahr 2006 erschien eine revidierte Fassung, die Verbesserungen und Ergänzungen<br />

gegenüber dem Vorgänger enthält. In der Erweiterung aus dem Jahr 2007 werden<br />

zwei zusätzliche, alternative Physical Layer definiert [54].<br />

Auf der Vermittlungsschicht wird für 802.15.4 das ZigBee-Protokoll empfohlen, dieses soll<br />

eine Interoperabilität zwischen Komponenten verschiedener Hersteller gewährleisten. Im<br />

Rahmen des TSN-Projektes ist eine Kompatibilität zu den iSense-Knoten gewünscht. Die<br />

Knoten verwenden Module von Jennic, jedoch ohne die ZigBee-Erweiterung, so dass auf<br />

der Vermittlungsschicht ein proprietäres Protokoll verwendet wird.<br />

Da im Rahmen des Projektes die Koppelung des TSN mit den iSense-Knoten nicht möglich<br />

war, wurde eine proprietäre Implementierung für das Sensorprotokoll erstellt. Diese ist<br />

im User Manual des TSN dokumentiert. Sie erlaubt das Weiterleiten von den Daten der<br />

Sensorknoten und von Alarmnachrichten des TSN an eine Basisstation.<br />

4 Die Parameter beziehen sich nur auf SPP-Data. Für SPP-Config wird immer mit 115200 Baud 8N1 verwendet<br />

68


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

4.4 TSN Threads<br />

Bereits im Abschnitt 3.1.1 wurde erwähnt, dass unter eCos mehrere parallele Ausführungspfade<br />

implementiert werden können. Für den TSN wird dies für die verschiedenen<br />

Kernaufgaben empfohlen. So sollten neben dem Bridge- noch ein Schlüsselaustausch-,<br />

ein Sensorik- und ein Management-Thread erstellt werden.<br />

Dieser Abschnitt gibt einen kurzen Überblick über die vier mögliche Threads und beschreibt<br />

deren Funktionsweisen. Die im Rahmen des TSN-Projektes erstellten Applikationen<br />

implementiert nur einen Teil der Threads. Eine vollständige Implementierung ist noch<br />

zu erstellen, wenn die Integration des TSN in ein reales Sensornetz erfolgt.<br />

4.4.1 Bridge Thread<br />

Der Bridge Thread stellt die Verbindung zwischen den beiden Netzwerk-Stacks her. Er<br />

empfängt von den Sensorknoten die Sensordaten und leitet sie an die Basisstation weiter.<br />

Zusätzlich können Konfigurationsdaten bzw. neue Parameter von der Basisstation über die<br />

Bridge Applikation an die Sensorknoten verteilt werden.<br />

Darüber hinaus ist der Bridge Thread für die folgenden Funktionen verantwortlich:<br />

• Verbindungsaufbau zur Basisstation,<br />

• Ver- und Entschlüsseln der Sensordaten,<br />

• Überwachung der Sensorknoten und<br />

• Keep-Alive zur Basisstation.<br />

Der Verbindungsaufbau zur Basisstation ist immer nach dem Neustart des TSN bzw. des<br />

Kommunikationsmoduls notwendig. Hierbei erfolgt der Bluetooth-Verbindungsaufbau und<br />

die Einwahl bei der Basisstation mittels PPP. Zur Realisierung eines Keep-Alive ist dies in<br />

regelmäßigen Abständen notwendig. Das Keep-Alive signalisiert der Basisstation, das der<br />

TSN noch verfügbar ist. In einem initialen Schritt können hier für die Keep-Alive Nachrichten<br />

des Link Control Protocol (LCP) von PPP genutzt werden.<br />

Zusätzlich ist der TSN für die Überwachung der Sensorknoten verantwortlich. Hier wird,<br />

wie zur Basisstation, ein ständiges Keep-Alive durchgeführt. Ist ein Knoten nicht mehr<br />

erreichbar, wird dies der Basisstation gemeldet.<br />

69


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

4.4.2 Schlüsselaustausch Thread<br />

Der Schlüsselaustausch Thread ist für das Aushandeln von Schlüsseln verantwortlich. Im<br />

Rahmen des Projektes wurde eine Schlüsselaushandlung mittels Hashed Random Preloaded<br />

Subsets (HARPS) [43] für den TSN umgesetzt.<br />

4.4.3 Sensorik Thread<br />

Der Sensorik Thread ist für die Auswertung der Sensordaten des TSN zuständig. Der TSN<br />

verfügt mit dem Beschleunigungs- und dem passiven Infrarotsensor über zwei Sensorquellen.<br />

Die Sensorquellen werden über das im Abschnitt 4.2.2 beschriebene SensorAPI<br />

angesprochen.<br />

Die Sensoren liefern lediglich Rohdaten, die vom Sensorik Thread ausgewertet werden<br />

müssen. Der Thread entscheidet anhand der Konfiguration des TSN, welche Sensorwerte<br />

als zulässig bzw. als unzulässig gewertet werden sollen. Nach der Erkennung von unzulässigen<br />

Werten wird von einer versuchten Manipulation bzw. Gefährdung des TSN ausgegangen.<br />

Derartige Ereignisse müssen der Basisstation gemeldet werden. Zusätzlich sind<br />

geeignete Schutzmaßnahmen für den TSN zu ergreifen. Denkbar wäre das Löschen der<br />

vorgehaltenen Schlüssel.<br />

Um fehlerhafte Sensorwerte und damit Fehlalarme zu vermeiden, enthält der Sensorik<br />

Thread den in Abbildung 4.4 dargestellten Zustandsautomaten. Im Normalzustand werden<br />

die Sensordaten alle n Sekunden von den Sensoren erfragt. Entsprechen sie den<br />

Vorgaben, kehrt der Automat in den Startzustand zurück, d.h. der Thread schläft für n Sekunden.<br />

Liegt der Wert in der Nähe des unzulässigen Bereiches, geht der Thread in den<br />

Bereitschaftszustand über. In diesem Zustand werden die Sensordaten in einem geringeren<br />

Intervall erfasst. Kehren sie in den Normalbereich zurück, wird der Bereitschaftszustand<br />

wieder verlassen. Bleiben die Werte über einen längeren Zeitraum in diesem Grenzbereich,<br />

so wird dies ebenfalls als unzulässiger Bereich gewertet.<br />

Die Werte für den Übergang in den Bereitschaftszustand und die Verweildauer in diesem<br />

Zustand sollten, zusammen mit dem zulässigen und dem unzulässigen Wertebereich für<br />

de Sensordaten, Bestandteil der Sensorparameter sein. Es ist sinnvoll diese unabhängig<br />

von der Firmware des TSN zu speichern, um bei stark veränderten Umweltbedingungen<br />

TSNs mit verschiedenen Parametern einzusetzen.<br />

4.4.4 Management Thread<br />

Die Steuerung der TSN-Software wird von dem Management Thread übernommen. Hierbei<br />

handelt es sich auch um den Thread, der von der Funktion cyg_user_start() gestartet<br />

und initialisiert wird. Wie in Abbildung 4.5 dargestellt, übernimmt der Thread direkt<br />

die Steuerung des Bridge-, des Schlüsselaustausch- und des Sensorik Threads. Hierzu<br />

70


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Normal Status<br />

sleeping<br />

n secs<br />

clear<br />

OnAlert<br />

counter<br />

fetch<br />

sensor<br />

data<br />

not<br />

reached<br />

ok<br />

data<br />

OnAlert<br />

OnAlert<br />

Status<br />

count<br />

max<br />

Alarm<br />

reached<br />

Alarm Status<br />

Abbildung 4.4: Zustandsautomat der Sensorüberwachung<br />

gehört das Starten und das Initialisieren der Threads, sowie die Verwaltung der Konfigurationsdaten.<br />

Management<br />

Thread<br />

Config<br />

Data<br />

Bridge<br />

Thread<br />

KeyExchange<br />

Thread<br />

Sensor<br />

Thread<br />

Abbildung 4.5: Management der TSN Threads<br />

In der aktuellen Implementierung wird die Konfiguration zusammen mit der Firmware abgelegt.<br />

Wie bereits in anderen Abschnitten erwähnt, sollte hier in weiterführenden Arbeiten<br />

ein gesicherter Update-Prozess integriert werden. Der Management Thread hat über das<br />

CryptAPI Zugriff auf die Crypto-Komponenten des TSN und verfügt damit über die Voraussetzungen<br />

für einen integritäts- und authentizitätsgesicherten Update-Prozess.<br />

71


5 Simulation und Messergebnisse<br />

5.1 Ziel<br />

Dieser Abschnitt beschreibt die Simulation und die reale Messungen der Leistungsaufnahme<br />

des TSN. Ein Vergleich von Simulation und Realität ist notwendig, da sich beide i.d.R.<br />

oft unterscheiden. Eine Simulation kann viele Einflussfaktoren nicht berücksichtigen, die<br />

zwangsläufig in der Praxis auftreten.<br />

5.2 Messaufbau<br />

Zunächst wurde für die Messung eine Platine modifiziert. Die beiden notwendigen Spannungen<br />

von 2,5 V und 3,3 V werden nicht durch den, auf der Platine integrierten, Spannungswandler<br />

bereitgestellt, sondern separat eingespeist. Dies hat den Vorteil, dass der<br />

Strom für beide Spannungen exakt bestimmt werden kann. Die Spannungen werden von<br />

einem Dual SourceMeter 2636 von Keithley [25] bereit gestellt. Im genutzten Messbereich<br />

bis 100 mA beträgt die Abweichung weniger als 1µA.<br />

Die beiden Funkmodule wurden von ihrer Spannungsversorgung getrennt, da diese die<br />

Messung erheblich verfälschen würden. Mit 3,3 V werden neben den Pads des TSN der<br />

Speicher (SRAM, Flash), der Beschleunigungssensor und dem der Quarzoszillator versorgt.<br />

Die Spannung von 2,5 V liegt ausschließlich an der Corespannung des TSN und an der<br />

Power-On-LED an. Die Power-On-LED benötigt ca. 2 mA, so dass vom Messwert 2mA<br />

abgezogen werden müssen, um den Strom für den die Corespannung zu bestimmen.<br />

Im Resetzustand 1 arbeitet lediglich der Quarzoszillator, so kann der Strom bestimmt werden,<br />

den der Quarzoszillator benötigt. Dieser beträgt ca. 5,9 mA. Des Weiteren beträgt der<br />

Strom für den Core ca. 40,3 mA. In diesem Zustand befindet sich der Chip im Ruhezustand,<br />

nur das Taktsignal wird an jedes Register geführt. Der hohe Wert zeigt, dass es<br />

sinnvoll ist, bei späteren Optimierungen auf das Clock-Gating zu setzen oder die Anzahl<br />

der Register zu reduzieren (siehe Abschnitt 6.2).<br />

1 Der Resettaster ist dauerhaft gedrückt


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

5.3 Messprogramm<br />

Die Messung der Leistungsaufnahme wurde exemplarisch für die Verschlüsselungsalgorithmen<br />

AES und ECC durchgeführt. Um diese möglichst exakt zu bestimmen, wurde jeweils<br />

ein Assemblerprogramm geschrieben, dass den maximalen Datendurchsatz beider<br />

Komponenten ermöglicht. Das Listing 5.1 zeigt den Code für die Ansteuerung des AES.<br />

Initial wird der Schlüssel in die notwendigen Register geschrieben. Da dieser Vorgang nur<br />

einmalig erfolgt, wurde an der Stelle auf die Optimierung in Assembler verzichtet. Anschließend<br />

werden in einer Endlosschleife die zu verschlüsselnden Daten geschrieben, 70 Takte<br />

gewartet und die nun verschlüsselten Daten ausgelesen. Das Programm wird bei seiner<br />

erstmaligen Ausführung aus dem SRAM geladen. Danach wird das Programm aus dem<br />

Cache ausgeführt, so dass das Programm ohne jede Verzögerung abgearbeitet wird.<br />

Für die Bestimmung der Leistungsaufnahme des AES wird zunächst das AES-Programm<br />

wie in Listing 5.1 auf dem TSN zur Ausführung gebracht und dabei die Leistungsaufnahme<br />

ermittelt. Anschließend wird das Programm so modifiziert, dass die Zeile 27 auskommentiert<br />

und Zeile 29 einkommentiert wird. Die Änderung im Programm sorgt dafür, dass das<br />

AES seine Verschlüsselungsoperation nicht startet. Der gesamte Programmablauf entspricht<br />

der der Verschlüsselung, das letzte Datenwort wird jedoch nicht an die Adresse<br />

0x25C geschrieben. Das Schreiben an diese Adresse würde für den AES-Core bedeuten,<br />

die Verschlüsselung zu beginnen. Dieses Programm wird im folgenden mit „AES_dum“ 2<br />

bezeichnet Für den ECC wurde die Ansteuerung auf gleiche Art und Weise implementiert.<br />

1 //write Key<br />

2 //write key bits 127 downto 96<br />

3 *((unsigned int *) 0x20200210) = 0x2b7e1516;<br />

4 //write key bits 95 downto 64<br />

5 *((unsigned int *) 0x20200214) = 0x28aed2a6;<br />

6 //write key bits 63 downto 32<br />

7 *((unsigned int *) 0x20200218) = 0xabf71588;<br />

8 //write key bits 31 downto 0<br />

9 *((unsigned int *) 0x2020021C) = 0x09cf4f3c;<br />

10<br />

11 //endless loop<br />

12 for (;;)<br />

13 {<br />

14 //write data - optimized in asm<br />

15 asm (<br />

16 "!set global adress in register %o1\n"<br />

17 " sethi %hi(0x20200000), %o1\n"<br />

18 "!write first 32 bit\n"<br />

19 "!write upper 23 bits into register %o0"<br />

20 " sethi %hi(0x3243f400), %o0\n"<br />

21 "!write lower 9 bits into register %o0"<br />

22 " or %o0, 0x2a8, %o0\n"<br />

23 "!write content of register %o0 in AES reg"<br />

24 "!destination address will be calculated from value of %o1 + offset"<br />

25 " st %o0, [ %o1 + 0x250]\n"<br />

26 "!write next data bits\n"<br />

2 dum= Dummy Operation<br />

74


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

27 " sethi %hi(0x885a3000), %o0\n"<br />

28 " or %o0, 0x8d, %o0\n"<br />

29 " st %o0, [ %o1 + 0x254]\n"<br />

30 "!write next data bits\n"<br />

31 " sethi %hi(0x31319800), %o0\n"<br />

32 " or %o0, 0xa2, %o0\n"<br />

33 " st %o0, [ %o1 + 0x258]\n"<br />

34 "!write next data bits\n"<br />

35 " sethi %hi(0xe0370400), %o0\n"<br />

36 " or %o0, 0x334, %o0\n"<br />

37 "! use this line for a normal AES operation \n"<br />

38 " st %o0, [ %o1 + 0x25C]\n"<br />

39 "! use this line for switched off AES \n"<br />

40 "! st %o0, [ %o1 + 0x258]\n"<br />

41 "!wait until aes finished\n"<br />

42 " 70 x nop\n"<br />

43 "!read words from aes, aes base address is stored in %o1\n"<br />

44 "!store value in register %o0"<br />

45 " ld [ %o1 + 0x250], %o0\n"<br />

46 " ld [ %o1 + 0x254], %o0\n"<br />

47 " ld [ %o1 + 0x258], %o0\n"<br />

48 " ld [ %o1 + 0x25C], %o0\n"<br />

49 );<br />

50 }<br />

Listing 5.1: Code für maximalen Datendurchsatz des AES<br />

5.4 Messungen<br />

Der Messaufbau wurde wie in Abschnitt 5.2 beschrieben umgesetzt und die Programme<br />

auf dem TSN zur Ausführung gebracht. In Tabellen 5.1 und 5.2 zeigen jeweils Messungen<br />

für den realen Knoten sowie die Simulation.<br />

Zur Verifikation der Messergebnisse kann die Simulation der Leistungsaufnahme wie in<br />

Abschnitt 2.22 herangezogen werden. Die Simulationsergebnisse sind in den Tabellen mit<br />

ausgewiesen. Bei genauerer Betrachtung der Differenz in der Stromaufnahme bei Verschlüsselung<br />

und der Ausführung des Dummy-Programms, ist ersichtlich dass diese in<br />

der Simulation und der realen Messung fast den gleichen Wert haben.<br />

Die jeweilige Stromaufnahme wird durch die Differenz der Stromaufnahme beider Programme<br />

(also funktionsfähiges Programm und Dummy-Programm) ermittelt. Beim AES ist<br />

eine Stromaufnahme von 1,4 mA gemessen und eine Stromaufnahme von 1,3 mA simuliert<br />

worden. Beim ECC hingegen war die Abschätzung in der Simulation schlechter als<br />

tatsächlich gemessen. In der Simulation werden 10,87 mA ermittelt, während tatsächlich<br />

8,58 mA gemessen wurden.<br />

Der durchschnittliche Fehlbetrag in Simulation und Messung beträgt etwa 22 mA. Davon<br />

entfallen 2 mA auf die Power-On-LED. Die verbleibenden 20 mA müssen somit innerhalb<br />

75


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

des TSN verbraucht werden. Dafür kommen Pads und Cache in Frage. Beide werden in<br />

der Simulation bei der Bestimmung der Leistungsaufnahme nicht berücksichtigt, da für<br />

diese keine geeigneten Bibliotheksinformationen vorliegen.<br />

Programm VDDPad VDDCore<br />

AES auf TSN 11,20 mA 44,70 mA<br />

AES_dum auf TSN 11,17 mA 43,30 mA<br />

AES in Simulation - 21,0 mA<br />

AES_dum in Simulation - 19,7 mA<br />

Tabelle 5.1: Messungen der Stromaufnahme für den AES<br />

Programm VDDPad VDDCore<br />

ECC auf TSN 11,07 mA 49,09 mA<br />

ECC_dum auf TSN 11,11 mA 40,51 mA<br />

ECC in Simulation - 29,63 mA<br />

ECC_dum in Simulation - 18,76 mA<br />

Tabelle 5.2: Messungen der Stromaufnahme für den ECC<br />

5.5 Lebensdauertest<br />

Der Lebensdauertest wurde mit zwei verschiedenen Szenarien durchgespielt. Zunächst<br />

erfolgte die Stromversorgung über 3 NiMH-Akkus mit einer Kapazität von je 2700 mAh.<br />

Dabei wurde eine Laufzeit von ca. 20 Stunden für den TSN-Knoten ermittelt. Nach dieser<br />

Zeit war die Spannung an der belasteten Spannungsquelle auf 2,4 V eingebrochen, so<br />

dass auf der Platine integrierte Spannungswandler den unteren Arbeitspunkt erreicht hatte.<br />

Der zweite Test wurde mit einer Solarzellen-Akku-Kombination durchgeführt. Dabei wurde<br />

eine durchschnittliche Betriebsdauer von 16 Stunden ermittelt. Eine Aufladung des Akkus<br />

mit Hilfe der Solarzellen fand nicht statt, so dass bei Sonneneinstrahlung mit verlängerter<br />

Lebensdauer zu rechnen ist.<br />

76


6 Future Work<br />

In diesem Abschnitt wird eine Projektskizze vorgestellt, bei der das abgeschlossene TSN-<br />

Projekt die Grundlage bildet. In den einzelnen Abschnitten werden Optimierungen des TSN<br />

gezeigt. Dabei wird die Software und die Hardware betrachtet. Darüber hinaus werden<br />

Veränderungen am Board-Design und an der Energieversorgung vorgeschlagen.<br />

Im Überblick beziehen sich die Änderungsvorschläge auf:<br />

• die Einführung einer µKern-Architektur,<br />

• das Trusted Computing,<br />

• ein sicheres Code-Update auf Softwareebene,<br />

• die Veränderungen an vorhandener Hardware,<br />

• das Hinzufügen neuer Hardwarekomponenten,<br />

• die Nutzung eines Ball Grid Array (BGA)-Gehäuses für den ASIC,<br />

• die Verbesserungen im Board-Design und<br />

• das Aufzeigen alternativer Energieversorgungen.<br />

6.1 System-Architektur<br />

Bei der Erstellung der Softwarearchitektur für den TSN wurden, wenn möglich, Komponenten<br />

aus dem embedded Configurable operating system (eCos) verwendet. Dies hat<br />

den Vorteil, dass auf ein bereits funktionierendes System aufgebaut und die Softwareentwicklung<br />

auf die Peripheriekomponenten des TSN konzentriert werden konnte. Da eCos<br />

ein Betriebssystem für eingebettete Systeme ist, deckt es nicht alle Anforderungen an<br />

einen drahtlosen Sensorknoten wie den TSN ab.<br />

In diesem Abschnitt werden Software- und Hardware-Mechanismen vorgestellt, die die Sicherheit,<br />

die Verfügbarkeit und die Flexibilität des TSNs erhöhen. Insbesondere die Mechanismen<br />

zur Steigerung der Systemsicherheit sind integrale Bestandteile eines Betriebssystem<br />

und lassen sich nur mit großem Aufwand in eCos integrieren. Aus diesem Grund wird<br />

unter anderem ein alternatives Betriebssystem näher beleuchtet.


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

6.1.1 Mikrokern-basierter TSN mit Security Compartments<br />

Viele der aktuellen Betriebssysteme für eingebettete Systeme, z.B. eCos, µClinux, TinyOS<br />

oder Reflex, bestehen aus einen monolithischen Kern, der funktional in verschiedene Module<br />

unterteilt wird. Die Trennung der Module besteht hierbei jedoch nur auf der Programmiersprachenebene,<br />

zur Laufzeit existiert keine Trennung zwischen den Modulen.<br />

Ein monolithisches System hat im Wesentlichen die folgenden Nachteile:<br />

• Fehler einer Komponente bleiben nicht auf diese beschränkt<br />

• alle Daten des Knotens sind von jeder Komponente les- und schreibbar<br />

• ein dediziertes Wiederaufsetzen von einzelnen Modulen ist nicht möglich<br />

Aufgrund oben genannter Nachteile befürworten wir den Ansatz eines mikrokern-basierten<br />

Betriebssystems für eingebettete Systeme. Hierbei stellen wir zunächst das Konzept der<br />

„Security Compartments“ vor, welche die Grundlage für ein sicheres System bilden, jedoch<br />

nur von den wenigsten aktuellen eingebetteten Systemen unterstützt wird. Darauf<br />

aufbauend wird mit L4 eine Mikrokern-Architektur aufgezeigt, mit der die Sicherheit des<br />

TSN signifikant erhöht werden kann.<br />

Security Compartments<br />

Unter Security Compartments versteht man die Aufteilung der Systemressourcen auf voreinander<br />

geschützte Teilkomponenten. Diese Security Compartments werden dabei durch<br />

Protection Domains voreinander geschützt. Eine Protection Domain ist eine Menge von<br />

Zugriffsrechten zum Schutz von Ressourcen [12]. Jedes Compartment wird hierbei genau<br />

einer Domain zugeordnet. Allerdings können verschiedene Compartments einer Domain<br />

angehören. Zwei Security Compartments können daher nur dann miteinander kommunizieren,<br />

wenn ihre Protection Domains den Zugriff auf eine gemeinsame Ressource gestatten.<br />

Durch das Fehlen von Security Compartments in eingebetteten Systemen wirken sich<br />

lokale Fehler in den Komponenten auf das gesamte System aus. Wie in Abbildung 6.1<br />

dargestellt, kann z.B. ein Fehler in einem Treiber durch das Fehlen von Schutzbarrieren<br />

auch das Memory Management oder den Scheduler beeinflussen, so dass ein störungsfreier<br />

Betrieb des Gesamtsystems nicht mehr sichergestellt werden kann. Wie Abbildung<br />

6.2 verdeutlicht, können durch die Einführung von Security Compartments die verschiedenen<br />

Module voreinander geschützt werden, so dass die Auswirkungen eines Fehlers<br />

auf die betroffene Komponente begrenzt sind. Ein Compartment hat nur Zugriff auf einen<br />

bestimmten, ihm zugeteilten, Bereich des Systems.<br />

Die Unterteilung des Systems in verschiedene Security Compartments wird durch den<br />

Systemkern organisiert. Der Kern muss hierbei durch die Hardware unterstützt werden.<br />

So ist die Bereitstellung von verschiedenen Ausführungsmodi und von Zugriffsrechten auf<br />

78


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Service<br />

Service<br />

ISR<br />

Driver<br />

Driver<br />

Scheduler<br />

Service<br />

Service Task<br />

Task<br />

Memory<br />

Manager<br />

Abbildung 6.1: Auswirkung von Fehlern in Betriebssystemen ohne Security<br />

Compartments<br />

Service<br />

Service<br />

ISR<br />

Driver<br />

Driver<br />

Scheduler<br />

Service<br />

Service Task<br />

Task<br />

Memory<br />

Manager<br />

Abbildung 6.2: Schutz von Betriebssystemkomponenten durch Security<br />

Compartments<br />

79


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Speicherseiten zwingend erforderlich. Nahezu alle 32-Bit-Mikroprozessoren unterstützen<br />

mindestens zwei Ausführungsmodi, den SuperVisor- und User-Modus. Der aktuelle Ausführungsmodus<br />

wird im Statusregister des Prozessors abgelegt. Ein Wechsel vom unprivilegierten<br />

User-Modus in den privilegierten SuperVisor Modus ist nur über eine wohldefinierte<br />

Schnittstelle möglich.<br />

Jede Nutzer-Task wird in einem eigenen Security Compartment im User-Modus des Prozessors<br />

ausgeführt und kann nur über definierte Schnittstellen mit anderen Tasks kommunizieren.<br />

Sie erhalten dabei nur eine eingeschränkte Sicht auf die Systemressourcen.<br />

Ein beliebiger Zugriff ist hier nicht möglich. Durch die Ausführungen von Programmen und<br />

Diensten im User-Modus wird verhindert, dass Daten einer anderen Task gelesen oder<br />

geschrieben werden können. Fehler in einer Task beeinflussen nur diese und nicht das<br />

gesamte System. Zusätzlich kann nach einem schwerwiegenden Fehler die Task neu gestartet<br />

werden.<br />

Mikrokern-Systeme<br />

Durch eine weitere Unterteilung des Gesamtsystems in verschiedene Security Compartments<br />

können die Auswirkungen von Fehlern weiter verringert werden. Systeme mit einer<br />

sehr feingranularen Unterteilung und einem kleinen Kern bezeichnet man als Mikrokern-<br />

Systeme. Hierbei werden im Systemkern lediglich Funktionen umgesetzt, die zwingend im<br />

SuperVisor-Modus des Prozessors ausgeführt werden müssen.<br />

Der L4-Mikrokern basiert auf zwei Basiskonzepten: Threads und Adressräume. Für die Interadressraumkommunikation<br />

bietet der Kern zusätzlich Interprozesskommunikation (IPC)-<br />

Funktionen an. Alle weiteren Funktionen bauen auf diesen Basisfunktionen auf und werden<br />

weitestgehend im Userspace ausgeführt.<br />

Wie in Abbildung 6.3 dargestellt, werden Dienste und Treiber eines monolithischen Systemkerns<br />

in einem Mikrokern-basierten System in den User-Mode verlagert. Dies umfasst<br />

auch in weiten Teilen die Verwaltung von Hardwareressourcen. Interrupts werden vom<br />

Kern als IPC an die Treiber-Task zugestellt und die Memory-Mapped-IO-Bereiche werden<br />

in den Adressraum der Task eingeblendet.<br />

Ein wesentlicher Nachteil von Mikrokernen besteht in dem Leistungsverlust durch die<br />

große Anzahl an Adressraumwechseln. Bei jedem Umschalten des Adressraumes müssen<br />

Teile des Prozessors neu geladen werden. Insbesondere bei komplexen Systemen,<br />

wie einen Desktop- oder Server-System, wird dieser Leistungsverlust spürbar, so dass eine<br />

kommerzielle Nutzung von µKernen in derartigen Systemen heutzutage nicht existiert.<br />

Da ein eingebettetes System nur über eine überschaubare Anzahl an Threads verfügt,<br />

sind die Kosten für einen Adressraumwechsel weniger beeinträchtigend für das System.<br />

Die Threads umfassen bei einem µKern-basierten eingebetteten System lediglich Systemdienste.<br />

Nutzer-Threads (Applikationen) sind für die meisten Einsatzszenarien gar nicht<br />

oder nur in einer sehr geringen Anzahl notwendig. Gerade die Beschränkung auf Systemdienste<br />

führt dazu, dass der Einsatz von µKernen bei eingebetteten Systemen einen<br />

signifikanten Zuwachs an Systemsicherheit bei akzeptablen Performanceeinbußen bietet.<br />

80


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Task Task Task<br />

Network Stack, Filesystem<br />

Memory Manager, Scheduler<br />

Device Drivers, ISR, ...<br />

User-<br />

Mode<br />

SuperVisor-<br />

Mode<br />

Task<br />

Device Driver<br />

Network Stack<br />

File System<br />

IPC, Memory Management<br />

Hardware<br />

Hardware<br />

Abbildung 6.3: Aufteilung von Diensten und Services in monolithischen und<br />

µKern-Betriebssystemen<br />

L4-basierter Trusted Sensor Node<br />

L4 ist eine Mikrokern-Architektur entworfen und erstmals implementiert von Jochen Liedtke<br />

[52]. Aktuell existieren verschiedene Implementierungen (L4Ka::Pistachio [26], Fiasco<br />

[18], OKL4 [38]), die für den jeweiligen Einsatz- und Forschungszweck optimiert wurden.<br />

Ursprünglich für die x86-Architektur IA32 von Intel entwickelt, sind aktuell Portierungen für<br />

weitere Hardware-Plattformen (z.B. MIPS64, PPC, AMD64, Alpha, ARM) frei verfügbar.<br />

Der TSN verfügt über wenige Dienste, die bereits in der aktuellen Implementierung in Module<br />

ausgelagert wurden. Da eCos jedoch das Konzept der Security Compartments nicht<br />

unterstützt, werden diese Dienste in einem Adressraum zusammengefasst, so dass Fehler<br />

in einem Modul alle anderen Module beeinflussen bzw. sensitive Daten nicht wirksam<br />

geschützt werden können. Durch den Einsatz eines Mikrokerns, können die Module des<br />

TSN auf verschiedene Adressräume verteilt werden. Damit kann ein wirksamer Schutz<br />

zwischen den Diensten installiert werden, so dass eine sichere Speicherung von sensitiven<br />

Daten möglich wird. Darüber hinaus ermöglicht die Mikrokern-Technologie durch den<br />

Einsatz von Watchdog-Technologien die Überwachung und das Wiederherstellen von Systemdiensten.<br />

L4 ist aktuell nicht für die SPARC-Architektur verfügbar. Es gibt erste Ansätze für eine<br />

Portierung auf diese Plattform, die weitergeführt werden müssten. Die Auslagerung von<br />

Diensten in verschiedene Adressräume muss ebenfalls für den TSN umgesetzt werden. Es<br />

existieren bereits Frameworks wie z.B. L4Env[56], die viele Dienste eines Betriebssystems<br />

als L4-Tasks bereitstellen. Allerdings müssen die TSN-spezifischen Dienste, wie z.B. die<br />

Implementierung von HARPS, SPI oder die Tamper Detection auf die Plattform portiert<br />

werden.<br />

81


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

TSN-MMU<br />

Die LEON2-CPU des TSN verfügt über keine Memory Management Unit (MMU), so dass<br />

eine Implementierung von Security Compartments auf dieser Hardware nicht möglich ist.<br />

Eine MMU ist für die Übersetzung von virtuellen Adressen in physikalische Adressen verantwortlich<br />

und ermöglicht die Bereitstellung von virtuellen Adressräumen. Damit kann<br />

jedem Prozess ein einheitlicher virtueller Adressraum bereitgestellt werden. Es existiert<br />

jedoch ein Referenzdesign in VHDL für eine MMU der SPARC-V8-Architektur [49], die unter<br />

anderem über einen User- und einen SuperVisor-Modus sowie über Zugriffsflags für<br />

Speicherseiten verfügt.<br />

Es ist somit ohne größeren Implementierungsaufwand möglich den TSN um eine MMU zu<br />

erweitern. Es bleibt zu prüfen, in wieweit die Integration der MMU Auswirkungen auf den<br />

Platz- und den Energiebedarf des Chips hat. Beides kann bereits durch die Integration in<br />

die Simulationsumgebung des TSN bzw. in einen Field programmable Gate Array (FPGA)<br />

evaluiert werden.<br />

6.1.2 Trusted Computing<br />

Trusted Computing (TC) ist eine Technologie, die von der Trusted Computing Group (TCG)<br />

entwickelt und beworben wird [53]. TC bedeutet, dass die im Computersystem verwendete<br />

Hard- und Software sicher kontrolliert werden kann. Hierzu werden die Systeme mit einem<br />

zusätzlichen Sicherheitsmodul ausgestattet, welches mittels kryptographischer Verfahren<br />

die Authentizität, Integrität und die Vertrauenswürdigkeit der Hard- und der Software nachprüfbar<br />

macht. Für die Umsetzung ist ein sicheres Betriebssystem zwingend erforderlich,<br />

da die Überprüfung des Systems nicht vom Sicherheitsmodul sondern vom Betriebssystem<br />

initiiert werden muss.<br />

Sicherheitsmodul des TSN<br />

Das Sicherheitsmodul bietet mittels eines One Time Programmable (OTP)-Speicher einen<br />

sicheren Anker (Root Key) für eine vertrauenswürdige Authentifizierung, Identifizierung<br />

und Überprüfbarkeit des Systems. Es befindet sich zwischen dem AMBA-Bus und dem<br />

internen Flash und überwacht alle Zugriffe auf den Flashspeicher und hat Zugriff auf den<br />

Programmzähler des LEON2-Kerns. Damit besteht die Möglichkeit festzustellen, von welchem<br />

Programmmodul aus auf den Flashspeicher zugegriffen wird. Unerlaubte Zugriffe<br />

auf den Flash und den OTP können blockiert werden.<br />

Durch die Sicherung des internen Flashspeichers mittels des Sicherheitsmoduls kann dieser<br />

als Trusted Code Base verwendet werden. Der OTP-Speicher wird für die Speicherung<br />

von eindeutigen Identifikatoren verwendet. Eine genauere Beschreibung hierzu erfolgt in<br />

den nächsten Abschnitten.<br />

82


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Root Key im OTP Ein OTP-Speicher ist ein einmalig programmierbarer nicht flüchtiger<br />

Speicher und kann nach dem Fuse 1 -Prinzip programmiert werden. Nach der Fertigung<br />

haben alle Bits des Speichers den Wert „1“. Durch das Anlegen einer hohen Spannung<br />

(ca. 9,5V), können Bits auf „0“ gesetzt werden.<br />

Für den Root Key (K root ) des TSN wird ein OTP-Speicher verwendet. Dieser ist als direkt<br />

adressierbarer Bit-Vektor organisiert. Jedes einzelne Bit wird über eine separate Leitung<br />

mit dem Datenbus verbunden. Beim K root handelt es sich um ein ECC-Schlüsselpaar<br />

(K pub<br />

root , Kpriv root ), welches die Basis für die Schlüsselinfrastruktur des TSN bildet. Der K root<br />

wird bei der Initialisierung des TSN einmalig gespeichert und kann im Folgenden nicht<br />

mehr verändert werden. Die Schlüssel K pub<br />

root und Kpriv root werden über separate Datenbusse<br />

aus dem OTP-Speicher herausgeführt.<br />

Wie in Abbildung 6.4 dargestellt, ist der Datenbus von K pub<br />

root an den AMBA-Bus angeschlossen.<br />

Der Zugriff wird zwar durch das Sicherheitsmodul kontrolliert, aber die Abfrage<br />

von K pub<br />

root ist unbeschränkt möglich. Der Datenbus des Kpriv root ist mit dem ECC-Modul des<br />

TSN verbunden. Es existiert keine Verbindung zwischen dem K priv<br />

root im OTP und einem<br />

Systembus. Der Schlüssel kann nur über das Select-Signal Sel in den Schlüsselspeicher<br />

K der ECC-Komponente geladen werden. Ein direktes Auslesen von K und K priv<br />

root im OTP<br />

ist nicht vorgesehen. Damit ist auch kein Backup des Schlüssels möglich.<br />

AMBA<br />

LEON2<br />

PC<br />

Security Module<br />

P(x,y)<br />

ECC<br />

K<br />

Sel<br />

K priv<br />

root<br />

OTP<br />

K pub<br />

root<br />

internal<br />

Flash<br />

Abbildung 6.4: Integration des Sicherheitsmoduls in den TSN<br />

Das Einspielen von K root erfolgt über die DSU des LEON2. Damit ist der Vorgang nach<br />

dem Assembling des Chips möglich und kann ortsungebunden durchgeführt werden. Das<br />

Einspielen kann über die im Abschnitt 6.2.3 beschriebene Authentifizierungskomponente<br />

der DSU gesichert werden.<br />

Trusted Code Base (TCB) In einer späteren Version wird der TSN über zwei verschiedene<br />

Flash-Speicher verfügen. Ein Flash-Speicher kann Bestandteil des TSN-Die 2 sein.<br />

1 to fuse kommt aus dem Englischen und wird mit durchschmelzen übersetzt.<br />

2 Ein Die (engl. Plättchen) ist die Bezeichnung eines einzelnen ungehäusten Halbleiter-Chips.<br />

83


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Der interne Flash ist 64 kByte groß und über einen Flash-Controller an den AMBA-Bus angeschlossen.<br />

Zusätzlich verfügt der TSN über einen externen Flash der neben dem TSN<br />

Mikrocontroller auf dem Printed Circuit Board (PCB) 3 platziert ist. Die Größe des externen<br />

Flashs ist abhängig von den verwendeten Chips und beträgt im aktuellen Design 8 MByte.<br />

Durch die Integration des internen Flashs auf dem Die bietet sich dieser für die Speicherung<br />

von sensitiven Daten an. Eine manuelle Kontaktierung ist nur mit großem technischen<br />

Aufwand und nicht ohne Beschädigung des Chipgehäuses möglich. Damit kann eine Änderung<br />

des Inhaltes des Flashs ohne die Nutzung von TSN Komponenten weitestgehend<br />

ausgeschlossen werden. Zur Sicherung des Flash-Speichers gegen Veränderungen des<br />

Inhalts durch nicht autorisierten Programmtext wird in den TSN das Sicherheitsmodul integriert.<br />

Das Modul befindet sich, wie in Abbildung 6.4 dargestellt, zwischen dem AMBA-Bus<br />

und dem Flash-Controller. Zusätzlich kann das Sicherheitsmodul den Programm Counter<br />

(PC) des LEON2-Kerns auslesen. Dies ermöglicht die Bestimmung der aktuellen Programmstelle<br />

zum Zeitpunkt des Zugriffs. Der PC des LEON2-Kerns enthält die Adresse<br />

des Befehls, der aktuell ausgeführt wird. Da der LEON2-Kern auf der Load/Store-Architektur<br />

des SPARC basiert, kann der Zugriff auf den Flash nur durch eine Load/Store-Operation<br />

erfolgen.<br />

Ein schreibender Zugriff auf den Flash darf nur durch einen autorisierten Programmcode<br />

erfolgen. Dieser muss Bestandteil der TCB sein. Die TCB (der interne Flash) wird beim<br />

TSN immer auf einem festen Bereich des Adressraumes abgebildet. Alle Instruktionen der<br />

TCB müssen sich innerhalb dieses Bereiches befinden. Wird ein schreibender Zugriff auf<br />

dem Flash von einer anderen Speicheradresse ausgeführt, wird dieser Zugriff blockiert<br />

und ein None-Maskable Interrupt (NMI) 4 generiert.<br />

Trusted Boot Chain (TBC)<br />

Ausgehend von der im vorangegangenen Abschnitt beschriebenen TCB und dem K root<br />

lässt sich für den TSN, eine sichere Bootkette TBC, aufbauen. Bei einer TBC stellt, wie in<br />

Abbildung 6.5 dargestellt, jedes Programmmodul sicher, dass das im Folgenden zu ladende<br />

und auszuführende Modul vertrauenswürdig ist. Der Nachweis der Vertrauenswürdigkeit<br />

kann mittels kryptographischer Prüfsummen erfolgen. Dabei ist bei der Verwendung<br />

von internem Flash ein Hashwert ausreichend, bei der Verwendung von externem Flash<br />

muss auf eine Signatur zurückgegriffen werden.<br />

Die TBC wird beim ersten Einbringen der TSN-Software initialisiert. Hierzu wird der Programmtext<br />

in einzelne Module unterteilt und separat eingespielt. Beim Einspielen eines<br />

Moduls wird für das Modul mittels des K root oder eines davon abgeleiteten Schlüssels<br />

eine Signatur erstellt. Die Signatur wird im internen Flash abgelegt und kann somit von außen<br />

nicht verändert werden. Eine genaue Beschreibung hierzu erfolgt im Abschnitt 6.1.2.<br />

Da nicht allgemeingültig vorausgesagt werden kann, in welcher Form die TBC aufgebaut<br />

wird, kann im Rahmen des Projektes nur ein Framework für die TBC erstellt wer-<br />

3 Printed Circuit Board ist die englische Bezeichnung für eine gedruckte Leiterplatte.<br />

4 NMI sind Interrupts, die nicht von der CPU deaktiviert und damit zwingend behandelt werden müssen.<br />

84


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Drivers Services Task<br />

µKern<br />

Memory<br />

Manager<br />

Loader<br />

external Flash<br />

internal Flash<br />

Boot Loader<br />

Signatures<br />

Abbildung 6.5: Trusted Boot eines L4-basierten Systems mit Signatur-basierter<br />

Modulauthentifizierung<br />

den. Das Framework enthält den Initial Boot Loader (IBL) und das Module Verification<br />

Module (MVM). Beide sind Bestandteil der TCB, um sie gegen spätere nicht autorisierte<br />

Änderungen zu schützen.<br />

Initial Boot Loader (IBL) Der IBL enthält die ersten Instruktionen für den LEON2-Prozessor.<br />

Nach einem Reset springt der Prozessor zunächst an die Startadresse des IBL. Im<br />

Bootloader erfolgt das Initialisieren des Prozessor-Caches, des Systemspeichers und des<br />

AMBA-Buses. Anschließend können weitere Module für das System geladen werden. Da<br />

der IBL automatisch vom System gestartet wird und nicht geladen werden muss, kann dieser<br />

Programmcode nicht vor dem Ausführen authentifiziert werden. Aus diesem Grund ist<br />

der IBL zwingender Bestandteil der TCB, so dass schreibende Zugriffe kontrolliert werden<br />

können.<br />

Module Verification Module (MVM) Das MVM stellt ein Application Programming Interface<br />

(API) für die Authentifizierung und Verifizierung von Programmmodulen bereit. Es<br />

verwendet hierfür das in den LEON2-Prozessor integrierte Crypto-Modul und den K root<br />

aus dem OTP-Speicher. Durch die Verwendung des MVM wird sichergestellt, dass die<br />

Überprüfung der Module einheitlich und sicher durchgeführt wird. Das MVM ist als fester<br />

Bestandteil in die TCB integriert, um so den Schutz vor Manipulation des MVM zu gewährleisten.<br />

Abbildung 6.5 zeigt beispielhaft eine mögliche Trusted Boot Chain für ein L4-basiertes<br />

System. Das System startet zunächst den Initial Boot Loader aus der TCB. Dieser lädt<br />

anschließend den Mikrokern, den Speicher-Manager und den Loader-Thread aus dem externen<br />

Flash. Die Module werden durch den IBL mittels des MVM verifiziert. Hierzu wird<br />

die im internen Flash angelegte Signaturdatenbasis verwendet. Anschließend kann die<br />

Programmkontrolle vom IBL an den Mikrokern bzw. den Loader übergeben werden. Dieser<br />

kann danach weitere Module, z.B. Geräte-Treiber, Netzwerk-Stack und Applikationen<br />

85


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

nachladen. Das Verifizieren der zu ladenden Module erfolgt durch Funktionen des MVM<br />

und kann für alle weiteren Module durch den zuvor authentifizierten Loader durchgeführt<br />

werden.<br />

Secure Update<br />

Der TSN ist für einen langjährigen Einsatz im Outdoor-Umfeld konzipiert und muss über<br />

eine Remote-Update-Fähigkeit verfügen. Hierzu können die für die Übertragung der Sensordaten<br />

zur Verfügung gestellten Kommunikationskanäle genutzt werden. Die Nutzung der<br />

von außen zugänglichen Schnittstellen bedingt jedoch eine umfangreiche Absicherung des<br />

Prozesses, um zu verhindern, dass dieser nicht ohne vorherige Autorisierung durchgeführt<br />

wird.<br />

Um einen möglichst flexiblen Einsatz des TSN zu ermöglichen, ist es notwendig, dass sowohl<br />

die Konfigurationsdaten als auch der Programmcode aktualisiert werden können. Im<br />

Folgenden werden Software-technische Mechanismen zur Bereitstellung eines sicheren<br />

Update-Dienstes beschrieben. Hierbei wird zwischen dem Update der Konfigurationsdaten<br />

und des Programmtextes des TSN unterschieden.<br />

Konfigurationsupdate Für einen flexiblen Einsatz des TSN ist es sinnvoll, die Konfigurationsdaten<br />

von dem Programmcode zu trennen. Dadurch kann der TSN durch Anpassen<br />

der Konfiguration in verschiedenen Anwendungsgebieten mit unterschiedlichen Umgebungsbedingungen<br />

eingesetzt werden. Außerdem ergibt sich hierdurch die Möglichkeit,<br />

die Konfigurationsdaten und den TSN erst beim Rollout 5 zusammenzuführen.<br />

In der aktuellen Architektur wird die Trennung von Programmtext und Konfiguration bereits<br />

durch die Einführung einer separaten Konfigurationskomponente realisiert. Allerdings sind<br />

die Daten aktuell noch fest in diese Komponente integriert. Eine Separierung innerhalb<br />

dieser Komponente ist noch vorzunehmen. Die Konfigurationsdaten des TSN umfassen<br />

aktuell die folgenden Informationen:<br />

• Kommunikationsschlüssel,<br />

• Tamper-Parameter und<br />

• Netzwerkparameter.<br />

Wie bereits einleitend erwähnt, bietet es sich an, die von außen zugänglichen Kommunikationsverbindungen<br />

für das Update nutzen. Zur Absicherung des Prozesses müssen die<br />

Daten kryptographisch gesichert werden. Hierfür können die Krypto-Module und der K root<br />

des TSN verwendet werden.<br />

5 Rollout bezeichnet den Vorgang des Verteilens des Produktes beim Kunden bzw. der Inbetriebnahme im<br />

Einsatzszenario.<br />

86


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Programmcode Update Die angestrebte lange Einsatzzeit und die verschiedenen Einsatzszenarien<br />

machen es erforderlich, dass der Programmcode des TSN aktualisierbar<br />

ist. Hierbei muss zwischen einem Remote-Update und einem Update über die DSU unterschieden<br />

werden. Die Absicherung des DSU-Zugriffs wird im Abschnitt 6.2.3 beschrieben<br />

und soll hier nicht weiter betrachtet werden. Beim Remote-Update muss noch einmal zwischen<br />

einem Update des Programmtextes im externen Flash und einem Update der TCB<br />

im internen Flash unterschieden werden.<br />

Das Programmcode Update wird, wie in Abbildung 6.6 dargestellt, in zwei Schritte unterteilt.<br />

Als Ergebnis des ersten Schrittes (Store Data Fragments) wird die neue Firmware<br />

vollständig im externen Flash gesichert abgespeichert. Hierzu werden zunächst die einzelnen<br />

Fragmente der Firmware empfangen, authentifiziert und anschließend entschlüsselt.<br />

Für die Authentifizierung kann K pub<br />

prod 6 verwendet werden. Für die Entschlüsselung wird<br />

ein separater Schlüssel K upd genutzt. Eine genauere Erläuterung zu K upd erfolgt in den<br />

nächsten Absätzen. Da zwischen dem Empfangen der neuen Firmware und dem eigentlichen<br />

Einspielen ein längerer Zeitraum vergehen kann, wird die Firmware zusätzlich mittels<br />

K rand verschlüsselt im externen Flash abgelegt. Bei K rand handelt es sich um einen temporären<br />

Schlüssel, der mittels des Pseudozufallszahlengenerators erzeugt wird und damit<br />

nur dem TSN bekannt ist.<br />

internal<br />

Flash<br />

Signature<br />

Database<br />

Decrypt(K<br />

rand<br />

)<br />

priv<br />

Sign(K )<br />

root<br />

TCB<br />

Code Update<br />

external<br />

Flash<br />

Code Base<br />

Fragmented Update Data<br />

pub<br />

Verify(K prod)<br />

Decrypt(K upd )<br />

Encrypt(K rand)<br />

Store Data Fragments<br />

Update Area<br />

Abbildung 6.6: Kryptographisch gesichertes Programmcode Update<br />

Im zweiten Schritt (Code Update) wird die neue Firmware in den Programmtextspeicher<br />

des TSN übernommen und aktiviert. Hierzu muss die Firmware zunächst mittels K rand<br />

entschlüsselt werden. Anschließend müssen für die neuen Module die Signaturen mittels<br />

des K priv<br />

root berechnet werden. Da die Signaturen im internen Flash abgespeichert werden,<br />

ist hierfür ein vertrauenswürdiger Programmtext notwendig. Aus diesem Grund ist die<br />

Update-Funktion Bestandteil des MVM. Danach kann der neue Programmtext in die Code<br />

Base im externen Flash abgelegt werden.<br />

Der Programmtext muss bei der Übertragung mittels kryptographischer Mechanismen gesichert<br />

werden, so dass ein unautorisiertes Einspielen verhindert werden kann. Als Schlüssel<br />

sollte hier ein separater Update-Schlüssel K upd verwendet werden, da bei der Verwen-<br />

6 Schlüssel des Softwareherstellers.<br />

87


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

dung von K pub<br />

root der Programmtext für jeden TSN einzeln verschlüsselt werden muss. Der<br />

Schlüssel kann Bestandteil der Konfigurationsdaten sein oder zu einem späteren Zeitpunkt<br />

ausgehandelt werden. Für die Authentifizierung des Moduls muss der TSN über den öffentlichen<br />

Schlüssel der externen Update-Quelle K pub<br />

prod<br />

verfügen. Dieser Schlüssel kann<br />

ebenfalls über den Update-Prozess der Konfigurationsdaten aktualisiert werden.<br />

Ein Update des Programmtextes der TCB ist nur mittels der Funktionen aus der TCB möglich.<br />

Hierfür muss eine separate Update-Funktion integriert werden. Die Signatur der Module<br />

kann abhängig vom verwendeten Schlüssel entweder im internen oder im externen<br />

Flash abgelegt werden.<br />

Code Attestation Module<br />

Der Programmtext des TSN wird bei der Initialisierung oder bei einem Update des Systems<br />

im Flash-Speicher abgelegt. In der aktuellen Architektur wird davon ausgegangen, dass<br />

die Daten im Folgenden integer sind. Diese Annahme kann jedoch im realen Betrieb nur<br />

bedingt aufrecht erhalten werden. So können die Daten durch<br />

• Umwelteinflüsse,<br />

• Alterung der Flashzellen und<br />

• bösartige Angriffe auf den TSN<br />

verfälscht und manipuliert werden.<br />

Für einen sicheren Betrieb des TSN ist es zwingend erforderlich, dass die Integrität der<br />

im Flash gespeicherten Daten sichergestellt wird. Zwar wird beim Starten des Knoten die<br />

Integrität der Module überprüft, jedoch wird bei den angestrebten Einsatzszenarien von<br />

einer langen Laufzeit des Knotens ausgegangen. Damit würde die Überprüfung nur in<br />

sehr langen Abständen erfolgen. Zur Erfüllung der an den TSN gestellten Sicherheitsanforderungen<br />

ist eine regelmäßige Überprüfung des Programmtextes in kurzen Abständen<br />

zwingend erforderlich.<br />

Das im Abschnitt 6.1.2 vorgestellte Sicherheitsmodul verhindert unautorisierte Veränderungen<br />

an der TCB. Diese enthält jedoch nur eine kleinen Teil des Programmtextes, der<br />

nur beim Booten des Knotens bzw. beim Update ausgeführt wird. Außerdem werden hiermit<br />

keine Beschädigungen des Programmtextes durch Alterung der Flashzellen erkannt.<br />

Aus diesem Grund wird die Trusted Code Base um ein Code Attestation Module (CAM) erweitert.<br />

Um sicherstellen zu können, dass der Programmcode des TSN vertrauenswürdig<br />

ist und zyklisch überprüft wird und ferner die Überprüfung nicht umgangen werden kann,<br />

besteht das CAM aus zwei Teilen. Der erste Teil nutzt das MVM zur Überprüfung der Module.<br />

Hierbei werden analog zum Secure Boot die Signaturen der Module berechnet und<br />

mit der Signaturdatenbasis im internen Flash verglichen. Stimmen diese nicht überein,<br />

muss davon ausgegangen werden, dass der Programmcode beschädigt oder manipuliert<br />

wurde. In beiden Fällen sind geeignete Sicherheitsmaßnahmen einzuleiten. Der zweite<br />

88


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Teil des CAM sorgt für eine zyklische Ausführung der MVM-Funktionen. Hierzu wird die<br />

Trap-Behandlung des LEON2 erweitert. Beim Auftreten eines Trap 7 sichert der Prozessor<br />

seinen aktuellen Zustand in einem Register-Window und lädt den Inhalt des Trap Base Register<br />

(TBR) in den Programm Counter. Das TBR wird beim Initialisieren der CPU gesetzt<br />

und zeigt auf die Trap-Handler-Tabelle des Systems. Beim Einsatz des CAM wird das TBR<br />

mit einer Adresse aus der TCB initialisiert und für spätere Zugriffe gesperrt. Schreibende<br />

Zugriffe auf das TBR werden im Folgenden auf ein Schattenregister umgelegt, welches<br />

vom CAM nach der Ausführung der Code Attestation zur Behandlung des Traps genutzt<br />

wird und auf die Trap-Handler-Tabelle des Systems verweist.<br />

Secure Storage<br />

Dieser Abschnitt beschreibt mögliche weiterführende Sicherheitsmechanismen für den<br />

TSN. Hierbei wird insbesondere auf den Schutz der sensiblen Daten eingegangen. In den<br />

vorangegangenen Abschnitten wurde beschrieben, dass eine Sicherung der Konfiguration<br />

und des Programmcodes zwingend erforderlich ist. In beiden Fällen wird eine kryptographische<br />

Sicherung der Daten genutzt. Unter der Annahme, dass die verwendeten Verfahren<br />

sicher sind, wird damit die Gesamtsicherheit des Systems im Wesentlichen auf die sichere<br />

Verwahrung der Schlüssel reduziert.<br />

Die sichere Verwahrung von Schlüsseln in elektronischen Systemen ist ein nicht-triviales<br />

Problem. Zum einen benötigt das System Zugriff auf die Daten und zum anderen sollten<br />

die Daten nicht lesbar verwahrt werden. Im Folgenden werden zwei Mechanismen vorgestellt,<br />

die das Auslesen von sicherheitsrelevanten Informationen erschweren.<br />

Systemcluster Unter einem Systemcluster wird eine Menge von Systemen verstanden,<br />

bei dem die Systeme untereinander über ein Kommunikationsmittel verbunden sind und<br />

gegenseitig Daten austauschen können. In derartigen Clustern, kann das sensitive Material<br />

(z.B. die Schlüssel) verteilt gespeichert werden. Ein System des Clusters benötigt dann<br />

zusätzliche Daten von einem anderen System, um seine sensitiven Daten wiederherstellen<br />

zu können.<br />

Die Verwendung eines Systemclusters hat den Vorteil, dass mehrere Systeme nahezu<br />

gleichzeitig angegriffen werden müssen und, in Fehlerfällen, Redundanzen vorhanden<br />

sind, die eine Selbstheilung des Systems ermöglichen. Der Nachteil besteht darin, dass<br />

die Informationen nicht sofort zur Verfügung stehen, sondern zunächst eine Datenübertragung<br />

zu einem anderen Systemteilnehmer des Clusters notwendig ist.<br />

Autonome Systeme In einem autonomen System müssen alle für den Betrieb notwendigen<br />

Informationen im System selbst gespeichert werden. Hierbei bietet sich wiederum<br />

ein Aufteilen der Informationen an.<br />

7 Unter Trap ist ein Ausnahmezustand zu verstehen, der durch vordefinierte Ereignisse hervorgerufen wird.<br />

89


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Ein Schlüssel wird nicht als zusammenhängender Datenblock abgelegt, sondern über den<br />

Speicher des Systems verteilt. Zusätzlich muss an dieser Stelle dafür gesorgt werden,<br />

dass die Speicherorte möglichst zufällig gewählt werden und nicht von Dritten vorhergesagt<br />

werden können. Zudem darf es nicht möglich sein, die abgelegten Schlüssel direkt in<br />

einem Speicherauszug zu erkennen. Dies kann durch das Initialisieren des Speichers mit<br />

Zufallswerten verhindert werden.<br />

Gelingt es dem Angreifer den kompletten Speicher des Systems zu kopieren und ist ihm<br />

der Programmcode bekannt, erschweren diese Maßnahmen lediglich ein Kompromittieren<br />

des Systems.<br />

6.1.3 TCP/IP Netzwerk-Stack<br />

In der aktuellen Umsetzung des TSN wird für die Anbindung des Knotens an die Basisstation<br />

der lightweight Internet Protocol (lwIP)-Stack von eCos verwendet. Hierbei handelt es<br />

sich um eine schlanke TCP/IP-Implementierung, die insbesondere für den Einsatz in kleinen<br />

Systemen optimiert wurde. Hierbei wurde der TCP/IP-Stack mit einem Mindestmaß<br />

an Funktionalität umgesetzt.<br />

Der Einsatz eines lwIP hat den Vorteil, dass damit ein sehr kleines standardkonformes System<br />

erstellt werden kann. In diesem Abschnitt beschreiben wir denkbare Erweiterungen für<br />

den lwIP-Stack oder eines alternativen Stacks, um diesen an die aktuellen Anforderungen<br />

an drahtlose Sensornetzwerke anzupassen.<br />

IPv6<br />

Das Internet Protocol Version 4 (IPv4) ist auf einen Adressraum von vier Milliarden Adressen<br />

beschränkt. Aufgrund des stetigen Wachstums des Internets herrscht bereits heute eine<br />

Knappheit der Adressen. Laut aktuellen Schätzungen werden im Jahr 2011 die letzten<br />

IPv4 Adressen aufgebraucht sein [21]. Neben den Problemen, die sich durch den kleinen<br />

Adressraum ergeben, hat IPv4 noch weitere Nachteile, die sich nur durch Erweiterungen<br />

(z.B. IPsec) oder nur eingeschränkt lösen lassen (Mobile IP).<br />

Für viele der Probleme von IPv4 bietet das Nachfolgeprotokoll Internet Protocol Version<br />

6 (IPv6) eine Lösung. Eine detaillierte Beschreibung des Protokolls ist in [13] zu finden.<br />

Die wesentlichen Verbesserungen gegenüber IPv4 lassen sich wie folgt zusammenfassen:<br />

• Vergrößerung des Adressraums von 32 auf 128 Bit,<br />

• zustandslose und automatische Konfiguration von Netzwerkgeräten,<br />

• Mobile IP [24] sowie Vereinfachung von Umnummerierung [8] und Multihoming [9],<br />

• Integration von Sicherheitsmechanismen,<br />

90


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

• verbesserte Unterstützung von Quality of Service und Multicast sowie<br />

• Vereinfachung und Verbesserung des Protokollrahmens (Kopfdaten) 8<br />

Obwohl IPv6 sehr viele Vorteile gegenüber der Vorgängerversion hat, ist die Verbreitung<br />

des Protokolls aktuell noch sehr gering. Nur wenige Standorte im Internet verwenden bereits<br />

diese Version [20]. Dabei kommen oftmals auch Dual-Stack-Systeme 9 und Tunneling-<br />

Mechanismen 10 zum Einsatz. Der zögerliche Einsatz von IPv6 ist oftmals auf die Befürchtung<br />

von Inkompatibilitäten mit bestehenden Systemen zurückzuführen.<br />

Für ein eingebettetes System, wie den TSN, bietet sich der Einsatz von IPv6 an. Die eingesetzte<br />

Netzwerktopologie hat den Vorteil, dass die Sensorknoten zunächst nur über<br />

einen Gateway-Knoten (Basisstation) mit dem Internet kommunizieren. Hierdurch wird das<br />

Sensornetz gekapselt und Tunneling-Mechanismen, wie sie oftmals aktuell bei IPv6 zur<br />

Vermeidung von Inkompatibilitäten eingesetzt werden, lassen sich leicht integrieren. Die<br />

integrierten Sicherheits- und Konfigurationsmechanismen von IPv6 ermöglichen einen flexiblen<br />

Einsatz des TSN in den Szenarien mit hohen Sicherheitsanforderungen und wechselnden<br />

Umweltbedingungen.<br />

Die verwendete Version des lwIP von eCos unterstützt aktuell kein IPv6. Für den Einsatz<br />

von IPv6 auf dem TSN ist dieses Protokoll zu implementieren. Obwohl IPv6 aktuell nur<br />

wenig eingesetzt wird, existieren doch bereits zahlreiche Umsetzungen. Abhängig von den<br />

jeweiligen Lizenzen der Implementierung, deren Größe und Funktionsumfang sollte eine<br />

Implementierung ausgewählt und auf den TSN portiert werden.<br />

eTCP<br />

Das Ziel dieses Abschnittes ist es, kurz zu erläutern, welche Probleme bei der Verwendung<br />

von TCP bei drahtlosen Übertragungsstrecken auftreten und welche Gegenmaßnahmen<br />

getroffen werden können. Darüber hinaus soll geklärt werden, ob eine eventuell proprietäre<br />

eTCP-Lösung integriert werden kann.<br />

TCP Funktionalität Das TCP-Protokoll stellt höheren Schichten eine zuverlässige, verbindungsorientierte<br />

Kommunikation zur Verfügung. TCP selbst setzt jedoch auf dem unzuverlässigen<br />

datenpaketorientierten Protokoll IP auf. Um die oben genannten Eigenschaften<br />

gewährleisten zu können, verwendet das TCP folgenden Mechanismen:<br />

• Drei-Wege-Handshake zum Verbindungsaufbau, 4-Wege-Handshake zum Verbindungsabbau<br />

8 Durch die Unterteilung des Paketkopfes in Basis- und Extension-Header, kann die Paketverarbeitung auf<br />

den Zwischensystemen stark vereinfacht werden. Die Header werden hinsichtlich ihrer Relevanz für die<br />

Zwischensysteme sortiert, so dass nur ein geringerer Teil ausgewertet werden muss.<br />

9 Dual-Stack-System, sind System, die sowohl IPv4- als auch IPv6-Pakete verarbeiten können.<br />

10 Beim Tunneling werden IPv6-Pakete in IPv4-Pakete eingepackt und versendet.<br />

91


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

• Sequenznummern<br />

• Zwischenspeicher, um bei Paketüberholungen die richtige Reihenfolge wieder herstellen<br />

zu können<br />

• Acknowledgements und Timer um die erfolgreiche bzw. nicht erfolgreiche Übertragung<br />

eines Paketes zu signalisieren<br />

• Flusskontrolle zwischen Sender und Empfänger, indiziert durch die Information in<br />

den Acknowledgement Paketen, die anzeigt wie viele Bytes maximal empfangen werden<br />

können<br />

Zusätzlich realisiert TCP einen fairen Umgang mit Netzwerkressourcen. Die Anzahl der<br />

Bytes, die gleichzeitig gesendet werden dürfen, wird im Congestion Window gespeichert<br />

und schrittweise, beim Erhalt positiver Acknowledgements, erhöht (Slow Start). Beim Eintreffen<br />

von „Duplicate Acknowledgements“, die Übertragungsfehler, also Paketverluste indizieren,<br />

wird das Congestion Window jeweils halbiert.<br />

Die Literaturquellen in [10, 50] bieten sehr gute Einführungen in das TCP-Protokoll.<br />

TCP und drahtlose Übertragungskanäle In den vergangenen Jahren wurde die Performanz<br />

von TCP im Bereich drahtloser Netze intensiv untersucht. Der Grund hierfür ist<br />

der signifikante Leistungsverlust des TCP-Protokolls in heterogenen Netzen. Der Durchsatz,<br />

der über eine TCP-Verbindung erreicht werden kann, hängt stark von der Größe des<br />

Congestion Windows 11 ab. Dieses wird bei Paketverlusten immer halbiert, da das TCP<br />

diese Verluste immer als „Congestion“ also als Überlastung des Netzes interpretiert und<br />

aus Fairnessgründen folglich seine eigene Last reduziert. Dies geschieht insbesondere<br />

auch dann, wenn die Pakete auf der drahtlosen Übertragungsstrecke verloren gehen, z.B.<br />

wegen Interferenzen.<br />

Die verfolgten Lösungsansätze lassen sich in die folgenden drei Kategorien einteilen:<br />

1. End-to-End: Die verwendeten Maßnahmen betreffen die Datensenke und die Quelle,<br />

jedoch keine Zwischensysteme. Zum Einsatz kommen beispielsweise „selective acknowledgements“<br />

[23, 17], mit denen der Empfänger anzeigen kann, welche Pakete<br />

korrekt empfangen wurden. Eine andere Möglichkeit ist die „Explicit Loss Notification“<br />

[7], mit der angezeigt werden kann, dass „duplicate acknowledgements“ nicht<br />

durch Congestion sondern durch Paketverluste in der drahtlosen Verbindung verursacht<br />

wurden. Die TCP NEW Reno Variante [19] bleibt zur Verbesserung der TCP-<br />

Performanz im Fast Recovery Mode, falls nach einer Übertragungswiederholung das<br />

letzte korrekt empfangene Byte kleiner ist als das letzte gesendete. Hierdurch kann<br />

TCP NEW Reno einen Paketverlust pro Round Trip Time kompensieren.<br />

2. Split Connection: Hier werden Übertragungswiederholungen z.B. von der Basisstation<br />

durchgeführt, wenn diese die Pakete erhalten hat, die Pakete aber bei der Über-<br />

11 Das Congestion Window ist ein Hilfsmittel zur Vermeidung von Überlast im Netzwerk.<br />

92


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

tragung über den drahtlosen Kanal verloren gegangen sind. Hierfür müssen die „duplicate<br />

acknowledgements“ aus dem Datenstrom gefiltert werden [6].<br />

3. Link Layer: Diese Ansätze versuchen die TCP-Verbindungen völlig von der schlechten<br />

Übertragungsqualität auf dem drahtlosen Netzwerk zu entkoppeln (vgl. [28]).<br />

Hierfür werden Mechanismen wie Fragmentierung der TCP-Pakete, Erhöhung der<br />

Übertragungswiederholungen im MAC-Layer o.ä. verwendet.<br />

Abbildung 6.7 illustriert die hier skizzierten Ansätze. Dabei ist in allen Teilbildern links eine<br />

mobile Gegenstelle, mittig der Proxy zwischen mobilem Gerät und Internet und rechts die<br />

Basisstation dargestellt.<br />

Die Anwendbarkeit der Lösungsansätze hängt stark davon ab, ob alle an der Kommunikation<br />

beteiligten Geräte durch eine Instanz verwaltet werden. Nur dann sind Ansätze wie<br />

End-to-End bzw. Split-Connection überhaupt realisierbar. Trotzdem bleibt bei diesen Ansätzen<br />

der erhöhte Aufwand für die Adaption der TCP-Implementierungen bzw. der Zwischensysteme<br />

zu beachten. Die Veränderung des Link Layers, z.B. durch Erhöhen der<br />

Anzahl der Übertragungswiederholungen kann auf dem TSN-Knoten umgesetzt werden,<br />

ohne dass andere Systeme verändert werden müssten. Die in [28] veröffentlichten Untersuchungen<br />

haben gezeigt, dass die Anzahl der über den drahtlosen Kanal übertragenen<br />

Bytes unabhängig von der Anzahl der Übertragungswiederholungen im MAC ist (vgl. Abbildung<br />

6.8). Hieraus kann man schließen, dass das Auslösen der Übertragungswiederholung<br />

durch den MAC sehr viel effizienter ist, als eine entsprechende Reaktion im TCP.<br />

Dieses resultiert aus der Tatsache, dass weniger Header bearbeitet werden müssen. Auch<br />

eine Fragmentierung der TCP-Pakete auf MAC-Ebene ist, wegen der geringeren Headerinformationen<br />

deutlich effizienter als eine Fragmentierung auf TCP-Ebene (siehe Abbildung<br />

6.9).<br />

TSN und TCP Der voraussichtliche Einsatz des TSN als lokale Senke innerhalb eines<br />

drahtlosen Sensornetzes und als Bridge zu einem Einsatzzentrum hat einen deutlichen<br />

Einfluss auf die zu erwartenden Informationsflüsse, gerade weil TCP nur im Rahmen<br />

der Bridge-Funktionalität verwendet wird. Bei einem derartigen Netzwerkaufbau wird der<br />

Nachrichtenaustausch eher vom TSN zum Einsatzzentrum fließen, da in dieser Richtung,<br />

die erkannten Ereignisse zur Auswertung/Reaktion verbreitet werden müssen. Da aktuell<br />

keine Aktorik im Netzwerk vorhanden ist, werden in der Rückrichtung selten Daten fließen.<br />

Der Informationsfluss vom Einsatzzentrum zum TSN wird wahrscheinlich ausschließlich<br />

aus kurzen Konfigurationsnachrichten, mit denen Parameter verändert werden, bestehen.<br />

Bei dem hier vorliegenden Nachrichtenaustausch können die vom TCP ausgelösten Performanzprobleme<br />

vernachlässigt werden. Diese resultieren aus der Verringerung des Congestion<br />

Windows beim Eintreten von Übertragungsfehlern. Hierdurch wird der Durchsatz<br />

deutlich verringert. Da im TSN-Szenario nur geringe Datenmengen ausgetauscht werden,<br />

ist der maximale Datendurchsatz von geringer Bedeutung. Interessanter erscheint hier die<br />

Verzögerungszeit, die durch die Paketverluste ausgelöst wird. Um diese klein zu halten,<br />

sind wahrscheinlich Link-Layer-Ansätze zu bevorzugen. Eventuell wäre ein proprietäres<br />

verbindungsorientiertes Transportprotokoll dem TCP vorzuziehen, falls sehr kurze Verzö-<br />

93


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Abbildung 6.7: Kategorisierung der Ansätze zur Verbesserung der TCP-Performanz<br />

in heterogenen Netzwerken<br />

94


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Abbildung 6.8: Anzahl der in den drahtlosen Kanal gesendeten Bytes in<br />

Abhängigkeit von der Anzahl der Übertragungswiederholungen im<br />

MAC und der Bitfehlerrate (BER)<br />

gerungszeiten erreicht werden sollen. Damit ließe sich der relativ komplexe Verbindungsaufbau<br />

des TCP-Protokolls vermeiden.<br />

6.2 Optimiertes Hardwarekonzept<br />

In diesem Abschnitt werden die Möglichkeiten diskutiert, das Hardwarekonzept des TSN<br />

zu verbessern. Die Veränderungen sollen die Systemleistung, die benötigte Fläche, die<br />

Programmierung, die Sicherheit und den Energiebedarf des Knoten verbessern. Die Veränderungen<br />

beziehen sich darauf, vorhandene Komponenten zu verändern oder neue<br />

Komponenten hinzuzufügen.<br />

Zu Beginn des Abschnittes wird eine neue Komponente (Reset-Controller) sowie das Konzept<br />

des Clock-Gating und des Power-Gating vorgestellt. Im Anschluss werden mögliche<br />

Veränderungen an den bereits vorhandenen Komponenten AES, SHA1/PRNG, ECC,<br />

SPI, Speicheranbindung und LEON2-Registerfile diskutiert. Der letzte Abschnitt beschäftigt<br />

sich mit dem Schutzkonzept des TSN. In diesem werden Möglichkeiten aufgezeigt, die<br />

Sicherheit des Systems zu verbessern.<br />

95


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Abbildung 6.9: Datenrate in Abhängigkeit von der Paketgröße auf MAC bzw. TCP<br />

Ebene, und der Bitfehlerrate (BER)<br />

6.2.1 Einfügen neuer Komponenten<br />

In diesem Abschnitt werden Komponenten vorgestellt, die zu dem bisherigen Entwurf hinzugefügt<br />

werden sollen. Eine davon verbessert die Stabilität (Reset-Controller) des Sensorknotens.<br />

Mit der Einführung des Clock-Gatings und eventuell des Power-Gatings verringert<br />

man den Energiebedarf des Systems.<br />

Reset-Controller<br />

Der TSN kann bisher nur im Ganzen über ein globales Reset-Signal neu gestartet werden.<br />

Nach diesem Reset ist eine Initialisierung aller Teilkomponenten des Systems nötig. Dies<br />

verbraucht zusätzliche Ressourcen wie Energie und Zeit.<br />

Im normalen Betrieb kann es aus Gründen der Betriebssicherheit oder zum Schutz von<br />

Daten notwendig werden, einzelne Teile des Systems neu zu starten. Detektiert ein Sensor<br />

einen möglichen Angriff, so kann die Software dafür sorgen, dass z.B. die Kryptokomponenten<br />

zurückgesetzt werden und dadurch keine sensiblen Daten mehr im Speicher<br />

enthalten sind. Um dies realisieren zu können, soll ein Reset-Controller in das System<br />

eingefügt werden. Mit diesem können, durch Software gesteuert, Bits gesetzt werden, die<br />

dann ein Reset einzelner Komponenten auslösen.<br />

Der Reset-Controller kann als Register, dessen einzelne Bit-Stellen mit den Reset-Signalen<br />

der verschiedenen Komponenten verbunden sind, an den Memory-Controller angeschlossen<br />

werden. Das Register kann beschrieben und gelesen werden. Es wird an allen Bit-<br />

Positionen mit „1“ initialisiert, da die Reset-Signale LOW-aktiv sind. Schreibt man an eine<br />

96


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Position eine „0“, wird die entsprechende Komponente neu gestartet und im Anschluss das<br />

Bit im Reset-Controller wieder auf „1“ gesetzt.<br />

Der Controller sollte als Memory-Mapped-I/O Komponente, analog zu den kryptografischen<br />

Modulen, in das System integriert werden. Dadurch kann das Lesen und Schreiben<br />

des Controllers durch einfache Speicherzugriffe realisiert werden.<br />

Einführen von Clock-Gating<br />

Der TSN verwendet in der aktuellen Version kein Clock-Gating, so dass das Clock-Signal<br />

stets zu jeder Zeit zu jeder Komponente weitergeleitet wird. Das Clock-Gating wird dazu<br />

benutzt, den Systemtakt an den Registern der Schaltung zu unterbrechen, um somit das<br />

interne Schalten der Flipflops zu verhindern und Energie zu sparen. Dieses Unterbrechen<br />

wird immer dann eingesetzt, wenn der aktuelle Zustand des Systems den Zugriff auf die<br />

Register nicht zulässt.<br />

Abbildung 6.10: Clockgating-Controller bestehend aus Latch und OR-Gatter<br />

Durch dieses Verfahren kann, wie bereits erwähnt, der Energieverbrauch des Systems gesenkt<br />

werden. Der Flächenbedarf vergrößert sich durch die zusätzliche Steuerlogik nicht<br />

wesentlich. Durch die Verwendung der Clock-Gating-Logik können andere Schaltungselemente,<br />

wie z.B. einige Multiplexer, verkleinert werden oder entfallen. Dadurch fällt der<br />

Hardwareoverhead nicht ins Gewicht. Das Syntheseprogramm 12 erkennt selbständig, welche<br />

Register gerade angesprochen werden können und welche nicht. Die Abbildung 6.10<br />

zeigt den Aufbau eines Clock-Gating-Elements. Am Eingang liegen die Systemclock sowie<br />

das „Clock Enable“ an, welches den Ausgang aktiviert, so dass das Signal der Systemclock<br />

an die angeschlossene Komponente weiter geleitet wird.<br />

Als Beispiel kann eine Finite State Machine (FSM) dienen (vgl. Abbildung 6.11). Diese hat<br />

mehrere Zustände mit „Reset“ als Startzustand. Danach geht die FSM in den Zustand „Register<br />

0“ über. In diesem Zustand kann ausschließlich das Register 0 geschrieben werden.<br />

Ein Zugriff auf Register 1 bis 3 ist nicht möglich. Im aktuellen Zustand wartet die FSM nun<br />

auf ein Ereignis auf dem Clocksignal, in der Regel eine steigende Flanke, sowie darauf,<br />

dass das Signal „WENB“ („Write ENaBle“) den Wert „0“ annimmt. Dabei wird der Wert<br />

am Dateneingang in das Register 0 übernommen. In einem herkömmlichen Design wird<br />

das Clocksignal stets an alle Register (0 bis 3) weitergeleitet, ohne dass Vorbedingungen<br />

eine Rolle spielen. Im hier gezeigten Beispiel ist sichtbar, dass die Register 1 bis 3 kein<br />

12 Ein Programm zur Erzeugung der Gatternetzliste aus dem VHDL-Code.<br />

97


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Clocksignal brauchen, wenn sich die FSM im Zustand „Register 0“ befindet, da die Register<br />

1 bis 3 den Wert am Eingang nicht übernehmen können. Das Synthesetool analysiert<br />

eine solche FSM und erkennt selbständig die Vorbedingungen, die erfüllt sein müssen,<br />

damit die Register den am Eingang liegenden Wert übernehmen. Für den Fall, dass die<br />

Vorbedingung nicht erfüllt wird, wird das Clocksignal nicht an das Register weitergeleitet,<br />

sondern bleibt auf „0“.<br />

Abbildung 6.11: Finite-State-Machine mit 5 Zuständen<br />

Einführen von Power-Gating<br />

Power-Gating bezeichnet eine Technologie bei der mit Hilfe von Leistungstransistoren einzelne<br />

Hardwarekomponenten von der Energieversorgung abgetrennt werden können. Die<br />

Verwendung des Power-Gatings soll den Energieverlust durch Leckströme reduzieren. In<br />

den typischen Einsatzszenarien von drahtlosen Sensornetzen sind viele Komponenten für<br />

lange Zeit inaktiv. In der inaktiven Phase, wird auf Grund der Leckströme, Energie verschwendet.<br />

Die Größe der Leckströme nimmt mit Abnahme der Strukturgrößen zu (vgl.<br />

Abbildung 6.12).<br />

Abbildung 6.12: Zunahme der Leckströme bei Verkleinerung der Strukturgröße[1]<br />

98


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Das IHP fertigt zur Zeit Halbleiter mit einer Strukturgröße von 0, 25µm. Bei dieser Technologie<br />

entfallen ca. 10% des Energieverbrauchs auf die Leckströme. Darüber hinaus werden<br />

am IHP Versuche unternommen, die Strukturgröße auf 0, 13µm zu verringern. Bei dieser<br />

Technologie entfallen dann bereits 25% des Energieverbrauchs auf die Leckströme (vgl.<br />

Abbildung 6.12). Diese beiden Werte zeigen, wie wichtig es ist, Leckströme im Bereich der<br />

eingebetteten Low-Power Systeme zu verringern.<br />

Um mit Hilfe von Power-Gates die Leckströme zu reduzieren, werden sie in die Energieversorgung<br />

der abzuschaltenden Teilblöcke eingebunden. Sie müssen die Hardware<br />

von der Versorgungsspannung und Masse trennen. Das An- und Abschalten der Power-<br />

Gates übernimmt ein Power-Gating-Controller. Dieser enthält einen eingebauten Timer,<br />

der nach Ablauf einer Zeitspanne die abgeschaltete Komponente automatisch reaktiviert.<br />

Das Schalten kann ebenso durch einen externen Interrupt veranlasst werden (vgl. Abbildung<br />

6.13). In Abbildung 6.14 ist der Aufbau der eben beschriebenen Power-Gating<br />

Architektur dargestellt.<br />

Abbildung 6.13: Darstellung eines Power-Gating-Controllers<br />

Abbildung 6.14 zeigt einen abschaltbaren Logikblock (Power-Gated Functional Block). Dieser<br />

kann über die Transistoren von der Versorgungsspannung und von der Masseleitung<br />

getrennt werden. Gesteuert wird dieser Schalter durch den Power-Gating-Controller. Dessen<br />

Aufbau ist in Abbildung 6.13 dargestellt.<br />

Abbildung 6.14: Darstellung einer Power-Gating Architektur<br />

Trennt man eine Komponente von der Energieversorgung verliert sie alle Daten der internen<br />

Register. Sind diese wichtig und werden nach dem Zuschalten wieder benötigt,<br />

99


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

müssen sie vor dem Abschalten gesichert werden. Dazu gibt es von allen wichtigen Registern<br />

ein Duplikat, das als nicht-flüchtiger Speicher ausgelegt ist. In diesem werden die<br />

wichtigen Inhalte gerettet und später wieder ausgelesen. Im TSN könnten damit alle Kryptokomponenten<br />

abgeschaltet werden. Zu beachten ist hierbei, dass Register, die Schlüssel<br />

enthalten, auf sichere Art 13 zwischengespeichert werden müssen. Darüber hinaus kann<br />

die DSU abgeschaltet werden, da diese nur zur Inbetriebnahme des TSN notwendig ist.<br />

6.2.2 Veränderungen an vorhandenen Komponenten<br />

In diesem Abschnitt werden Veränderungen an Komponenten zur Minimierung des Flächenund<br />

Energiebedarfs sowie zur Erhöhung der Performanz diskutiert. Die Veränderungen<br />

beziehen sich dabei in erster Linie auf die kryptografischen Komponenten AES, SHA1 und<br />

ECC. Weiterhin werden Verbesserungen am LEON2-Prozessor vorgestellt.<br />

In der aktuellen Implementierung belegt der TSN ca. 35mm 2 Siliziumfläche. Zwar ist der<br />

Prozessor sehr leistungsfähig, dennoch erscheint die Fläche recht groß. In Anbetracht der<br />

hohen Kosten pro Quadratmillimeter sollte angestrebt werden, die Fläche, ohne Einbußen<br />

an der Funktionsweise, zu verkleinern.<br />

Optimierung des AES<br />

Die AES-Komponente kann auf verschiedene Weise verbessert werden. Als erstes kann<br />

die Fläche reduziert werden, indem bei den Datenregistern auf den Reseteingang verzichtet<br />

wird. Der initiale Wert der Datenregister ist nach einem Neustart des TSN nicht von<br />

Bedeutung. Neben dem Einsatz von kleineren Flipflops ohne Reset kann der Resetpfad<br />

dementsprechend kleiner ausgeführt werden. Einige Treiberbausteine können entfallen.<br />

Memory Controller<br />

SHA1<br />

PRNG<br />

AES<br />

ECC<br />

RAM<br />

Abbildung 6.15: Veränderte Anbindung der kryptografischen Komponenten<br />

zwischen Memory-Controller und Speicher<br />

13 Das bedeutet, dass ein Zugriff durch Dritte nicht möglich ist.<br />

100


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Um weitere Fläche einzusparen, könnte bei der AES-Komponente ein Teil der Adresslogik<br />

entfernt werden. Bisher werden die Blöcke der zu verarbeitenden Nachricht in verschiedene<br />

Register geschrieben, die alle separat adressiert werden. Man kann die einzelnen<br />

Blöcke alle an eine Adresse schreiben und diese intern an die richtige Position des Registers<br />

legen. Der Nachteil dieser Methode ist, dass der Programmcode schlechter lesbar ist<br />

(vgl. Listings 6.1 und 6.2).<br />

...<br />

//AES write data word<br />

//write(Adress, value);<br />

//AES first word<br />

write_reg(0x20100000, 0x01234567);<br />

//AES second word<br />

write_reg(0x20100004, 0x89abcdef);<br />

//AES third word<br />

write_reg(0x20100008, 0xabbeabbe);<br />

//AES second word<br />

write_reg(0x2010000A, 0xc0dec0de);<br />

Listing 6.1: Schreibbefehl für die Verschlüsselung von Daten mit expliziten<br />

Adressen<br />

...<br />

//AES write data word<br />

//write(Adress, value);<br />

//AES first word<br />

write_reg(0x20100000, 0x01234567);<br />

//AES second word<br />

write_reg(0x20100000, 0x89abcdef);<br />

//AES third word<br />

write_reg(0x20100000, 0xabbeabbe);<br />

//AES second word<br />

write_reg(0x20100000, 0xc0dec0de);<br />

Listing 6.2: Schreibbefehl für die Verschlüsselung von Daten auf eine Adresse<br />

Optimierung des SHA1/PRNG<br />

Das SHA1/PRNG Modul wird verwendet, um den Hashwert über Daten zu bilden und um<br />

pseudozufällige Zahlen zu erzeugen. Möchte man Daten des TSN übertragen, geschieht<br />

dies über UART. Diese sind mit Radiomodulen oder seriellen Übertragungsleitungen verbunden.<br />

In der Regel werden Daten vor dem Senden signiert oder deren Signatur nach<br />

dem Empfang überprüft.<br />

101


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

In [41] wurde ein TCP-System evaluiert. Dabei wurde festgestellt, dass einfache Kopieroperationen<br />

einen Großteil der Systemlast ausmachen. Daher bietet es sich bei kopierintensiven<br />

Anwendungen an, diese zu optimieren, so dass die Anzahl an Kopieroperationen<br />

minimiert wird. Es wird versucht, die Daten mit einer einzigen Kopieroperation allen notwendigen<br />

Komponenten zur Verfügung zu stellen. Eine solche Vorgehensweise wird als<br />

„Single Copy Architecture“ bezeichnet.<br />

Am Beispiel des Sendens von Daten, über die der Hashwert gebildet wird, soll der bisherige<br />

Ablauf kurz erläutert und die Optimierung vorgestellt werden.<br />

Der LEON2-Prozessor lädt die Daten aus dem Speicher und überträgt diese anschließend<br />

an das SHA1/PRNG Modul. Nach der Erzeugung des Hashwertes, wird dieser vom Prozessor<br />

ausgelesen und mit den Daten an einen der UARTs zur Übertragung gesendet.<br />

Die Überprüfung eines Hashwertes erfolgt analog. Die empfangenen Daten werden durch<br />

den Prozessor von einem der UARTs gelesen. Anschließend werden die Daten in das<br />

SHA1/PRNG Modul geschrieben und der Hashwert ermittelt. Diese wird mit dem empfangenen<br />

Hash verglichen.<br />

Eine Optimierung kann erreicht werden, indem die SHA1/PRNG Komponente direkt an<br />

den Speicherbus angebunden wird (vgl. Abbildung 6.15). Dadurch vereinfacht sich das<br />

Senden und Empfangen „gehashter“ Daten erheblich. Der LEON2 lädt die Daten aus dem<br />

Speicher und überträgt sie an den UART. Dabei wird von den Daten der Hashwert durch<br />

den SHA-1 berechnet, da dieser permanent auf dem Speicherbus lauscht. Im Anschluss<br />

an die Kopieroperation (von Speicher nach UART) kann der Hashwert aus dem SHA1<br />

ausgelesen und ebenfalls übertragen werden. Beim Empfang gelangen die Daten beim<br />

Auslesen durch den Prozessor, über den Speicherbus, in das SHA1-Modul. In diesem wird<br />

direkt der Hashwert berechnet und kann anschließend mit dem empfangenen Hashwert<br />

verglichen werden.<br />

Durch diese Verlagerung des SHA1/PRNG Moduls kann die Systemlast 14 verringert und<br />

somit Energie gespart werden.<br />

Für eine weitere Optimierung kann auch hier die Adresslogik vereinfacht werden. Dies<br />

wurde bereits beim AES-Modul (vgl. 6.2.2) diskutiert. Das SHA1/PRNG-Modul erhält einen<br />

512-Bit langen Datenblock, der in sechzehn 32-Bit Teilblöcke unterteilt ist. Diese sind alle<br />

einzeln adressierbar und können separat ausgelesen und geschrieben werden. An dieser<br />

Stelle kann die Adressierung auf nur einen Teilblock reduziert werden. Die in diesen<br />

Teilblock geschriebenen Daten werden bei jedem Schreibzugriff einen Teilblock weitergeschoben.<br />

Das Auslesen erfolgt analog. Somit gelangen alle Daten in die vorgesehenen<br />

Register.<br />

Der 160-Bit Hashwert des Algorithmus ist ebenfalls in 32-Bit Teilblöcke gegliedert. Diese<br />

sind zudem einzeln adressierbar. Auch hier reicht die Adressierung eines Teilblocks, um<br />

die Daten lesen und schreiben zu können. Durch diese Veränderung kann die Adresslogik<br />

minimiert werden. Zur Zeit werden einundzwanzig 32-Bit Register und ein 8-Bit Kontrollregister<br />

adressiert. Bei einer Optimierung würde sich die Adresslogik nur noch auf drei<br />

14 Belastung des Prozessors und des Speichers<br />

102


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Register beschränken. Der Nachteil hierbei ist, genau wie beim AES, dass die entsprechende<br />

Software unübersichtlich und schlechter lesbar wird (vgl. Listing 6.1 und 6.2).<br />

Optimierung des ECC<br />

Das ECC-Modul unterstützt die Berechnung von Punktmultiplikationen auf elliptischen Kurven<br />

über erweiterten Binärfeldern (GF(2 m )). Die elliptische Kurve wird, gemäß dem NIST-<br />

Standard, über alle Punkte definiert, die die Gleichung<br />

y 2 + xy = x 3 + x 2 + b<br />

erfüllen. Auf dieser elliptische Kurve werden die kryptographischen Operationen ausgeführt.<br />

Das ECC-Modul bietet ebenfalls verschiedene Optimierungsansätze. Bisher ist es<br />

notwendig, vor der Durchführung einer Punktmultiplikation, den Kurvenparameter b zu<br />

schreiben, da dieser in Registern gehalten wird. Der ECC wird nur auf einer Kurve durchgeführt,<br />

die durch den Kurvenparameter b beschrieben wird. Der Parameter ist konstant<br />

und muss nicht verändert werden. Damit können diese Register entfallen und der Kurvenparameter<br />

b „festverdrahtet“ werden. Dies spart Fläche und Energie.<br />

Der ECC besitzt intern eine Quadriereinheit. Diese spezialisierte Einheit führt eine Quadrierung<br />

in nur einem Taktzyklus durch. Um Fläche einzusparen, könnte man diese entfernen<br />

und die Multiplikationseinheit des LEON2-Prozessors verwenden. Eine andere Möglichkeit<br />

wäre, den Quadrierer durch einen kleineren langsameren Multiplizierer zu ersetzen.<br />

Beide Varianten würden Fläche sparen, aber auf Kosten der Geschwindigkeit des Algorithmus<br />

gehen und werden daher nicht umgesetzt. Denn ein Multiplizierer benötigt mehr<br />

Taktzyklen als eine spezialisierte Quadrierereinheit, um die gleiche Berechnung auszuführen.<br />

Eine weitere Möglichkeit, Fläche und Energieverbrauch zu optimieren, ist die Größe des<br />

internen Multiplizierers anzupassen. In den Arbeiten ([45], [40]) werden verschiedene Multiplizierervarianten<br />

für das ECC Modul verglichen. Diese Gegenüberstellung ist auszugsweise<br />

in Tabelle 6.1 zusammengefasst. Die erste Spalte zeigt die Größe der Faktoren in<br />

Bit, die zweite zeigt die Anzahl der Segmente, in welche die Faktoren zerlegt werden.<br />

Die Anzahl der benötigten Takte für die Multiplikation ist in Spalte drei zu finden. Spalten<br />

vier und fünf zeigen die benötigte Fläche und den Energieverbrauch für den Multiplizierer.<br />

Letzterer wurde für eine Frequenz von 33 MHz simuliert und berücksichtigt nicht den<br />

Ruhestrom der Schaltung.<br />

Die momentan im TSN verwendete ECC Komponente enthält einen für 233-Bit Faktoren<br />

ausgelegten 4-Segment-Multiplizierer. Dieser ist in Tabelle 6.1 mit einem * gekennzeichnet.<br />

Die Größe des Multiplizierers ist in erster Linie von der Bitbreite der Faktoren abhängig,<br />

wie man in Tabelle 6.1 gut erkennen kann. Bei einer Erhöhung der Anzahl an Segmenten<br />

nimmt die Fläche des Multiplizierers ab und der Energieverbrauch zu. Bei einer Segmentierung<br />

der Multiplikation wird diese in mehrere kleinere Multiplikationen aufgeteilt. Dadurch<br />

müssen mehrere Teilmultiplikationen durchgeführt werden, wodurch die Anzahl der benötigten<br />

Takte und der Energieverbrauch zunimmt.<br />

103


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Tabelle 6.1: Vergleich verschiedener Multiplizierer für Punktmultiplikation der ECC<br />

Komponente<br />

Größe der Faktoren in Bit Segmente Takte Fläche in mm 2 Energieverbrauch in nW s<br />

163 2 3 0,79 4,31<br />

163 4 9 0,45 8,53<br />

163 8 27 0,35 14,99<br />

233 2 3 1,17 5,80<br />

233* 4 9 0,62 11,58<br />

233 8 27 0,44 18,47<br />

571 2 3 4,35 25,00<br />

571 4 9 2,10 38,30<br />

571 8 27 1,31 67,14<br />

Am Beispiel des 233-Bit Multiplizierers soll dies kurz genauer erläutert werden. Der 2-<br />

Segment-Multiplizierer benötigt drei Takte für die Multiplikation. Er belegt dabei eine Fläche<br />

von 1, 17mm 2 und verbraucht 5, 80nW s. Verdoppelt man die Anzahl der Segmente<br />

auf vier, verringert sich die benötigte Fläche um 0, 55mm 2 (47%). Der Energieverbrauch<br />

verdoppelt sich auf 11, 58nW s. Die Operation benötigt dann neun Takte. Unterteilt man<br />

die Multiplikation in acht Segmente, benötigt diese 27 Takte. Der Flächenbedarf verringert<br />

sich, im Vergleich zur 4-Segment-Version um 29% auf 0, 44mm 2 . Der Energieverbrauch<br />

erhöht sich um fast 7nW s auf 18, 47nW s. Daran kann man erkennen, dass entweder die<br />

Fläche oder der Energieverbrauch im Vergleich zum bisher eingesetzten Multiplizierer verbessert<br />

werden können. Der im TSN verwendete ECC besitzt jedoch bereits das beste<br />

Verhältnis zwischen Fläche, Energieverbrauch und Verarbeitungsgeschwindigkeit.<br />

Optimierung des SPI<br />

Die derzeit verwendete SPI-Komponente ist mit einer Fläche von 173.000µm 2 recht groß.<br />

Dies liegt darin begründet, dass es sich hierbei um eine Standardbibliothekskomponente<br />

handelt, die in weiten Teilen konfigurierbar ist. Diese Konfigurierbarkeit wird hier im wesentlichen<br />

nicht benötigt, so dass eine Eigenentwicklung deutliche Einsparung in der Fläche<br />

bringen kann.<br />

Optimierung der Clock-Select-Komponente<br />

Der LEON2-Prozessor ist mit einer Clock-Select-Komponente ausgestattet. Mit dieser ist<br />

es möglich, den Prozessor über verschiedene Quellen mit einem Takt zu versorgen und<br />

zwischen diesen umzuschalten. Der „Trusted Sensor Node“ verwendet jedoch nur einen<br />

Takt. Somit kann die Clock-Select-Komponente entfallen. Hierdurch reduziert sich die benötigte<br />

Fläche an Silizium im geringen Umfang weiter.<br />

104


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Realisierung des Registerfiles durch Speicher<br />

Das Registerfile 15 des LEON2-Prozessors besteht aus 8 Fenstern je 17 Register á 32 Bit.<br />

Jedes dieser enthält ein globales Register sowie 16 Register, die spezifisch dem einzelnen<br />

Fenster zugeordnet ist. Die 8 Fenster bilden einen zirkularen Stack (Details siehe [49]). Im<br />

„Trusted Sensor Node“ sind die Register durch insgesamt 4352 Flipflops realisiert. Diese<br />

haben einen hohen Energiebedarf. Darüber hinaus belegt das Registerfile eine Fläche<br />

von 3,1mm 2 . Man kann dieses Registerfile durch Static Random Access Memory (SRAM)<br />

ersetzen. Dieser ist kleiner und sparsamer als die Lösung mit Flipflops. Aus Sicht der Arbeitsgeschwindigkeit<br />

sind beide Versionen gleich schnell. Zur Umsetzung wird ein speziell<br />

angepasster Speicher (Triple-Port Memory) benötigt. Die Größe des RAMs lässt sich im<br />

Vorfeld schwer abschätzen, dürfte jedoch bei weniger als 1,5mm 2 liegen.<br />

6.2.3 Schutzkonzept<br />

Gehäuse und Platine<br />

Einfache physikalische Angriffe können verhindert werden, indem Schutzmaßnahmen ergriffen<br />

werden, so dass Datensignale nicht direkt auf der Platine abgreifbar sind. Beispielsweise<br />

können alle Signalleitungen in einer Multilayer-Platine innerhalb der inneren<br />

Schichten geführt werden. Dabei ist es sinnvoll alle Chips (LEON2, Flash, RAM) in BGA-<br />

Ausführung zu verwenden. Alle Pins sind als Lötpunkte unterhalb des ASICs ausgeführt,<br />

so dass einfache Messungen an den Pins der Chips nicht möglich sind (vgl. Abbildung<br />

6.16).<br />

15 Blockweise angeordnete Prozessorregister<br />

Abbildung 6.16: BGA-Gehäuse (Unterseite)<br />

105


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

BGA-Gehäuse sind noch an anderer Stelle von Vorteil: ein Standardgehäuse (wie z.B. das<br />

derzeit verwendete PQFP-128) enthält lediglich den Chip mit den Bonddrähten (vgl. Abbildung<br />

6.17). Ein BGA-Gehäuse, wie in Abbildung 6.19 dargestellt, ist eine Platine auf die<br />

der Chip gebondet wurde (vgl. Abbildung 6.18). Nach dem Aufbringen des Chips auf die<br />

kleine Trägerplatine, kann dieser mit einer Epoxydmasse vergossen werden (vgl. Abbildung<br />

6.20). Um einfachen Angriffen mit Hilfe einer Power-Analysis-Attacke vorzubeugen,<br />

kann es sinnvoll sein, auf der Trägerplatine Kondensatoren unterzubringen (vgl. Abbildung<br />

6.20) und diese ebenfalls mit zu vergießen. Je mehr und je größere Kondensatoren dafür<br />

verwendet werden, desto schwieriger ist es für einen Angreifer die Leistungsaufnahme<br />

des Chips in jedem einzelnen Clocktakt eindeutig zu identifizieren. Vielmehr wird die Leistungsaufnahme<br />

über mehrere Clocktakte „verschmiert“.<br />

Wie in Abbildung 6.18 ersichtlich, können auch mehrere ASICs auf einer Trägerplatine<br />

aufgebracht werden. Nach außen hin erscheint dieses als ein Komplettsystem.<br />

Abbildung 6.17: TSN in einem offenen PQFP-128-Gehäuse<br />

Authentifizierungskomponente<br />

Die Authentifizierungskomponente soll den TSN vor unberechtigten Zugriffen schützen.<br />

Dabei stellt die „Debug Support Unit“ (DSU) eine besondere Schwachstelle im System<br />

dar. Über sie erhält man vollständigen Zugriff auf alle wichtigen Inhalte des Sensorknotens.<br />

Mit Hilfe von Unterbrechungspunkten und anderen Debugmöglichkeiten kann das<br />

System umfangreich untersucht und manipuliert werden. Auf den Schutz dieser seriellen<br />

Schnittstelle sollte besonders geachtet werden.<br />

Ein weiteres Angriffsszenario stellt das unberechtigte Bewegen des Knotens, durch zum<br />

Beispiel Aufheben, dar. Im Falle einer unzulässigen Bewegung des TSN, die über den<br />

Beschleunigungssensor festgestellt wird, sollen sensible Daten gelöscht und das Arbeiten<br />

mit dem Knoten verhindert werden. Bei diesem Szenario ist es schwer, zwischen einem<br />

berechtigten und einem unberechtigten Bewegen des Knotens zu unterscheiden. Es kann<br />

durchaus nötig sein, dass aus Gründen eines veränderten Szenarios oder aufgrund von<br />

106


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Abbildung 6.18: Trägerplatine mit aufgebondeten ASICs<br />

Abbildung 6.19: Chip in einem BGA-Gehäuse<br />

107


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Abbildung 6.20: Trägerplatine mit teilweise vergossenen Kondensatoren<br />

Wartungsarbeiten, der TSN bewegt werden muss. Dabei sollten sensible Daten natürlich<br />

erhalten bleiben.<br />

Zur Unterscheidung, ob das Bewegen des Knotens berechtigt oder unberechtigt durchgeführt,<br />

wird ein Autorisierungsmechanismus eingeführt. Dieser ist in Abb. 6.22 beschrieben<br />

und findet kontaktlos statt, so dass der Knoten dazu nicht bewegt werden braucht. Nach<br />

erfolgreicher Autorisierung, findet eine Authentifizierung statt (siehe Abb. 6.23). Erst wenn<br />

diese erfolgreich abgeschlossen wurde, ist der Zugang zur der Programmierschnittstelle<br />

freigegeben.<br />

Die im Folgenden vorgestellte Komponente besitzt die Möglichkeit, zwischen berechtigtem<br />

und unberechtigtem Zugriff zu unterscheiden und gegebenenfalls Schutzmaßnahmen zu<br />

aktivieren.<br />

Abbildung 6.21: Anbindung der Authentifizierungskomponente in den TSN<br />

108


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Die Authentifizierungskomponente wird zwischen die „Debug Support Unit“ und der Programmierschnittstelle<br />

eingebunden (vgl. Abbildung 6.21). Sie sperrt die Pins solange bis<br />

eine erfolgreiche Authentifizierung erfolgt ist. Um eine mögliche Deaktivierung oder Überbrückung<br />

zu verhindern, muss sie unbedingt in den TSN Chip integriert sein. Sie kann<br />

weiterhin bestimmte Schutzmechanismen, wie zum Beispiel das Sperren des Systems,<br />

das Löschen von Schlüsseln oder sensibler Software veranlassen, wenn eine Authentifizierung<br />

mehrfach fehlgeschlagen ist. Eine Alarmmeldung sollte in diesem Fall ebenfalls<br />

gesendet werden.<br />

Zur Authentifizierung kann der ECC und das SHA1/PRNG-Modul des Systems verwendet<br />

werden um ein „Challenge-Response-Protokoll“ zu realisieren. Der Nutzer, der auf<br />

die Programmierschnittstelle des TSN zugreifen möchte, teilt seinen Zugriffswunsch durch<br />

das Senden seiner Identifikationsnummer (UserID) der Authentifizierungskomponente mit<br />

(vgl. Abbildung 6.22). Danach erhält er vom TSN eine Zufallszahl(PRN) und signiert diese<br />

mit Hilfe seines privaten Schlüssels (KeyUsrPriv) und sendet das Paket an die Authentifizierungskomponente<br />

des TSN zurück. Der TSN prüft die Signatur mit dem öffentlichen<br />

Schlüssel des Nutzers (KeyUsrPubl) und anschließend die Daten. Ist das Ergebnis korrekt,<br />

so kann der TSN davon ausgehen, dass kein Dritter die Identifikationsnummer missbräuchlich<br />

verwendet hat. Die Signierung ist notwendig, um einer Man-in-the-Middle Attacke vorzubeugen.<br />

Die Authentifizierungskomponente besitzt also den öffentlichen Schlüssel des<br />

Nutzers, wenn dieser autorisiert ist, auf das System zuzugreifen. Dieser liegt, z.B. mit der<br />

zugehörigen Identifikationsnummer des Nutzers, im internen Flash.<br />

msc User authorization<br />

User<br />

TSN<br />

UserID<br />

UserID valid<br />

PRN<br />

Generate PRN<br />

Sign PRN with KeyUsrPriv<br />

(PRN)KeyUsrPriv<br />

Check signature<br />

with KeyUsrPubl<br />

and check PRN<br />

PRN valid<br />

Authentication protocol<br />

Abbildung 6.22: Authentifizierung des Nutzers am TSN, um Man-In-The-Middle<br />

Attacken zu vermeiden<br />

Im Anschluss wird der Authentifizierungstimer gestartet (vgl. Abbildung 6.23). Vor dessen<br />

Ablauf muss das Authentifizierungsprotokoll abgeschlossen 1<br />

sein. Jetzt erzeugt die Authen-<br />

109


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

tifizierungskomponente mit Hilfe des Pseudo Random Number Generator (PRNG) eine<br />

Zufallszahl (PRN) und signiert diese mit ihrem privaten Schlüssel (KeyTSNPriv). Diese<br />

Zufallszahl wird für jede Authentifizierung neu generiert, um Replay-Attacken zu verhindern.<br />

Diese signierte Zufallszahl wird an den Nutzer gesendet. Dieser überprüft die Signatur<br />

mit dem öffentlichen Schlüssel der Authentifizierungskomponente (KeyTSNPubl) und<br />

inkrementiert die empfangene Zahl. Im Anschluss wird diese mit dem privaten Schlüssel<br />

des Nutzers (KeyUsrPriv) signiert und zurück gesendet. Die Authentifizierungskomponente<br />

nutzt den öffentlichen Schlüssel des Nutzers (KeyUsrPubl), um die Signatur zu prüfen.<br />

Die empfangene inkrementierte Zahl wird mit dem vorab berechneten Ergebnis verglichen.<br />

Sind die Ergebnisse identisch ist der Nutzer berechtigt, die Schnittstellen für eine vordefinierte<br />

Dauer zu benutzen. Die Authentifizierung ist abgeschlossen und der Session Timer<br />

wird gestartet. Während das Protokoll in Abb. 6.22 Man-in-the-Middle-Attacken verhindert,<br />

ist das Protokoll in Abb. 6.23 dafür zuständig Replay-Attacken zu verhindern. Gegebenenfalls<br />

lassen sich beide Protokolle zusammenführen und so optimieren.<br />

msc Authentification protocol<br />

User<br />

TSN<br />

Authentification timer<br />

Generate PRN<br />

and sign it with<br />

KeyTSNPriv<br />

(PRN)KeyTSNPriv<br />

Check the signature<br />

with KeyTSNPubl<br />

Signature is valid<br />

increment PRN and<br />

sign it with<br />

KeyUsrPriv<br />

(PRN+1)KeyUsrPriv<br />

Check the signature with<br />

KeyUsrPubl and check<br />

the PRN<br />

Signature and PRN are valid<br />

Session timer<br />

Abbildung 6.23: Authentifizierung zwischen 1 Nutzer und TSN zum Start einer neuen<br />

Session mit Schutz Replay-Attacken<br />

Der „Trusted Sensor Node“ besitzt einen Bewegungssensor. Dieser registriert Bewegungen<br />

des Knotens. Um zu unterscheiden, ob der Knoten von berechtigten Personen bewegt<br />

wird soll eine Radio Frequenzy Identification (RFID) in die Authentifizierungskomponente<br />

integriert werden. Diese wird im Falle einer Bewegung des TSN aktiviert und versucht im<br />

Anschluss eine Authentifizierung eines in der Nähe befindlichen autorisierten Nutzers zu<br />

ermöglichen. Dieser Nutzer besitzt einen sogenannten RFID-TAG, der die Kommunikation<br />

und die nutzerseitigen Aufgaben einer Authentifizierung ermöglicht. Wird dieser innerhalb<br />

110


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

einer gegebenen Zeitspanne nicht empfangen, sperrt die Komponente oder löscht sensible<br />

Daten.<br />

Bei Verwendung einer RFID kann gegebenenfalls auf die Authentifizierung über die DSU<br />

verzichtet werden. Möchte man über die „Debug Support Unit“ mit dem TSN kommunizieren,<br />

kann zur Authentifizierung ebenfalls ein RFID-TAG verwendet werden. Mit diesem<br />

muss man sich, wie oben bereits beschrieben, an der Authentifizierungskomponente anmelden,<br />

um die DSU freizuschalten.<br />

RFIDs gibt es in verschiedenen Ausführungen. Bei diesen Modulen werden hochfrequente<br />

elektromagnetische Wellen erzeugt mit denen Energie und Daten übertragen werden. Abhängig<br />

vom verwendeten Radiostandard, beträgt die Übertragungsreichweite eines RFIDs<br />

wenige Zentimeter bis hin zu 100m. Für die Authentifizierung an einem Sensorknoten,<br />

sollte ein RFID-System mit geringer Sendeleistung verwendet werden. Dies erhöht die Sicherheit,<br />

da das Mithören durch potentielle Angreifer erschwert wird. Zudem verbraucht<br />

eine leistungsarme RFID Lösung weniger Energie, als Lösungen mit stärkeren Sendern.<br />

Man unterscheidet in der Regel zwei Gruppen von RFIDs: Die passiven und die aktiven<br />

Systeme. Die aktiven Module besitzen eine eigene Energieversorgung. Die passiven RFID<br />

Module werden über die Antenne ihres Funkmoduls mit Energie versorgt, wenn diese entsprechende<br />

Energie eines Senders empfängt.<br />

Der TSN soll auf minimale Leistungsaufnahme im Betrieb optimiert werden, so dass eine<br />

passive RFID-Lösung anzustreben ist.<br />

Reset-Controller<br />

Für den Fall, dass die externe Sensorik einen Angriff vermutet, können die kryptografischen<br />

Module in ihren Ausgangszustand zurückgesetzt werden. Einem potentiellen Angreifer<br />

soll es so nicht möglich sein, einen Schlüssel oder ähnlich schützenswerte Informationen<br />

auszulesen. Bei der SHA1/PRNG-Komponente müssen beispielsweise die Register<br />

W0 bis W15 zurückgesetzt werden. Diese Register enthalten Informationen, die die Basis<br />

zur Generierung einer Pseudozufallszahl bilden. Kennt ein Angreifer diesen Wert, so kann<br />

er die gleichen Pseudozufallszahlen generieren. Beim AES hingegen ist es ausreichend<br />

die vier 32-Bit-Register für den Schlüssel auf „Null“ zu setzen, so dass ein Angreifer den<br />

Schlüssel nicht benutzen kann. Ein direktes Auslesen des Schlüssels ist ohnehin nicht<br />

möglich. Es wäre dem Angreifer lediglich möglich, Daten mit dem gespeicherten Schlüssel<br />

zu ver- bzw. zu entschlüsseln, was durch das Löschen des Schlüssels wirksam verhindert<br />

wird.<br />

111


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

6.3 Energieversorgung<br />

6.3.1 Einführung<br />

Im Abschnitt 6.2 wurden Optimierungen, auch in Hinblick auf die Leistungsaufnahme, vorgeschlagen.<br />

Diese beziehen sich sich auf den LEON-Prozessor und die zusätzlichen Komponenten<br />

zur Unterstützung der kryptografischen Funktionen. Die folgenden Ausführungen<br />

dagegen beschäftigen sich mit Verbesserungen des gesamten Boarddesigns.<br />

6.3.2 Boardkomponenten<br />

Neben dem Prozessor befinden sich weitere Komponenten auf der Platine. Zusätzlich zur<br />

Spannungsregelung sind externe Komponenten, wie SRAM und nichtflüchtiger Speicher in<br />

Form von Flash nötig. Alle Bauelemente könnten einer Prüfung unterzogen werden, ob sie<br />

überhaupt notwendig sind und/oder gegebenenfalls durch energiesparendere Alternativen<br />

ersetzt werden können. Beispielsweise könnte der SRAM und der Flash durch einen sogenannten<br />

Non-Volatile Random-Access Memory (NVRAM) ersetzt werden. Dieser besteht<br />

aus einem SRAM, dessen Inhalt beim Abschalten der Versorgungsspannung durch einen<br />

internen Lithium-Ion-Akku (on-Chip) aufrecht erhalten wird. So könnte der Prozessor die<br />

Energieversorgung des SRAM ein- oder ausschalten. Ein Flash könnte unter Umständen<br />

entfallen. Zu beachten ist bei einer solchen Lösung, dass dafür spezielle Bauelemente notwendig<br />

sind, die deutlich teurer und schwerer zu beschaffen sind als Standardelemente.<br />

Grundsätzlich kann in Erwägung gezogen werden, dass der Prozessor die Spannungsversorgung<br />

für die einzelnen Komponenten auf dem Board ein- und ausschalten kann.<br />

Der Prozessor hat durch die Position als Boardkoordinator den Überblick, welche Komponenten<br />

aktuell benötigt werden oder nicht. Mit diesem Wissen kann der Prozessor die<br />

Energiezufuhr zum jeweiligen Modul (z.B. Funkmodul) unterbrechen oder wiederherstellen.<br />

6.3.3 Alternativen zur Energieversorgung aus Primärbatterien<br />

Vielfach wird die Lebensdauer von Sensorknoten durch die Energieversorgung begrenzt.<br />

Je nach Anwendungsfall kann die Lebensdauer von einigen Tagen bis zu einigen Wochen<br />

betragen. Die erste Möglichkeit ist, Systeme zu benutzen, deren Energiedichte bezogen<br />

auf Baugröße und -gewicht höher ist als bei Primärbatterien. In absehbarer Zeit können<br />

dafür Brennstoffzellen in Frage kommen, in welchen Wasserstoff und Sauerstoff derart<br />

mit einander reagieren, dass bei dem Vorgang elektrische Energie freigesetzt wird. Die<br />

zweite Möglichkeit, die Lebensdauer von Sensorknoten zu erhöhen ist die Gewinnung von<br />

elektrische Energie aus der Umgebung. Diese Energie kann entweder direkt genutzt oder<br />

in einem Akku oder großen Kondensator zwischengespeichert werden. Man bezeichnet<br />

diesen Vorgang als „Energy Harvesting“ und stellt, mit Ausnahme von Solarzellen, einen<br />

relativ jungen Forschungsbereich dar.<br />

112


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Mit den folgenden Verfahren ist es möglich, elektrische Energie aus der Umweltenergie<br />

umzuwandeln:<br />

• Induktive Wandler,<br />

• Kapazitive Wandler,<br />

• Thermoelektrische Wandler,<br />

• Piezoelektrische Wandler und<br />

• Solarzellen<br />

Allen o.g. Systemen ist gemein, dass diese in der Baugröße klein gehalten sind und damit<br />

für den Einsatz in Sensorknoten prädestiniert sind. Nachteilig ist jedoch, dass so nur geringe<br />

Leistungen erreicht werden und besondere Umgebungsbedingungen vorliegen müssen.<br />

Beispielsweise sind induktive und kapazitive Wandler auf Vibrationen angewiesen und<br />

sind auch auf eine sehr schmalbandige Resonanzfrequenz abgestimmt. Weicht die Vibration<br />

in ihrer Frequenz ab, so bricht die elektrische Leistung ein. Silizumbasierte Systeme<br />

können Leistungen von ca. 45nW bis 240µW liefern [48].<br />

Dies zeigt, dass aktuelle Systeme für „Energy Harvesting“ nicht in der Lage sein werden,<br />

leistungsstarke Sensorknoten, wie den TSN, mit ausreichend Energie zu beliefern.<br />

Mögliche Auswege, um einen solchen Sensorknoten dennoch mit Umgebungsenergie zu<br />

versorgen wären:<br />

• Erhöhung der Leistungsfähigkeit des Energy Harvesting Moduls,<br />

• Integration von weitreichenden Power-Save-Modi für Prozessor und Boardkomponenten,<br />

• Integration von Step-Up-Wandlern zur Spannungsversorgung aus geringen Eingangsspannungen,<br />

• Reduzierung der Boardkomponenten (z.B. Beschränkung auf ein Funkmodul) und<br />

• Reduzierung der Duty-Cycle<br />

Mögliche Partner zum Aufbau eines Systems mit Brennstoffzellen oder Energy-Harvesting-<br />

Komponenten könnten sein:<br />

• IZM Fraunhofer, Berlin<br />

• Imtek, Freiburg<br />

• Micropelt, Freiburg und<br />

• EnOcean, Oberhaching.<br />

113


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

Bevor Kooperationen zu den Partnern gesucht werden, sollte jedoch die Leistungsaufnahme<br />

grob abgeschätzt werden. Diese hängt jedoch stark vom Anwendungsfall ab. Ein nicht<br />

zu unterschätzender Vorteil ist, dass bei der Entwicklung eines Sensorknotens und der<br />

dazugehörigen Energieversorgung beides gut aufeinander abgestimmt werden kann.<br />

114


Abkürzungsverzeichnis<br />

AES Advanced Encryption Standard<br />

AHB Advanced High-performance Bus<br />

AMBA Advanced Microcontroller Bus Architecture<br />

APB Advanced Peripheral Bus<br />

API Application Programming Interface<br />

ASIC Application Specific Integrated Circuit<br />

BSI Bundesamt für Sicherheit in der Informationstechnik<br />

BGA Ball Grid Array<br />

CAM Code Attestation Module<br />

CBC Cipher Block Chaining<br />

DHCP Dynamic Host Configuration Protocol<br />

DES Data Encryption Standard<br />

DSS Digital Signature Standard<br />

DSU Debug Support Unit<br />

ECB Electronic Code Book<br />

ECC Elliptic Curve Cryptography<br />

ECDSA Elliptic Curve Digital Signature Algorithm<br />

eCos embedded Configurable operating system<br />

ECPM EC Punktmultiplikation<br />

FPGA Field programmable Gate Array<br />

FSM Finite State Machine<br />

GPIO General Purpose Input/Output<br />

HAL Hardware Abstraction Layer<br />

HARPS Hashed Random Preloaded Subsets<br />

HTTP Hypertext Transfer Protocol<br />

IBL Initial Boot Loader<br />

IPC Interprozesskommunikation<br />

IP Internet Protocol<br />

IPv4 Internet Protocol Version 4<br />

IPv6 Internet Protocol Version 6<br />

L2CAP Logical Link Control and Adaption Layer Protocol<br />

LCP Link Control Protocol<br />

LGPL Lesser GNU Public License<br />

LVTTL Low Voltage Transistor Transistor Logic<br />

lwIP lightweight Internet Protocol<br />

MAC Medium Access Control<br />

MMIO Memory Mapped Input Output<br />

MVM Module Verification Module<br />

MMU Memory Management Unit


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

NIST National Institute of Standards and Technology<br />

NMI None-Maskable Interrupt<br />

NVRAM Non-Volatile Random-Access Memory<br />

OSI Open Systems Interconnection<br />

OTP One Time Programmable<br />

PC Programm Counter<br />

PCB Printed Circuit Board<br />

PHY Physical Layers<br />

PRNG Pseudo Random Number Generator<br />

PPP Point-to-Point Protocol<br />

RAM Random Access Memory<br />

RFID Radio Frequenzy Identification<br />

SAFER Secure And Fast Encryption Routine<br />

SDP Service Discovery Protocol<br />

SHA-1 Secure Hash Algorithmus 1<br />

SNMP Simple Network Managment Protocol<br />

SoC System-on-Chip<br />

SPI Serial Peripheral Interface<br />

SPP Serial Port Profile<br />

SRAM Static Random Access Memory<br />

SSL Secure Sockets Layer<br />

TBC Trusted Boot Chain<br />

TBR Trap Base Register<br />

TC Trusted Computing<br />

TCP Transmission Control Protocol<br />

TCB Trusted Code Base<br />

TCG Trusted Computing Group<br />

(T)FTP (Trivial) File Transfer Protocol<br />

TSN Trusted Sensor Node<br />

UART Universal Asynchronous Receiver Transmitter<br />

VHDL Very High Speed Integrated Circuit Hardware Description Language<br />

116


Literaturverzeichnis<br />

[1] J. Abraham. Integrating Complex I/O in an SoC. Chip Design, 4, 2004.<br />

[2] Aeroflex Gaisler.<br />

http://www.gaisler.com/.<br />

[3] Aeroflex Gaisler. LEON2 Processor User’s Manual, 1.0.30 edition, 2005.<br />

[4] ARM Technology. AMBA Specification (Rev 2.0), 1999.<br />

[5] B. Veer and J. Dallaway. The eCos Component Writer’s Guide, 2001.<br />

http://ecos.sourceware.org/docs-latest/ref/ecos-ref.html.<br />

[6] A. Bakre and B. R. Badrinath. I-TCP: Indirect TCP for Mobile Hosts. In Proceedings<br />

of the 15th International Conference on Distributed Computing Systems (ICDCS),<br />

1995.<br />

[7] H. Balakrishnan, V. N. Padmanabhan, S. Seshan, and R. H. Katz. A comparison of<br />

Mechanisms improving TCP performance over Wireless Links. IEEE/ACM<br />

Transactions on Networking, 5(6), 1997.<br />

[8] T. Chown, S. Venaas, and A. Vijayabhaskar. IETF_RFC: RFC4076 - Renumbering<br />

for stateless DHCPv6. Website, 2005.<br />

http://tools.ietf.org/html/rfc4076.<br />

[9] T. Chown, S. Venaas, and A. Vijayabhaskar. IETF_RFC: RFC5533 - Level 3<br />

Multihoming Shim Protocol for IPv6. Website, 2005.<br />

http://tools.ietf.org/html/rfc5533.<br />

[10] E. Douglas Comer. Internetworking with TCP/IP, Vol.1: Principles, Protocols, and<br />

Architectures. Prentice Hall International, 4 edition, 2000.<br />

[11] GNU + Cygnus + Windows = cygwin.<br />

http://cygwin.com.<br />

[12] J. Daintith. protection domain. Website, 2004.<br />

http://www.encyclopedia.com/doc/1O11-protectiondomain.html.<br />

[13] S. Deering and R. Hinden. IETF_RFC: RFC2460 - Internet Protocol, Version 6<br />

(IPv6) Specification. Website, 1998.<br />

http://tools.ietf.org/html/rfc2460.


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

[14] Z. Dyka and P. Langendörfer. Area Efficient Hardware Implementation of Elliptic<br />

Curve Cryptography by Iteratively Applying Karatsuba’s Method. In DATE, 2005.<br />

[15] eCos Reference Manual, 2008.<br />

http://ecos.sourceware.org/docs-latest/ref/ecos-ref.html.<br />

[16] eCosCentric - eCos Snapshots.<br />

http://www.ecoscentric.com/devzone/snapshots.shtml.<br />

[17] K. Fall and S. Floyd. Simulation-based Comparisons of Tahoe, Reno, and SACK<br />

TCP. Website.<br />

http://www.icir.org/floyd/papers/sacks.pdf.<br />

[18] The Fiasco microkernel.<br />

http://os.inf.tu-dresden.de/fiasco/.<br />

[19] S. Floyd, T. Henderson, and A. Gurtov. IETF_RFC: RFC3782 - The NewReno<br />

Modification to TCP’s Fast Recovery Algorithm. Website, 2004.<br />

http://www.faqs.org/rfcs/rfc3782.html.<br />

[20] S.H. Gunderson. RIPE-57 Dubai: Global IPv6 statistics. Website, Oktober 2008.<br />

http://www.ripe.net/ripe/meetings/ripe-57/presentations/Coli<br />

tti-Global_IPv6_statistics_-_Measuring_the_current_state_of<br />

_IPv6_for_ordinary_users_.7gzD.pdf.<br />

[21] G. Huston. IPv4 Address Report. Website.<br />

http://www.potaroo.net/tools/ipv4/index.html.<br />

[22] T. Itoh and S. Tsujii. A Fast Algorithm for Computing Multiplicative Inverses in<br />

GF(2m) using Normal Bases. In Inf. Comput, 1988.<br />

[23] V. Jacobson and R. Braden. IETF_RFC: RFC1072 - TCP extensions for long-delay<br />

paths. Website, 1988.<br />

http://www.faqs.org/rfcs/rfc1072.html.<br />

[24] D. Johnson, J. Arkko, and C. Perkins. IETF_RFC: RFC3775 - Mobility support for<br />

IPv6. Website, 2004.<br />

http://tools.ietf.org/html/rfc3775.<br />

[25] Keithley. Datasheet Keithley Series 2600. Website, 2010.<br />

http://www.keithley.de/dataasset=50827.<br />

[26] L4ka::pistachio microkernel.<br />

http://l4ka.org/projects/pistachio/.<br />

[27] Dr. P. Langendörfer, F. Vater, S. Peter, G. Panic, and T. Basmer. Deliverable 1.1 und<br />

1.1a Trusted Sensor Node - Hardwareversion 1, 2009.<br />

118


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

[28] P. Langendörfer, M. Methfessel, H. Frankenfeldt, I. Babanskaja, I. Matthaei, and<br />

R. Kraemer. Shielding TCP from Wireless Link Errors: Retransmission Effort and<br />

Fragmentation. The Journal of Supercomputing (Kluwer), 23(3):245–260, 2002.<br />

[29] A. K. Lenstra and E. R. Verheul. Selecting Cryptographic Key Sizes. Journal of<br />

Cryptology: the journal of the International Association for Cryptologic Research,<br />

14(4):255–293, 2001.<br />

[30] Lesswire - leading in wireless worlds: Startseite.<br />

http://www.lesswire.de.<br />

[31] LGPL.<br />

http://www.gnu.org/licenses/lgpl.html.<br />

[32] J. López and R. Dahab. Fast multiplication on elliptic curves over gf(2m) without<br />

precomputation. In CHES, 1999.<br />

[33] Modified GPL for eCos.<br />

http://ecos.sourceware.org/license-overview.html.<br />

[34] NIST Computer Security Division. FIPS 180-1, 2001.<br />

[35] NIST Computer Security Division. FIPS 186-1, 2001.<br />

[36] NIST Computer Security Division. FIPS 186-2, 2001.<br />

[37] NIST Computer Security Division. FIPS 197: Advanced Encryption Standard, 2001.<br />

[38] Okl4-open kernel labs.<br />

http://www.ok-labs.com/.<br />

[39] S. Peter and P. Langendörfer. An efficient polynomial multiplier in gf(2m) and its<br />

application to ecc designs. In DATE, 2007.<br />

[40] S. Peter, P. Langendörfer, and K. Piotrowski. Flexible hardware reduction for elliptic<br />

curve cryptography in gf(2 m ). In Design, Automation and Test in Europe, April 16-20,<br />

2007, Nice, France, 2007.<br />

[41] S. Peter, M. Zessack, F. Vater, G. Panic, H. Frankenfeldt, and M. Methfessel. An<br />

Encryption-Enabled Network Protocol Accelerator. In Wired/Wireless Internet<br />

Communications, 6th International Conference, WWIC 2008, Tampere, Finland, May<br />

28-30, 2008, Proceedings, pages 79–91, 2008.<br />

[42] POSIX. IEEE Std 1003.2-1992 (POSIX.2).<br />

[43] M. Ramkumar and N. Memon. An Efficient Random Key Pre-distributin Scheme.<br />

IEEE Journal on Selected Areas of Communication, 23, 2005.<br />

119


<strong>Abschlussbericht</strong><br />

Trusted Sensor Node<br />

[44] R. L. Rivest, A. Shamir, and L. M. Adelman. A method for obtaining digital signatures<br />

and public key cryptosystems. Technical Report MIT/LCS/TM-82, Laboratory for<br />

Computer Science, Massachusetts Institute of Technology, Cambridge, 1977.<br />

[45] S. and P. Langendörfer. An efficient polynomial multiplier in gf(2 m ) and its application<br />

to ecc designs. In Design, Automation and Test in Europe, April 16-20, 2007, Nice,<br />

France, 2007.<br />

[46] Description of SAFER+.<br />

http://www.quadibloc.com/crypto/co040407.htm.<br />

[47] M. Scott. MIRACL—A Multiprecision Integer and Rational Arithmetic C/C++ Library,<br />

Version 5.0. Shamus Software Ltd, Dublin, Ireland, 2005.<br />

http://indigo.ie/~mscott.<br />

[48] C. Serre, A. Pérez-Rodríguez, N. Fondevilla, J.R. Morante, J. Montserrat, and<br />

J. Esteve. Vibrational Energy Scavenging with SI Technology Electromagnetic<br />

Inertial Microgenerators. In DTIP of MEMS & MOEMS, Stresa, Italy, 26-28 April<br />

2006, 2006.<br />

[49] The SPARC Architecture Manual, Version 8. Website, 1992.<br />

http://www.sparc.org.<br />

[50] W. R. Stevens. TCP/IP Illustrated I, 1993.<br />

http://www.uic.rsu.ru/doc/inet/tcp_stevens/tcp_bulk.htm.<br />

[51] Synopsys. DesignWare DW_apb_ssi Databook, July 2005.<br />

[52] System Architecture Group: About Us: People: Liedtke.<br />

http://i30www.ira.uka.de/aboutus/people/liedtke/nachruf.php.<br />

[53] TCG Specification Architecture Overview. Website, 2007.<br />

http://www.trustedcomputinggroup.org/resources/tcg_architect<br />

ure_overview_version_14.<br />

[54] IEEE 802.15 TG4.<br />

http://www.ieee802.org/15/pub/TG4.html.<br />

[55] Building a toolchain for use with eCos.<br />

http://ecos.sourceware.org/build-toolchain.html.<br />

[56] TUD Betriebssysteme L4Env.<br />

http://www.inf.tu-dresden.de/index.phpnode_id=1431.<br />

[57] uITRON.<br />

http://www.assoc.tron.org/spec/itron/mitron-400e.pdf.<br />

120

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!