Cryptographic Hardware Extension for OpenSSL Library

¨ rich ETH Zu Semesterarbeit Cryptographic Hardware Extension for OpenSSL Library Authoren: K¨ oppel Benedikt [email protected] Schnydrig Ma...
1 downloads 1 Views 3MB Size
¨ rich ETH Zu Semesterarbeit

Cryptographic Hardware Extension for OpenSSL Library

Authoren: K¨ oppel Benedikt [email protected]

Schnydrig Mathias [email protected]

Betreuer: Christoph Keller [email protected]

Luca Henzen [email protected]

2

Contents 1 Abstract 2 Einleitung 2.1 Motivation . . . 2.2 Sicherheitsrisiken 2.3 Use Case . . . . 2.4 Projektinhalt . .

5

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6 6 6 6 7

3 Vorgehen 3.1 Einlesen . . . . . . . . . . . . . . . . 3.2 Software Modell . . . . . . . . . . . . 3.3 Blockdiagramme . . . . . . . . . . . 3.4 VHDL Programmierung . . . . . . . 3.5 Einbindung von generierten Bl¨ocken 3.6 Programmierung des Chips . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

8 8 8 8 8 8 9

4 Hardware 4.1 Evaluation Board . . . . . . . . 4.2 SHA . . . . . . . . . . . . . . . 4.2.1 Hashing . . . . . . . . . 4.2.2 Message Authentication 4.2.3 Resultate . . . . . . . . 4.3 AES . . . . . . . . . . . . . . . 4.3.1 Auswahl . . . . . . . . . 4.3.2 Chiffrierung . . . . . . . 4.3.3 Schl¨ usselexpansion . . . 4.3.4 OFB . . . . . . . . . . . 4.3.5 Resultate . . . . . . . . 4.4 PCI-Express . . . . . . . . . . . 4.5 Blocker . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

9 9 9 10 13 13 13 14 14 16 19 20 20 20

5 Software 5.1 Zweck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 OpenVPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21 21 22 22

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

6 Conclusion 22 6.1 Future Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3

4

1 Abstract Auf sichere Verbindungen u ¨ber das Internet kann heute keine Firma verzichten, die das Internet verwendet. Angriffe wie das Mith¨oren und Ver¨andern von Daten durch Dritte m¨ ussen verhindert werden. VPN-Software, die einen sicheren Tunnel zwischen zwei privaten Netzwerken verf¨ ugbar macht, sind heute weit verbreitet. Durch das Verschl¨ usseln der Nachricht und die Anbringung einer Pr¨ ufsumme wird ein Mith¨oren und Ver¨andern der Nachricht unm¨ oglich gemacht. Die verwendeten Verfahren sind aber rechenintensiv und limitieren deshalb den maximal verf¨ ugbaren Datendurchsatz. In dieser Arbeit wollen wir zwei Algorithmen hardwareunterst¨ utzt beschleunigen, die f¨ ur die Berechnung der Verschl¨ usselung und Pr¨ ufsummen verwendet werden. Damit soll ein Datendurchsatz von 1 Gb/s erzielt werden, um sichere Verbindungen u ¨ber handels¨ ubliche Gigabit Ethernet Links zu realisieren. Die Algorithemn werden in einem Xilinx Virtex 6 FPGA implementiert. An dieser Stelle m¨ ochten wir unseren Betreuern, Christoph Keller und Luca Henzen, einen herzlichen Dank aussprechen. Sie haben uns bei technischen Fragen unterst¨ utzt und sind uns beim Architekturdesign zur Verf¨ ugung gestanden.

5

2 Einleitung 2.1 Motivation OpenVPN und die darunterliegende SSL Bibliothek OpenSSL bilden eine Open Source VPN Software. VPN-Software ist in Unternehmen weit verbreitet, um sogenannte Virtual Private Networks aufzubauen. Dabei werden mehrere private Netzwerkbereiche u ¨ber ¨offentliche Netzwerke sicher verbunden. Dabei ist es wichtig, dass ein solcher Tunnel zwischen Netzwerken gegen Angriffe gesch¨ utzt ist. Das Mith¨oren sowie das Ver¨andern der Daten durch Dritte muss verhindert werden. Bei OpenVPN kommen zur Chiffrierung und Hashing der Daten zwei wesentliche Algorithmen zum Einsatz: AES und SHA. Beide Algorithmen erfordern eine hohe Rechenleistung und sind oft zu langsam, um die verf¨ ugbare Netzwerkverbindung effektiv ausnutzen zu k¨onnen. Das Ziel dieser Semesterarbeit ist es, diese Algorithmen zu beschleunigen. Um dieses Ziel erreichen zu k¨ onnen, werden der Verschl¨ usselungs-Algorithmus AES und der Pr¨ ufsummen-Algorithmus SHA auf einem Xilinx Virtex 6 FPGA implementiert.

2.2 Sicherheitsrisiken Im Folgenden werden zwei m¨ ogliche Angriffe auf eine ungesicherte Verbindung aufgezeigt um zu begr¨ unden, warum eine Verbindung wie oben erw¨ahnt gesichert werden muss. Abh¨ oren der Verbindung. Netzwerk-Verbindungen u ¨ber ¨offentliche Links k¨onnen von Drittpersonen abgeh¨ ort werden. Die daraus gewonnenen Daten k¨onnten beispielsweise von Konkurrenten misbraucht werden. Dies kann verhindert werden, indem die versendeten Daten verschl¨ usselt werden. So wird garantiert, dass nur der korrekte Empf¨anger die Nachricht entschl¨ usseln und lesen kann. Ver¨ andern der Daten. Nebst dem Abh¨oren ist auch die Ver¨anderung der Daten ein Sicherheitsrisiko. Ein Dritter k¨ onnte gef¨alschte Nachrichten unter dem Namen des urspr¨ unglichen Absenders generieren und versenden. Um die Integrit¨at der Daten zu gew¨ahrleisten, wird der Nachricht ein geheimes Token angef¨ ugt und von Nachricht und Token eine Pr¨ ufsumme berechnet. Diese Pr¨ ufsumme wird danach vom Sender an die Nachricht angeh¨ angt. Der Empf¨ anger kann an Hand der Pr¨ ufsumme die Korrektheit ¨ der Nachricht u ¨berpr¨ ufen. W¨ are bei der Ubertragung die Nachricht von einer Drittperson ver¨andert worden, so kann der Empf¨anger das feststellen. Durch die Verwendung dieser beiden Massnahmen wird ein sicherer Kanal generiert.

2.3 Use Case Schnelle Internetverbindungen von 100 Mb/s sind bereits f¨ ur weniger als 100 CHF erh¨altlich. Basierend auf dieser Tatsache wurde mit der Firma Dreamlab AG aus Bern 1 ein inter1

www.dreamlab.net

6

essanter Use Case erarbeitet: Eine Firma, die an mehreren Standorten vertreten ist, m¨ochte ihre Netzwerke schnell und sicher verbinden. Damit die Absicherung dieses Tunnels nicht zum Flaschenhals der Verbindung wird, soll die Verschl¨ usselung und die Generierung der Pr¨ ufsumme zur Beschleunigung auf einem FPGA implementiert werden.

2.4 Projektinhalt Als Verschl¨ usselungsalgorithmus wurde AES mit der Schl¨ usselgr¨osse von 128 Bit im OFB Modus gew¨ ahlt. Als Hashalgorithmus wurde SHA-256 verwendet. Das Ziel ist einen Durchsatz von 1 Gb/s Vollduplex zu erreichen. Damit der Server auf die in Hardware implementierten Algorithmen zugreifen kann, wird der FPGA u ¨ber PCI-Express in den Server eingebaut. Als PCI-Express Board kommt ein Evaluationboard von Xilinx 2 mit einem Virtex 6 FPGA zum Einsatz. F¨ ur die Entwicklung des Treibers zur Ansprechung der PCI-Express Karte wird mit der Firma Dreamlab zusammengearbeitet. Als Software wird OpenVPN 3 verwendet, die unter der Open Source Lizenz GPL zur Verf¨ ugung steht. OpenVPN stellt den Aufbau der Verbindung sicher und verwendet zur Verschl¨ usselung dieser die OpenSSL Bibliothek. OpenSSL kann mittels dem Treiber erweitert werden, sodass OpenSSL die von uns in Hardware implementierten AES und SHA Algorithmen verwendet. Im Kapitel 3 wird zuerst wird auf das Vorgehen, aufgetretene Probleme und deren L¨osungen eingegangen. In den Kapiteln 4 und 5 folgt die Spezifikationen und Umsetzung der Hardware und Software. Zum Schluss wird in der Conclusion auf weiterf¨ uhrende Arbeiten und m¨ ogliche Erweiterungen eingegangen.

2 3

www.xilinx.com www.openvpn.net

7

3 Vorgehen 3.1 Einlesen Am Anfang galt es, aus verschiedensten Quellen ein gutes Verst¨andnis der beiden Algorithmen zu erlangen. F¨ ur AES und im spezifischen die OFB Implementierung war das FIPS-197 Dokument [4] eine wesentliche Referenz. Die Erkl¨arungen auf Wikipedia [7, 8] halfen beim Verst¨ andnis. Die wichtigsten Informationen f¨ ur den SHA Block konnten im FIPS-180 Dokument [5] gefunden werden. Die beiden Dokumente des Federal Information Processing Standard (FIPS) bieten nebst der eigentlichen Spezifikation der Algorithmen auch weitere n¨ utzliche Informationen zur Implementierung. So helfen die genannten Zwischenresultate nach den einzelnen Rechenschritten bei der Implementierung und dem Debugging der Algorithmen.

3.2 Software Modell Danach wurde f¨ ur beide Algorithmen ein Softwaremodell in MATLAB erstellt. Diese Softwaremodelle dienten dazu, wesentliche Probleme in der Parallelisierung der Algorithmen festzustellen. Ausserdem wurden in diesem Schritt Testvektoren generiert, die zur Verifikation der Hardwareimplementationen sp¨ater zum Einsatz kamen.

3.3 Blockdiagramme Nach der erfolgreichen Programmierung der Softwaremodelle war das Zeichnen der Blockdiagramme an der Reihe. Die saubere und korrekte Darstellung aller Bl¨ocke sowie das Benennen aller Signale stellte sich als sehr hilfreich f¨ ur das Schreiben des VHDL Codes heraus.

3.4 VHDL Programmierung Der Hauptteil der Arbeit bestand aus dem Schreiben der VHDL-Implementierungen der Algorithmen. Dabei hielten wir uns an die zuvor erstellten Blockdiagrammen. Die geschriebenen Bl¨ ocke wurden danach mittels Testvektoren auf die Korrektheit u ¨berpr¨ uft. Das Verhalten der einzelnen Bl¨ ocke wird im Kapitel 4 beschrieben.

3.5 Einbindung von generierten Bl¨ ocken Auf die Beschreibung der Schaltung mittels VHDL folgte das Einbinden von mehreren IP Cores. Diese wurden mit dem Xilinx CoreGenerator erstellt. Neben FIFO-Speichern und Taktgeneratoren wurden zwei Bl¨ ocke f¨ ur ChipScope generiert. Mit den beiden Bl¨ocken und der ChipScope Software k¨ onnen Signale des FPGAs am Computer analysiert und verglichen werden.

8

VIRTEX-6 FPGA ML605 EVALUATION KIT

3.6 Programmierung des Chips Zum Schluss musste das entwickelte Design auf den FPGA programmiert werden. Wir haben unterEvaluation Windows Kit XP die von Xilinx zur Verf¨ ugung gestellte Software verwenWhat’s Inside thedazu ML605 det. ‡ Reference Designs and Demos ‡ ML605 Base Board with the XC6VLX240T-1FFG1156 FPGA Nach der erfolgreichen Programmierung wurde das Evaluationsboard - Board Diagnostic Demoim PCI-Express‡ ISE® Design Suite Logic Edition: (device-locked) for eines Linux PCs getestet. Dies stellte sich- aber bereits wegen Design der physischen Virtex-6Slot LX240T FPGA Base System Reference featuring DSP48, Gigabit Ethernet, DDR3 Memory Controller, ‡ Documentation Abmessungen des Evaluierungsboards als wahre Herausforderung heruas, es war nichtDVI, System Monitor, and Serial Transceiver integration – Hardware Setup Guide einfach einen Computer mit gen¨ ugend grossem Geh¨ause zu finden. Die Implementation PCI Express Gen 2 (x4) – Getting Guideund dabei entstandene Probleme mit dem Treiber werden im Kapitel 5 derStarted Software - PCI Express Gen 1 (x8) – Hardware User Guide beschrieben. ‡ ‡ ‡ ‡

- DDR3 Memory Interface - IBERT - Multiboot Reference Design, featuring self-test/update and configuration - Hardened Memory Controller Reference Design ‡ Reference designs, demos, documentation, and Das Design der Hardware basiert auf einem Virtex 6 LXTdelivered FPGA on ML605 Evaluation applications USB FLASH drive to get Kit [1]. Das Evaluationsboard verf¨ ugt u ¨ber einenstarted Virtex 6 FPGA, eine PCI-Express quickly

– Reference Designs User Guide Schematics and PCB files 4 12V Hardware Universal power supply Cables: 2 USB, 1 Ethernet 4.1 Evaluation Board DVI to VGA adapter

B OAR D

Schnittstelle sowie diverse weitere Anschl¨ usse. Der Virtex 6 LXT FPGA geh¨ ort zu den neusten und gr¨ossten FPGAs von Xilinx, er bietet mit 37680 Logikslices und 768 DSP Slices gen¨ ugend Platz f¨ ur die Implementierung F EATU R ES der gew¨ahlten Algorithmen. User Clock (J55-J58)

DDR3 FMC (LPC)

SFP

FMC (HPC)

Configuration USB 2.0 Mode Switch (Host) 12V ATX Power System ACE USB 2.0 Address 12V Wall Power (Device)

GPIO LEDs

System ACE

GPIO DIP Switch (SW1)

Prog (SW4) SystemACE RST (SW3)

USB to UART (J21) MGT Clock (J30 & J31)

CPU RST (SW10)

USB JTAG (J22)

PMBus Controller System Monitor Headers

Ethernet

PMBus (J3)

DVI Output Platform Flash MGT Port Push Buttons (U27) (J26-J29) (SW5-SW9) X8 PCI Express 16x2 LCD Character Display

BPI Flash (U4)

Figure 1: Virtex 6 Evaluation Board, Quelle: Xilinx.com ml605 product brief Take the NEXT STEP For more information, support, documents, and reference designs, or to purchase, please visit www.xilinx.com/ml605 4.2EK-V6-ML605-G SHA Part Number:

Der Secure Corporate Headquarters

Hash Algorithm SHA ist ein standardisierter Hash Algorithmus. solcher Europe Japan AsiaEin Pacific Pte. Ltd. Algorithmus berechnet basierend auf einer beliebigen Hashwert Xilinx Europe Xilinx K.K. Eingangsnachricht einen Xilinx, Asia Pacific

Xilinx, Inc. 2100 Logic Drive San Jose, CA 95124 USA Tel: 408-559-7778 www.xilinx.com

One Logic Drive Citywest Business Campus Saggart, County Dublin Ireland Tel: +353-1-464-0311 www.xilinx.com

9

Art Village Osaki Central Tower 4F 1-2-2 Osaki, Shinagawa-ku Tokyo 141-0032 Japan Tel: +81-3-6744-7777 japan.xilinx.com

5 Changi Business Park Singapore 486040 Tel: +65-6407-3000 www.xilinx.com

© Copyright 2009 Xilinx, Inc. XILINX, the Xilinx logo, Virtex, Spartan, ISE and other designated brands included herein are trademarks of Xilinx in the United States and other countries. All other trademarks are the property of their respective owners. Printed in the U.S.A. PN 2424

von fixer L¨ ange. Dieser Hashwert charakterisiert eine Nachricht eindeutig und die Hash Funktion kann nicht invertiert werden. Hashwerte werden in der Kryptografie dazu verwendet, eine Pr¨ ufsumme einer Nachricht zu erstellen. An Hand dieser Pr¨ ufsumme kann die Integrit¨ at der Nachricht festgestellt werden. SHA existieren in verschiedenen Generationen. SHA-1 wurde im Jahre 1995 publiziert und ist weit verbreitet. Die aktuelle Version SHA-2 wurde 2001 als Federal Information Processing Standard (FIPS) ver¨ offentlicht. Seit 2007 l¨auft die Auswahl f¨ ur einen neuen Hash Algorithmus SHA-3, der ab 2012 SHA-1 und SHA-2 abl¨osen soll. SHA-2 unterst¨ utzt 224, 256, 384 und 512 Bits lange Hashwerte, wobei SHA-256 und SHA-512 die beiden g¨ angigsten L¨ angen sind. Wir haben den 256-Bit langen SHA-256 in Hardware implementiert. 4.2.1 Hashing SHA-256 verarbeitet jeweils 512 Bits einer Nachricht gleichzeitig. Dabei werden die 512 Bits in 16 Worten von 32 Bits Breite separat behandelt. Im ersten Schritt werden die 16 Worte mittels der MessageExpansion zu 64 Worten erweitert. Basierend auf diesen 64 Worten berechnet die MainLoop in 64 Iterationen den Hash. Grafik 2 beschreibt die Top-Level Ansicht von SHA-256. F¨ ur die ersten 512 Bits einer Nachricht wird ein standardisierter Initialisierungsvektor verwendet. F¨ ur alle folgenden Nachrichtenbl¨ocke wird der vorhergehende Hashwert als Startwert verwendet. Sobald die gesamte Nachricht vom SHA-256 Algorithmus verarbeitet wurde, liegt am Ausgang der definitive Hashwert der Nachricht an. MessageExpansion. Die MessageExpansion ben¨otigt 48 Zyklen, um aus 16 Worten ein Total von 64 Worten zu berechnen. Dieser Schritt ist die erste Stage des SHA-256 Algorithmus. MainLoop. In der MainLoop wird u ¨ber jedes der 64 Worte iteriert und Schritt f¨ ur Schritt der Hashwert berechnet. Wie in Grafik 3 ersichtlich werden jeweils 6 Worte des Hashwertes verschoben, und zwei Worte komplett neu berechnet. Der Pfad zu ExDO definiert den l¨ angsten Pfad durch die vier Additionswerke. Um die l¨ angsten Pfade zu minimieren wurden die Addierer als Carry-Save Adder ¨ ausgef¨ uhrt. Dabei werden die Ubertr¨ age in den ersten drei Additionen separat berechnet, und erst am Ende der Additionskette mit einem Volladdierer zum Resultat hinzu addiert. UpdateH. Jeweils nach 64 Runden wird in UpdateH aus dem Initialisierungsvektor und dem Resultat der MainLoop der Ausgang des SHA256Main Blockes berechnet. Nach den letzten 512 Bits der Message entspricht der Ausgang dem Hashwert der Message. FSM. Die Abl¨ aufe zur Berechnung des Hashwertes werden von einer Finite State Machine berechnet. Dabei werden die aktuellen Worte aus der MessageExpansion und die richtigen Initialisierungsvektoren der MessageExpansion und MainLoop zugef¨ uhrt.

10

SHA256Main

Rst Clk

MessageExpansion

MessageInxDI [511..0]

WKK15 [31..0] WKK2 [31..0] WKK16 [31..0] WKK7 [31..0]

D Q 2048 bit

WKK [31..0]

ROM

MainLoop H0xDI [31..0]

H1xDI [31..0]

H2xDI [31..0]

Store H H0xDI [31..0] H1xDI [31..0] H2xDI [31..0] H3xDI [31..0] H4xDI [31..0] H5xDI [31..0] H6xDI [31..0] H7xDI [31..0]

H0xDO [31..0] H1xDO [31..0] H2xDO [31..0] H3xDO [31..0] H4xDO [31..0] H5xDO [31..0] H6xDO [31..0] H7xDO [31..0]

KKKxDI [31..0] WKKxDI [31..0] AxDI [31..0] BxDI [31..0] CxDI [31..0] DxDI [31..0] ExDI [31..0] FxDI [31..0] GxDI [31..0] HxDI [31..0]

AxDO [31..0] BxDO [31..0] CxDO [31..0] DxDO [31..0] ExDO [31..0] FxDO [31..0] GxDO [31..0] HxDO [31..0]

H3xDI [31..0]

H4xDI [31..0]

H5xDI [31..0]

H6xDI [31..0]

H7xDI [31..0]

UpdateH AxDI [31..0] H0xDI [31..0] BxDI [31..0] H1xDI [31..0] CxDI [31..0] H2xDI [31..0] DxDI [31..0] H3xDI [31..0] ExDI [31..0] H4xDI [31..0] FxDI [31..0] H5xDI [31..0] GxDI [31..0] H6xDI [31..0] HxDI [31..0] H7xDI [31..0]

Figure 2: Blockdiagramm SHA-256

11

H0xDO [31..0]

H0xDO [31..0]

H1xDO [31..0]

H1xDO [31..0]

H2xDO [31..0]

H2xDO [31..0]

H3xDO [31..0]

H3xDO [31..0]

H4xDO [31..0]

H4xDO [31..0]

H5xDO [31..0]

H5xDO [31..0]

H6xDO [31..0]

H6xDO [31..0]

H7xDO [31..0]

H7xDO [31..0]

MainLoop

AxDI [31..0] BxDI [31..0] CxDI [31..0] DxDI [31..0] ExDI [31..0] FxDI [31..0] GxDI [31..0] HxDI [31..0] KKKxDI [31..0] WKKxDI [31..0]

AxDO [31..0] BxDO [31..0] CxDO [31..0] DxDO [31..0] ExDO [31..0] FxDO [31..0] GxDO [31..0] HxDO [31..0]

ROTR2 InxDI [31..0] OutxDO [31..0]

ROTR13 S0xD [31..0]

InxDI [31..0] OutxDO [31..0]

ROTR22

T1sum1xD [31..0]

+%32

+%32

T2xD [31..0]

+%32

InxDI [31..0] OutxDO [31..0]

MajxD [31..0]

CHxD [31..0]

ROTR6 InxDI [31..0] OutxDO [31..0]

ROTR11 InxDI [31..0] OutxDO [31..0]

S1xD [31..0]

+%32

ROTR25

T1xD [31..0]

T1sum2xD [31..0] T1sum3xD [31..0]

+%32

+%32

+%32

InxDI [31..0] OutxDO [31..0]

Figure 3: Blockdiagramm MainLoop

12

Parallele MessageExpansion und MainLoop. MessageExpansion und MainLoop laufen teilweise parallel ab. Da die MainLoop zuerst die ersten 16 Worte der Eingangsnachricht verarbeitet, l¨ auft in den ersten 15 Zyklen noch keine MessageExpansion. Erst mit dem 16. Zyklus startet die MessageExpansion f¨ ur das 17. Wort, sodass jeweils das Wort i + 1 im Zyklus i berechnet wird. Somit l¨auft MessageExpansion und MainLoop f¨ ur die Zyklen 16 bis 63 parallel ab. 4.2.2 Message Authentication ¨ Zur Uberpr¨ ufung der Integrit¨ at der Nachricht und des Absenders verwendet OpenVPN die Message Authentication HMAC [3]. HMAC-SHA-256 [2] spezifiziert, wie aus der Nachricht und einem geheimen Schl¨ ussel eine sichere M¨oglichkeit geboten wird, den Absender der Nachricht zu identifizieren und gleichzeitig festzustellen, ob die Nachricht ver¨andert wurde. F¨ ur Berechnung der HMAC Pr¨ ufsumme ben¨otigen beide Endpunkte einen gemeinsamen Schl¨ ussel. HMAC definiert zwei Hilfsvariablen ipad und opad; ipad entspricht dem Bitstring 0x36 32fach wiederholt, opad entspricht 0x5C 32fach wiederholt. Zuerst wird der Schl¨ ussel mit der XOR Operation und dem ipad Bitstring modifiziert. Dieser wird der Nachricht vorangestellt und davon der SHA-256 Hashwert berechnet. Anschliessend wird der urspr¨ ungliche Schl¨ ussel mit opad XOR gerechnet und dem vorherigen Hash nocheinmal vorangestellt. Mit einer zweiten Berechung des SHA-256 Hashs wird der HMAC-SHA-256 Hashwert berechnet. Die gesamte Berechnung lautet: HM AC = SHA256 (Key ⊕ opad, SHA256 (Key ⊕ ipad, M essage)) 4.2.3 Resultate Die Realisierung von SHA-256 auf dem FPGA erzielte einen l¨angsten Pfad von 6.487 ns in der MainLoop. SHA-256 wird mit 150 MHz getaktet, verarbeitet 512 Bits in 65 Zyklen und erreicht somit einen Durchsatz von 1.21 Gb/s. Da in der Berechnung von HMACSHA-256 zwei Mal auf die SHA-256 Funktion zugegriffen wird, muss der SHA-256 Block doppelt im FPGA integriert werden. Um die geforderte Zielgeschwindigkeit von 1 Gb/s im Vollduplexmodus zu erreichen, muss der Block sogar vierfach integriert sein.

4.3 AES Der Advanced Encryption Standard (AES) [7], der im Oktober 2000 vom National Institute of Standards and Technology (NIST) als Nachfolger des DES Algorithmus bekannt gegeben wurde, ist ein g¨ angiger Standard f¨ ur Verschl¨ usselung von digitalen Daten. AES ist ein symmetrischer Verschl¨ usselungsalgorithmus und kann mit verschiedenen Schl¨ ussell¨ angen von 128, 192 und 256 Bits betrieben werden. Die Blockgr¨osse der zu verschl¨ usselnden Nachricht ist bei jeder verwendeten Schl¨ usselgr¨osse 128 Bits. Der Unterschied der Schl¨ usselgr¨ ossen wirkt sich nur auf die Anzahl Iterationszyklen aus.

13

RoundKeyxDI

Add Roundkey

128

Sub Bites

Shift Rows

Mix Coloums

TextInxDI

Add Roundkey

Rst En Clk

D Q

EnablexSI

TextOutxDO

ValidxSO FSM

Encrypt

Figure 4: Blockdiagramm AES 4.3.1 Auswahl Da die Schl¨ ussell¨ ange von 128 Bits bei der AES Verschl¨ usselung am meisten verbreitet ist, wird diese in Hardware implementiert. Als Block Verschl¨ usselungsmodus wird der Output Feedback Modus OFB gew¨ahlt. OFB hat den Vorteil, dass die Chiffrierung und Dechiffrierung mit dem selben Algorithmus durchgef¨ uhrt werden kann. Damit wird Platz auf dem FPGA gespart und die Optimierungen der Verschl¨ usselung kommen gleichzeitig auch der Entschl¨ usselung zu Gute. 4.3.2 Chiffrierung Die AES Verschl¨ usselung benutzt eine Wortbreite von 128 Bits, wobei aber jeweils 8 Bits zu einem Byte zusammengefasst werden. Die Rechenschritte basieren immer auf jeweils einem Byte. Aufgrund dessen wurde die Darstellungsform einer 4x4 Matrix gew¨ahlt, wobei ein Matrixelement einem Byte entspricht. Die Matrixform wurde gew¨ahlt, da die Operationen Mix Columns und Shift Rows so am einfachsten beschreibbar sind. [4, 7] Da eine Schl¨ ussell¨ ange von 128 Bit gew¨ahlt wurde, ben¨otigt die Verschl¨ usselung 10 Iterationszyklen, auch Runden genannt. Es wird in jeder Runde ein Schl¨ ussel benutzt, welcher in der Schl¨ usselexpansion errechnet wird. Im Folgenden wird nun genau erkl¨art wie die Verschl¨ usselung vor sich geht. Add Roundkey. Wenn die Eingangsnachricht anliegt und der Rundenschl¨ ussel bereit ist, wird das Enable Signal auf 1 gesetzt, die Chiffrierung kann beginnen. Zu Beginn der Verschl¨ usselung wird die Eingangsnachricht mit dem Rundenschl¨ ussel im Add Roundkey Block addiert. Diese Addition wird im Galois Feld [4] ausgef¨ uhrt wird, somit entspricht die Addition einer XOR Operation. Die Addition wird komplett parallel ausgef¨ uhrt, jedes Matrixelement der Eingangsnachricht wird separat mit einem

14

Element des Rundenschl¨ ussels verkn¨ upft. Diese Operation wird sowohl ganz zu Beginn der Verschl¨ usselung, als auch am Ende jeder Iteration durchgef¨ uhrt. Zur Berechung der chiffrierten Daten werden die Bl¨ocke Sub Bytes, Shift Rows, Mix Columns und Add Roundkey jeweils mehrfach iteriert. Die Anzahl der Iterationen basiert auf der gew¨ ahlten Schl¨ ussell¨ ange. Sub Bytes. Im Sub Bytes Block wird jedes Byte der 4x4 Matrix durch ein Byte aus der Substitutionsbox (SBox) ersetzt. Die SBox ist eine konstante 16x16 Bytematrix, die im Speicher des FPGA abgelegt wurde. Die Substitution der Matrixelemente wird komplett parallel ausgef¨ uhrt. Dies bedingt die Implementation von 16 SBoxen und f¨ uhrt zu einem hohen Datendurchsatz. Shift Rows. Die Shift Rows Operation ver¨andert die Position der Matrixelemente. In Grafik 5 ist ersichtlich wie die Elemente verschoben werden. Die erste Zeile der Matrix bleibt unver¨ andert, die zweiten Zeile wird um ein Byte nach links rotiert, die dritte Ziele um zwei Bytes, und die letzte Zeile um drei Bytes. http://upload.wikimedia.org/wikipedia/commons/6/66/AES-ShiftRows.svg

change

21.02.11 18:38

a0,0 a0,1 a0,2 a0,3

a0,0 a0,1 a 0,2 a0,3 ShiftRows

Shift 1

a1,0 a1,1 a1,2 a1,3

a1,1 a1,2 a1,3 a1,0

Shift 2

a2,0 a2,1 a2,2 a2,3

a2,2 a2,3 a2,0 a2,1

Shift 3

a3,0 a3,1 a3,2 a3,3

a3,3 a3,0 a3,1 a3,2

Figure 5: Shift Rows, Quelle: Wikipedia.org Advanced Encryption Standard

Mix Columns. Der letzte Block in der Iteration ist Mix Columns. In diesem Block wird eine Matrixmultiplikation der Nachricht mit einer konstanten Matrix durchgef¨ uhrt. Die Elemente der konstanten Matrix sind haben die Werte 1, 2 und 3. Die Multiplikationen k¨onnen also leicht durch einen Linksshift und eine Addition ersetzt werden, wobei die Addition nur bei der Multiplikation mit dem Faktor 3 n¨otig ist. Diagramm 7 beschreibt die Multiplikation durch Linksshifts und Additionen. Kommt es bei der Multiplikation zu ¨ einem Byte-Uberlauf, wird zum Matrixelement ein irreduzibles Polynom addiert. Dieses ist aus dem Galois Feld gegeben, und entspricht der hexadezimalen Darstellungsform 0x1B. Wie im Diagramm 8 ersichtlich, werden alle Matrixmultiplikationen parallel berechnet. Die Mix Columns Operation wird in der letzen Iterationsrunde ausgelassen. Als letzte Operation einer Runde wird der Rundenschl¨ ussel im Block Add Roundkey zu der tempor¨aren Matrix addiert. Dies passiert exakt gleich wie ganz am Anfang vor dem ersten Zyklus. Danach wird diese Matrix in einem Flip Flop f¨ ur einen Zyklus gespeichert. Nach zehn Zyklen liegt die korrekt verschl¨ usselte Matrix am Ausgang an. Page 1 of 1

15

3 4 5 6

Beispiel Die Umkehrung des MixColums Schrittes Möglichkeiten zur Implementierung Weblinks

Im MixColumns Schritt, wird jede Spalte des State mit c(x) verknüpft.

Die Matrizenmultiplikation In diesem Schritt findet eine Matrizenmultiplikation eines Spaltenvektors des States mit einer MDS-Matrix statt, damit alle 4 Eingabebytes jedes Ausgabebyte beeinflussen.

Die Arithmetik findet allerdings nicht auf den Natürlichen Zahlen statt, sondern auf dem Galois-Körper des Rijndael.

Figure 6: Multiplikation mitdes konstanter Der Galois-Körper Rijndael Matrix Der Galois-Körper des Rijndael ist der Galois-Körper GF(28). GF(28) ist die Menge aller Polynome maximal 7.Grades mit Koeffizienten aus dem Restklassenkörper

Mult3InxDI

BShxD

Ein allgemeines Polynom aus GF(28) besitzt die Form

EndxD

.

Mult3OutxDO Wie leicht nachzuvollziehen

ist, lässt sich jedes dieser Polynome durch ein Byte repräsentieren, wobei jeweils das i-te Bit den Koeffizienten ai repräsentiert.

shift left

Die Addition auf GF(28) ist analog zum Körper als XOR-Verknüpfung definiert, sie findet koeffizientenweise bzw. bitweise statt. Die Subtraktion entspricht ShxD MuxDder Addition da die XOR-Verknüpfung ihre eigene Umkehrfunktion ist. Beispiel: (x 5 + x 4 + x 3) ! (x 7 + x 5 + x 3 + x + 1) = (x 5 + x 4 + x 3) + (x 7 + x 5 + x 3 + x + 1) = x 7 + x 4 + x + 1

AddxD

{1B}

http://de.wikipedia.org/wiki/Rijndael_MixColumns

Mult3

Figure 7: Blockdiagramm der Multiplikation FSM. Die Kontrollsignale f¨ ur die Multiplexer und das Valid Signal werden von einer Finite State Machine kontrolliert. Diese beinhaltet haupts¨achlich einen Z¨ahler f¨ ur die 10 Iterationen. Bei der ersten Runde wird der Ausgang des ersten Add Roundkey Blocks mit dem Eingang des Sub Bytes Blocks verbunden, bei den folgenden Runden wird der Ausgang des Flip Flops mit dem Sub Bytes Eingang verbunden. In der letzten Runde wird der Ausgang des Shift Rows Blocks direkt mit dem Eingang des Add Roundkey Blocks verbunden, da dann die Mix Columns Operation u ¨bersprungen werden muss. 4.3.3 Schl¨ usselexpansion In jeder Iterationsrunde der Chiffrierung wird ein spezieller Rundenschl¨ ussel gebraucht. Diese Schl¨ ussel werden ausgehend von vorherigen Rundenschl¨ ussel expandiert, sodass im gesamten 11 Rundenschl¨ ussel existieren (zehn Runden plus ein Zus¨atzlicher ganz am Anfang der Chiffrierung). Jeder Rundenschl¨ ussel wird wie bei der Chiffrierung als 4x4 Bytematrix dargestellt und als solcher verwendet. Shift Word. Um einen neuen Rundenschl¨ ussel zu generieren, wird die erste Zeile des vorherigen Schl¨ ussels um eine Zelle nach links verschoben. Sub Word. Danach wird diese Zeile, wie bei der Chiffrierung, mit Eintr¨agen aus der SBox substituiert.

16

Page 1 of 5

MixOutxDI[0..7]

Byte[1]

Mult3InxDI

Byte[0]

Mult3

Mult3OutxDO

Xa0xD

Xb0xD

Byte[2]

Mult3InxDI

Byte[1]

Mult3

Mult3OutxDO

Xa1xD

Xb1xD

Mult2InxDI

Mult3

Mult3OutxDO

Xa2xD

Xb2xD

Mult3

MixOutxDO

Mult3OutxDO

Xa10xD

Xb10xD

Xa11xD

Xb11xD

Mult2

Byte[10] Mult2OuttxDO

Mult2InxDI

Mult2OuttxDO

Mult3InxDI

Mult3OutxDO

Byte[9] Byte[8] Mult3InxDI

Mult3

Mult3OutxDO

Xa3xD

Xb3xD

Byte[8]

Mult3

Mult2

Byte[11]

Mult2 Mult2InxDI

Mult2OuttxDO

Mult2InxDI

Mult2OuttxDO

Mult3InxDI

Mult3OutxDO

Byte[10] Byte[9]

Byte[2] Byte[1] Mult3InxDI

Mult3

Mult3OutxDO

Xa4xD

Xb4xD

Byte[13]

Byte[12]

Mult2

Byte[4] Mult2InxDI

Mult3InxDI

Mult3

Mult3OutxDO

Mult2InxDI

Xa5xD

Xb5xD

Byte[14]

Mult3

Mult3OutxDO

Mult2InxDI

Mult2OuttxDO

Mult3InxDI

Mult3

Mult3OutxDO

Xa13xD

Xb13xD

Xa14xD

Xb14xD

Xa15xD

Xb15xD

Mult2 Mult2InxDI

Mult2OuttxDO

Byte[15] Byte[12] Xa6xD

Xb6xD

Mult3InxDI

Byte[15]

Byte[14]

Mult2

Byte[6]

Xb12xD

Mult2

Byte[13] Mult2OuttxDO

Byte[7] Byte[4] Mult3InxDI

Xa12xD

Byte[15] Byte[14]

Mult2

Byte[5]

Mult3

Mult2InxDI

Mult2OuttxDO

Byte[7] Byte[6]

Mult2OuttxDO

Mult3

Mult3OutxDO

Mult2 Mult2InxDI

Mult2OuttxDO

Mult3InxDI

Mult3OutxDO

Byte[13] Byte[12]

Byte[5] Byte[4] Mult3InxDI

Byte[7] Byte[6] Byte[5]

Xb9xD

Mult2OuttxDO

Mult3InxDI

Byte[11]

Mult2

Byte[3]

Byte[4]

Xa9xD

Byte[8] Mult3InxDI

Mult2InxDI

Byte[7]

Mult3OutxDO

Mult2

Byte[9] Mult2OuttxDO

Byte[1] Byte[0]

Byte[6]

Mult3

Byte[11]

Byte[2]

Byte[5]

Xb8xD

Mult2OuttxDO

Mult3InxDI

Byte[10]

Mult2 Mult2InxDI

Byte[0]

Xa8xD

Byte[11] Byte[10]

Byte[3] Byte[0] Byte[3]

Mult3OutxDO

Mult2 Mult2InxDI

Mult2OuttxDO

Byte[2] Byte[3]

MixInxDI

Mult3

Byte[8]

Mult2 Mult2InxDI

Mult3InxDI

Byte[9]

Mult3

Mult3OutxDO

Xa7xD

Xb7xD

Byte[12]

Byte[15]

Mult2 Mult2InxDI

Mult3

Mult2 Mult2InxDI

Mult2OuttxDO

Mult2OuttxDO

Byte[14] Byte[13]

Mix Coloums

Figure 8: Blockdiagramm Mix Columns Rcon. Nach der Substitution wird die Zeile mit der Rundenkonstanten aus der Tabelle 1 per XOR Operation verkn¨ upft. Die Tabelle wurde im Speicher des FPGAs abgelegt. R[1] R[2] R[3] R[4] R[5] R[6] R[7] R[8] R[9] R[10]

0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80 0x1B 0x36

Table 1: Rundenkonstanten (Rcon) f¨ ur die Schl¨ usselexpansion Die daraus resultierende Zeile wird mit der letzten Zeile aus den letzten Schl¨ ussel nochmals per XOR Operation verbunden. Nun ist die erste Zeile des neuen Rundenschl¨ ussels komplett. Die zweite Zeile des neuen Rundenschl¨ ussels resultiert aus der XOR Operation der zweiten Zeile des alten Rundenschl¨ ussels mit der ersten Zeile des neuen

17

ExpEnxDI

ReadyKeyxSO

11x128 Bit

KeyxDO

FSM

EnablexS

KeyxDI

128 Bit

Rst En Clk

KeyxDP(C)(0)

RotOutxD RotWord

32 Bit

KeyxDNxD

D Q

SubInxD 128 Bit SubOutxD

SubBytes

TempKey(4)

32 Bit TempKey(0)

RconOutxD

TempKey(5) TempKey(1)

Rcon

TempKey(6) TempKey(2) TempKey(7) Keyexpansion

TempKey(3)

Figure 9: Blockdiagramm der Schl¨ usselexpansion f¨ ur AES-128 Rundenschl¨ ussels. Die dritte und vierte Zeile wird aus der dritten bzw. vierten Zeile des letzten Schl¨ ussels und der jeweils vorherigen Zeile des neuen Schl¨ ussels berechnet. Schema 9 stellt die Keyexpansion genau dar. FSM. Kontrolliert wird die Expansion durch eine FSM die einen Z¨ahler beinhaltet und beim Start der Expansion den Eingangsschl¨ ussel in das Flip Flop einliest. Pro Zyklus wird also ein Rundenschl¨ ussel generiert und nach 10 Zyklen stehen alle elf Schl¨ ussel zur Verf¨ ugung. Parallele Schl¨ usselexpansion und Verschl¨ usselung. Die Schl¨ usselexpansion erfolgt parallel zur Chiffrierung. Damit in der Chiffrierung die ben¨otigten Rundenschl¨ ussel zur Verf¨ ugung stehen, muss die Chiffrierung drei Zyklen nach der Keyexpansion gestartet werden. W¨ ahrend diesen Zyklen wird zuerst der Eingangsschl¨ ussel eingelesen, und danach die ersten zwei Rundenschl¨ ussel expandiert, die f¨ ur die erste Iteration der Chiffrierung n¨otig sind. Durch dieses Parallelisieren von Verschl¨ usselung und Schl¨ usselexpansion ist es m¨oglich, einen Block mit einem neuen Schl¨ ussel innerhalb von 13 Zyklen zu verschl¨ usseln. Jeder weitere Block kann danach in 10 Zyklen verschl¨ usselt werden, da der Schl¨ ussel bereits expandiert wurde.

18

TextInxDI

TextOutxDO

IVInxDI

ExpKeyxD DataInxD EnableCIxSI

AES Encrypt

EnablexS

DataOutxD ValidxS

ValidOxSO

ReadyKeyxS

EnableEXPxSI KeyInxDI

EnableKeyxS KeyInxD

ExpKey

KeyOutxD OFB

Figure 10: Blockdiagramm des OFB Verschl¨ usselungsmodus 4.3.4 OFB Mit der Schl¨ usselexpansion und der Chiffrierung k¨onnten direkt Daten verschl¨ usseln. Dies w¨ urde dem Electronic Codebook Block Verschl¨ usselungsmodus entsprechen. Da der ECB Modus aber nicht sicher genug ist, haben wir den Output Feedback Block Verschl¨ usselungsmodus (OFB) eingesetzt. In diesem Modus wird ein Initialisierungsvektor (IV) verschl¨ usselt und nicht direkt die zu verschl¨ usselnde Nachricht. Erst der verschl¨ usselte IV wird mittels XOR Operation mit der Nachricht verkn¨ upft. Der daraus resultierende Ausgang wird dann als verschl¨ usselte Nachricht u ¨bertragen. Der verschl¨ usselte IV wird f¨ ur den n¨achsten Block Ofb_encryption.png 600×286 pixels

22.02.11 10:01

Figure 11: Output Feedback Block Verschl¨ usselungsmodus, Quelle: Wikipedia.org Block Cipher Modes of Operation

19

als IV verwendet, wiederum verschl¨ usselt und mit der n¨achsten Nachricht verkn¨ upft, wie in Grafik 11 ersichtlich. Das Entschl¨ usseln der Nachricht funktioniert im OFB Modus genau wie das Verschl¨ usseln. Mit dem selben Initialisierungsvektor und Schl¨ ussel wie bei der Verschl¨ usselung kann die urspr¨ ungliche Nachricht durch eine XOR Operation wieder gewonnen werden. Dieser Modus ist sicher, solange der Schl¨ ussel und der IV geheim bleiben, wovon ausgegangen wird. 4.3.5 Resultate Die Hardwareimplementation von AES ben¨otigt zur Verschl¨ usselung eines Blocks 10 Zyklen und bei einem neuen Schl¨ ussel 13 Zyklen 4 . Der l¨angste Pfad beginnt beim Ausgang der Schl¨ usselexpansion und endet beim Einlesen der Matrix in das Flip Flop der Chiffrierung. Dieser Pfad ist 4.96 ns lang, es ist also m¨oglich den OFB Block mit 200 MHz zu betreiben. Dieser l¨ angste Pfad wurde mittels der Xilinx ISE ermittelt. Daraus kann der Durchsatz des OFB Blocks berechnet werden, der 2,56 Gb/s betr¨agt. Dies erm¨ oglicht es mit einem OFB Block einen Vollduplexkanal mit je 1 Gb/s zu verschl¨ usseln und entschl¨ usseln. Zum Vergleich, ein heute allt¨aglicher Computer mit einem Intel Core i7 als CPU schafft einen Durchsatz von 155 Mb/s. Der OFB Block ben¨ otigt nach der Synthese auf dem Virtex 6 FPGA 1056 Slices, was einer Auslastung der Fl¨ ache von 2% entspricht.

4.4 PCI-Express Zum Xilinx Evaluationskit geh¨ oren auch mehrere Beispieldesigns, die f¨ ur erste Versuche mit dem Board gut geeignet sind. Darunter befindet sich auch ein Design, das eine PCI-Express Verbindung bietet. Die Daten, welche gesendet und empfangen werden, werden mittels DMA in einen Virtual FIFO (vFIFO) Speicher geschrieben und von ihm gelesen. Da der Aufwand der PCI-Express Einbindung untersch¨atzt wurde, entschieden wir uns dieses Beispieldesign als Basis f¨ ur unsere PCI-Express-Anbindung zu verwenden. Dieses Beispieldesign bietet einen Linux-Treiber und ein User Interface, um das Design zu testen. Die Hardwareimplementation der SHA und OFB Bl¨ocke wurde an den vFIFO Speicher angeh¨ angt, in den das Beispieldesign schreibt.

4.5 Blocker Damit die Datenw¨ orter in der richtigen Breite in den OFB und SHA Bock eingelesen werden, m¨ ussen die Wortbreiten des vFIFO Speichers umgerechnet werden. F¨ ur diese Aufgabe wurden mit dem CoreGenerator von Xilinx mehrere weitere FIFOs generiert, die mit unterschiedlichen Eingangs- und Ausgangs-Wortbreiten betrieben werden k¨onnen. Zus¨atzlich k¨ onnen diese FIFOs mit unterschiedlichen Lese- und Schreib-Taktraten bedient werden, was es uns erm¨ oglicht, SHA und AES mit verschiedenen Taktraten zu operieren. Die einzelnen FIFOs und Wortbreiten sind in Grafik 4.5 ersichtlich. 4

Zur Berechnung des Durchsatzes gehen wir davon aus, dass jeweils f¨ ur eine Session Daten verschl¨ usselt werden und sich der Schl¨ ussel und Initialisierungsvektor daher nicht ¨ andern.

20

Das vFIFO des Beispieldesigns l¨ auft mit einer Wortbreite von 64 Bits bei 250 MHz. F¨ ur den SHA Block wurde ein FIFO generiert, die die Eingangs-Wortbreite von 64 Bits und einem Eingangstakt von 250 MHz aufweist. Die Ausgangs-Wortbreite betr¨agt 512 Bits und der Ausgangstakt 150 MHz. F¨ ur den OFB Block wurde ein FIFO generiert mit gleichem Eingangsverhalten wie die des SHA Blocks, die Ausgangs-Wortbreite ist 128 Bits und der Ausgangstakt betr¨agt 200 MHz. Da die Kommunikation zwischen den verschieden FIFOs und Bl¨ocken immer per Handshake funktioniert, treten durch die verschiedenen Geschwindigkeiten der Bl¨ocke keine Probleme auf.

Cryptographic Hardware Extension for OpenSSL Library and OpenVPN Software

Hardware Implementation

64 64

Third Party Component

128

FIFO FIFO

VFIFO

DMA

PCI-Express

OpenSSL

OpenVPN

Linux Kernel Driver

64

FIFO FIFO

64

512

128

256

AES-128 OFB SHA256

Our Component

captionTop Level Ansicht

5 Software 5.1 Zweck Damit OpenVPN [6] die Funktionalit¨at des FPGA nutzen kann, muss direkt auf die Hardware zugegriffen werden. Da OpenVPN zur Ausf¨ uhrung der kryptographischen Funktionen die OpenSSL Bibliothek benutzt, muss ein Treiber f¨ ur OpenSSL geschrieben werden, welcher als Kernel Modul in Linux geladen wird. OpenVPN greift kann so via OpenSSL Bibliothek und dem Treiber von der Hardwarebeschleunigung auf dem FPGA profitieren.

21

5.2 Implementation Der Treiber konnte bis zum Ende der Semesterarbeit nicht fertiggestellt werden. Deshalb wurde der Treiber des Beispieldesigns modifiziert. Basierend auf diesem Treiber konnte zwar ein minimaler Funktionstest implementiert werden, allerdings stellte das Testen und Debuggen des Treibers ein grosses Problem dar. Die vom FPGA verschl¨ usselten Daten konnten nicht auf dem Computer analysiert werden, da der Datendurchsatz von 1 Gb/s den Treiber des Beispieldesigns u ¨berlastet haben. Ausserdem kann der Treiber des Beispieldesigns nicht direkt in OpenSSL integriert werden.

5.3 OpenVPN Die OpenVPN-Software wurde auf einem Server installiert. Beim Handshake zwischen zwei OpenVPN-Endpunkten werden zuerst die verf¨ ugbaren Verschl¨ usselungs- und Pr¨ ufsummen-Algorithmen ausgetauscht. Danach werden mittels Diffie-Hellman die ben¨otigten Initialisierungsvektoren, der Schl¨ ussel f¨ ur AES sowie der Schl¨ ussel f¨ ur HMACSHA-256 sicher zwischen den beiden Endpunkten berechnet. OpenVPN wurde so konfiguriert, dass zur Verschl¨ usselung nur der AES-128-OFB Algorithmus und f¨ ur die Berechnung der Pr¨ ufsumme SHA-256-HMAC verwendet wurde.

6 Conclusion Die SHA und OFB Bl¨ ocke wurden verifiziert und arbeiten korrekt. Aus verschiedenen Tests mit ChipScope ging hervor, dass die Schaltung zwar korrekt nach aussen schreibt, die Daten aber vom Treiber nicht korrekt verarbeitet werden k¨onnen.

6.1 Future Work Weitere Algorithmen. Da der Virtex 6 FPGA gross genug ist, w¨are es m¨oglich weitere Verschl¨ usselungsalgorithmen und Schl¨ usselgr¨ossen zu implementieren. Auch weitere AES Verschl¨ usselungsmodi k¨ onnten realisiert werden, zum Beispiel der weit verbreitete CBC Modus oder weitere wie PCBC, CFB und CTR. Ausserdem k¨onnten weitere Hashalgorithmen umgesetzt werden: SHA-1, SHA-224, SHA-384 und SHA-512. Da Linux f¨ ur die kryptografischen Funktionen auf die OpenSSL Bibiliothek zugreift, w¨ urden diese Implementierungen die Verschl¨ usselungs- und Pr¨ ufsummenoperation des Computers beschleunigen. PCI-Express. Wie im Kapitel 4 erw¨ahnt wurde die PCI-Express Schnittstelle des Beispieldesigns genutzt und modifiziert. Der CoreGenerator von Xilinx stellt verschiedene PCI-Express Bl¨ ocke zur Verf¨ ugung, welche f¨ ur dieses Projekt geeignet sind. W¨ urden diese Bl¨ocke verwendt, k¨ onnte die Daten¨ ubertragung per PCI-Express optimiert werden, da das Beispieldesign nicht optimal auf das Problem angepasst werden konnte.

22

Ausserdem muss der PCI-Express Treiber, der die kryptografischen Funktionen dem Linux Kernel zur Verf¨ ugung stellen soll, optimiert werden. Einerseits m¨ ussen die Daten in Linux sicher gespeichert und zum PCI-Express Port u ¨bertragen werden, andererseits m¨ ussen die verschl¨ usselten Daten sowie die Pr¨ ufsummen vom Treiber schnell genug verarbeitet werden k¨ onnen. Ethernet Karte. Da das ML605 Evaluation Board u ¨ber einen Ethernet Port verf¨ ugt, k¨onnte ein komplettes Netzwerkinterface auf dem Board implementiert werden. Das Board k¨onnte als Netzwerkkarte mit komplett transparenter Verschl¨ usselung eingesetzt werden. Damit dies funktionieren w¨ urde, m¨ usste die Funktionalit¨at von OpenVPN in Hardware implementiert werden.

23

Liste der Diagramme 1 2 3 4 5 6 7 8 9 10 11

Virtex 6 Evaluation Board . . . . . . . . . . . . . . . Blockdiagramm SHA-256 . . . . . . . . . . . . . . . Blockdiagramm MainLoop . . . . . . . . . . . . . . . Blockdiagramm AES . . . . . . . . . . . . . . . . . . Shift Rows . . . . . . . . . . . . . . . . . . . . . . . . Multiplikation mit konstanter Matrix . . . . . . . . . Blockdiagramm der Multiplikation . . . . . . . . . . Blockdiagramm Mix Columns . . . . . . . . . . . . . Blockdiagramm der Schl¨ usselexpansion f¨ ur AES-128 Blockdiagramm des OFB Verschl¨ usselungsmodus . . Output Feedback Block Verschl¨ usselungsmodus . . .

24

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

9 11 12 14 15 16 16 17 18 19 19

References [1] Xilinx AG. 2011.

http://www.xilinx.com/products/devkits/ek-v6-ml605-g.htm, Januar

[2] S. Kelly and S. Frankel. Using hmac-sha-256, hmac-sha-384, and hmac-sha-512 with ipsec, Mai 2007. [3] H. Krawczyk, M. Bellare, and R. Canetti. Hmac: Keyed-hashing for message authentication, Februar 1997. [4] National Institute of Standards and Technology (NIST). Specification for the advanced encryption standard (aes), November 2001. [5] National Institute of Standards and Technology (NIST). Announcing the secure hash standard, Januar 2002. [6] OpenVPN.org. http://openvpn.net/, Februar 2011. [7] Wikipedia. 2011.

http://de.wikipedia.org/wiki/advanced encryption standard, Januar

[8] Wikipedia. http://en.wikipedia.org/wiki/block cipher modes of operation, Januar 2011.

25

Suggest Documents