SSL-Beschleunigung mit modernen 3D-Grafikkarten

SSL-Beschleunigung mit modernen 3D-Grafikkarten

4.11 - 1251 ratings - Source



Inhaltsangabe:Einleitung: Die sichere Aœbertragung von Informationen in Computernetzen und speziell die Sicherheit im Internet sind von wachsender Bedeutung. Insbesondere konsumentenorientierte Dienste wie z.B. Online-Shopping, Online-Banking und Online-Auktionen stellen eine steigende Herausforderung dar. Sie mA¼ssen eine wachsende Kundenzahl mit einer dementsprechend zunehmenden Menge an Daten beliefern. Zum Schutz der PrivatsphAcre und sensibler Daten mA¼ssen diese verschlA¼sselt A¼bertragen werden. Nur so kann der Sicherheitsdienst Vertraulichkeit gewAchrleistet werden. Neben der VerschlA¼sselung der Kommunikation stehen weitere Sicherheitsmechanismen in Form kryptographischer Verfahren zur VerfA¼gung, mit denen weitere Sicherheitsdienste wie die Datenunversehrtheit oder auch DatenintegritAct und die Authentikation der Kommunikationspartner erbracht werden kApnnen. Zahlreiche Sicherheitsprotokolle fA¼r das Internet und auf IP basierende Protokolle und Anwendungen liegen als Standards vor und adressieren die Authentikations-, IntegritActs- und Vertraulichkeitsanforderungen des jeweiligen Einsatzgebietes. Zur verschlA¼sselten Aœbertragung des HTTP-Protokolls wird A¼berwiegend der Secure Socket Layer (SSL) verwendet. UrsprA¼nglich von Netscape entwickelt, wird SSL mittlerweile von der IETF unter dem Namen Transport Layer Security (TLS) standardisiert. SSL/TLS sichert TCP-Verbindungen, die auch vom HTTP-Protokoll verwendet werden. WAchrend des Verbindungsaufbaus werden asymmetrische kryptographische Verfahren zur Authentikation der Kommunikationspartner und zur Einigung auf einen gemeinsamen geheimen, d.h. symmetrischen SchlA¼ssel verwendet. Der mit asymmetrischen Verfahren ausgehandelte symmetrische SchlA¼ssel wird im Anschluss zur VerschlA¼sselung der Sitzung verwendet. Ein groAŸer Nachteil des SSL/TLS-Protokolls ist der hohe Rechenaufwand wAchrend des Verbindungsaufbaus mit asymmetrischer Kryptographie. Es sind spezielle Beschleunigerkarten auf dem Markt erhAcltlich, die fA¼r asymmetrische kryptographische Berechnungen ausgelegt sind. Die Karten kApnnen die anfallende Rechenlast A¼bernehmen und entlasten auf diese Weise den Hauptprozessor von z.B. SSL-Servern. Aufgrund der deutlichen Leistungssteigerung durch den Einsatz von SSL-Beschleunigerkarten werden diese hAcufig von den Betreibern vieler SSL-Server eingesetzt. Abbildung 1.1 zeigt beispielhaft eine solche Karte. Es ist das Modell AXL600L der Firma HP und wird in einer Version als PCI-Karte vertrieben. Hohe Anschaffungskosten sind ein wesentlicher Nachteil von SSL-Beschleunigern. Das aufgefA¼hrte Modell hat einen Neupreis von ca. 2000 Dollar. Diese dedizierte Krypto-Hardware ist keine Massenware; ihr Preis begrA¼ndet sich in einem geringen Produktionsvolumen. MApgliche gA¼nstigere Alternativen sind bislang nicht ersichtlich. Ein potentieller Ersatz fA¼r Krypto-Hardware sollte in vergleichbarer Zeit die selben Berechnungen ausfA¼hren kApnnen. Falls die Alternative nicht vergleichbar leistungsfAchig ist, muss sie zumindest deutlich kostengA¼nstiger sein, damit sie attraktiv ist. SSL-Beschleuniger verfA¼gen A¼ber eine speziell entworfene Logik, die sehr schnell und effizient arbeitet. Eine vergleichbar leistungsfAchige Alternative zu kleinerem Preis ist daher unwahrscheinlich. Das letzte Argument fA¼hrt zu dem Schluss, dass eine kostengA¼nstigere, aber vermutlich leistungsschwAcchere ErsatzlApsung wahrscheinlich ist. 3D-Grafikkarten sind in den letzten Jahren durch starke Nachfrage und hohem Konkurrenzdruck im Markt zu sehr leistungsfAchigen und preiswerten Produkten geworden. Gleichzeitig ist die Programmierbarkeit des Grafikprozessors deutlich gesteigert worden. Durch die neu gewonnene FlexibilitAct erApffnen sich stAcndig neue Anwendungsbereiche. Abbildung 1.2 zeigt beispielhaft die Ober- und Unterseite eines typischen Grafikprozessors. Moderne Grafikprozessoren arbeiten intern mit starker Parallelverarbeitung; sie kApnnen als Parallelprozessoren angesehen werden. FA¼r die asymmetrische oder auch Public-Key Kryptographie ist der RSA-Algorithmus weit verbreitet. Der Algorithmus erfordert die Exponentiation und die Modulo-Berechnung von sehr groAŸen ganzzahligen Operanden. FA¼r diese mathematischen Operationen existieren zahlreiche Algorithmen fA¼r Parallelprozessoren. Es sind aber auch Algorithmen fA¼r Allzweck-Mikroprozessoren und abgestimmte EntwA¼rfe fA¼r eine Implementierung in Hardware entwickelt worden. Gegenstand dieser Diplomarbeit ist die Untersuchung, ob und in welchem MaAŸe sich moderne 3D-Grafikkarten fA¼r mathematische Berechnungen der Kryptographie nutzen lassen. Im Speziellen wird eine Umsetzung der rechenintensiven asymmetrischen VerschlA¼sselung des weit verbreiteten RSA-Algorithmus analysiert. Es wurde bereits gezeigt, dass mit Hilfe von 3D-Grafikkarten symmetrische VerschlA¼sselung mApglich ist. Die Untersuchung kam zu dem Ergebnis, dass sich der Einsatz von Grafikkarten lohnen kann. Die verbreiteten Mikroprozessoren in Computersystemen kApnnen symmetrische VerschlA¼sselung sehr effizient durchfA¼hren. Grafikkarten sind nicht in der Lage die Berechnungen genauso schnell durchzufA¼hren, ihr zusActzlicher, unterstA¼tzender Einsatz ist aber laut der Studie lohnenswert. In den Kapiteln 2 und 3 werden die Arbeitsweise von modernen 3D-Grafikkarten und die MApglichkeiten ihrer Programmierung nAcher beschrieben. Kapitel 4 erAprtert die modulare Langzahl-Arithmetik. Sie ist Grundlage fA¼r eine Umsetzung des RSA-Algorithmus. Kapitel 5 und 6 beschreiben die in den Programmiersprachen C und Cg neu entwickelte Implementierung einer Multiplikation zweier langer Ganzzahlen und gehen auf die Integration der LApsung in die freie SSL-Bibliothek OpenSSL ein. Die Arbeit schlieAŸt mit der Evaluierung der Geschwindigkeit des Algorithmus und zeigt in einem Ausblick weiterfA¼hrende Entwicklungen und potentiellen Optimierungen auf. Inhaltsverzeichnis:Inhaltsverzeichnis: 1.Einleitung1 2.Moderne 3D-Grafikkarten4 2.1Einbindung in die Computerarchitektur5 2.2Die Render-Pipeline6 2.3Der Vertex-Shader7 2.4Der Fragment-Shader8 3.Programmierung von 3D-Grafikkarten10 3.1Zusammenspiel beteiligter Komponenten11 3.2OpenGL12 3.3Direct3D13 3.4Cg - C for Graphics14 3.5Fragment-Programme16 4.Modulare Langzahl-Arithmetik19 4.1Integer-Multiplikation20 4.2Parallelisierung der Integer-Multiplikation21 4.2.1Parallelisierung mit eindimensionalen Gittern21 4.2.2Parallelisierung mit zweidimensionalen Gittern26 4.3Modulo-Berechnung31 4.4Modulare Exponentiation33 4.4.1Square-and-Multiply Algorithmus33 4.4.2Links-nach-rechts Methode36 4.4.3Rechts-nach-links Methode37 4.4.4Sliding Window Exponentiation37 5.Implementierung39 5.1Anforderungen und Rahmenbedingungen40 5.2Systemarchitektur42 5.3Realisierung44 5.3.1Datenformate45 5.3.2Frame Buffer Objects46 5.3.3Erzeugung von Texturen46 5.3.4Transfer von Texturdaten47 5.3.5Berechnung der Partialprodukte49 5.3.6Bildung der Spaltensummen50 5.3.7Verarbeitung der AœbertrAcge54 5.4FunktionsA¼bersicht der Implementierung in C59 5.5Tests und Debugging62 6.Integration in OpenSSL64 6.1API fA¼r OpenSSL64 6.2A„nderungen an OpenSSL67 6.2.1Anpassungen am Quellcode67 6.2.2A„nderungen an Makefiles68 7.Evaluierung70 7.1Vergleich mit CPU-LApsung70 7.2Zeitbedarf wichtiger Operationen73 7.3Ansatzpunkte fA¼r Verbesserungen75 8.Zusammenfassung und Ausblick77 Literaturverzeichnis79 A.Installation der Software82 A.1Systemvoraussetzungen82 A.2Installationsanweisungen82 B.Hilfs- und Testanwendungen84 B.1Java-Applikation zum Vortrag84 B.2Messfunktionen86 B.3Testfunktionen89 C.Messergebnisse91 C.1Zeitnahme mit GPU-Implementierung91 C.2Wichtige Teilberechnungen der GPU-Implementierung91 C.3Zeitmessungen von CPU-LApsungen93 D.Die Software zur Diplomarbeit95 Textprobe:Textprobe: Kapitel 5.3, Realisierung: Die Implementierung besteht aus zwei Teilbereichen. Zum Einen hAclt die Grafikbibliothek OpenGL die Kontrolle A¼ber alle VorgAcnge. Sie regelt den Datentransfer, d.h. den Transfer von Texturen, zwischen Grafikkarte und Hauptspeicher sowie die Berechnung von Bildpunkten in der Zieltextur. Zum Anderen werden die eigentlichen Berechnungen mit GPU-Programmen durchgefA¼hrt. Eine klare Aufgabentrennung ist gegeben. Eine Multiplikation von zwei langen Integer-Zahlen ist auf folgende Weise umgesetzt worden: 1. Es wird im Hauptspeicher ein (zweidimensionales) Array fA¼r eine Textur von 128x128 Bildpunkten gebildet, die die beiden Faktoren von je 128 Byte in den ersten beiden Texturzeilen enthAclt. Diese und eine leere Textur werden durch OpenGL auf die Grafikkarte transferiert. 2. Es wird ein Frame Buffer Object erzeugt, an das (nur) die Ausgabetextur angehAcngt wird. Nach jedem Berechnungsvorgang eines der GPU-Programme wird die letzte Zieltextur als Eingabetextur gebunden und umgekehrt. 3. Es werden durch ein Fragment-Programm alle Partialprodukte gebildet. Die zweite leere Textur wird als Zieltextur gebunden und nimmt alle Partialprodukte auf, d.h. alle Ergebnisse des Rendervorgangs. 4. Aus den Partialprodukten werden die Spaltensummen mit einem weiteren GPU-Programm berechnet. 5. Die Verrechnung aller AœbertrAcge ist der letzte notwendige Rechenschritt. Er besteht aus vielen sequentiellen Schritten und ist mittels GPU-Programmierung nur aufwendig realisierbar. Der Algorithmus besteht aus vielen Vertauschungen von Eingabe- und Ausgabetextur mit kleinen Rechenphasen. 6. Die letzte Ausgabetextur wird durch OpenGL in den Hauptspeicher gelesen. Sie enthAclt das Produkt der Eingabe-Multiplikanden. OpenGL legt den Koordinatenursprung immer auf den linken unteren Bildpunkt einer Textur. Wird das ganze System imaginAcr um die y-Achse gedreht, dann steht die Textur auf dem Kopf , d.h. alle Zeilen sind in umgekehrter Reihenfolge und das Texel mit den Koordinaten (0.5, 0.5) befindet sich in der linken oberen Ecke der Textur. Mit dieser Betrachtungsweise wurde gearbeitet, weil sich die Aœbertragung der schriftlichen Multiplikation auf Operationen mit Texturen intuitiver nachvollziehen lAcsst. In allen eigenen Cg-Programmen ist die Variable inputTexture vom Typ samplerRECT (d.h. rechteckige Textur) eine Referenz auf die jeweils gesetzte Eingabetextur. Der Eingabeparameter float w wird immer konsistent auf den Wert der Texturbreite gesetzt. Die Variable texcoord wird stets der Cg-Variable TEXCOORD0 zugewiesen. Sie enthAclt die interpolierten Koordinaten des aktuellen Fragments, das berechnet wird. Die folgenden Kapitel beschreiben die Realisierung einzelner Teilimplementierungen im Detail. Kapitel 5.3.1 beschreibt die verwendeten Datenformate und wie die Faktoren und das Ergebnis in einer Textur abgelegt werden. Kapitel 5.3.2 erlAcutert Frame Buffer Objects, eine im FrA¼hjahr 2005 verabschiedete Erweiterung fA¼r OpenGL. Sie findet in der Implementierung Verwendung. Die weiteren Unterkapitel beschreiben die Umsetzung einzelner Rechenschritte. Sie erlAcutern die Erzeugung von Texturen (Kapitel 5.3.3), die Berechnung der Partialprodukte (Kapitel 5.3.5), die Summenbildung A¼ber die Spalten (Kapitel 5.3.6) und die Verarbeitung der AœbertrAcge (Kapitel 5.3.7). Punkt 1 und 6 der oben stehenden AufzAchlung beinhalten den Transfer von Texturdaten von und zur Grafikkarte und sind in Kapitel 5.3.4 zusammengefasst. Kapitel 5.3.1, Datenformate: Zur Multiplikation werden die beiden Faktoren a und b in einem festgelegten Format in der primAcren Eingabetextur abgelegt. Die GPU-Programme erwarten dieses Format und kApnnen nur so korrekt arbeiten. Faktor a befindet sich beginnend mit dem hApchstwertigen der N Byte in den Texeln mit den Texturkoordinaten (0.5, 0.5) (N 0.5, 0.5) (siehe Abbildung 5.4). Faktor b wird analog in der zweiten Texturzeile abgelegt, d.h. in die Bildpunkte mit den Koordinaten (0.5, 1.5) (N 0.5, 1.5). Die restliche Textur darf beliebig belegt sein; sie wird nicht ausgewertet und hat keinen Einfluss auf die Berechnungen. Das Ergebnis p belegt maximal so viele Byte wie beide Faktoren a und b zusammen belegen. Das letzte Fragment-Programm legt das Ergebnis beginnend mit dem hApchstwertigen Byte p2N in der zweiten Texturzeile ab. Die letzten 128 Byte befinden sich in der ersten Zeile. Wird die Textur in ein Array im Hauptspeicher ausgelesen, muss beachtet werden, dass in dem Feld die Ergebnisbyte in der Reihenfolge pn p1, p2N pN+1 vorliegen. Kapitel 5.3.2, Frame Buffer Objects: Frame Buffer Objects (FBOs) sind eine Erweiterung (Extension) fA¼r OpenGL, die im Februar 2005 verabschiedet wurde. Sie ermApglicht so genanntes off-screen rendering, d.h. die Verwendung des Grafikprozessors fA¼r Berechnungen, deren Resultate nicht zwangsweise auf den Bildschirm ausgegeben werden. FBOs werden in dieser Implementierung eingesetzt. Die Ergebnisse einer Berechnung mit einem GPU-Programm werden stets in einen Frame Buffer geschrieben. FBOs ermApglichen, diesen Puffer wie eine Textur sofort auszulesen. Dies war vor EinfA¼hrung der Erweiterung nicht direkt mApglich. Der Frame Buffer musste in eine Textur kopiert und dann ausgelesen werden. Wenn Berechnungsergebnisse aus dem Grafikspeicher gelesen werden sollen, ersparen Frame Buffer Objects eine Kopieroperation im Grafikspeicher. Gleichzeitig wird auch Speicherplatz gespart, weil die Informationen nicht mehr doppelt im Speicher abgelegt sind. Insbesondere der Bereich des GPGPU (GPG) profitiert sehr von der FBO Extension. Kapitel 5.3.3, Erzeugung von Texturen: Eine Textur muss in OpenGL erzeugt werden, bevor sie mit Texturdaten belegt und verwendet werden kann. OpenGL kann als eine Zustandsmaschine betrachtet werden, deren Zustand A¼ber globale Parameter festgelegt ist. Die Parameter haben z.B. Einfluss auf die Abbildung von Texturen und das verwendete Koordinatensystem. In dieser Implementierung werden konsequent rechteckige Texturen (GL_TEXTURE_RECTANGLE_ARB) verwendet. Die Koordinaten haben eine Spanne von (0, Texturbreite])x (0, TexturhAphe) und Texel werden mittig adressiert , d.h. der linke untere Bildpunkt hat die Koordinaten (0.5, 0.5). Die sonst A¼blichen quadratischen Texturen haben eine Koordinatenspanne von (0, 1) x (0, 1), die entsprechend A¼ber alle Texel interpoliert. Algorithmus 4 zeigt die Funktion create_texture(), die eine neue Textur erzeugt, die zunAcchst leer ist. An die Funktion wird der Parameter textureID A¼bergeben, der mit einer eindeutigen Identifikationsnummer belegt wird, A¼ber den die Textur angesprochen werden kann. Mit glEnable (GL_TEXTURE_RECTANGLE_ARB)wird die UnterstA¼tzung fA¼r rechteckige Texturen aktiviert.Inhaltsangabe:Einleitung: Die sichere Aœbertragung von Informationen in Computernetzen und speziell die Sicherheit im Internet sind von wachsender Bedeutung.


Title:SSL-Beschleunigung mit modernen 3D-Grafikkarten
Author: Christian Kirbach
Publisher:diplom.de - 2008-05-14
ISBN-13:

You must register with us as either a Registered User before you can Download this Book. You'll be greeted by a simple sign-up page.

Once you have finished the sign-up process, you will be redirected to your download Book page.

How it works:
  • 1. Register a free 1 month Trial Account.
  • 2. Download as many books as you like (Personal use)
  • 3. Cancel the membership at any time if not satisfied.


Click button below to register and download Ebook
Privacy Policy | Contact | DMCA