Side-channel attack op AES core geïmplementeerd in een FPGA

Maat: px
Weergave met pagina beginnen:

Download "Side-channel attack op AES core geïmplementeerd in een FPGA"

Transcriptie

1 Side-channel attack op AES core geïmplementeerd in een FPGA Studiegebied Industriële Wetenschappen en Technologie Opleiding Elektronica-ICT Afstudeerrichting Multimedia en Informatietechnologie Academiejaar Eindwerk Stijn Tilborghs

2 Voorwoord Op het moment dat ik dit onderwerp koos als eindwerk, wist ik niet wat een FPGA was. De MIT opleiding die ik volg legt namelijk een compleet verschillende nadruk op het vakgebied elektronica. Ik verwachtte dan ook dat de materie waar ik mee in aanraking zou komen, totaal verschillend zou zijn aan de dingen die ik reeds geleerd had in MIT. Ik leer graag nieuwe dingen bij en dit eindwerk sprak mij dan ook enorm aan. Het is vanzelfsprekend dat ik daarom dankbaar gebruik heb kunnen maken van de hulp van een aantal mensen. Ik zou hen bij deze graag willen bedanken. Als eerste zou ik graag mijn collega Wim Van Hoey willen bedanken. Het enige verschil tussen onze eindwerken is dat Wim het DES algoritme implementeert in plaats van het AES algoritme. We hebben dan ook meestal samengewerkt. Verder wil ik mijn promotors Johan Beke en Danaë Delbeke bedanken. Beiden gaven mij gedurende de thesis een hoop inzicht in de taken die mij te wachten stonden. Zonder hen was er van dit eindwerk geen sprake. Ik bedank ook Marc Windels voor het uitleggen van het current probe system, en zijn inzicht in de metingen die ik daarmee uitvoerde. Ten slotte wil ik nog mijn familie bedanken voor hun morele steun tijdens mijn studies. Stijn Tilborghs, 2006 I

3 Inhoudstafel VOORWOORD...I INHOUDSTAFEL... II GEBRUIKTE AFKORTINGEN...V LIJST VAN FIGUREN... VI LIJST VAN TABELLEN...VIII INLEIDING DE ADVANCED ENCRYPTION STANDARD [1] INLEIDING [2] AES CIPHER [3] Algemeen Versleutelen van een block [4] De sleutel De data Een ronde Versleutelen van meerdere blocks [5] Electronic Codebook (ECB) Cipher-Block Chaining (CBC) ATTACKS OP AES Brute-force attacks [6] Side-channel attacks [7] Timing attacks Power consumption attacks Twee succesvolle side-attacks [8] AES CORE OP ZOEK NAAR EEN CORE DE AES128 CORE [11] KEUZE VAN HET BOARD BESCHIKBARE FPGA BOARDS OPBOUW VAN DE SPARTAN Extern Intern [13] OPBOUW VAN DE VIRTEX-II PRO Extern Intern [13] WERKING VAN DE OPB BUS [15][16] II

4 4. TESTEN VAN DE AES CORE SIMULATIE IN QUARTUS II Een nieuw project aanmaken en configureren Encryptie Simulatie met 2 identieke helften van data_in en key Simulatie met 2 verschillende helften van data_in en key SIMULATIE VAN DE AES CORE IN MODELSIM Een nieuw project aanmaken en configureren Encryptie Decryptie IMPLEMENTATIE VAN DE AES CORE HARDCODEREN IN DE FPGA MET XILINX ISE Is de Spartan-3 krachtig genoeg? Is de Virtex-II PRO krachtig genoeg? Implementatie van de core met schuifschakelaars Doelstelling Aanmaken van een nieuw top-level VHDL bestand: AES.vhd Simulatie in Modelsim De poorten koppelen met fysieke pinnen op het board Downloaden naar het board Controleren van de output Implementatie van de core, volledig geautomatiseerd Doelstelling Aanpassen van het top-level VHDL bestand: AES.vhd Simulatie in Modelsim Poorten koppelen en downloaden naar het board Controleren van de output SYSTEM-ON-CHIP MET XILINX XPS Doelstelling Het XPS project aanmaken en configureren [19] Simulatie in Modelsim [20] Schrijven van een applicatie Downloaden en controleren van de output METINGEN AANPASSING VAN HET GEAUTOMATISEERDE ISE PROJECT Continu versleutelen Puls genereren bij de start van een nieuwe encryptie Klokfrequentie meting Klokfrequentie aanpassing WERKWIJZE III

5 6.2.1 High-Side Current-Sensing [22] Current probe system METINGEN MET HET CURRENT PROBE SYSTEM ,5V meting ,5V meting ,3V meting FFT van de 1,5V meting Nabeschouwing MOGELIJKE OPLOSSINGEN Filter Externe voeding aanleggen BESLUIT LITERATUURLIJST BIJLAGEN BASE CONVERTER [26] JAVASCRIPT AES TOOL [27] TESTEN VAN DE CORE: SIMULATIE IN MODELSIM DO-file voor encryptie DO-file voor decryptie IMPLEMENTATIE VAN DE CORE MET SCHUIFSCHAKELAARS AES.vhd DO-file voor simulatie AES.ucf IMPLEMENTATIE VAN DE GEAUTOMATISEERDE CORE AES.vhd DO-file voor simulatie AES.ucf SYSTEM-ON-CHIP User_logic.vhd Configureren van Modelsim en XPS voor rechtstreekse simulatie vanuit XPS [28][29] Compileren van bibliotheken De SWIFT interface instellen voor gebruik van SmartModels DO-file voor simulatie Application in C AANPASSINGEN AAN GEAUTOMATISEERD ISE PROJECT AES.vhd AES.ucf IV

6 Gebruikte afkortingen Abus Adresbus AES Advanced Encryption Standard BE Byte Enable BRAM Block RAM CBC Cipher-Block Chaining cipher Een algoritme om data te versleutelen en ontsleutelen ciphertext De versleutelde data Dbus DataBus DES Data Encryption Standard ECB Electronic CodeBook FFT Fast Fourier Transform FPGA Field Programmable Gate Array I Stroomsterkte IC Integrated Circuit IP Intellectual Property ISE Integrated Software Environment LMB Local Memory Bus LSB Least Significant Bit MSB Most Significant Bit NIST National Institute of Standards and Technology OPB On-chip Peripheral Bus P Vermogen plaintext De niet-versleutelde data PLB Processor Local Bus SoC System-on-Chip U Voltage XOR Exclusieve OR XPS Xilinx Platform Studio XUP Xilinx University Program V

7 Lijst van figuren FIG 1.1: AES ENCRYPTIE... 2 FIG 1.2: AES DECRYPTIE... 2 FIG 1.3: ELECTRONIC CODEBOOK (ECB) ENCRYPTIE... 5 FIG 1.4: TUX THE PENGUIN... 6 FIG 1.5: TUX VERSLEUTELD MET ECB... 6 FIG 1.6: TUX VERSLEUTELD MET EEN ANDERE MODE... 6 FIG 1.7: CIPHER-BLOCK CHAINING (CBC) ENCRYPTIE... 7 FIG 2.1: AES128_FAST.VHD TIJDSDIAGRAM FIG 3.1: SPARTAN-3 FOTO FIG 3.2: SPARTAN-3 INTERN SCHEMA FIG 3.3: VIRTEX-II PRO FOTO FIG 3.4: VIRTEX-II PRO INTERN SCHEMA FIG 3.5: BIG ENDIAN FIG 3.6: EEN OPB SCHRIJFACTIE FIG 4.1: NEW PROJECT WIZARD - ADD FILES FIG 4.2: NODE FINDER FIG 4.3: QUARTUS RESULTAAT FIG 4.4: QUARTUS RESULTAAT FIG 4.5: WORKSPACE VENSTER PROJECT TAB FIG 4.6: WORKSPACE VENSTER - LIBRARY TAB FIG 4.7: SIGNALEN TOEVOEGEN AAN DE WAVEFORM FIG 4.8: EEN SIGNAAL AANLEGGEN FIG 4.9: EEN SIGNAAL FORCEREN (1) FIG 4.10: EEN SIGNAAL FORCEREN (2) FIG 4.11: MODELSIM ENCRYPTIE RESULTAAT FIG 4.12: MODELSIM DECRYPTIE RESULTAAT FIG 5.1: XILINX ISE FIG 5.2: AES.VHD SCHEMA FIG 5.3: MODELSIM RESULTAAT FIG 5.4: XILINX PACE FIG 5.5: XILINX IMPACT FIG 5.6: AES.VHD SCHEMA FIG 5.7: MODELSIM RESULTAAT FIG 5.8: OVERZICHT VAN DE 5 REGISTERS FIG 5.9: XILINX XPS FIG 5.10: COMPONENTEN VAN HET XPS PROJECT FIG 5.11: CREATE PERIPHERAL - STAP FIG 5.12: CREATE PERIPHERAL - STAP VI

8 FIG 5.13: ADD/EDIT CORES - PERIPHERALS FIG 5.14: ADD/EDIT CORES - ADDRESSES FIG 5.15: ADD/EDIT CORES - PORTS FIG 5.16: COMPONENTEN VAN HET XPS PROJECT, NU MET AES CORE FIG 5.17: DE INSTANTIE AES_0 IS TOEGEVOEGD FIG 5.18: BLOKSCHEMA FIG 5.19: SIMULATIE IN MODELSIM FIG 5.20: HET RESULTAAT IN WINDOWS HYPERTERMINAL FIG 6.1: DE PINNEN MET JUMPERS VAN DE 1,5V LIJN FIG 6.2: HIGH-SIDE CURRENT-SENSING MET DE MAX FIG 6.3: METING OP DE 1,5V-LIJN (200 µs/div) FIG 6.4: METING OP DE 1,5V-LIJN (50 µs/div) FIG 6.5: METING OP DE 2,5V-LIJN (200 µs/div) FIG 6.6: METING OP DE 2,5V-LIJN (50 µs/div) FIG 6.7: METING OP DE 3,3V-LIJN (200 µs/div) FIG 6.8: METING OP DE 3,3V-LIJN (50 µs/div) FIG 6.9: FFT VAN DE METING OP DE 1,5V-LIJN FIG 8.1: BASE CONVERTER... 1 FIG 8.2: JAVASCRIPT AES EXAMPLE... 2 FIG 8.3: XPS PROJECT OPTIONS FIG 8.4: XPS LIBRARY COMPILATION WIZARD - STAP FIG 8.5: XPS LIBRARY COMPILATION WIZARD - STAP FIG 8.6: XPS LIBRARY COMPILATION WIZARD - STAP FIG 8.7: XPS LIBRARY COMPILATION WIZARD - STAP FIG 8.8: XPS LIBRARY COMPILATION WIZARD - STAP FIG 8.9: XPS PROJECT OPTIONS INGEVULD FIG 8.10: WINDOWS ENVIRONMENT VARIABLES VII

9 Lijst van tabellen TABEL 1.1: AES INTERNE KARAKTERISTIEKEN... 3 TABEL 2.1: AES128_FAST.VHD POORTEN TABEL 3.1: SPARTAN-3 EN VIRTEX-II PRO SPECIFICATIES TABEL 3.2: OPB BUS SIGNALEN TABEL 5.1: POORTEN KOPPELEN MET FYSIEKE COMPONENTEN IN DE UCF FILE TABEL 5.2: REGISTER VIII

10 Inleiding De veiligheid van het AES algoritme is in de encryptiewereld een hot topic. Er zijn reeds talloze attacks op AES gebeurd, maar op het moment dat dit eindwerk aangekondigd werd, was slechts één daarvan succesvol gebleken. Deze aanval was een side-channel attack. In de literatuur wordt echter met geen woord gerept over side-channel attacks op FPGA s. Een FPGA lijkt nochtans ideaal voor een dergelijke aanval door zijn flexibiliteit en de relatief lage kostprijs. Bovendien zijn er zeer eenvoudig metingen op te doen. In dit eindwerk wordt de AES cipher in een FPGA geïmplementeerd, om er daarna een sidechannel attack op uit te kunnen voeren. Het volledige eindwerk werd uitgevoerd in het labo elektronica van de PIH Kortrijk, lokaal B214. Als eerste werd een studie gedaan van de AES cipher. Hierdoor werd een zeker inzicht in de cipher verkregen, dat nodig zou zijn bij het analyseren van de aanvallen. In deze studie werd ook gekeken naar reeds uitgevoerde side-channel attacks op AES. Vervolgens werd op zoek gegaan naar een AES core. Een core kan rechtstreeks in een FPGA geplugd worden. Een AES core vinden zou het implementeren van de cipher aanzienlijk verkorten omdat de cipher zelf niet meer geprogrammeerd hoeft te worden. Nadat de core gevonden en getest was, werd gezocht naar een geschikte FPGA. Vervolgens werd de core in deze FPGA geplugd, waarna de aanval uitgevoerd kon worden. In dit eindwerk wordt de aanval gedaan door te kijken naar het stroomverbruik. Door vervolgens een analyse te doen van dit stroomverbruik, zouden we informatie moeten kunnen bekomen om zo de sleutel of de niet-versleutelde tekst te achterhalen. 1

11 1. De Advanced Encryption Standard [1] 1.1 Inleiding [2] Op 2 januari 1997 lanceerde het National Institute of Standards and Technology (NIST) een oproep voor een vervanger van de Data Encryption Standard (DES). DES was inmiddels verouderd en werd reeds verschillende keren gekraakt, en er was dus nood aan een nieuwe, veiligere standaard. In de volgende maanden werden in totaal 15 verschillende encryptie-algoritmes (ciphers) ingediend bij het NIST, waaronder Rijndael. Rijndael werd ontwikkeld door twee Vlaamse onderzoekers aan de Katholieke Universiteit Leuven: Vincent Rijmen en Joan Daemen. Uiteindelijk werd Rijndael tot winnaar uitgeroepen door het NIST en werd het de officiële Advanced Encryption Standard (AES). 1.2 AES cipher [3] Algemeen AES is een block cipher. Een block cipher neemt als data-input een vast aantal bits, die blocks genoemd worden. Bij AES heeft dit block steeds een grootte van 128 bits. Bij het versleutelen wordt bij AES een 128-bit block leesbare tekst (plaintext) ingelezen. De output is de versleutelde tekst (ciphertext), die ook een 128-bit block is. De exacte transformatie van plaintext naar ciphertext is volledig afhankelijk van een tweede input: de sleutel. Ontsleutelen werkt analoog: een 128-bit block ciphertext wordt ingelezen samen met de sleutel, en het resultaat is de plaintext. Fig 1.1: AES encryptie Fig 1.2: AES decryptie 2

12 1.2.2 Versleutelen van een block [4] Zoals reeds hoger vermeld, is de blockgrootte bij AES steeds 128 bits. De sleutelgrootte kan echter variëren. Mogelijke lengtes voor AES zijn 128, 192 of 256 bits. Met verschillende sleutelgrootte s veranderen ook een aantal karakteristieken van de interne werking van de AES cipher. In volgende tabel wordt een overzicht gegeven: Tabel 1.1: AES interne karakteristieken Sleutelgrootte 128 bits 192 bits 256 bits Blokgrootte 128 bits 128 bits 128 bits Aantal ronden Deelsleutelgrootte 128 bits 128 bits 128 bits Geëxpandeerde sleutelgrootte 176 bytes 208 bytes 240 bytes De sleutel De sleutel die meegegeven wordt aan de cipher ondergaat een aantal bewerkingen voordat deze wordt gebruikt. Omdat de bewerkingen voor de verschillende sleutelgrootte s zeer sterk op elkaar gelijken, wordt hieronder enkel een voorbeeld voor een sleutel van 128 bits geschetst. Eerst wordt de 128-bit sleutel in een 4x4 matrix gezet. Elk element in de matrix is dus een byte. De bytes worden kolom per kolom verdeeld over de matrix. Vervolgens ondergaat deze matrix een key expansion. Dit is een reeks bewerkingen, waarvan het resultaat een kolommatrix is van 44 woorden. Elk woord wordt hier als 32-bit beschouwd of dus 4 bytes. In totaal heeft deze kolommatrix dus 176 bytes. Dit is de geëxpandeerde sleutel (w) De data Een input block wordt eerst omgezet in een 4x4 matrix, net zoals bij de sleutel. Deze matrix wordt de inputmatrix (s) genoemd. Vervolgens wordt de inputmatrix in de toestandsmatrix (s) gekopieerd. De toestandsmatrix doorloopt het algoritme en de bewerkingen worden hierop uitgevoerd. 3

13 Als eerste wordt op de toestandsmatrix de functie AddRoundKey toegepast. De deelsleutel die voor deze functie gebruikt wordt is w[0,3]. De deelsleutel en de functie AddRoundKey worden uitgelegd in hoofdstuk Vervolgens doorloopt de toestandsmatrix een aantal ronden. Het aantal ronden hangt af van de originele sleutelgrootte en is 10, 12 of 14. In elke ronde ondergaat de matrix een verandering. Het totaal aantal veranderingen aan de toestandsmatrix is dus 11, 13 of 15. Na alle ronden doorlopen te hebben wordt de toestandsmatrix in de outputmatrix (o) gekopieerd Een ronde De deelsleutel: Elke ronde heeft zijn eigen deelsleutel nodig. Deze is nodig voor de functie AddRoundKey. De deelsleutel is steeds een deel van de geëxpandeerde sleutel (w), maar is voor elke ronde verschillend. De deelsleutel van ronde N is: w[n*4,(n+1)*4-1] Ronde 1 heeft dus als deelsleutel w[4,7]. Ronde 2 heeft dus als deelsleutel w[8,11]. De deelsleutel is altijd 4 woorden lang (128 bits). Ze is dus even groot als de toestandsmatrix. De bewerkingen: Elke ronde - behalve de laatste - doorloopt de volgende 4 bewerkingen. De laatste ronde doet slechts 3 bewerkingen: de MixColumns stap wordt weggelaten. Subbytes: Elke byte uit de toestandsmatrix wordt vervangen door zijn overeenkomstige waarde uit een 8-bit S-box. De S-box is afgeleid van de inverse functie van het Galois-veld GF(2 8 ). ShiftRows: Elke rij behalve de eerste - uit de toestandsmatrix ondergaat een verschuiving. Elke waarde uit de tweede rij van de matrix schuift één plaats naar links. De waarde die oorspronkelijk uiterst links in de rij stond (de eerste kolom), staat na de bewerking uiterst 4

14 rechts. De derde en vierde rij verschuiven respectievelijk 2 en 3 plaatsen naar links. Op deze manier bestaat elke kolom van de nieuwe toestandsmatrix uit bytes van elke kolom van de oude toestandsmatrix. MixColumns: Elke kolom uit de toestandsmatrix wordt vermenigvuldigd met een functie. Deze functie is een inverteerbare lineaire transformatie en heeft 4 bytes als input. De output is 4 bytes, waarbij elke input byte alle 4 de outputs beïnvloedt. Addroundkey: Elke byte uit de toestandsmatrix ondergaat een XOR met de overeenstemmende byte uit de deelsleutel Versleutelen van meerdere blocks [5] Om meer bits aan de cipher mee te geven dan de grootte van een block, worden zogenaamde modes of operation gebruikt. De modes die meestal gebruikt worden voor eenvoudige AES applicaties zijn Electronic Codebook (ECB) en Cipher-block Chaining (CBC) Electronic Codebook (ECB) ECB is de eenvoudigste werkingsmode. In ECB wordt de boodschap eerst gesplitst in blokken. Daarna wordt elk block apart versleuteld. Fig 1.3: Electronic Codebook (ECB) encryptie 5

15 Het nadeel van ECB is dat identieke plaintext blocks versleuteld worden tot identieke ciphertext blocks. In sommige gevallen kan ECB dus de vertrouwelijkheid van informatie niet waarborgen. Hieronder een kleine illustratie: Fig 1.4: Tux the penguin 1 Fig 1.5: Tux versleuteld met ECB Fig 1.6: Tux versleuteld met een andere mode 1 Tux the Penguin werd ontworpen door Larry Ewing (lewing@isc.tamu.edu) met The GIMP. 6

16 Cipher-Block Chaining (CBC) Bij het versleutelen in de CBC mode ondergaat elke block plaintext eerst een extra bewerking vlak voor de encryptie. Er wordt een exclusieve OR (XOR) gedaan van de huidige block plaintext en de ciphertext van de vorige versleutelde block. Met deze methode is elk ciphertext block dus afhankelijk van alle voorgaande plaintext blocks. Om het eerste plaintext block te versleutelen wordt een zogenaamde Initialization Vector gebruikt, omdat de eerste plaintext block natuurlijk geen vorige ciphertext block als input kan gebruiken. Fig 1.7: Cipher-Block Chaining (CBC) encryptie CBC is de meestgebruikte werkingsmethode. Toch heeft CBC ook een nadeel: het is sequentieel. Alvorens een block versleuteld kan worden, moet eerst het vorige block volledig versleuteld zijn. Parallel werken is dus onmogelijk en dit heeft invloed op de encryptie-snelheid. 7

17 1.3 Attacks op AES In deze paragraaf worden twee mogelijke aanvalsmethoden besproken. Als eerste wordt de brute-force attack behandeld, om de verbeterde veiligheid ten opzichte van DES te illustreren. De tweede methode is de side-channel aanval, die tot op vandaag de enige succesvolle aanval is op AES Brute-force attacks [6] De grote kritiek op DES was de beperkte lengte van de sleutel (56 bits). AES werkt met sleutels van 128, 192 of 256 bits. Alleen op dit vlak was AES dus al een hele verbetering ten opzichte van DES. Hieronder een kleine illustratie: DES: 2 56 dus 7, mogelijke 56-bit sleutels. AES: dus 3, mogelijke 128-bit sleutels dus 6, mogelijke 192-bit sleutels dus 1, mogelijke 256-bit sleutels. In 1998 werden de eerste DES Cracker machines gebouwd. Het was met een dergelijke machine mogelijk om in enkele dagen de DES sleutel te vinden waarmee een boodschap versleuteld was. Dit gebeurde door simpelweg de hardware alle mogelijke sleutels uit te laten proberen. Stel dat het mogelijk zou zijn om een machine te bouwen die een DES sleutel in één seconde kan vinden, dan zou dit ongeveer 149 triljoen jaren duren voor een 128-bit AES sleutel Side-channel attacks [7] Side-channel attacks zijn aanvallen die gebaseerd zijn op side-channel informatie. Dit is informatie die gehaald kan worden uit de fysische implementatie van een encryptiesysteem. Enkele voorbeelden zijn timing informatie (informatie over de tijd die bepaalde bewerkingen in beslag nemen), vermogenverbruik, verschillende soorten straling en zelfs geluid. Vaak heeft de hardware ook een aantal ongebruikte inputs, zoals voltage dat gewijzigd kan worden om zo voorspelbare resultaten te bekomen. Dergelijke inputs kunnen bruikbaar zijn voor een aanvaller. 8

18 Bij side-channel aanvallen wordt gebruik gemaakt van deze methoden - eventueel in combinatie met andere gekende aanvalstechnieken om de sleutel te bemachtigen Timing attacks Timing attacks zijn gebaseerd op het meten van de tijd die een bepaalde eenheid nodig heeft om een bewerking uit te voeren. Deze metingen kunnen leiden tot informatie over de geheime sleutel. Als een eenheid kwetsbaar is voor een timing attack, dan is de aanval relatief simpel en is de gekende versleutelde tekst vaak voldoende om de aanval uit te voeren. Vaak komt het ook voor dat in een hardware implementatie de encryptie niet altijd even lang duurt. De redenen hiervoor zijn onder andere performantie-optimaliseringen om onnodige bewerkingen over te slaan, RAM cache hits en identieke opeenvolgende instructies. In deze gevallen zijn meestal zowel de plaintext als ciphertext nodig om een aanval uit te voeren. De verkregen metingen worden in een statistisch model gebracht, dat voor elke sleutel-bit een waarde kan schatten met een bepaalde zekerheid. Dit wordt gedaan door de correlatie te checken tussen de tijdsmetingen. Door vervolgens de variantie te bepalen kunnen we gemakkelijk correcte schattingen detecteren. Om een sleutel te vinden waarmee een boodschap versleuteld is, moet hiervoor natuurlijk voldoende informatie beschikbaar zijn. Het aantal samples dat hiervoor nodig is, hangt af van de eigenschappen van het signaal en de ruis. Vanzelfsprekend, hoe meer ruis er is, hoe meer samples er nodig zullen zijn. Voor velen lijkt het op het eerste zicht onmogelijk om met deze methode veel informatie over het cryptosysteem te verkrijgen. In de praktijk zijn echter al timing attacks uitgevoerd op kwetsbare systemen (andere algoritmes dan AES), waarbij de volledige sleutel gevonden werd Power consumption attacks Deze aanvallen zijn gebaseerd op het analyseren van het vermogenverbruik van een eenheid terwijl deze een encryptie-bewerking uitvoert. Door deze gegevens is het 9

19 mogelijk om informatie te vinden over de interne processen in de eenheid. Deze informatie, eventueel gecombineerd met andere aanvalsmethoden, kan helpen om de originele sleutel te bekomen. Integrated circuits (IC s) zijn opgebouwd uit transistoren die werken als een voltagegecontroleerde switch. Stroom vloeit wel of niet door de transistor, afhankelijk van de lading van de gate. Stroom die door de transistor vloeit, kan daarna gebruikt worden voor andere doeleinden zoals een andere transistor aansturen. De verplaatsing van lading verbruikt vermogen en produceert electromagnetische straling. Beiden zijn extern gemakkelijk meetbaar. Om het vermogenverbruik P te meten van een circuit, wordt een kleine weerstand (bijvoorbeeld 50 milli-ohm) geplaatst in serie met de bron of de massa. Het voltage U over de weerstand gedeeld door de weerstand geeft de stroomsterkte I. Met deze informatie kan het vermogen berekend worden. Immers, P=I*U Twee succesvolle side-attacks [8] Er zijn reeds een groot aantal pogingen ondernomen om AES te kraken. Tot op heden zijn side-channel attacks de enige successvolle aanvallen geweest. Er zijn op dit moment 2 succesvolle side-channel attacks gebeurd. Beide aanvallen gebeurden in 2005 en waren cache timing attacks. De eerste aanval was op een speciale server die OpenSSL s AES encryptie gebruikte. De server was ontworpen om zoveel mogelijk timing informatie te geven, en de aanval had meer dan 200 miljoen gekende plaintexts nodig. [9] De tweede aanval werd gepubliceerd in een paper waarin verschillende cache timing attacks op AES werden gedemonstreerd. Bij een van de aanvallen wist men een volledige AES sleutel te bemachtigen in slechts 65 milliseconden. Deze aanval vereiste wel dat de aanvaller programma s kon uitvoeren op het systeem dat zorgde voor de versleuteling. [10] 10

20 2. AES core 2.1 Op zoek naar een core Er zijn op het internet een groot aantal digitale modules beschikbaar die cores genoemd worden. Elke core implementeert een bepaalde functionaliteit. Voorbeelden zijn cores die zorgen voor foutcorrectie, video-aansturing en compressie. Er bestaan ook cryptocores, die zorgen voor versleuteling en ontsleuteling van data. Voor veel cores moet betaald worden, maar er bestaat ook zogenaamde open source hardware. Het beste voorbeeld hiervan is de website OpenCores.org. Alle cores op deze website zijn beschikbaar onder de GNU Public License (GPL) of de BSD License, wat wil zeggen dat ze volledig gratis zijn voor persoonlijk gebruik. De simpelste manier om de AES cipher te implementeren op het board, zou neerkomen op het downloaden van een AES core en deze vervolgens aanspreken met zelfgeschreven code. Op deze manier moet immers niet de hele cipher zelf geprogrammeerd worden. Bij de start van het eindwerk waren op de OpenCores website drie AES cores beschikbaar. Twee daarvan waren geschreven in Verilog, de laatste in VHDL. Er werd gekozen voor de core in VHDL omdat er in de school hier het meeste ervaring mee is. 2.2 De AES128 core [11] De AES128 core is een crypto-core geschreven in VHDL. De core implementeert de AES standaard, die gedocumenteerd wordt in het FIPS-197 document[3]. De AES128 core kan enkel werken met sleutelsgrootte s van 128 bits en werkt in ECB mode. Zowel versleuteling als ontsleuteling is mogelijk. De core bestaat uit 3 VHDL files: - aes128_fast.vhd - key_expander.vhd - aes_package.vhd Aes128_fast.vhd is het toplevel bestand. Dit is de enige file die aangesproken moet worden bij de implementatie in hardware. Alle onderliggende logica wordt door de core intern afgehandeld met behulp van de andere 2 bestanden. 11

21 Aes128_fast.vhd definieert volgende poorten die de gebruiker kan aansturen of lezen: Tabel 2.1: Aes128_fast.vhd poorten Poort Beschrijving clk De klok load Lees de key en data_in start Start het proces done Wordt hoog als het proces voltooid is key De sleutel (64-bit) data_in De input data (64-bit) data_out De output data (128-bit) reset Reset de core mode 1 = encryptie, 0 = decryptie De core werd oorspronkelijk geschreven met 128-bit poorten voor key en data_in. Om I/O pinnen te besparen werd dit echter omgezet naar 64 bits. De 128-bit data en sleutel worden in twee blokken van 64 bits ingelezen in opeenvolgende klokcycles. 64 bits data en sleutel worden gelezen op de stijgende flank van de klok nadat het load signaal hoog wordt. Het tweede blok van 64 bits wordt gelezen op de stijgende flank van de klok, nadat het load signaal laag wordt. De volledige data en key zijn dus pas geladen nadat het load signaal een puls maakt. Het encryptie- of decryptieprocess start nadat het start signaal een puls maakt. 13 klokcycles nadat het start signaal laag wordt, wordt het done signaal hoog en is de output beschikbaar. Het done signaal blijft hoog tot de volgende start-puls. Het start signaal wijzigen tijdens een encryptie- of decryptieproces leidt tot foutieve output. In de documentatie van de core wordt het proces als volgt grafisch weergegeven in de tijd: 12

22 clk load start 13 clock cycles after start goes low done data_in input block [0-63] input block [64-127] data_in key block [0-63] key block [64-127] data_out output valid Fig 2.1: Aes128_fast.vhd tijdsdiagram 13

23 3. Keuze van het board 3.1 Beschikbare FPGA boards Voor dit eindwerk was er de keuze tussen 2 boards om de cipher op te configureren. Dit zijn het Spartan-3 Starter Board en de XUP Virtex-II PRO. Beide boards zijn ontwikkeld door Xilinx. Tabel 3.1: Spartan-3 en Virtex-II PRO specificaties Board Spartan-3 Starter Board XUP Virtex-II PRO Device xc3s200 xc2vp30 Package ft256 ff896 PowerPC processors 0 2 MicroBlaze soft processors ja ja Maximale klokfrequentie 50 Mhz 400 Mhz Logische cellen Block RAM 216 Kbit 2448 Kbit Beschikbare user I/O Prijs $99 Industrieel gebruik: $1599 Academisch gebruik: $299 Uit bovenstaande tabel [12] blijkt duidelijk dat de Virtex-II PRO superieure specificaties heeft. Toch werd aanvankelijk de Spartan-3 gekozen voor dit eindwerk. Deze keuze was volledig gebaseerd op de prijs. Willen we een timing of power consumption side-channel attack uitvoeren met het board, dan zullen op het board metingen moeten uitgevoerd worden en zal eventueel ergens een weerstand tussengeplaatst moeten worden. Hiervoor is het waarschijnlijk dat er enkele baantjes op het board onderbroken moeten worden. Dit kan ervoor zorgen dat het board na het eindwerk niet meer bruikbaar is. Daarom werd gekozen voor de goedkopere Spartan-3. 14

24 Later (zie 5.1.1) zou echter blijken dat de Spartan-3 niet krachtig genoeg is om de AES cipher te implementeren. Er moest dus noodgedwongen verder gewerkt worden met de Virtex-II PRO. 3.2 Opbouw van de Spartan Extern Fig 3.1: Spartan-3 foto De belangrijkste externe componenten van de Spartan-3 zijn: - RS-232 seriële poort - 8 schuifschakelaars - 4 drukknoppen - 4 karakter 7-segment LED - VGA poort - PS/2 poort - 8 LEDs Met een seriële kabel kan via de RS-232 poort het board geconfigureerd worden. Het is ook mogelijk om op deze manier informatie uit te lezen. Dit kan bijvoorbeeld met Windows Hyperterminal. De andere vermeldde componenten zijn ook allen bruikbaar voor eventuele input of output. 15

25 3.2.2 Intern [13] Fig 3.2: Spartan-3 intern schema Bovenstaand schema geeft de Microblaze architectuur weer, die gebruikt wordt in de Spartan-3. De Microblaze is een soft processor ontwikkeld door Xilinx. Een softprocessor is een processor die gemaakt wordt door een Intellectual Property (IP) core te implementeren in een FPGA [14]. Het nadeel is dat een softprocessor een gedeelte van de beschikbare resources van de FPGA in beslag neemt. Daar staan echter enkele voordelen tegenover, zoals de prijs en het feit dat er zoveel processors kunnen aangemaakt worden als nodig (zolang er genoeg beschikbare resources zijn). De Microblaze processor staat in verbinding met de Local Memory Bus (LMB) en de Onchip Peripheral Bus (OPB). De LMB zorgt voor toegang tot het Block RAM (BRAM). Hierbij zorgt de ILMB controller voor de instructies en de DLMB controller voor de data. De OPB interface zorgt voor een verbinding tussen zowel on-chip als off-chip randapparatuur en geheugen. Het is de bedoeling dat de AES core in verbinding komt te staan met de OPB bus. Als dit gebeurd is, is het mogelijk om de core aan te spreken, er data naartoe te sturen en te ontvangen. 16

26 3.3 Opbouw van de Virtex-II PRO Extern Fig 3.3: Virtex-II PRO foto De belangrijkste externe componenten van de Virtex-II PRO zijn: - RS-232 poort - SATA connectoren - 10/100 Mbit Ethernet poort - Stereo audio output poorten - 5 drukknoppen - 4 schuifschakelaars - 4 LED s - DDR RAM DIMM slot I/O pinnen - PS/2 muis en toetsenbord poorten - USB2.0 poort - XSGA video out poort De Virtex-II PRO configureren gebeurt via de USB kabel. Het uitlezen van informatie gebeurt in dit eindwerk echter met de seriële poort, net zoals bij de Spartan-3. Op deze manier kan er gebruik gemaakt worden van Windows Hyperterminal om informatie te ontvangen. 17

27 3.3.2 Intern [13] De Virtex-II beschikt over 2 PowerPC processors. Deze PowerPC processors zijn hardcore, dus geen softprocessors zoals de Microblaze. Naast de PowerPC processors is het natuurlijk ook mogelijk om op de Virtex-II gebruik te maken van de Microblaze. Immers, de Microblaze is een softprocessor en dus te configureren in eender welke FPGA van Xilinx. Er is echter geen enkele reden waarom we geen gebruik zouden maken van de PowerPC. De PowerPC is sneller en neemt geen resources van de FPGA in beslag. Vandaar de keuze voor de PowerPC. Fig 3.4: Virtex-II PRO intern schema Bovenstaand schema geeft de PowerPC architectuur weer. Hier zijn er 2 belangrijke bussen: de Processor Local Bus (PLB) en de OPB. De PLB bus heeft een zeer hoge performantie. Ze staat in verbinding met de processor, het RAM geheugen, en is verbonden met de OPB bus via de PLB2OPB bridge. De OPB bus bij de PowerPC is identiek aan deze van de Microblaze. Het zou mogelijk zijn om de AES core op de PLB bus te plaatsen, maar de PLB heeft een veel complexer protocol dan de OPB. Bovendien biedt de OPB bus genoeg bandbreedte om ons doel te bereiken (gemiddeld ongeveer 167 MB/s). Bij de Virtex-II PRO zal dus, net zoals bij de Spartan-3, de AES core op de OPB bus geplaatst worden. 18

28 3.4 Werking van de OPB bus [15][16] Zowel op de Spartan-3 als de Virtex-II PRO is het de bedoeling dat de AES core verbonden wordt met de OPB bus. Daarom is het belangrijk te weten hoe de OPB precies werkt. Er wordt een onderscheid gemaakt tussen masters en slaves. Masters kunnen zelf een transactie starten. Slaves kunnen enkel antwoorden op een vraag van een master. De AES core kan als slave gezet worden op de bus. Het is immers niet nodig dat de core zelf een actie start. Ze moet gewoon data teruggeven wanneer hierom gevraagd wordt. Er worden enkele afspraken gemaakt voor de naamgeving van signalen. Een signaal van de OPB bus naar een slave wordt steeds voorafgegaan door OPB_. Dit zijn dus de signalen die als input dienen voor de AES core. Een signaal van de slave naar de OPB bus, wordt voorafgegaan door Sln_. Dit zijn dus de outputs van de AES core. De OPB heeft een 32-bit adresbus en 32-bit databus. Het principe van de Big Endian wordt gehanteerd. Bit 0 is dus de most significant bit (MSB), bit 31 is de least significant bit (LSB). Bytes en halfwords worden links uitgelijnd. Fig 3.5: Big Endian 19

29 Volgende signalen zijn nodig om een core aan te sturen: Poort OPB_Clk OPB_Rst OPB_Abus[0:31] OPB_BE[0:3] OPB_Dbus[0:31] OPB_RNW OPB_Select Tabel 3.2: OPB bus signalen Beschrijving De bus klok Reset Adresbus Byte enable Data van de bus naar de slave 1 = van de slave lezen, 0 = naar de slave schrijven Er is een transfer bezig Sln_Dbus[0:31] Sln_xferAck Data van de slave naar de bus Transfer acknowledge Bij een schrijfactie ziet het tijdsdiagram er als volgt uit: Fig 3.6: Een OPB schrijfactie 20

30 4. Testen van de AES core Om de core te testen op zijn correcte werking, werden er eerst simulaties gedaan. Met een simulatie kan een core getest worden zonder hem eerst in hardware te implementeren. Dit bespaart tijd. Eerst worden er signalen aan de core aangelegd. Vervolgens wordt gedurende een bepaalde tijd gesimuleerd. De core voert tijdens de simulatie zijn bewerkingen uit op de ingangssignalen. Na de simulatie kunnen de uitgangen gecontroleerd worden op hun juistheid. Eerst werd de AES core gesimuleerd in Quartus II van Altera. Daarna werd hetzelfde gedaan in Modelsim, omdat bleek dat Modelsim beter samenwerkt met de programmatuur van Xilinx. 4.1 Simulatie in Quartus II Een nieuw project aanmaken en configureren - Eerst dient een nieuw project aangemaakt te worden. Als naam werd gekozen voor AES. - Vervolgens wordt er gevraagd om de bronbestanden. Dit zijn de 3 VHDL files van de AES core: aes128_fast.vhd, key_expander.vhd en aes_package.vhd. De volgorde waarin ze worden toegevoegd is van belang. De file die bovenaan staat wordt eerst gecompileerd. Het is dus belangrijk dat aes_128_fast.vhd onderaan staat, omdat deze file de 2 andere files nodig heeft. Fig 4.1: New Project Wizard - Add Files 21

31 - In de volgende stap moet een device geselecteerd worden. Enkel boards van Altera zijn mogelijk, want Quartus is ontwikkeld door Altera zelf. In dit eindwerk zijn beide boards van Xilinx, dus er wordt simpelweg besloten om te kiezen voor het standaard board van Altera. - Na op Finish geklikt te hebben, is het project aangemaakt. De VHDL bestanden moeten nu gecompileerd worden. Dit kan in de menubalk via Processing > Start Compilation. - Na het compileren moet de simulatie eerst ingesteld worden. Dit kan door te kiezen voor de Simulator Tool in het menu Tool. In de Simulator Tool wordt gekozen voor behavorial simulation. Door daarna op Open te klikken wordt een lege waveform geopend. - Voordat de signalen ingesteld kunnen worden, moeten ze eerst weergegeven worden in het waveform venster. De signalen kunnen we weergeven door in het linkergedeelte van de waveform tab te klikken en te kiezen voor Insert node or bus.... Er verschijnt nu een nieuw venster. De gemakkelijkste manier om de gewenste signalen toe te voegen is door nu op Node Finder te klikken. Er verschijnt weer een nieuw venster. Door op List te klikken kunnen alle ingangen of uitgangen weergegeven worden van aes128_fast. De gewenste poorten kunnen nu geselecteerd worden. Door op OK te klikken worden ze toegevoegd. Fig 4.2: Node Finder 22

32 - Het is nu mogelijk om de signalen in te stellen. Om data_in en de key gemakkelijker te kunnen instellen worden deze op hexadecimaal gezet in plaats van binair. Dit kan door er rechts op de klikken en voor Properties... te kiezen Encryptie Simulatie met 2 identieke helften van data_in en key Om de eerste simulatie simpel te houden, wordt er gekozen om data_in en key slechts één keer in te stellen. De core zal dus tweemaal dezelfde data_in en key lezen, waardoor van de 128 bits de eerste 64 bits hetzelfde zullen zijn als de laatste 64 bits. - Alle signalen worden ingesteld conform de richtlijnen van de AES core. (zie 2.2) - Om te encrypteren wordt Mode hoog gemaakt. - Data_in wordt ingesteld op 0xABCDEF De volledige data, zoals deze door de core wordt ingelezen is dus: 0xABCDEF ABCDEF Key wordt ingesteld op 0x FEDCBA. - De volledige key, zoals deze door de core wordt ingelezen is dus: 0x FEDCBA FEDCBA - Na de waveform opgeslagen te hebben, moet er eerst nog een Netlist aangemaakt worden. Dit kan via Processing > Generate Functional Simulation Netlist. Als dit gebeurd is kan de simulatie gestart worden via Processing > Start simulation. - Volgens de Javascript AES Tool (zie bijlage 8.2) moet de output na simulatie gelijk zijn aan: 0x78C820B5BC5D BB9E4EF3D. Dit klopt. Met deze methode zorgt de core dus voor een correcte encryptie. Fig 4.3: Quartus resultaat 23

33 Simulatie met 2 verschillende helften van data_in en key Deze keer wordt gesimuleerd op de juiste maar complexere methode. De data moet nu in twee helften worden meegegeven. De eerste helft wordt gelezen wanneer het load signaal hoog wordt. De tweede helft wordt gelezen wanneer het load signaal laag wordt, dus op dat ogenblik moet de tweede helft van de data reeds klaar staan. - Alle signalen worden ingesteld conform de richtlijnen van de AES core. (zie 2.2) - Om te encrypteren wordt Mode hoog gemaakt. - Data_in wordt ingesteld op 0xABCDEF FBC ABE2CF. - Key wordt ingesteld op 0x FEDCBAFBC ABE2CF. - De key moet in twee helften worden meegegeven, net zoals de data. - Na de waveform opgeslagen te hebben, moet er eerst nog een Netlist aangemaakt worden. Dit kan via Processing > Generate Functional Simulation Netlist. Als dit gebeurd is kan de simulatie gestart worden via Processing > Start simulation. - Volgens de Javascript AES Tool (zie bijlage 8.2) moet de output na simulatie gelijk zijn aan: 0xF77A5E2AF5A51AEB5B36EFC07A7EDFAD. Dit klopt. Met deze methode zorgt de core dus voor een correcte encryptie. Fig 4.4: Quartus resultaat 24

34 4.2 Simulatie van de AES core in Modelsim Een nieuw project aanmaken en configureren - Als eerste dient een nieuw project aangemaakt te worden. Dit kan via File > New > Project. Na het project een naam gegeven te hebben, verschijnt een nieuw venster Add existing file. Hier dienen de 3 VHDL files geselecteerd te worden van de AES core. Het resultaat wordt als volgt weergegeven in het Workspace venster: Fig 4.5: Workspace venster Project tab - De bestanden dienen nu eerst gecompileerd te worden. Dit kan gemakkelijk door met de rechtermuisknop te klikken op één van de drie files en vervolgens te kiezen voor compile > compile order. Door op Auto generate te klikken in het venster dat daarna verschijnt, worden de files automatisch in de juiste volgorde gecompileerd. - Vervolgens dient in het Workspace venster op de Library tab geklikt te worden. De standaard library-naam is work. Door deze library te openen worden de 3 gecompileerde VHDL files zichtbaar. Fig 4.6: Workspace venster - Library tab 25

35 - Rechtsklik op aes128_fast en kies vervolgens simulate. Alle poorten van aes128_fast worden nu getoond. - De signalen kunnen nu aangelegd worden. Eerst zullen de signalen toegevoegd worden die bestaan uit slechts 1 bit. Omdat de bitvectoren data_in, data_out en key zo groot zijn, is hiervoor namelijk een speciale werkmethode vereist. - In het Objects venster dienen alle signalen die we willen aanleggen of uitlezen geselecteerd te worden (uitgezonderd de 3 bitvectoren). Door nu met de rechtermuisknop te klikken kan er gekozen worden voor add to wave en daarna selected signals. Fig 4.7: Signalen toevoegen aan de waveform - Eens toegevoegd, verschijnen de signalen in het wave window. Hier kan er weer met de rechtermuisknop geklikt worden elk signaal, en wordt er gekozen voor create/modify waveform. Hier kunnen dan de signalen aangelegd worden, zoals bijvoorbeeld een clock of constant value. 26

36 Fig 4.8: Een signaal aanleggen - Bij het instellen van bitvectors zoals de sleutel, is Modelsim niet erg gebruiksvriendelijk. Het is niet mogelijk om bitvectors in te stellen op de manier zoals hierboven beschreven. Modelsim geeft dan de melding dat er maximaal 32-bit vectoren ondersteund worden in de waveform. De bitvectoren moeten op volgende manier aangelegd worden: - Door rechts te klikken op een bitvector in het objects venster, kan gekozen worden om het signaal te forceren op een vaste waarde. Fig 4.9: Een signaal forceren (1) - Alle bitvectoren moeten binair aangelegd worden. Het is in principe mogelijk om de waarde hexadecimaal mee te geven, maar Modelsim verwacht dan een foutief aantal karakters. Na het toevoegen van een hexadecimale waarde geeft Modelsim dan een foutmelding dat de opgegeven waarde niet de juiste lengte heeft. De onderliggende reden hiervoor is waarschijnlijk dat Modelsim niet goed overweg kan met de grote bitvectoren die in dit eindwerk worden gebruikt. 27

37 Fig 4.10: Een signaal forceren (2) Eens alle signalen correct zijn aangelegd, kan de simulatie gestart worden. Opmerking 1: Alle acties die gedaan worden, zoals bijvoorbeeld het toevoegen van een signaal aan de waveform, worden onderaan het venster als tekstcommando s weergegeven in het transcript window. Het is mogelijk om commando s hieruit te kopiëren en op te slaan in een DO-file. Door een DO-file uit te voeren, zullen alle commando s uit dit bestand zeer snel achtereenvolgens uitgevoerd worden. Dit is handig als we de simulatie opnieuw willen starten. We hoeven dan niet meer alle signalen handmatig aan te leggen. Verder is de DO-file ook zeer handig om kleine aanpassingen zeer snel te doen. Een DO-file kan worden uitgevoerd door in het transcript window het volgende te typen: do <naam>.do. Hierbij is <naam> de naam van de DO-file. Opmerking 2: Eenmaal er een signaal is aangelegd in het wave window, is het niet meer mogelijk om een signaal aan te leggen met de Force mogelijkheid. Een mogelijke oplossing is om de simulatie eerst te beëindigen en hem daarna weer te starten. Nu is het mogelijk om de bitvectors vast in te stellen met Force. Bemerk wel dat door het beëindigen van de simulatie alle bestaande signalen worden verwijderd. Er dient dus gezorgd te worden voor een complete en juiste DO-file, zodat na het vastleggen van de bitvectors de DO-file kan worden uitgevoerd om alle andere signalen terug automatisch aan te leggen. Een eenvoudigere oplossing is om altijd de bitvectors éérst aan te leggen, en daarna pas de overige signalen. 28

38 4.2.2 Encryptie Voor de simulatie van de encryptie in Modelsim worden dezelfde signalen aangelegd als in de Quartus II simulatie. (zie ) - Data_in is dus: 0xABCDEF FBC ABE2CF - De key is dus: 0x FEDCBAFBC ABE2CF Aangezien alle bitvectoren binair moeten aangelegd worden, moeten bovenstaande hexadecimale waarden eerst omgezet worden naar het binair stelsel. Hiervoor wordt handig gebruikt gemaakt van de Base Converter (zie bijlage 8.1). - Data_in wordt dus: De key wordt dus: De DO-file voor deze simulatie is te vinden in bijlage Na alle signalen aangelegd te hebben, kan de simulatie in principe gestart worden. Om het resultaat gemakkelijk af te kunnen lezen, is het echter handig om data_out eerst nog van het objects venster naar de waveform te slepen. Op deze manier kan na de simulatie de output grafisch afgelezen worden. Blijkbaar kan een bitvector als uitgang wel probleemloos weergegeven worden in het wave window (in tegenstelling tot een ingang). Door naar Properties... van data_out te gaan kan het signaal hexadecimaal weergegeven worden, wat het aflezen nog verder vereenvoudigt. De simulatie kan gestart worden door in het transcript venster run 1000 ns te typen. Volgens de Javascript AES Tool moet het resultaat van de simulatie gelijk zijn aan F77A5E2AF5A51AEB5B36EFC07A7EDFAD. Dit klopt! 29

39 Fig 4.11: Modelsim encryptie resultaat Decryptie De decryptie van de core is nog niet getest. Dit is echter snel te controleren. De decryptie-simulatie kan eenvoudig gebeuren door de encryptie-simulatie te nemen en de DO-file lichtjes aan te passen. De output van de encryptie-simulatie wordt nu de data_in. De key blijft hetzelfde. Het mode signaal wordt nu laag in plaats van hoog. Na het uitvoeren van de decryptie-simulatie moet de output gelijk zijn aan de data_in van de encryptie-simulatie. Dit blijkt echter niet het geval te zijn! Na verscheidene keren de DO-file nogmaals na te kijken en opnieuw te simuleren, is het resultaat nog steeds verschillend. De AES core decrypteert dus foutief, en er is geen andere VHDL core beschikbaar op de OpenCores website. Het niet werken van de decryptie is echter van weinig belang in het kader van het eindwerk. Het is mogelijk om enkel met de encryptie verder te werken aan dit project. De DO-file voor deze simulatie is te vinden in bijlage

40 Fig 4.12: Modelsim decryptie resultaat 31

41 5. Implementatie van de AES core Het implementeren van de core op het board kan op twee verschillende manieren gedaan worden. De eerste manier is AES implementeren in System-on-Chip (SoC). Dit is de methode die we aanvankelijk wilden gebruiken. Bij deze methode wordt de core op een bus geplaatst (in dit geval de OPB bus). Het is mogelijk om interactief commando s en data te geven aan de core. Na enkele mislukte pogingen om de core te implementeren als SoC, werd besloten om het te proberen op de tweede manier. De tweede manier is om de core volledig te hardcoderen in de FPGA. De data en sleutel zullen in dit geval enkel veranderd kunnen worden na hercompilatie. Deze methode is dus een stuk minder flexibel dan SoC, maar een heel stuk eenvoudiger. Het lukte om de core te implementeren op de tweede manier. Daarna werd besloten om nog een laatste poging te ondernemen om de core te implementeren via SoC. We hadden op dit moment natuurlijk een stuk meer ervaring en inzicht, en uiteindelijk lukte het ook om SoC werkende te krijgen. De implementatie van de core via hardcoderen in de FPGA werd gedaan met de tool Xilinx Integrated Software Environment (ISE). De implementatie van de core via SoC werd gedaan met Xilinx Platform Studio (XPS). 5.1 Hardcoderen in de FPGA met Xilinx ISE Het is de bedoeling dat er manueel een VHDL file geschreven wordt die gebruik maakt van aes128_fast.vhd. Deze nieuwe, zelfgeschreven file, wordt dus de nieuwe toplevel file. Om te weten wat er precies in deze file geschreven moet worden, is het handig om te weten op welk board de implementatie zal gebeuren. De Spartan-3 heeft namelijk meer schuifschakelaars waarvan gebruik gemaakt kan worden. De Virtex-II PRO heeft meer output pinnen. 32

42 5.1.1 Is de Spartan-3 krachtig genoeg? Een manier om te zien of de FPGA van de Spartan-3 krachtig genoeg is om de core in te implementeren, is de core synthetiseren in Xilinx ISE. Op het einde van de synthese wordt altijd een rapport aangemaakt van de device utilization. Uit dit rapport kan afgeleid worden of de FPGA krachtig genoeg is. - Er wordt gestart met een nieuw project in ISE. Bij een nieuw project in ISE is de naam van het project zeer belangrijk. Dit moet altijd dezelfde naam zijn als de toplevel VHDL file. In dit geval is dit dus aes128_fast. Verder moet ook het device ingesteld worden. - Device Family: Spartan3 - Device: xc3s200 - Package: ft256 - Op het volgende scherm wordt gevraagd om een nieuwe bron aan te maken. Dit is niet nodig. Het volgende scherm vraagt om reeds bestaande bronnen. Hier dienen de 3 VHDL files geselecteerd te worden van de AES core: aes128_fast.vhd, key_expander.vhd en aes_package.vhd. Door op Finish te klikken is het project aangemaakt. - Er dient nu in de Module View geklikt te worden op de toplevel file, namelijk aes128_fast.vhd. Er verschijnen dan in de Process view een aantal processen die kunnen worden uitgevoerd. Door te dubbelklikken op Synthesize XST wordt het project gesynthetiseerd. Dit kan enkele minuten duren. Fig 5.1: Xilinx ISE 33

43 Hieronder het resultaat van de synthese voor een Spartan-3. Blijkbaar is de Spartan-3 niet krachtig genoeg. Device utilization summary: Selected Device : 3s200ft256-5 Number of Slices: 7528 out of % (*) Number of Slice Flip Flops: 1257 out of % Number of 4 input LUTs: out of % (*) Number of bonded IOBs: 262 out of % (*) Number of GCLKs: 1 out of 8 12% WARNING:Xst: (*) More than 100% of Device resources are used Is de Virtex-II PRO krachtig genoeg? Hetzelfde kan gedaan worden voor de Virtex-II PRO. Het enige verschil zit hem bij het aanmaken van het project. Het device is natuurlijk verschillend: - Device Family: Virtex2P - Device: xc2vp30 - Package: ff896 Het is mogelijk dat de Virtex2P niet in het lijstje van devices voorkomt. Standaard wordt bij de installatie van de Xilinx programmatuur de zogenaamde board definition file voor de XUP Virtex-II Pro niet geïnstalleerd. Wanneer dit nog niet gebeurd is, moet eerst de definition file gedownload en geïnstalleerd worden [17]. Nadat dit gebeurd is, kan het device ingesteld worden op Virtex2P. Na synthetiseren blijkt dat de Virtex-II PRO wel krachtig genoeg is om de core in de FPGA te implementeren. Device utilization summary: Selected Device : 2vp30ff896-5 Number of Slices: 7259 out of % Number of Slice Flip Flops: 1123 out of % Number of 4 input LUTs: out of % Number of bonded IOBs: 262 out of % Number of GCLKs: 1 out of 16 6% 34

44 5.1.3 Implementatie van de core met schuifschakelaars Doelstelling Aangezien de Spartan-3 niet krachtig genoeg is, wordt er vanaf nu steeds gewerkt met de Virtex-II PRO. De Virtex-II PRO heeft 4 schuifschakelaars en 240 I/O pinnen waarop het mogelijk is om metingen te doen met een voltmeter. Het idee is om reset, load, start en mode te doen werken via de schuifschakelaars. Op deze manier kan er handmatig een encryptie gestart worden door de schuifschakelaars te bedienen. De eerste 20 bits van de output van de core zullen verbonden worden met de I/O pinnen op de Virtex-II PRO. Na een encryptie is het dan mogelijk om het resultaat te lezen met behulp van een voltmeter Aanmaken van een nieuw top-level VHDL bestand: AES.vhd Het zou zeer lastig zijn om manueel de data op het board te moeten aanleggen. Er zouden dan 128 bits voor de data-input en 128 bits voor de sleutel moeten aangelegd worden aan het board. Dit is praktisch niet doenbaar. Daarom zullen de sleutel en datainput hardgecodeerd worden. Dit kan gedaan worden door het aanmaken van een nieuw top-level VHDL bestand. Deze krijgt als naam AES.vhd. Het komt er dus op neer dat dit bestand alle signalen van aes128_fast.vhd doorstuurt, behalve key en data_in. Deze laatste 2 signalen zullen aangelegd worden in AES.vhd. De sleutel en data zullen slechts éénmaal meegegeven worden. Het eerste en tweede deel van zowel sleutel als data zullen dus identiek zijn. Het zou lastig zijn om AES.vhd te schrijven als we de sleutel en data op de correcte manier zouden willen meegeven. Er moet dan immers gewacht worden tot de gebruiker handmatig het load signaal laag maakt om het tweede deel van sleutel en data mee te geven. Dit zou resulteren in veel complexere code. Onderstaand schema geeft een overzicht van het AES.vhd bestand. De broncode van AES.vhd is terug te vinden in bijlage

45 Fig 5.2: AES.vhd schema Simulatie in Modelsim De werking van AES.vhd wordt gecontroleerd door te simuleren in Modelsim. De DO-file is te vinden in bijlage 0. De hardgecodeerde key is 0xFEDCBA Deze wordt slechts éénmaal meegegeven. Bijgevolg is de volledige sleutel gelijk aan 0xFEDCBA FEDCBA De hardgecodeerde data_in is EEEEEEEC. Deze wordt slechts éénmaal meegegeven. Bijgevolg is de volledige data_in gelijk aan 0x EEEEEEEC EEEEEEEC. Volgens de Javascript AES Tool moet data_out gelijk zijn aan 0x24C654D864B9AD56B37F52DA4DC67CD2. Het resultaat na de simulatie is identiek. De simulatie is dus correct en bijgevolg kan geconcludeerd worden dat AES.vhd goed werkt. 36

46 Fig 5.3: Modelsim resultaat De poorten koppelen met fysieke pinnen op het board Er wordt een nieuw project aangemaakt in ISE, deze keer met als naam AES omdat de naam van de toplevel file nu AES is. Het project wordt ingesteld voor een Virtex-II PRO en de 4 VHDL files worden toegevoegd: AES.vhd, aes128_fast.vhd, key_expander.vhd en aes_package.vhd. Er dient eerst gesynthetiseerd te worden. Na de synthese kunnen de poorten van AES.vhd gekoppeld worden aan de fysieke componenten van de Virtex-II PRO. Dit wordt gedaan met Xilinx PACE. Dit programma kan opgestart worden door in het process view venster de implement design node te openen en daarna te klikken op assign package pins post-translate. ISE zal nu een UCF file aanmaken. In de UCF file worden alle koppelingen tussen componenten en poorten beschreven. Deze file kan manueel aangepast worden, maar het gemakkelijkste is te werken met Xilinx PACE. Eenmaal PACE is opgestart, kunnen poorten en componenten gekoppeld worden in het design object list venster. Het is natuurlijk nodig om de namen te weten van de componenten waarmee een poort verbonden moet worden. Deze namen kunnen opgezocht worden in UCF files die beschikbaar gesteld worden door Xilinx. [18] 37

47 Tabel 5.1: Poorten koppelen met fysieke componenten in de UCF file Poort Component Component naam clk_port systeemklok AJ15 rst_port schuifknop 0 AC11 load_port schuifknop 1 AD11 mode_port schuifknop 2 AF8 start_port schuifknop 3 AF9 done_port LED 0 AC4 data_out_port[0] I/O pin 0 K2 data_out_port[1] I/O pin 1 L2 data_out_port[2] I/O pin 2 N8 data_out_port[3] I/O pin 3 N7 In totaal worden er 20 pinnen gekoppeld aan data_out_port. De volledige UCF file is te vinden in bijlage Fig 5.4: Xilinx PACE 38

48 Downloaden naar het board Er kan nu een programming file gegenereerd worden. Deze programming file dient vervolgens gedownload te worden naar het board. Door deze actie wordt het board geconfigureerd. Eerst moet natuurlijk de Virtex-II PRO correct worden aangesloten op de computer. Dit gebeurt met de bijgeleverde USB kabel. Indien het board nog nooit op de computer is aangesloten, zal Windows na het aansluiten van de kabel om stuurprogramma s vragen. Hier kan steeds gekozen worden om automatisch te zoeken naar stuurprogramma s. De juiste stuurprogramma s zullen automatisch gevonden en geïnstalleerd worden. In Project Navigator dient gekozen te worden voor Configure Device (impact). Dit is terug te vinden onder Generate programming file in het Process venster. ISE zal nu automatisch een programming file genereren met de extensie.bit, en vervolgens impact opstarten. Wanneer impact geladen is wordt er gevraagd hoe het device geconfigureerd moet worden. Dit gebeurt via Boundary-scan mode. In het volgende scherm dient gekozen te worden voor Automatically connect to cable and identify Boundary-Scan chain. Er zijn zouden nu 3 devices gedetecteerd moeten worden. Voor elk van deze 3 devices wordt gevraagd om een programming file. Enkel het laatste device met de naam xc2vp30 is nodig: dit is de FPGA. De eerste 2 devices kunnen genegeerd worden door op bypass te klikken. Voor het laatste device wordt gekozen voor het bestand AES.bit. Dit is de programming file. Het venster van impact zou er nu zo moeten uitzien: Fig 5.5: Xilinx impact 39

49 Door rechts te klikken op de xc2vp30, kan er gekozen worden voor Program.... Door hierop te klikken wordt de FPGA geconfigureerd. Als alles goed verloopt verschijnt in het midden van het venster een grote boodschap Programming succeeded Controleren van de output Na het configureren van het board werd overgegaan tot het meten van de I/O pinnen met een voltmeter. Het resultaat tijdens de simulatie was 0x24C654D864B9AD56B37F52DA4DC67CD2. Er zijn nu echter slechts 20 pinnen meetbaar, namelijk de eerste 20 bits. Het is echter niet geweten of deze 20 bits het begin of het einde van de output zullen zijn. Mogelijkheid 1: Output volgens Big Endian Op de pinnen zou 0x24C65 moeten gemeten worden. In binaire vorm is dit Mogelijkheid 2: Output volgens Little Endian Op de pinnen zou 0x67CD2 gemeten moeten worden in omgekeerde volgorde. In binaire vorm is dit Omgekeerd is dit: Metingen Een 0 komt overeen met 0 V. Een 1 komt overeen met 3.3 V. Resultaat na het meten van de pinnen: Dit resultaat komt met geen van de twee mogelijkheden overeen en is dus foutief. Hier is geen directe verklaring voor. De simulatie was namelijk juist en dit resultaat is dus eerder onverwacht. Een mogelijkheid is dat het manueel schakelen van de schuifschakelaars voor problemen zorgt, maar dit is eerder speculatie. 40

50 5.1.4 Implementatie van de core, volledig geautomatiseerd Doelstelling Er zullen nu zoveel mogelijk signalen aangelegd worden in AES.vhd. Zo hoeven de signalen niet meer manueel aangelegd te worden met de schuifschakelaars. Indien de schuifschakelaars voor het probleem zorgden bij de vorige methode, dan zal nu het resultaat waarschijnlijk wel correct zijn Aanpassen van het top-level VHDL bestand: AES.vhd De toplevel file AES.vhd wordt aangepast. Het is de bedoeling dat alle poorten die bij de vorige methode handmatig bediend werden, nu volledig automatisch zullen werken. Aan data_out_port en clk_port wordt dus niets gewijzigd. In principe zouden ook data_in en key ongewijzigd kunnen blijven. Omdat het bij deze werkmethode echter eenvoudig is om de volledige data en key mee te geven (in tegenstelling tot de methode met de schuifschakelaars), wordt besloten om dit wel te doen. Om de core volledig automatisch te laten werken, moeten natuurlijk ook de juiste signalen op het juiste tijdstip aangelegd worden. Daarvoor zal gebruik gemaakt worden van een state machine. Om de state machine te kunnen verwezenlijken worden twee nieuwe signalen aangemaakt: cur_state_sig en next_state_sig. Deze signalen zijn beide 4 bits lang en kunnen dus 16 mogelijke waarden aannemen. Binnen de architecture wordt er een proces aangemaakt. Bij elke klokpuls zal met behulp van een case-select-statement een stap verder worden gezet in de state machine. Wanneer de state machine voor het eerst uitgevoerd wordt (bij het opstarten van het board) is next_state_sig gelijk aan 0. Dit zorgt voor het uitvoeren van case 0 in de caseselect. Case 0 zorgt voor het aanleggen van de data, key en mode. Tevens wordt next_state_sig met 1 verhoogd. Bij de volgende klokpuls is next_state_sig dus 1, en dit zorgt voor het uitvoeren van case 1 in de case-select. Dit zorgt voor een reset van de core en verhoogt next_state_sig weer met 1. De state machine wordt op deze manier verder gezet. In de volgende stappen worden de key en data ingeladen en de encryptie gestart. De broncode van AES.vhd inclusief de volledige state machine, is terug te vinden in bijlage Onderstaand schema geeft een overzicht van het AES.vhd bestand. 41

51 Fig 5.6: AES.vhd schema Simulatie in Modelsim De werking van AES.vhd wordt gecontroleerd door te simuleren in Modelsim. De DO-file is te vinden in bijlage 0. De hardgecodeerde key is 0xFEDCBA Deze sleutel wordt in 2 delen meegegeven en is dus volledig. De hardgecodeerde data_in is 0x EEEEEEEC Deze data wordt in 2 delen meegegeven en is dus volledig. Volgens de Javascript AES Tool moet data_out gelijk zijn aan 0xCEC61BA35DED24BDF4 6A84850F9A0E6C. Het resultaat na de simulatie is identiek. De simulatie is dus correct en bijgevolg kan geconcludeerd worden dat AES.vhd goed werkt. Fig 5.7: Modelsim resultaat 42

52 Poorten koppelen en downloaden naar het board Het aanmaken van een ISE project en het downloaden van het project naar het board, verloopt hetzelfde als bij de methode met de schuifschakelaars. Het enige verschil is de UCF file. De schuifschakelaars hoeven nu niet gekoppeld te worden met poorten, omdat deze volautomatisch worden aangelegd in AES.vhd. De volledige UCF file is terug te vinden in bijlage Controleren van de output Na het configureren van het board kunnen de I/O pinnen gemeten worden. Het resultaat tijdens de simulatie was 0xCEC61BA35DED24BDF46A84850F9A0E6C. Er zijn echter slechts 20 pinnen meetbaar, namelijk de eerste 20 bits. Het is echter niet geweten of deze 20 bits het begin of het einde van de output zullen zijn. Mogelijkheid 1: output volgens Big Endian. 0xCEC61 zou gemeten moeten worden op de pinnen. In binaire vorm is dit Mogelijkheid 2: output volgens Little Endian. 0xC6E0A zou gemeten moeten worden op de pinnen in omgekeerde volgorde. In binaire vorm is dit Of omgekeerd: Metingen De gemeten waarde op het board is: Dit komt overeen met 0xCEC61. De output is dus deze keer wel juist. Bijgevolg kan geconcludeerd worden dat de schuifschakelaars voor het probleem zorgen bij de eerste methode. Er kan aangenomen worden dat dit komt door dender op de schakelaars. 43

53 5.2 System-on-Chip met Xilinx XPS Doelstelling Het is de bedoeling dat de core in verbinding komt te staan met de OPB bus. Om data uit te wisselen tussen de core en de OPB bus, worden er 5 registers aangemaakt. Elk register heeft een lengte van 32 bits. Register 0 start op het Base Address 0x Wanneer de OPB schrijft naar register 0, komen hierin de eerste 32 bits van de 64-bit data_in te staan. Wanneer er gelezen wordt van dit register (wanneer de encryptie voltooid is), heeft het een andere taak. Het dient dan namelijk voor de eerste 32-bit van de data_out. Door hetzelfde register voor verschillende taken te gebruiken kan er op het aantal registers bespaard worden. De functies van de overige 4 registers worden weergegeven in onderstaand schema. Fig 5.8: Overzicht van de 5 registers 44

54 Register 4 verdient enige extra uitleg: Bij het schrijven van de OPB bus naar het register worden er slechts 5 van de 32 bits gebruikt. In dit geval dient het register als command-register. Het wordt gebruikt om commando s te geven aan de core. Er is een bit beschikbaar voor de klok, reset, start, mode en load. Hiervoor worden respectievelijk de nulde, eerste, tweede, derde en vierde bit gebruikt. Bij het lezen van register 4 door de OPB bus dient het register als status-register. Er wordt slechts één bit gebruikt, namelijk die voor done. Tabel 5.2: Register 4 Bit Write (Command) Read (Status) 0 klok done 1 reset - 2 start - 3 mode - 4 load Het XPS project aanmaken en configureren [19] Na XPS opgestart te hebben, verschijnt er een venster om een nieuw project aan te maken. Dit is het gemakkelijkst via de Base System Builder Wizard. We kiezen om een nieuw design aan te maken. In de volgende stap moet het type van het board opgegeven worden. Dit is de Xilinx University Program (XUP) Virtex-II Pro, revisie C. In de volgende stappen wordt gekozen voor een PowerPC met een kloksnelheid van 100 Mhz en een OPB bus met dezelfde snelheid. Daarna wordt gevraagd om de gewenste I/O interfaces en poorten te selecteren. In dit project is enkel een seriële poort (RS232_Uart_1) nodig. Met deze seriële poort is het mogelijk om data van het board te ontvangen via Hyperterminal. Er kan nu op Finish geklikt worden. Het project is nu aangemaakt. 45

55 Fig 5.9: Xilinx XPS Aan de linkerkant van het venster bevindt zich een lijst met componenten van het project. Door te dubbelklikken op system.pbd wordt er een grafisch overzicht getoond van het board en zijn componenten. Eén van de componenten is de OPB bus. Hierop zal de core aangesloten worden. Fig 5.10: Componenten van het XPS project 46

56 Om de AES core met de OPB bus te verbinden moet eerst een nieuwe core aangemaakt worden in XPS. Dit kan in de menubalk via Tools > Create / Import Peripheral. Eerst wordt gekozen om templates te genereren voor een nieuwe peripheral. In de volgende stap kiezen we To an XPS project en geven dan het pad naar het huidige XPS project. Vervolgens moet de naam opgegeven worden voor de peripheral. Dit zal de naam worden van de top-level VHDL file die door de wizard gecreëerd zal worden. We kiezen als naam AES. In het volgende scherm moet de bus gekozen worden waar de peripheral mee verbonden moet worden. Dit is de OPB bus. In de daaropvolgende stap moet User Logic S/W Support aangevinkt worden. Dit zijn de registers die we zullen gebruiken om data uit te wisselen tussen de core en de bus. Er wordt gekozen voor 5 registers van elk 32 bits groot. Fig 5.11: Create Peripheral - Stap 3 Fig 5.12: Create Peripheral - Stap 4 47

57 Alle volgende schermen zijn reeds goed ingevuld en er kan dus gewoon op Next geklikt worden tot de wizard voltooid is. Na voltooiing is de nieuwe core gecreëerd. Nu moet de core nog toegevoegd en geconfigureerd worden. Dit is mogelijk via Project > Add / edit cores. Op het eerste tabblad met de naam peripherals kunnen we de core toevoegen. Fig 5.13: Add/Edit Cores - Peripherals Op het tweede tabblad, bus connections, stellen we de AES core in als slave van de OPB bus. Het derde tabblad, addresses, dient om adressen toe te wijzen aan de core. We kiezen als basisadres voor de core 0x Fig 5.14: Add/Edit Cores - Addresses 48

58 Op het vierde tabblad, ports, zullen we de klok van de OPB-bus verbinden met de port van de AES core. In de rechterkant van het venster selecteren we OPB_clk bij de AES core (AES_0). Deze wordt toegevoegd met de knop << Add. Nu wordt OPB_clk in de linkerkant van het venster getoond. Standaard staat de net name ingesteld op sys_clk. Dit moet gewijzigd worden in sys_clk_s. Fig 5.15: Add/Edit Cores - Ports Na op OK te klikken is de AES core toegevoegd en juist ingesteld. Fig 5.16: Componenten van het XPS project, nu met AES core 49

59 De instantienaam van de core is standaard AES_0. Deze instantie is toegevoegd in de lijst met componenten aan de linkerkant van het hoofdvenster. Fig 5.17: De instantie AES_0 is toegevoegd Er zijn twee VHDL files automatisch gegenereerd, namelijk AES.vhd en user_logic.vhd. AES.vhd staat het dichtst bij de hardware en regelt de communicatie met de bus. User_logic is een component van AES.vhd. In dit bestand is door de wizard de code reeds toegevoegd om te communiceren met de registers. We zullen user_logic.vhd aanpassen zodat dit bestand kan communiceren met aes128_fast.vhd. Op deze manier kan aes128_fast.vhd dus communiceren met de registers. Het aanpassen van user_logic.vhd komt neer op het toevoegen van aes128_fast als een component, gepaard met een aantal kleine wijzigingen. De volledige code van user_logic.vhd is terug te vinden in bijlage De 3 VHDL files van de core moeten nu nog toegevoegd worden aan het XPS project. Dit kan door in Windows Verkenner naar de map te gaan van het project en vervolgens aes128_fast.vhd, key_expander.vhd en aes_package.vhd te kopiëren naar de submap \pcores\aes_v1_00_a\hdl\vhdl\. Om het project te testen is het natuurlijk best om te simuleren. Fig 5.18: Blokschema 50

60 5.2.3 Simulatie in Modelsim [20] Toen er met ISE gewerkt werd, werd er voor de simulatie steeds manueel een nieuw Modelsim project aangemaakt. Het zou ook mogelijk geweest zijn om ISE zelf de simulator te laten opstarten. Dit is ook mogelijk in XPS. In ISE leek dit toen niet nodig, maar nu heeft dit wel degelijk zin. AES.vhd heeft namelijk een groot aantal bibliotheken (meer dan 20) nodig die manueel lastig te importeren zijn. Wanneer Modelsim vanuit het XPS project opgestart wordt, worden deze libraries automatisch geïmporteerd. Vandaar dat het nu handiger is om op deze manier te werken. Om Modelsim te laten samenwerken met XPS, moeten eerst zowel Modelsim als XPS geconfigureerd worden. Wanneer dit voor de eerste keer op een computer moet gebeuren, is dit een zeer complexe procedure. Deze procedure wordt beschreven in bijlage Na het instellen van XPS en Modelsim kan er rechtstreeks gesimuleerd worden in Modelsim vanuit XPS. Het simuleren starten kan door in de menubalk te klikken op Tools > Start HDL Simulator. Indien nodig worden automatisch de simulatiebestanden gegenereerd. Nadat Modelsim is opgestart, zien we dat de simprim, unisim en xilinxcorelib libraries reeds zijn toegevoegd. Er zijn echter nog meer libraries nodig voor de simulatie. Deze kunnen automatisch toegevoegd worden door in het transcript venster het volgende te typen: do system.do. De system.do file bevat een aantal commando s voor library mappings en compilatie. Na het uitvoeren van system.do, kan de simulatie ingeladen worden door vsim system_conf te typen. Wanneer dit gebeurd is wordt in Modelsim de SIM tab zichtbaar en kan er begonnen worden met signalen aanleggen op de OPB bus. Dit gebeurt volgens de methode beschreven in hoofdstuk 3.4. en dient te gebeuren in de instantie system in het Workspace venster. De volledige DO-file is vrij complex, daarom worden data en sleutel slechts éénmaal meegegeven. De DO-file is terug te vinden in bijlage

61 De data die meegegeven wordt aan slv_reg0: binair: hex: F De data die meegegeven wordt aan slv_reg1: binair: hex: 89ABCDEA De sleutel die meegegeven wordt aan slv_reg2: binair: hex: ABC345D2 De sleutel die meegegeven wordt aan slv_reg3: binair: hex: 89ABCDEF De volledige data is dus: F ABCDEAF ABCDEA De volledige key is dus: ABC345D289ABCDEFABC345D289ABCDEF Volgens de AES calculator moet de output gelijk zijn aan: 1B EEB31B997E3575E7963E3 De binaire waarde begint dus met Dit komt overeen met de simulatie. Na het uitvoeren van de simulatie zijn de outputs terug te vinden in de instantie user_logic_i. 52

62 Fig 5.19: Simulatie in Modelsim Schrijven van een applicatie Nu de simulatie gelukt is weten we dat user_logic.vhd correct werkt. Het is nu mogelijk om een applicatie aan te maken in XPS. Deze applicatie zal zorgen voor het aanleggen van de signalen, en doet dus eigenlijk wat de DO-file tijdens de simulatie deed. Verder wordt ook de output uitgelezen en verstuurd over de seriële poort. Op deze manier kan het resultaat getoond worden in Hyperterminal. Het volledige proces wordt in een for-lus gezet, zodat het mogelijk is om een aantal keer snel na elkaar te encrypteren. Dit kan handig zijn voor de metingen later. De applicaties in XPS worden geschreven in C. De volledige C-code is te vinden in bijlage

63 5.2.5 Downloaden en controleren van de output Na het schrijven van de applicatie kan alles gecompileerd worden en gedownload worden naar het board. Indien er een Hyperterminal sessie wordt opgestart en de seriële kabel verbonden met het board, dan kan de output gelezen worden op het scherm van de computer. De instellingen voor de Hyperterminal verbinding zijn als volgt: - Verbinding via COM1 - Bits per seconde: Pariteit: geen - Datatransportbesturing: geen Wanneer er op de Virtex-II PRO op de Reset\Reload drukknop gedrukt wordt, wordt de applicatie opnieuw uitgevoerd. Bijgevolg verschijnt de output opnieuw in Hyperterminal. Bij het lezen van de output in Hyperterminal moet wel rekening gehouden worden met de nullen aan het begin van elke waarde, de zogenaamde leading zero s. Leading zero s worden altijd weggelaten in de output. Het is echter gemakkelijk om deze ontbrekende nullen te vinden. Elke keer dat een waarde korter is dan 8 hexadecimale cijfers, ontbreken er een of meerdere nullen. In dit voorbeeld ontbreekt er een nul voor de waarde 498AF6F en voor F800FDB. Fig 5.20: Het resultaat in Windows Hyperterminal 54

64 6. Metingen 6.1 Aanpassing van het geautomatiseerde ISE project Er wordt besloten om voor de metingen gebruik te maken van het geautomatiseerde ISE project. Er zou ook gekozen kunnen worden voor het XPS project, maar er moeten nog enkele wijzigingen doorgevoerd worden aan het project voordat de metingen kunnen starten. Deze wijzigingen zijn het gemakkelijkst te doen in ISE. Volgende wijzigingen dienen te gebeuren: - Continu versleutelen. Nadat een encryptie voltooid is, wordt er een automatisch een nieuwe gestart. Dit is nodig om op een analoge oscilloscoop een stilstaand beeld te verkrijgen. Hiervoor moet simpelweg de state machine in een oneindige lus gezet worden. - Omdat er continu versleuteld zal worden, is het natuurlijk niet geweten wanneer er nu juist een encryptie start. Daarom zal een puls generereerd worden wanneer een nieuwe encryptie start. Deze puls zal verbonden worden met een fysieke pin op het board. - Om de metingen te kunnen doen zal de kloksnelheid eventueel aangepast moeten worden. Het is echter niet geweten welke frequentie de klok op dit ogenblik heeft. Deze is namelijk nooit ingesteld in ISE. Daarom moet de klokfrequentie eerst gemeten worden. Is deze te hoog, dan moet de frequentie verlaagd worden met een klokdeler. De code van de aanpassingen is terug te vinden in bijlage Continu versleutelen Het aanmaken van de oneindige lus is redelijk eenvoudig en gebeurt in aes.vhd. Eerst wordt in case 0xC van de case-select statement een korte pauze (60 klokpulsen) ingelast zodat de core genoeg tijd heeft om de encryptie te voltooien. Wanneer deze pauze voorbij is, wordt er terug verdergegaan met case 0. Dit is het begin van een nieuwe encryptie. 55

65 6.1.2 Puls genereren bij de start van een nieuwe encryptie In aes.vhd wordt een extra poort aangemaakt: encryption_start_port. Wanneer de encryptie gestart wordt (dit is wanneer het start signaal hoog wordt in case 0x9 van de case-select statement), dan wordt dit signaal hoog gemaakt. Bij de volgende klokpuls wordt dit signaal terug laag. Deze nieuwe poort wordt verbonden met een fysieke pin op de Virtex-II PRO, namelijk pin P Klokfrequentie meting Om de klok te kunnen meten, wordt deze verbonden met een fysieke pin. Door met een oscilloscoop de pin te meten, is het mogelijk om te zien hoe lang de periode is van de klok. De periode blijkt ongeveer 20 ns te zijn. Dit komt overeen met 50 Mhz. Dit is te hoog om met de meetapparatuur te kunnen werken (zie hoofdstuk en 6.2.2) Klokfrequentie aanpassing Een klokdeler zal moeten toegevoegd worden. De klokdeler wordt zo ingesteld dat de gebruikte klokfrequentie gelijk wordt aan 50 khz. De nieuwe klok heeft als naam workclk en is dus 1000 keer trager dan de systeemklok. 6.2 Werkwijze In het begin van het project werd aangenomen dat er enkele baantjes onderbroken zouden moeten worden om metingen te doen op het board. Omdat de Spartan-3 veel goedkoper was dan de Virtex-II PRO, had de Spartan-3 aanvankelijk de voorkeur. Later werd echter duidelijk dat de Virtex-II PRO speciale pinnen ter beschikking stelt om metingen uit te voeren. Standaard zijn deze pinnen kortgesloten door jumpers. Door deze te verwijderen kan er op deze pinnen gemeten worden. [21] 56

66 Fig 6.1: De pinnen met jumpers van de 1,5V lijn Er zijn drie soorten pinnen waarop metingen mogelijk zijn, namelijk de 2,5V lijn, de 3,3 V lijn en de 1,5V lijn. De spanning die hierover staat is constant, en om metingen te doen zal er dus naar de stroomsterkte moeten gekeken worden. Een oscilloscoop kan echter enkel spanning meten, geen stroomsterkte. Daarvoor werden twee mogelijke oplossingen bedacht, die hieronder beschreven worden High-Side Current-Sensing [22] Een mogelijkheid is om gebruik te maken van High-side Current-Sensing. Hiervoor wordt een IC van Maxim gebruikt, namelijk de MAX4172. Deze IC is een zogenaamde High- Side Current-Sense Amplifier, en het is hiermee mogelijk om gemeten stroomsterkte om te zetten in spanning ten opzichte van massa. De IC kan overweg met maximaal 800 khz. [23] 57

67 Fig 6.2: High-Side Current-Sensing met de MAX4172 Bovenstaande figuur verduidelijkt de werking van dit principe. R SENSE is een kleine weerstand (bijvoorbeeld 50 milli-ohm) die tussen de pinnen op het board wordt geplaatst. Deze weerstand vervangt dus de jumpers die voordien deze pinnen verbonden. Vervolgens wordt de IC parallel geplaatst over deze weerstand. De spanning ten opzichte van massa staat nu over OUT en GND. Het was de bedoeling om over zowel de 1,5V-lijn, de 2,5V-lijn en de 3,3V-lijn een dergelijke opstelling te maken. Op deze manier zou dan met een oscilloscoop de stroom door deze lijnen tegelijkertijd getoond kunnen worden. Een dergelijke IC heeft een kostprijs van ongeveer 2,5 per stuk. Er werden 10 stuks besteld in het begin van april, maar deze werden slechts geleverd in de derde week van mei. Dit was natuurlijk veel te laat om de metingen nog uit te voeren, maar tijdens het wachten op de IC s werd nog een andere methode gevonden. 58

68 6.2.2 Current probe system Het labo beschikt over een Tektronix AM503S. Dit is een current probe system. Met een current probe system is het mogelijk om stroomsterkte weer te geven op een oscilloscoop. Het apparaat bestaat uit 3 componenten: - Tektronix AM503B Current Probe Amplifier Deze component zet de stroomsterkte om in spanning ten opzichte van massa. De oscilloscoop moet hiervoor 10 mv/div weer kunnen geven en over minimaal 100 Mhz bandbreedte beschikken. - Tektronix A6302 Current Probe Dit is de probe waarmee gemeten wordt. Om te meten moet de probe simpelweg over een geïsoleerde geleider geklemd worden. Het A6302 model kan DC meten tot een frequentie van 50 Mhz. De maximale stroomsterkte bedraagt 20 A (50 A peak). - Tektronix TM502A Mainframe Dit is de behuizing voor de Current Probe Amplifier. Er dient zeer voorzichtig om te worden gesprongen met het hele systeem! Het is een zeer duur apparaat, en de current probe is zeer gevoelig voor mechanische schokken. De probe op een tafel laten vallen kan genoeg zijn om deze permanent te beschadigen. Het nadeel van deze methode is dat er slechts één current probe system beschikbaar is, waardoor er natuurlijk maar één stroom tegelijk op de oscilloscoop getoond kan worden. Indien er met de High-Side Current-Sense Amplifiers gewerkt zou worden, zouden ze alle drie de stromen tegelijk getoond kunnen worden. Verder is de kostprijs van het current probe system ook gigantisch ten opzichte van de IC s. 6.3 Metingen met het current probe system Er werden in totaal 3 metingen gedaan, namelijk één meting per lijn. Bij elke meting werden 3 ingangssignalen gebruikt voor de oscilloscoop: - De stroom, weergegeven als spanning ten opzichte van massa door gebruik te maken van het current probe system. Het is belangrijk dat de oscilloscoop voor dit kanaal steeds ingesteld wordt op 10 mv/div. Indien niet, dan zijn de metingen foutief. - De startpuls op pin P8 (zie 6.1.2) 59

69 - Een hoge bit uit de output van de AES core. Op deze manier kan gezien worden wanneer en hoe lang de output beschikbaar is. Dit kan een willekeurige output pin zijn (zie ). De stroom werd steeds enkele divisies naar beneden geschoven, omdat er anders een slecht overzicht zou zijn. De startpuls en de hoge bit werden telkens op hetzelfde niveau gezet, namelijk het centrum van het display. Om geen kortsluiting te veroorzaken is het belangrijk dat alle spanningen die aangelegd worden aan de oscilloscoop ten opzichte van massa zijn. Dit is het geval. De spanning geleverd door het current probe system is ten opzichte van massa, en bij de twee andere metingen wordt de probe telkens verbonden met de massa van de Virtex-II PRO ,5V meting Als eerste werd de 1,5V-lijn gemeten, omdat die het interessantst leek. Immers, het centrale gedeelte van de FPGA werkt op 1,5V [24]. Het current probe system werd ingesteld op 20 ma/div. Op de oscilloscoop werd de stroommeting 3 divisies naar beneden gezet. Uit de figuur kan dus afgeleid worden dat de stroomsterkte schommelt tussen ongeveer 15 en 55 ma. Fig 6.3: Meting op de 1,5V-lijn (200 µs/div) 60

70 De smalle puls aan de linkerkant van het venster is de startpuls. De brede puls aan de rechterkant van de startpuls is de output-bit. Beiden hebben een resolutie van 200 mv/div. Het signaal onderaan is de stroom met een resolutie van 20 ma/div. Wanneer de startpuls hoog wordt, start de encryptie. Wanneer de data-bit hoog wordt, is de encryptie voltooid. Zolang de data-bit hoog is, gebeurt er niets. Er wordt hier een aantal klokpulsen gewacht, zodat er tijd is om de data uit te lezen. Wanneer de data terug laag wordt, wil dit zeggen dat er een reset is gebeurd. Na de reset worden dan data en sleutel terug ingelezen. Daarna wordt de volgende encryptie gestart, en een startpuls gegenereerd. Het interessante gedeelte bevindt zich dus vanaf de startpuls tot aan het hoog worden van de data-bit, want daar gebeurt immers de encryptie. Fig 6.4: Meting op de 1,5V-lijn (50 µs/div) Het probleem is dat het stroomsignaal niet stil staat. Het verandert voortdurend van vorm, en dit lijkt volgens een willekeurig patroon te zijn. Dit betekent dat de stroom dus tijdens elke encryptie verschillend is. Dit lijkt op het eerste zicht zeer vreemd, want de encryptie zelf is nochthans elke keer identiek. 61

71 ,5V meting De meting van de 2,5 V pinnen verliep identiek aan de vorige meting. Het enige verschil is dat het current probe system moest ingesteld worden op 500 ma/div. De stroomsterkte was hier beduidend groter. Op de oscilloscoop werd de stroomsterkte 4 divisies naar beneden geschoven. Fig 6.5: Meting op de 2,5V-lijn (200 µs/div) Bij deze meting was de stroom een stuk stabieler dan bij de vorige meting. Waar bij de vorige meting de stroomsterkte willekeurig leek, is hier een duidelijk patroon te herkennen. Uit de figuur valt duidelijk af te leiden dat de stroomsterkte beïnvloed wordt door het wel of niet aanwezig zijn van de output. Dit is echter niet waar we in geïnteresseerd zijn. 62

72 Fig 6.6: Meting op de 2,5V-lijn (50 µs/div) Er werd ingezoomd op het interessante gedeelte, namelijk de encryptie. De figuur geeft voor de stroom een rechte lijn weer tijdens de encryptie. Deze lijn varieert echter voortdurend volgens een willekeurig patroon, net zoals bij de metingen van 1,5V. Dit lijken slechts kleine variaties te zijn, maar er mag niet vergeten worden dat elke divisie hier 500 ma voorstelt. Wordt er op het stroomsignaal verder ingezoomd door het current probe system in te stellen op 50 ma per divisie, dan zijn deze variaties wel duidelijk zichtbaar. Deze variaties mogen dus niet genegeerd worden en dus geldt dezelfde conclusie als bij de eerste meting: de stroomsterkte is per encryptie verschillend ,3V meting De meting van de 3,3 V pinnen verliep net zoals voorgaande metingen. Het current probe system werd ingesteld op 50 ma/div. Op de oscilloscoop werd de stroomsterkte 5 divisies naar beneden geschoven (dit is niet zichtbaar op de figuur). 63

73 Fig 6.7: Meting op de 3,3V-lijn (200 µs/div) Fig 6.8: Meting op de 3,3V-lijn (50 µs/div) Het resultaat van deze meting is analoog aan dat van de eerste meting: het signaal lijkt weer volledig willekeurig te zijn. 64

74 6.3.4 FFT van de 1,5V meting Er werd verwacht dat het stroomsignaal een signaal zou zijn waar een frequentie van 50 khz in te zien zou zijn. Dit is immers de frequentie van de klok en dus het tempo waarop instructies worden gegeven aan de AES core. Uit de resultaten van de metingen blijkt dat er heel wat meer frequenties in het stroomsignaal zitten. Om een overzicht te krijgen van deze frequenties werd een FFT gedaan van de meting op de 1,5V-lijn. Fig 6.9: FFT van de meting op de 1,5V-lijn In bovenstaande figuur is het bovenste signaal de stroomsterkte. Het onderste signaal is de FFT. De FFT is niet volledig constant, maar heeft wel enkele duidelijke constante pieken. Bovenstaande figuur toont aan dat er voortdurend een signaal aanwezig is van ongeveer 533 khz (enkel de current waarde is van belang in de figuur). De constante piek meer naar rechts werd ook gemeten. Deze piek bevindt zich rond ongeveer 1,06 Mhz. 65

75 6.3.5 Nabeschouwing Er zijn een hoop signalen aanwezig die het analyseren van de stroomsterkte onmogelijk maken. Deze overtollige signalen dienen dus verwijderd te worden om een analyse mogelijk te maken. De vraag is dus waar deze signalen vandaan komen; want zelfs al wordt er geen commando gegeven aan de FPGA (bijvoorbeeld wanneer de data-out klaar staat en er gewacht wordt), dan varieert de stroomsterkte nog steeds voortdurend. 6.4 Mogelijke oplossingen Filter Een eerste idee is om een filter te plaatsen tussen de oscilloscoop en het current probe system. Deze filter kan dan alle signalen wegfilteren die niet in de buurt liggen van de klokfrequentie (50 khz). Dit is mogelijk met bijvoorbeeld een band-pass filter. In het labo is echter geen apparatuur aanwezig waarmee het mogelijk is om dit te doen Externe voeding aanleggen De interne voedingen die zorgen voor de 1,5V-lijn, 2,5V-lijn en 3,3V-lijn zijn allemaal geschakelde voedingen. Ze gebruiken respectievelijk een TPS54613 switch, TPS54615 switch en TPS54616 switch van Texas Instruments [21]. In de datasheet van deze switches [25] wordt gesproken over een frequentie van 550 khz. Dit is waarschijnlijk de 533 khz die ontdekt werd in de FFT van de meting. Het is mogelijk om de Virtex-II PRO te voorzien van een externe voeding [24]. Door dit te doen zouden waarschijnlijk een hoop storende frequenties verwijderd kunnen worden, wat ten goede komt aan de analyse van de metingen. Door tijdsgebrek was het echter niet mogelijk om dit nog te proberen. 66

76 7. Besluit In dit eindwerk werd gebruik gemaakt van de AES128_fast crypto-core. Door gebruik te maken van deze core, moest het AES algoritme niet zelf geprogrammeerd worden. Dit maakte een snellere implementatie van de AES cipher in de FPGA mogelijk. Voor de FPGA was er keuze tussen twee modellen: de Xilinx Spartan-3 en de Xilinx Virtex- II PRO. Uiteindelijk werd gekozen voor de Virtex-II PRO omdat de Spartan-3 niet krachtig genoeg bleek om de AES cipher te implementeren. Vervolgens werd de AES128_fast core getest en geïmplementeerd in de Virtex-II PRO. Dit werd op twee manieren gedaan, namelijk hardgecodeerd en System-on-Chip. Hiervoor werd respectievelijk gebruik gemaakt van Xilinx ISE en Xilinx XPS. De Systemon-Chip implementatie bleek de meest dynamische oplossing van de twee te zijn, maar tegelijk ook de meest complexe. Omdat voor het uitvoeren van de metingen snel en eenvoudig wijzigingen moesten kunnen worden gemaakt, werd gekozen om het hardgecodeerde project te gebruiken voor de aanvallen. Verschillende interne signalen werden vervolgens verbonden met fysieke pinnen op de Virtex-II PRO. Op deze manier konden deze signalen gemakkelijk gemeten worden. Het eerste signaal was een startpuls, die hoog werd telkens er een encryptie startte. Verder werden ook de eerste 20 bits van de output van de AES cipher verbonden met fysieke pinnen. Om metingen te kunnen doen, moest er continu versleuteld worden met dezelfde sleutel en dezelfde data. Op deze manier konden de signalen weergegeven worden op een analoge oscilloscoop. Hieruit blijkt ook meteen het nut van de startpuls. Het moet immers duidelijk zijn wanneer een nieuwe encryptie gestart wordt. Uiteindelijk kon overgegaan worden tot het uitvoeren van de aanval. De Virtex-II PRO stelt speciale pinnen ter beschikking om metingen op uit te voeren. Er kan gemeten worden op drie spanningslijnen: 1,5V, 2,5V en 3,3V. Omdat deze spanningen natuurlijk constant zijn, moest gekeken worden naar de stroomsterkte. 67

77 Omdat het onmogelijk is om stroomsterkte te meten met een oscilloscoop, werd er tussen de pinnen van de Virtex-II PRO en de oscilloscoop een current probe system geplaatst. Op deze manier was het mogelijk om alle signalen te bekijken op een oscilloscoop. Het stroomsignaal bleek echter bij elke encryptie verschillend te zijn. Dit kwam omdat er een hoop extra signalen bleken te zijn, waar normaal enkel een signaal verwacht werd met een frequentie gelijk aan de klokfrequentie van de AES core. Er kon dus geen informatie gehaald worden uit het stroomsignaal en er kan dus gesproken worden van een mislukte aanval. Er werden echter nog een aantal oplossingen bedacht. Het bleek echter niet mogelijk om deze nog uit te proberen. Een eerste mogelijke oplossing is het gebruiken van een filter die enkel de frequentie van de klok doorlaat. Hierdoor zouden alle overtollige signalen weggefilterd worden. Een tweede mogelijke oplossing is het aanleggen van een externe voeding. De Virtex-II PRO maakt intern namelijk gebruik van geschakelde voedingen, die zelf ook frequenties genereren. 68

78 Literatuurlijst [1] Jan Devos, Beveiliging, cursus gedoceerd in kader van het vak ICT beveiliging, Hogeschool West-Vlaanderen, Kortrijk, Cursoa, 2005 [2] Advanced Encryption Standard process, , Beschikbaar op het World Wide Web: [ ] [3] FIPS-197, Announcing the Advanced Encryption Standard (AES), National Institute of Standards and Technology, [4] Advanced Encryption Standard, , Beschikbaar op het World Wide Web: [ ] [5] Block cipher modes of operation, , Beschikbaar op het World Wide Web: [ ] [6] Advanced Encryption Standard (AES) fact sheet, , Beschikbaar op het World Wide Web: [ ] [7] Hagai B., Introduction to Side Channel Attacks, Beschikbaar op het World Wide Web: [ ] [8] Side Channel Attack, , Beschikbaar op het World Wide Web: [ ] [9] Bernstein D., Cache-timing attacks on AES, , Beschikbaar op het World Wide Web: [ ] 69

79 [10] Osvik D., Shamir A. en Tromer E., Cache Attacks and countermeasures: the Case of AES, , Beschikbaar op het World Wide Web: [ ] [11] AES128, Beschikbaar op het World Wide Web: [ ] [12] FPGA product tables, Beschikbaar op het World Wide Web: [ ] [13] Microblaze and PowerPC tutorials, Beschikbaar op het World Wide Web: [ ] [14] Microblaze FAQ, Beschikbaar op het World Wide Web: [ ] [15] Designing Custom OPB Slave Peripherals for MicroBlaze, Beschikbaar op het World Wide Web: [ ] [16] Edwards S., The On-Chip Peripheral Bus, Columbia University, Spring 2006, Beschikbaar op het World Wide Web: [ ] [17] Xilinx Board Definition File, Beschikbaar op het World Wide Web: [ ] [18] XUP Virtex-II PRO UCF Files, Beschikbaar op het World Wide Web: [ ] 70

80 [19] Custom Peripheral Design Guide, Beschikbaar op het World Wide Web: [ ] [20] Platform Studio: simulating in Modelsim, Beschikbaar op het World Wide Web: simulating_in_modelsim.htm, [ ] [21] Virtex-II PRO schematics, Beschikbaar op het World Wide Web: [ ] [22] High-Side Current-Sense Measurement: Circuits and Principles, Maxim Integrated Products, , Beschikbaar op het World Wide Web: [ ] [23] MAX4172 Datasheet, Maxim Integrated Products, Beschikbaar op het World Wide Web: [ ] [24] Xilinx University Program Virtex-II Pro Development System, p.19, Beschikbaar op het World Wide Web: [ ] [25] TPS54611, TPS54612, TPS54613, TPS54614, TPS54615, and TPS54616 datasheet, Beschikbaar op het World Wide Web: [ ] [26] Base Converter, Beschikbaar op het World Wide Web: dule=tool%2fnumber%2fbaseconv.en, [ ] [27] JavaScript AES Tool, Beschikbaar op het World Wide Web: [ ] 71

81 [28] Platform Studio User Guide, p , Standaard op de harde schijf geïnstalleerd met de EDK: C:\EDK\doc\ps_ug.pdf [29] Platform Studio: Simulating in Modelsim, Beschikbaar op het World Wide Web: simulating_in_modelsim.htm, [ ] [30] ModelSim Xilinx Edition 6.0a Simulation Library Update 7.1i SP4 Libraries, Beschikbaar op het World Wide Web: > Download > Modelsim XE Libraries [31] ModelSim Xilinx Edition 6.0a Simulation Library Update for IP Update #3, Beschikbaar op het World Wide Web: > Download > Modelsim XE Libraries 72

82 8. Bijlagen 8.1 Base converter [26] Tijdens het testen van de core moet er zeer vaak omgezet worden tussen hexadecimale en binaire waarden. Het zou natuurlijk erg lang duren om dit manueel voor een 128-bit waarde te doen. Daarom werd op zoek gegaan naar een programma waarmee dit gemakkelijk gedaan kan worden. Er werden verschillende tools geprobeerd: - Windows Calculator: maximaal 64-bit waarden mogelijk - Microsoft Powertoy Calculator: maximaal 32-bit waarden mogelijk - Microsoft Excel met Analysis toolpack: maximaal 10-bit waarden mogelijk Uiteindelijk werd een Java Applet op het internet gevonden genaamd Base Converter. Met deze applet is het wel mogelijk om 128-bit waarden te gebruiken. Er moet enkel rekening mee gehouden worden dat als het resultaat start met een 0, deze dan weggelaten wordt. Dit is echter eenvoudig en snel manueel te controleren. Fig 8.1: Base Converter 1

83 8.2 JavaScript AES Tool [27] Het is belangrijk dat de output van de AES core juist is. Dit kan gecontroleerd worden door dezelfde input en sleutel mee te geven aan een reeds bestaande applicatie, en vervolgens de output van deze applicatie te vergelijken met die van de AES core. Er werden verschillende applicaties uitgeprobeerd. Uiteindelijk werd gekozen voor de applicatie JavaScript AES Example omwille van het gebruiksgemak. Fig 8.2: JavaScript AES Example 2

84 8.3 Testen van de core: simulatie in Modelsim DO-file voor encryptie restart #clk toevoegen aan de wave en instellen add wave sim:/aes128_fast/clk wave modify -driver freeze -pattern clock -initialvalue 1 -period 2ns -dutycycle 50 - starttime 0ns -endtime 1000ns sim:/aes128_fast/clk #reset toevoegen aan de wave en instellen add wave sim:/aes128_fast/reset wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/reset wave modify -driver freeze -pattern constant -value 1 -starttime 1ns -endtime 3ns Edit:/aes128_fast/reset #mode toevoegen aan de wave en instellen (mode=1 voor encryptie) add wave sim:/aes128_fast/mode wave modify -driver freeze -pattern constant -value 1 -starttime 0ns -endtime 1000ns sim:/aes128_fast/mode #load toevoegen aan de wave en instellen add wave sim:/aes128_fast/load wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/load wave modify -driver freeze -pattern constant -value 1 -starttime 5ns -endtime 7ns Edit:/aes128_fast/load #start toevoegen aan de wave en instellen add wave sim:/aes128_fast/start wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/start wave modify -driver freeze -pattern constant -value 1 -starttime 9ns -endtime 11ns Edit:/aes128_fast/start #done en data_out toevoegen aan de wave add wave sim:/aes128_fast/done add wave sim:/aes128_fast/data_out #data_in deel 1 aanleggen (van t=0 tot t=7) force -freeze sim:/aes128_fast/data_in cancel 7 #data_in deel 2 aanleggen (van t=7 tot t=1000) force -freeze sim:/aes128_fast/data_in cancel

85 #key_in deel 1 aanleggen (van t=0 tot t=7) force -freeze sim:/aes128_fast/key cancel 7 #key_in deel 2 aanleggen (van t=7 tot t=1000) force -freeze sim:/aes128_fast/key cancel DO-file voor decryptie restart #clk toevoegen aan de wave en instellen add wave sim:/aes128_fast/clk wave modify -driver freeze -pattern clock -initialvalue 1 -period 2ns -dutycycle 50 - starttime 0ns -endtime 1000ns sim:/aes128_fast/clk #reset toevoegen aan de wave en instellen (reset=1 van t=1 tot t=3) add wave sim:/aes128_fast/reset wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/reset wave modify -driver freeze -pattern constant -value 1 -starttime 1ns -endtime 3ns Edit:/aes128_fast/reset #mode toevoegen aan de wave en instellen (mode=0 voor decryptie) add wave sim:/aes128_fast/mode wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/mode #load toevoegen aan de wave en instellen (load=1 van t=5 tot t=7) add wave sim:/aes128_fast/load wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/load wave modify -driver freeze -pattern constant -value 1 -starttime 5ns -endtime 7ns Edit:/aes128_fast/load #start toevoegen aan de wave en instellen (start=1 van t=9 tot t=11) add wave sim:/aes128_fast/start wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes128_fast/start wave modify -driver freeze -pattern constant -value 1 -starttime 9ns -endtime 11ns Edit:/aes128_fast/start #done en data_out toevoegen aan de wave add wave sim:/aes128_fast/done add wave sim:/aes128_fast/data_out #data_in deel 1 aanleggen (van t=0 tot t=7) 4

86 force -freeze sim:/aes128_fast/data_in cancel 7 #data_in deel 2 aanleggen (van t=7 tot t=1000) force -freeze sim:/aes128_fast/data_in cancel 1000 #key_in deel 1 aanleggen (van t=0 tot t=7) force -freeze sim:/aes128_fast/key cancel 7 #key_in deel 2 aanleggen (van t=7 tot t=1000) force -freeze sim:/aes128_fast/key cancel

87 8.4 Implementatie van de core met schuifschakelaars AES.vhd LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; USE ieee.std_logic_unsigned.all; -- poorten van AES.vhd declareren ENTITY aes IS PORT( clk_port : in std_logic; rst_port : in std_logic; start_port : in std_logic; load_port : in std_logic; done_port : out std_logic; mode_port : in std_logic; data_out_port : out std_logic_vector(0 to 127) ); end aes; architecture testaes of aes is -- sleutel en data instellen signal keysig : std_logic_vector(0 to 63) :=x"fedcba "; signal data_insig : std_logic_vector(0 to 63) :=x" eeeeeeec"; -- de poorten van aes128_fast.vhd, de onderliggende VHDL file component aes128_fast IS PORT( clk : in std_logic; reset : in std_logic; start : in std_logic; mode : in std_logic; load : in std_logic; key : in std_logic_vector(63 downto 0); data_in : in std_logic_vector(63 downto 0); data_out : out std_logic_vector(127 downto 0); done : out std_logic ); end component; begin -- de poorten van aes128_fast verbinden met signalen of poorten van aes.vhd u1: aes128_fast port map( data_in => data_insig, key => keysig, data_out => data_out_port, mode => mode_port, 6

88 ); end testaes; clk reset start load done => clk_port, => rst_port, => start_port, => load_port, => done_port DO-file voor simulatie restart # benodigde signalen toevoegen aan de waveform add wave sim:/aes/clk_port add wave sim:/aes/rst_port add wave sim:/aes/start_port add wave sim:/aes/load_port add wave sim:/aes/done_port add wave sim:/aes/mode_port add wave sim:/aes/data_out_port # signalen aanleggen wave modify -driver freeze -pattern clock -initialvalue 1 -period 20ns -dutycycle 50 - starttime 0ns -endtime 1000ns sim:/aes/clk_port wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes/rst_port wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes/start_port wave modify -driver freeze -pattern constant -value 0 -starttime 0ns -endtime 1000ns sim:/aes/load_port wave modify -driver freeze -pattern constant -value 1 -starttime 0ns -endtime 1000ns sim:/aes/mode_port wave modify -driver freeze -pattern constant -value 1 -starttime 10ns -endtime 30ns Edit:/aes/rst_port wave modify -driver freeze -pattern constant -value 1 -starttime 50ns -endtime 70ns Edit:/aes/load_port wave modify -driver freeze -pattern constant -value 1 -starttime 90ns -endtime 110ns Edit:/aes/start_port 7

89 8.4.3 AES.ucf #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "clk_port" LOC = "aj15" IOSTANDARD = LVCMOS25 ; NET "data_out_port<0>" LOC = "K2" IOSTANDARD = LVTTL ; NET "data_out_port<1>" LOC = "L2" IOSTANDARD = LVTTL ; NET "data_out_port<2>" LOC = "N8" IOSTANDARD = LVTTL ; NET "data_out_port<3>" LOC = "N7" IOSTANDARD = LVTTL ; NET "data_out_port<4>" LOC = "K4" IOSTANDARD = LVTTL ; NET "data_out_port<5>" LOC = "K3" IOSTANDARD = LVTTL ; NET "data_out_port<6>" LOC = "L1" IOSTANDARD = LVTTL ; NET "data_out_port<7>" LOC = "M1" IOSTANDARD = LVTTL ; NET "data_out_port<8>" LOC = "N6" IOSTANDARD = LVTTL ; NET "data_out_port<9>" LOC = "N5" IOSTANDARD = LVTTL ; NET "data_out_port<10>" LOC = "L5" IOSTANDARD = LVTTL ; NET "data_out_port<11>" LOC = "L4" IOSTANDARD = LVTTL ; NET "data_out_port<12>" LOC = "M2" IOSTANDARD = LVTTL ; NET "data_out_port<13>" LOC = "N2" IOSTANDARD = LVTTL ; NET "data_out_port<14>" LOC = "P9" IOSTANDARD = LVTTL ; NET "data_out_port<15>" LOC = "R9" IOSTANDARD = LVTTL ; NET "data_out_port<16>" LOC = "M4" IOSTANDARD = LVTTL ; NET "data_out_port<17>" LOC = "M3" IOSTANDARD = LVTTL ; NET "data_out_port<18>" LOC = "N1" IOSTANDARD = LVTTL ; NET "data_out_port<19>" LOC = "P1" IOSTANDARD = LVTTL ; NET "done_port" LOC = "ac4" IOSTANDARD = LVTTL DRIVE = 12 SLEW = SLOW ; NET "load_port" LOC = "ad11" IOSTANDARD = LVCMOS25 ; NET "rst_port" LOC = "ac11" IOSTANDARD = LVCMOS25 ; NET "mode_port" LOC = "af8" IOSTANDARD = LVCMOS25 ; NET "start_port" LOC = "af9" IOSTANDARD = LVCMOS25 ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE 8

90 8.5 Implementatie van de geautomatiseerde core AES.vhd LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; USE ieee.std_logic_unsigned.all; ENTITY aes IS PORT( clk : in std_logic; done_port : out std_logic; data_out_port : out std_logic_vector(0 to 127) ); end aes; architecture testaes of aes is signal keysig : std_logic_vector(0 to 63) :=x"fedcba "; signal data_insig : std_logic_vector(0 to 63) :=x" eeeeeeec"; signal cur_state_sig : std_logic_vector(3 downto 0) := x"0"; signal next_state_sig : std_logic_vector(3 downto 0) := x"0"; signal rst_sig : std_logic; signal start_sig : std_logic; signal load_sig : std_logic; signal mode_sig : std_logic; component aes128_fast IS PORT( clk : in std_logic; reset : in std_logic; start : in std_logic; -- to start encryption or decryption mode : in std_logic; -- to select encryption or decryption load : in std_logic; -- to load the input and keys key : in std_logic_vector(63 downto 0); data_in : in std_logic_vector(63 downto 0); data_out : out std_logic_vector(127 downto 0); done : out std_logic ); end component; begin -- state machine 9

91 process (clk) begin if rising_edge(clk) then cur_state_sig <= next_state_sig; case cur_state_sig is when x"0" => -- zet beginwaarden voor alle signalen rst_sig <= '0'; start_sig <= '0'; load_sig <= '0'; mode_sig <= '1'; -- 1 = encrypt keysig <= x"fedcba "; data_insig <= x" eeeeeeec"; next_state_sig <= x"1"; when x"1" => -- reset 1 rst_sig <= '1'; next_state_sig <= x"2"; when x"2" => -- do nothing next_state_sig <= x"3"; when x"3" => -- reset 0 rst_sig <= '0'; next_state_sig <= x"4"; when x"4" => -- load 1 load_sig <= '1'; next_state_sig <= x"5"; when x"5" => -- do nothing next_state_sig <= x"6"; when x"6" => -- leg 2de deel van de key en data_in aan keysig <= x" "; data_insig <= x" "; next_state_sig <= x"7"; when x"7" => -- load 0 load_sig <= '0'; next_state_sig <= x"8"; when x"8" => -- do nothing next_state_sig <= x"9"; 10

92 when x"9" => -- start de encryptie start_sig <= '1'; next_state_sig <= x"a"; when x"a" => -- do nothing next_state_sig <= x"b"; when x"b" => -- start 0 start_sig <= '0'; next_state_sig <= x"c"; when x"c" => -- do nothing and loop next_state_sig <= x"c"; when others => next_state_sig <= x"0"; end case; end if; end process; -- de poorten van aes128_fast verbinden met signalen of poorten van aes.vhd u1: aes128_fast port map( data_in => data_insig, key => keysig, data_out => data_out_port, mode => mode_sig, clk => clk, reset => rst_sig, start => start_sig, load => load_sig, done => done_port ); end testaes; 11

93 8.5.2 DO-file voor simulatie add wave sim:/aes/clk add wave sim:/aes/done_port add wave sim:/aes/data_out_port wave modify -driver freeze -pattern clock -initialvalue 1 -period 20ns -dutycycle 50 - starttime 0ns -endtime 1000ns sim:/aes/clk AES.ucf #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments NET "clk_port" LOC = "aj15" IOSTANDARD = LVCMOS25 ; NET "data_out_port<0>" LOC = "K2" IOSTANDARD = LVTTL ; NET "data_out_port<1>" LOC = "L2" IOSTANDARD = LVTTL ; NET "data_out_port<2>" LOC = "N8" IOSTANDARD = LVTTL ; NET "data_out_port<3>" LOC = "N7" IOSTANDARD = LVTTL ; NET "data_out_port<4>" LOC = "K4" IOSTANDARD = LVTTL ; NET "data_out_port<5>" LOC = "K3" IOSTANDARD = LVTTL ; NET "data_out_port<6>" LOC = "L1" IOSTANDARD = LVTTL ; NET "data_out_port<7>" LOC = "M1" IOSTANDARD = LVTTL ; NET "data_out_port<8>" LOC = "N6" IOSTANDARD = LVTTL ; NET "data_out_port<9>" LOC = "N5" IOSTANDARD = LVTTL ; NET "data_out_port<10>" LOC = "L5" IOSTANDARD = LVTTL ; NET "data_out_port<11>" LOC = "L4" IOSTANDARD = LVTTL ; NET "data_out_port<12>" LOC = "M2" IOSTANDARD = LVTTL ; NET "data_out_port<13>" LOC = "N2" IOSTANDARD = LVTTL ; NET "data_out_port<14>" LOC = "P9" IOSTANDARD = LVTTL ; NET "data_out_port<15>" LOC = "R9" IOSTANDARD = LVTTL ; NET "data_out_port<16>" LOC = "M4" IOSTANDARD = LVTTL ; NET "data_out_port<17>" LOC = "M3" IOSTANDARD = LVTTL ; NET "data_out_port<18>" LOC = "N1" IOSTANDARD = LVTTL ; NET "data_out_port<19>" LOC = "P1" IOSTANDARD = LVTTL ; NET "done_port" LOC = "ac4" IOSTANDARD = LVTTL DRIVE = 12 SLEW = SLOW ; #PACE: Start of PACE Area Constraints #PACE: Start of PACE Prohibit Constraints #PACE: End of Constraints generated by PACE 12

94 8.6 System-on-Chip User_logic.vhd -- DO NOT EDIT BELOW THIS LINE library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; library proc_common_v2_00_a; use proc_common_v2_00_a.proc_common_pkg.all; -- DO NOT EDIT ABOVE THIS LINE USER libraries added here Entity section Definition of Generics: -- C_DWIDTH -- User logic data bus width -- C_NUM_CE -- User logic chip enable bus width Definition of Ports: -- Bus2IP_Clk -- Bus to IP clock -- Bus2IP_Reset -- Bus to IP reset -- Bus2IP_Data -- Bus to IP data bus for user logic -- Bus2IP_BE -- Bus to IP byte enables for user logic -- Bus2IP_RdCE -- Bus to IP read chip enable for user logic -- Bus2IP_WrCE -- Bus to IP write chip enable for user logic -- IP2Bus_Data -- IP to Bus data bus for user logic -- IP2Bus_Ack -- IP to Bus acknowledgement -- IP2Bus_Retry -- IP to Bus retry response -- IP2Bus_Error -- IP to Bus error response -- IP2Bus_ToutSup -- IP to Bus timeout suppress entity user_logic is generic ( -- ADD USER GENERICS BELOW THIS LINE USER generics added here -- ADD USER GENERICS ABOVE THIS LINE DO NOT EDIT BELOW THIS LINE Bus protocol parameters, do not add to or delete C_DWIDTH : integer := 32; C_NUM_CE : integer := 5 -- DO NOT EDIT ABOVE THIS LINE ); port 13

95 ( -- ADD USER PORTS BELOW THIS LINE USER ports added here -- ADD USER PORTS ABOVE THIS LINE DO NOT EDIT BELOW THIS LINE Bus protocol ports, do not add to or delete Bus2IP_Clk : in std_logic; Bus2IP_Reset : in std_logic; Bus2IP_Data : in std_logic_vector(0 to C_DWIDTH-1); Bus2IP_BE : in std_logic_vector(0 to C_DWIDTH/8-1); Bus2IP_RdCE : in std_logic_vector(0 to C_NUM_CE-1); Bus2IP_WrCE : in std_logic_vector(0 to C_NUM_CE-1); IP2Bus_Data : out std_logic_vector(0 to C_DWIDTH-1); IP2Bus_Ack : out std_logic; IP2Bus_Retry : out std_logic; IP2Bus_Error : out std_logic; IP2Bus_ToutSup : out std_logic -- DO NOT EDIT ABOVE THIS LINE ); end entity user_logic; Architecture section architecture IMP of user_logic is --USER signal declarations added here, as needed for user logic component aes128_fast port( clk : in std_logic; reset : in std_logic; start : in std_logic; -- to initiate the encryption/decryption mode : in std_logic; -- to select encryption or decryption load : in std_logic; -- to load the input and keys key : in std_logic_vector(63 downto 0); data_in : in std_logic_vector(63 downto 0); data_out : out std_logic_vector(127 downto 0); done : out std_logic ); end component; signal data_in_sig, key_sig : std_logic_vector(63 downto 0); signal data_out_sig : std_logic_vector(127 downto 0); signal status : std_logic_vector(31 downto 0); Signals for user logic slave model s/w accessible register example signal slv_reg0 : std_logic_vector(0 to C_DWIDTH-1); 14

96 signal slv_reg1 : std_logic_vector(0 to C_DWIDTH-1); signal slv_reg2 : std_logic_vector(0 to C_DWIDTH-1); signal slv_reg3 : std_logic_vector(0 to C_DWIDTH-1); signal slv_reg4 : std_logic_vector(0 to C_DWIDTH-1); signal slv_reg_write_select : std_logic_vector(0 to 4); signal slv_reg_read_select : std_logic_vector(0 to 4); signal slv_ip2bus_data : std_logic_vector(0 to C_DWIDTH-1); signal slv_read_ack : std_logic; signal slv_write_ack : std_logic; begin --USER logic implementation added here Example code to read/write user logic slave model s/w accessible registers Note: -- The example code presented here is to show you one way of reading/writing -- software accessible registers implemented in the user logic slave model. -- Each bit of the Bus2IP_WrCE/Bus2IP_RdCE signals is configured to correspond -- to one software accessible register by the top level template. For example, -- if you have four 32 bit software accessible registers in the user logic, you -- are basically operating on the following memory mapped registers: Bus2IP_WrCE or Memory Mapped -- Bus2IP_RdCE Register -- "1000" C_BASEADDR + 0x0 -- "0100" C_BASEADDR + 0x4 -- "0010" C_BASEADDR + 0x8 -- "0001" C_BASEADDR + 0xC slv_reg_write_select <= Bus2IP_WrCE(0 to 4); slv_reg_read_select <= Bus2IP_RdCE(0 to 4); slv_write_ack <= Bus2IP_WrCE(0) or Bus2IP_WrCE(1) or Bus2IP_WrCE(2) or Bus2IP_WrCE(3) or Bus2IP_WrCE(4); slv_read_ack <= Bus2IP_RdCE(0) or Bus2IP_RdCE(1) or Bus2IP_RdCE(2) or Bus2IP_RdCE(3) or Bus2IP_RdCE(4); -- implement slave model register(s) SLAVE_REG_WRITE_PROC : process( Bus2IP_Clk ) is begin if Bus2IP_Clk'event and Bus2IP_Clk = '1' then if Bus2IP_Reset = '1' then slv_reg0 <= (others => '0'); slv_reg1 <= (others => '0'); slv_reg2 <= (others => '0'); slv_reg3 <= (others => '0'); slv_reg4 <= (others => '0'); 15

97 else case slv_reg_write_select is - schrijf naar het juiste register when "10000" => for byte_index in 0 to (C_DWIDTH/8)-1 loop if ( Bus2IP_BE(byte_index) = '1' ) then slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7); end if; end loop; when "01000" => for byte_index in 0 to (C_DWIDTH/8)-1 loop if ( Bus2IP_BE(byte_index) = '1' ) then slv_reg1(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7); end if; end loop; when "00100" => for byte_index in 0 to (C_DWIDTH/8)-1 loop if ( Bus2IP_BE(byte_index) = '1' ) then slv_reg2(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7); end if; end loop; when "00010" => for byte_index in 0 to (C_DWIDTH/8)-1 loop if ( Bus2IP_BE(byte_index) = '1' ) then slv_reg3(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7); end if; end loop; when "00001" => for byte_index in 0 to (C_DWIDTH/8)-1 loop if ( Bus2IP_BE(byte_index) = '1' ) then slv_reg4(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7); end if; end loop; when others => null; end case; end if; end if; end process SLAVE_REG_WRITE_PROC; -- implement slave model register read mux SLAVE_REG_READ_PROC : process( slv_reg_read_select, slv_reg0, slv_reg1, slv_reg2, slv_reg3, slv_reg4 ) is begin case slv_reg_read_select is -- Bij lezen van een register: zet de juiste data op de bus when "10000" => slv_ip2bus_data <= data_out_sig(31 downto 0); 16

98 when "01000" => slv_ip2bus_data <= data_out_sig(63 downto 32); when "00100" => slv_ip2bus_data <= data_out_sig(95 downto 64); when "00010" => slv_ip2bus_data <= data_out_sig(127 downto 96); when "00001" => slv_ip2bus_data <= status; when others => slv_ip2bus_data <= (others => '0'); end case; end process SLAVE_REG_READ_PROC; -- de 2 registers van 32 bits aan elkaar plakken zorgt voor het volledige signaal data_in_sig <= slv_reg0 & slv_reg1; key_sig <= slv_reg2 & slv_reg3; U1: aes128_fast PORT MAP( clk reset start mode load key data_in data_out done => slv_reg4(31), => slv_reg4(30), => slv_reg4(29), => slv_reg4(28), => slv_reg4(27), => key_sig, => data_in_sig, => data_out_sig, => status(0)); Example code to drive IP to Bus signals IP2Bus_Data <= slv_ip2bus_data; IP2Bus_Ack IP2Bus_Error IP2Bus_Retry IP2Bus_ToutSup <= slv_write_ack or slv_read_ack; <= '0'; <= '0'; <= '0'; end IMP; 17

99 8.6.2 Configureren van Modelsim en XPS voor rechtstreekse simulatie vanuit XPS [28][29] Compileren van bibliotheken In XPS dienen eerst enkele instellingen gedaan te worden. Dit gebeurt via Project > Project Options. Op de laatste tab HDL and Simulation kunnen de eigenschappen worden ingesteld van de simulatie, zoals het soort simulatie (behavioral, structural, timing) en het simulatieprogramma. Fig 8.3: XPS Project Options Eerst moeten de EDK Library en Xilinx Library aangeduid worden en gecompileerd worden. Hiervoor zijn enkele bestanden nodig van de Xilinx website: - mxe6.0a_7.1isp4_simulation_libraries.zip (20.6MB) [30] - mxe6.0a_71i_ip3_xilinxcorelib.zip (36.0MB) [31] In deze ZIP bestanden zit telkens een map genaamd XILINX. Deze moet in de Modelsim map komen te staan. Het resultaat is dus bijvoorbeeld C:\Modeltech_6.0d\xilinx. Vervolgens dient ervoor gezorgd te worden dat modelsim.ini kan gewijzigd worden. Hiervoor moet de eigenschap alleen-lezen uit worden gezet. Modelsim.ini is te vinden in de Modelsim map. Nu kunnen de bibliotheken gecompileerd worden. Dit gebeurt door in het Project Options venster op Compile te klikken. In de eerste stap moet niets ingesteld worden, 18

100 en er kan dus verder gegaan worden naar stap 2. In deze stap moet gekozen worden voor VHDL. Fig 8.4: XPS Library Compilation Wizard - Stap 2 In stap 3 wordt gekozen om de bibliotheken te compileren. Er moet een map opgegeven worden. De gecompileerde ISE simulatie-bibliotheken zullen hier worden geplaatst. Fig 8.5: XPS Library Compilation Wizard - Stap 3 19

101 In stap 4 moet hetzelfde gebeuren, maar nu voor de EDK. Fig 8.6: XPS Library Compilation Wizard - Stap 4 In de volgende stap wordt gekozen voor Do not compile deprecated library elements. Fig 8.7: XPS Library Compilation Wizard - Stap 5 Door op compile te klikken start de compilatie. 20

EDK Walkthrough: Hardwareontwerp met GPIO en UART Deel 1

EDK Walkthrough: Hardwareontwerp met GPIO en UART Deel 1 EDK Walkthrough: Hardwareontwerp met GPIO en UART Deel 1 1. Doel Kennismaking met de EDK van Xilinx: - begrijpen van de ontwerpomgeving en design flow - aanmaken van een Xilinx Platform Studio project

Nadere informatie

Lab6: Implementatie video timing generator

Lab6: Implementatie video timing generator Het Micro-elektronica Trainings- Centrum Het MTC is een initiatief binnen de INVOMEC divisie. Industrialisatie & Vorming in Micro-elektronica Inleiding In de vorige modules werd een systeem opgebouwd en

Nadere informatie

Werken op afstand via internet

Werken op afstand via internet HOOFDSTUK 12 Werken op afstand via internet In dit hoofdstuk wordt uitgelegd wat er nodig is om op afstand met de ROS artikel database te kunnen werken. Alle benodigde programma s kunnen worden gedownload

Nadere informatie

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore Handleiding ISaGRAF C Handleiding ISaGRAF Deze handleiding beoogt een korte samenvatting te geven van handelingen die verricht moeten worden om met behulp van ISaGRAF een PLC-programma te schrijven en

Nadere informatie

Installatie SQL Server 2014

Installatie SQL Server 2014 Installatie SQL Server 2014 Download de SQL Server Express net advanced Services van de website: https://www.microsoft.com/en-us/download/details.aspx?id=42299 klik op Download. Als u een 64 bit variant

Nadere informatie

Meetopdrachten Poortschakelingen 1 met Multisim

Meetopdrachten Poortschakelingen 1 met Multisim Meetopdrachten Poortschakelingen 1 met Multisim In dit document leest u hoe u de meetopdrachten bij de les Poortschakelingen-1 (lescode 5-30.3) kunt uitvoeren met de simulatiesoftware van Multisim. Dit

Nadere informatie

Raspberry pi snel start handleiding

Raspberry pi snel start handleiding Raspberry pi snel start handleiding G.L.J. Quellhorst V _NL_2.0 Maart 2 0 15 Raspberry pi, snel start handleiding Deze informatie is onder ander verkrijgbaar via: http://www.raspberrypi.org http://www.zoekutuit.nl

Nadere informatie

SI-Profinet. Unidrive M700 en Siemens S7-300 PLC (Step 7)

SI-Profinet. Unidrive M700 en Siemens S7-300 PLC (Step 7) Omschrijving: In dit document wordt stap voor stap uitgelegd hoe met Simatic Step 7 de communicatie opgezet kan worden tussen een Siemens S7-00 PLC en een Unidrive M700 met V2 module. Dit document behandelt

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 1: Installeren en verifiëren van de SDE Door Hugo Arends, augustus 2012 Microcontrollers Een microcontroller is een elektronische component dat gebruikt wordt om (complexe)

Nadere informatie

Herconfigureerbare Hardware in Ieders Bereik

Herconfigureerbare Hardware in Ieders Bereik Herconfigureerbare Hardware in Ieders Bereik Prof. Dirk Stroobandt Universiteit Gent Vakgroep ELIS Onderzoeksgroep PARIS http://www.elis.ugent.be/~dstr/ Overzicht Nood aan digitale verwerking van gegevens

Nadere informatie

Basisconcept VHDL. Digitaal Ontwerpen Tweede studiejaar. Wim Dolman. Engineering, leerroute Elektrotechniek Faculteit Techniek

Basisconcept VHDL. Digitaal Ontwerpen Tweede studiejaar. Wim Dolman. Engineering, leerroute Elektrotechniek Faculteit Techniek Basisconcept VHDL Tweede studiejaar Wim Dolman Engineering, leerroute Elektrotechniek Faculteit Techniek 1 Deze presentatie toont de stappen voor het ontwerpen van een digitale combinatorische schakeling

Nadere informatie

Installatie SQL: Server 2008R2

Installatie SQL: Server 2008R2 Installatie SQL: Server 2008R2 Download de SQL Server 2008.exe van onze site: www.2work.nl Ga naar het tabblad: Downloads en meld aan met: klant2work en als wachtwoord: xs4customer Let op! Indien u een

Nadere informatie

Handleiding aanmaak CSR

Handleiding aanmaak CSR Handleiding aanmaak CSR Voordat u begint: Om een Certificate Signing Request (CSR) te maken moet het programma OpenSSL geïnstalleerd worden. Dit programma kan geheel gratis gedownload worden vanaf de OpenSSL

Nadere informatie

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject

Nadere informatie

Installatie SQL Server 2012

Installatie SQL Server 2012 Installatie SQL Server 2012 Download de SQL Server express net Advanced Services van de website: https://www.microsoft.com/en-us/download/details.aspx?id=29062 klik op Download. Als u een 64 bit variant

Nadere informatie

DIGITALE MODE MET POWER SDR

DIGITALE MODE MET POWER SDR DIGITALE MODE MET POWER SDR Als u een SDR tranceiver of ontvanger in gebruik heeft, is het misschien ook leuk om de digitale modi zoals BPSK31, RTTY enz. enz. te kunnen ontvangen en zenden. We beperken

Nadere informatie

SI-Profinet. Unidrive M200-M400 en Siemens S PLC (TIA portal)

SI-Profinet. Unidrive M200-M400 en Siemens S PLC (TIA portal) Omschrijving: In dit document wordt stap voor stap uitgelegd hoe met TIA portal de communicatie opgezet kan worden tussen een Siemens S7-500 PLC en een Unidrive M400 met V2 module. Dit document behandelt

Nadere informatie

Handleiding aanmaak CSR

Handleiding aanmaak CSR Handleiding aanmaak CSR Voordat u begint: Om een Certificate Signing Request (CSR) te maken moet het programma OpenSSL geïnstalleerd worden. Dit programma kan geheel gratis gedownload worden vanaf de OpenSSL

Nadere informatie

HANDLEIDING INFOGRAPHIC SOFTWARE Versie 2.3 / jan 2014

HANDLEIDING INFOGRAPHIC SOFTWARE Versie 2.3 / jan 2014 HANDLEIDING INFOGRAPHIC SOFTWARE Versie 2.3 / jan 2014 Inhoudsopgave 1. Inleiding... 3 2. Systeemvereisten... 3 3. Installeren van de software... 4 4. Programma instellingen... 5 5. Importeren van een

Nadere informatie

Standard Parts Installatie Solid Edge ST3

Standard Parts Installatie Solid Edge ST3 Hamersveldseweg 65-1b 3833 GL LEUSDEN 033-457 33 22 033-457 33 25 info@caap.nl www.caap.nl Bank (Rabo): 10.54.52.173 KvK Utrecht: 32075127 BTW: 8081.46.543.B.01 Standard Parts Installatie Solid Edge ST3

Nadere informatie

Priva Blue ID Network scanner / Syslog Tool

Priva Blue ID Network scanner / Syslog Tool Priva Blue ID Network scanner / Syslog Tool Versie 1.3.15.0 Bladzijde 1 Inhoudsopgave Inhoudsopgave... 2 Introductie:... 3 Systeemeisen:... 4 Installeren op een SX100:... 5 De Werking:... 6 Scannen van

Nadere informatie

EE1410: Digitale Systemen BSc. EE, 1e jaar, 2011-2012, 2e werkcollege

EE1410: Digitale Systemen BSc. EE, 1e jaar, 2011-2012, 2e werkcollege EE4: igitale Systemen BSc. EE, e jaar, 2-22, 2e werkcollege Arjan van Genderen, Stephan Wong, Computer Engineering 5 t/m 22-3-22 elft University of Technology Challenge the future Voor je begint. ownload

Nadere informatie

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise Inhoudsopgave 1. Voorbereiding... 4 2. Web Service Connector tool configuratie... 5 3. TaskCentre taak voor het aanmaken van

Nadere informatie

Installatie SQL Server 2008R2

Installatie SQL Server 2008R2 Installatie SQL Server 2008R2 Download de SQL Server 2008.exe van onze site: www.2work.nl Ga naar tabblad: Downloads en meld aan met: klant2work en wachtwoord: xs4customer Let op! Indien u een Windows

Nadere informatie

Het koppelen van een FC302 op Profibus met een Siemens PLC

Het koppelen van een FC302 op Profibus met een Siemens PLC Het koppelen van een FC0 op Profibus met een Siemens PLC Snelle start handleiding Solar Technical Support Inhoudsopgave: Het gebruikte testmateriaal.... Het instellen van de FC0.... Initialisation:...

Nadere informatie

Introductie testtooling Wink

Introductie testtooling Wink Introductie testtooling Wink SYSQA B.V. Almere Datum : 10-04-2013 Status : 1.0 Opgesteld door : Organisatie SYSQA B.V. Pagina 2 van 16 Inhoudsopgave 1 Inleiding... 3 1.1 Opbouw... 3 2 Wink... 4 2.1 Wat

Nadere informatie

Inhoud Inhoud. Over dit boek 7. 1 Eclipse IDE (Integrated Development Environment) 9. 2 Functionele specificatie 13

Inhoud Inhoud. Over dit boek 7. 1 Eclipse IDE (Integrated Development Environment) 9. 2 Functionele specificatie 13 5 Inhoud Inhoud Over dit boek 7 1 Eclipse IDE (Integrated Development Environment) 9 2 Functionele specificatie 13 3 Implementatie grafische gebruikersinterface 31 4 De klassen en methoden 57 5 Technische

Nadere informatie

Departement industriële wetenschappen en technologie

Departement industriële wetenschappen en technologie Departement industriële wetenschappen en technologie Universitaire Campus, gebouw B B-3590 DIEPENBEEK Tel.: 011-23 07 90 Fax: 011-23 07 99 Aansturen en testen van een hybride infrarood beeldopnemer Abstract

Nadere informatie

Manual Debug software. VMC next

Manual Debug software. VMC next Manual Debug software VMC next Land: NL Ned Air bv maart 2012 Ver. 0.05 1 Algemeen... 3 2 Opbouw VMC next... 3 3 VMC Next Debugger... 4 4 Status... 7 5 Registers... 8 5.1 Knoppen... 9 5.1.1 Download...

Nadere informatie

Netwerk Interfacing Data Logging.

Netwerk Interfacing Data Logging. Handleiding Netwerk Interfacing Data Logging. EduTechSoft.nl 2009-2010 H.O.Boorsma. Pagina - 2 - Netwerk Interfacing Data Logging Pagina - 3 - Inhoud Inleiding.... 4 Beschrijving van het programma....

Nadere informatie

Technische Informatie

Technische Informatie Het Beveiligen van een draadloos netwerk Het grootste Risico van een draadloos netwerk is dat het signaal in principe voor iedereen beschikbaar is. Anders dan bij een bekabeld netwerk, waar men een fysieke

Nadere informatie

TAB13-201 XENTA 13c 13,3 TABLET FIRMWARE UPGRADE INSTRUCTIES

TAB13-201 XENTA 13c 13,3 TABLET FIRMWARE UPGRADE INSTRUCTIES TAB13-201 XENTA 13c 13,3 TABLET FIRMWARE UPGRADE INSTRUCTIES Page 1 of 9 VOORDAT U BEGINT: BACKUP BELANGRIJKE GEGEVENS! Bij het upgraden van uw Yarvik tablet naar Android 4.1.1 zullen alle gebruikersinstellingen,

Nadere informatie

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files 1 Introductie In deze oefening zal je je LCD display leren aansturen. Je controleert deze display door er instructies naar te

Nadere informatie

Getting-started tutorial. Versie 1.0

Getting-started tutorial. Versie 1.0 Getting-started tutorial Versie 1.0 Getting-started Apparaat toevoegen Installatie en activatie Getting-started tutorial In deze getting-started tutorial gaan we u helpen met de eerste stappen met ROXY,

Nadere informatie

Midi PDF Bladmuziek lezer

Midi PDF Bladmuziek lezer Inleiding. Ruim 20 ordners aan bladmuziek, meeste daarvan uitgeprint van een PDF. Even snel een nummer opzoeken wil dan ook niet, terwijl ik alles wel op alfabetische volgorde heb. Dat was het niet helemaal

Nadere informatie

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste

Nadere informatie

Opzetten van een evenement

Opzetten van een evenement Opzetten van een evenement Inhoud Begrippenlijst... 3 Voor het evenement... 4 De wizard doorlopen:... 4 Wizard pagina: Welkom bij event-timing.nl... 4 Wizard pagina: Evenement gegevens... 4 Wizard pagina:

Nadere informatie

Inrichting Systeem: Locaties & Toegang

Inrichting Systeem: Locaties & Toegang Inrichting Systeem: Locaties & Toegang EasySecure International B.V. +31(0)88 0000 083 Info@EasySecure.nl Support.EasySecure.nl v2.0.11 22-09-2014 In deze handleidingen worden de volgende functies binnen

Nadere informatie

Beveiliging van persoonlijke bestanden door middel van encryptie een tutorial door Nick heazk Vannieuwenhoven

Beveiliging van persoonlijke bestanden door middel van encryptie een tutorial door Nick heazk Vannieuwenhoven Beveiliging van persoonlijke bestanden door middel van encryptie een tutorial door Nick heazk Vannieuwenhoven Ten Geleide Voor het beveiligen van onze persoonlijke bestanden zullen we gebruik maken van

Nadere informatie

TI-SMARTVIEW. Installeren op Windows PC

TI-SMARTVIEW. Installeren op Windows PC TI SmartView 1 TI-SMARTVIEW Installeren op Windows PC De licentie van de school voor TI-SmartView is tot nader bericht een single-user licentie, hetgeen betekent dat deze op één pc mag geïnstalleerd worden,

Nadere informatie

Installatie handleiding

Installatie handleiding Installatie handleiding Pagina 2 van 7 1 Inleiding Vanwege de zeer uitgebreide elektronica op Porsche voertuigen is het noodzakelijk dat de diagnosesoftware enorm snel evolueert. De installatie en verdere

Nadere informatie

Rabo CORPORATE CONNECT. Certificaatvernieuwing

Rabo CORPORATE CONNECT. Certificaatvernieuwing Rabo CORPORATE CONNECT Certificaatvernieuwing Inhoud 1 INLEIDING... 3 2 SYSTEEMVEREISTEN... 4 3 CERTIFICAAT VERNIEUWEN... 6 4 TROUBLESHOOTING... 8 5 ONDERSTEUNING EN SERVICE... 9 BIJLAGE 1 INSTALLATIE

Nadere informatie

Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide. Jaap Ruiten

Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide. Jaap Ruiten Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide Jaap Ruiten Het koppelen van Weidmüller u-remote aan een AC500-eco plc. Thema: u-remote Modbus TCP Bladzijde 1 Inhoudsopgave

Nadere informatie

Hardware-software Co-design

Hardware-software Co-design Jan Genoe KHLim Versie: maandag 10 juli 2000 Pagina 1 Wat is HW/SW Co-design Traditioneel design: De verdeling tussen de HW en de SW gebeurt bij het begin en beiden worden onafhankelijk ontwikkeld Verweven

Nadere informatie

Q: Hoe configureer ik het gebruik van een Hitachi CPU in CODESYS v3.5.x.x?

Q: Hoe configureer ik het gebruik van een Hitachi CPU in CODESYS v3.5.x.x? Q: Hoe configureer ik het gebruik van een Hitachi CPU in CODESYS v3.5.x.x? A: Dit document geeft hier uitleg over. Voordat het mogelijk is om een Hitachi CPU te gebruiken binnen de ontwikkelomgeving van

Nadere informatie

Voeler ingang van de ilog recorder. Stop de temperatuurvoeler

Voeler ingang van de ilog recorder. Stop de temperatuurvoeler 1) Standaard interface (EA-INT) Oud model. 2) Universele interface (EA-INT-U) Nieuw model. Beide interfaces hebben een DB9 (9 pins) connector en uw PC heeft een RS232 seriële poort nodig. Escort ilog Dataloggers

Nadere informatie

Installatie. Klik vervolgens op OK om verder te gaan met de installatie. Om verder te gaan met de installatie kunt op op Volgende klikken.

Installatie. Klik vervolgens op OK om verder te gaan met de installatie. Om verder te gaan met de installatie kunt op op Volgende klikken. Installatie De client software van Backup+ kan worden gedownload op de Internet Limburg website. Kijk hiervoor op http://www.ilimburg.nl/downloads. Na het downloaden en openen van het backup+.exe bestand

Nadere informatie

Handleiding VirtualBox

Handleiding VirtualBox Pagina 1 van 18 Handleiding VirtualBox Inhoud 1) Wat is VirtualBox?... 2 2) Installatie... 2 3) Schermopbouw VirtualBox... 6 4) Downloaden van Linux ISO... 7 5) Virtuele Machine aanmaken... 7 6) Besturingssysteem

Nadere informatie

A Quick Start Guide: AVR programmeren

A Quick Start Guide: AVR programmeren A Quick Start Guide: AVR programmeren In deze guide wordt uitgelegd hoe men kan beginnnen met het programeren van een ATMEL AVR microcontroller. Er zal een testprogramma uit de software library AVRlib

Nadere informatie

Technote. EnGenius Senao EOM Mesh Layer 2 configuratie Transparant netwerk

Technote. EnGenius Senao EOM Mesh Layer 2 configuratie Transparant netwerk Technote EnGenius / Senao EOM-8670 Mesh Layer 2 configuratie Transparant netwerk Merk Model Firmware Datum EnGenius Senao EOM-8670 2.1.10 09-04-2009 Pagina 1 van 29 Inhoudsopgave Inhoudsopgave...2 Node

Nadere informatie

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie www.arduino.cc Arduino en DDS DDS chips DDS = Direct Digital (frequency) Synthesis Output = sinusvormig signaal Maximum frequentie = ½ klokfrequentie Frequentie bepaald door tuning word Grootste fabrikant:

Nadere informatie

Inhoudsopgave. Whisper380-computerhulp 2

Inhoudsopgave. Whisper380-computerhulp 2 Versie: 1.0 Gemaakt door: Whisper380 Eigenaar: Whisper380-computerhulp Datum: 23-11-2010 Inhoudsopgave Wat gaan we doen?...3 Wat hebben we nodig?...3 Downloaden van het programma:...3 Het programma registreren

Nadere informatie

AANVALLEN OP WES3 + LEN SPEK & HIDDE WIERINGA

AANVALLEN OP WES3 + LEN SPEK & HIDDE WIERINGA AANVALLEN OP WES3 + LEN SPEK & HIDDE WIERINGA Inleiding De uitdagende opdracht van het vak Algebra & Security luidde als volgt: Vind de sleutel die is gebruikt bij het encrypten van de gegeven plain-cyphertext

Nadere informatie

Het aansturen van de FC280 via ABB op Profibus.

Het aansturen van de FC280 via ABB op Profibus. Het aansturen van de FC280 via ABB op Profibus. Snelle start handleiding Solar Technical Services Inhoudsopgave: Het gebruikte test materiaal.... 2 Download en installeer de GSD file voor de FC280... 3

Nadere informatie

TAB10-201 XENTA 10ic 10 TABLET FIRMWARE UPGRADE INSTRUCTIES

TAB10-201 XENTA 10ic 10 TABLET FIRMWARE UPGRADE INSTRUCTIES TAB10-201 XENTA 10ic 10 TABLET FIRMWARE UPGRADE INSTRUCTIES Page 1 of 10 VOORDAT U BEGINT: BACKUP BELANGRIJKE GEGEVENS! Bij het upgraden van uw Yarvik tablet naar Android 4.1.1 zullen alle gebruikersinstellingen,

Nadere informatie

MADASTER PLATFORM. IFC export in BIM software. Archicad 21 & Revit 2019

MADASTER PLATFORM. IFC export in BIM software. Archicad 21 & Revit 2019 MADASTER PLATFORM IFC export in BIM software Archicad 21 & Revit 2019 Juni 2018 Inleiding Deze handleiding dient ter ondersteuning van het importeren van uw gebouw naar het Madaster platform. Om u bestand

Nadere informatie

Installatie Handleiding

Installatie Handleiding Installatie Handleiding Index Introductie... 3 Systeem en software-vereisten... 4 Ondersteunde softwareapplicaties... 4 Programma architectuur... 5 Registerinstellingen... 5 Snelkoppeling... 6 Benodigde

Nadere informatie

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: Eenvoudig voorbeeld. Er wordt verondersteld dat er met VS 2008 EXPRESS gewerkt wordt. Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: (Sommige schermafdrukken zijn afkomstig

Nadere informatie

Quickstart ewon Cosy 131

Quickstart ewon Cosy 131 Quickstart ewon Cosy 131 Inleiding In deze quickstart leggen we stap voor stap uit hoe de ewon Cosy snel geconfigureerd kan worden. Mocht u toch meer gedetailleerde informatie nodig hebben dan verwijzen

Nadere informatie

SECRETZIP HANDLEIDING

SECRETZIP HANDLEIDING SECRETZIP COMPRESSIE & ENCRYPTIE programma (enkel voor Windows). Het programma bevindt zich op de USB Flash-drive. Raadpleeg a.u.b. de handleiding op de USB Flash-drive of bezoek integralmemory.com om

Nadere informatie

Installatiehandleiding Windows XP / Vista / Windows 7

Installatiehandleiding Windows XP / Vista / Windows 7 Installatiehandleiding Windows XP / Vista / Windows 7 Versie 1.4 Datum 11 januari 2011 Status definitief Inhoud 1 Downloaden installatiebestand 3 2 SafeSign installeren 4 3 Certificaten toevoegen aan de

Nadere informatie

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft S88XPressNetLI v1.0 Installatie- en gebruikershandleiding en naslagwerk. 2008 KDesign Electronics, PCB ontwerp door RoSoft 3.3 De S88XpressNetLI verbinden met de ROCO versterker Aangezien de S88XpressNetLI

Nadere informatie

Werking van de Office Connector, en het oplossen van fouten.

Werking van de Office Connector, en het oplossen van fouten. Werking van de Office Connector, en het oplossen van fouten. De Office Connector zorgt ervoor dat de Microsoft Officeomgeving gebruikt kan worden als ontwerp en genereeromgeving voor documenten waarbij

Nadere informatie

1 van 8 22-2-2012 20:43

1 van 8 22-2-2012 20:43 1 van 8 22-2-2012 20:43 Garmin Basecamp is een gratis software programma van Garmin. Het vergelijkbaar met mapsource, echter met de nieuwe toestellen (oregon, dakota en gpsmap 62) heeft het een aantal

Nadere informatie

SI-Profibus. Unidrive M700-M702 en Siemens S7-300 PLC (STEP 7)

SI-Profibus. Unidrive M700-M702 en Siemens S7-300 PLC (STEP 7) Omschrijving: In dit document wordt stap voor stap uitgelegd hoe met STEP 7 de communicatie opgezet kan worden tussen een Siemens S7-300 PLC en een Unidrive M700 met module. Dit document behandelt de volgende

Nadere informatie

Movicon 11. Visualisatie op VIPA Touch Screens Van de VIPA PLC: CPU315 & CPU313. F. Rubben Movicon 11 op VIPA Touch Screens 1

Movicon 11. Visualisatie op VIPA Touch Screens Van de VIPA PLC: CPU315 & CPU313. F. Rubben Movicon 11 op VIPA Touch Screens 1 Movicon 11 Visualisatie op VIPA Touch Screens Van de VIPA PLC: CPU315 & CPU313 F. Rubben Movicon 11 op VIPA Touch Screens 1 F. Rubben Movicon 11 op VIPA Touch Screens 2 To Do: Installeer het programma.

Nadere informatie

VPN verbinding maken HCCnet (Windows XP)

VPN verbinding maken HCCnet (Windows XP) VPN verbinding maken HCCnet (Windows XP) Deze beknopte handleiding geeft uitleg hoe via het Wireless Leiden netwerk een VPN (PPTP) verbinding kan worden opgezet naar het HCC internet. We gaan er voor het

Nadere informatie

Tips & Trucs ARCHICAD 117: Programma van Eisen add-on voor KeyMembers

Tips & Trucs ARCHICAD 117: Programma van Eisen add-on voor KeyMembers Tips & Trucs ARCHICAD 117: Programma van Eisen add-on voor KeyMembers Met de Programma van Eisen add-on kan eenvoudig een programma van eisen worden ingelezen vanuit een excel bestand, waarbij snel zones

Nadere informatie

INSTALLATIE HANDLEIDING

INSTALLATIE HANDLEIDING INSTALLATIE HANDLEIDING REKENSOFTWARE MatrixFrame MatrixFrame Toolbox MatrixGeo 1 / 9 SYSTEEMEISEN Werkstation met minimaal Pentium 4 processor of gelijkwaardig Beeldschermresolutie 1024x768 (XGA) Windows

Nadere informatie

Installatiehandleiding Standard Parts Solid Edge 2019

Installatiehandleiding Standard Parts Solid Edge 2019 Solid Edge 2019 Deze handleiding kan ook gebruikt worden voor het installeren van de van eerdere Solid Edge versies. Gebruik dit document alleen voor de eerste schone installatie van de. Zijn de al een

Nadere informatie

12.1 Stapsgewijs uw Bluetooth monitoring systeem installeren.

12.1 Stapsgewijs uw Bluetooth monitoring systeem installeren. Handleiding Monitoring bluetooth De monitoring voor de KLNE Solartec omvormers kan op diverse manieren worden gerealiseerd. De navolgende systemen zijn ter beschikking: 1. Bluetooth draadloos systeem.

Nadere informatie

Technische nota AbiFire5 Rapporten maken via ODBC

Technische nota AbiFire5 Rapporten maken via ODBC Technische nota AbiFire5 Rapporten maken via ODBC Laatste revisie: 29 juli 2009 Inhoudsopgave Inleiding... 2 1 Installatie ODBC driver... 2 2 Systeeminstellingen in AbiFire5... 3 2.1 Aanmaken extern profiel...

Nadere informatie

IAAS BACKUPS MAKEN MET IASO

IAAS BACKUPS MAKEN MET IASO IAAS BACKUPS MAKEN MET IASO Contents IAAS BACKUPS MAKEN MET IASO... 2 STAPPEN... 2 BACKUP.MANAGEMENT PORTAL... 3 INLOGGEN IN DE CLOUD MANAGEMENT CONSOLE... 3 ACCOUNTS AANMAKEN... 4 INSTALLEREN EN CONFIGUREREN...

Nadere informatie

Installatie- en gebruikshandleiding Risicoverevening. 11 april 2007 ZorgTTP

Installatie- en gebruikshandleiding Risicoverevening. 11 april 2007 ZorgTTP Installatie- en gebruikshandleiding Risicoverevening 11 april 2007 ZorgTTP Inleiding In het kader van Risicoverevening wordt gepseudonimiseerd informatie aangeleverd aan het College voor Zorgverzekeringen

Nadere informatie

Watcheye AIS op ipad

Watcheye AIS op ipad Watcheye AIS op ipad Deel uw NMEA / AIS informatie met uw ipad met tussenkomst van uw PC/Laptop. Het is mogelijk om de Watcheye AIS applicatie op uw ipad te koppelen met uw AIS, door de NMEA data die de

Nadere informatie

Scan-pad technieken. Zet elk register om in een scan-pad register (twee opeenvolgende D-latches: master-slave):

Scan-pad technieken. Zet elk register om in een scan-pad register (twee opeenvolgende D-latches: master-slave): Zet elk register om in een scan-pad register (twee opeenvolgende D-latches: master-slave): D is de normale data ingang C is de normale fase 1 klok I is de data ingang van het shift-regiester A is de klok

Nadere informatie

Locobuffer Handleiding

Locobuffer Handleiding Locobuffer Handleiding HDM09 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

PCI Ontwikkelplatformen

PCI Ontwikkelplatformen PCI Ontwikkelplatformen Jan Genoe KHLim In dit deel bespreken we de verschillende ontwikkelplatformen die ter beschikking staan om een PCI kaart te ontwikkelen. 1 Ontwikkelplatformen van PCI kaarten Gebruik

Nadere informatie

INHOUD. KHLim dep IWT MeRa 1/22

INHOUD. KHLim dep IWT MeRa 1/22 INHOUD 1.Aanmaken van een nieuw S7 project... 2 1.1 Openen van een nieuw project.... 2 1.2 invoegen van een S7 station... 2 1.3 openen van de hardware... 3 1.4 Invoegen van een Rack... 3 1.5 Downloaden

Nadere informatie

HANDLEIDING. Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing

HANDLEIDING. Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing 1 HANDLEIDING V2.0.2.0-2013 Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing Inhoudsopgave 2 Inhoudsopgave... 2 Inleiding... 3 Software installatie...

Nadere informatie

Voeler ingang van de ilog recorder. Stop de temperatuurvoeler

Voeler ingang van de ilog recorder. Stop de temperatuurvoeler 1) Standaard interface (EA-INT) Oud model. 2) Universele interface (EA-INT-U) Nieuw model. Beide interfaces hebben een DB9 (9 pins) connector en uw PC heeft een RS232 seriële poort nodig. Escort ilog Dataloggers

Nadere informatie

Combinatorische schakelingen

Combinatorische schakelingen Practicum 1: Combinatorische schakelingen Groep A.6: Lennert Acke Pieter Schuddinck Kristof Vandoorne Steven Werbrouck Inhoudstabel 1. Doelstellingen... 2 2. Voorbereiding... 3 3. Hardware-practicum...

Nadere informatie

Handleiding voor Zotero versie 2.0

Handleiding voor Zotero versie 2.0 Handleiding voor Zotero versie 2.0 Michiel Wolda De handleiding voor Zetero is geschreven voor de lezers van het boek Deskresearch: Informatie selecteren, beoordelen en verwerken: tweede editie (Van Veen

Nadere informatie

USB NAAR SERIËLE CONVERTER

USB NAAR SERIËLE CONVERTER USB NAAR SERIËLE CONVERTER Snel installatiegids Windows 7 DA-70158 Stap 1: Stap 2: Plaats het CD-stuurprogramma van dit product in de CD-ROM. Sluit het apparaat aan op een vrije USB-poort op uw PC. Als

Nadere informatie

Handleiding Sportlink Club

Handleiding Sportlink Club Handleiding Sportlink Club Dit document is automatisch gegenereerd. We raden u aan de handleiding online te raadplegen via www.sportlinkclub.nl/support. 1. Installatiehandleiding.........................................................................................

Nadere informatie

Installatie van sqlserver

Installatie van sqlserver Installatie van sqlserver Download SQLserver 2005 Express basis van de website van 2work: www.2work.nl, tabblad downloads; beveiligde zone. De inlog gegevens kunnen via de helpdesk aangevraagd worden.

Nadere informatie

Het koppelen van de FC280 aan Profinet.

Het koppelen van de FC280 aan Profinet. Het koppelen van de FC280 aan Profinet. Snelle start handleiding Solar Technical Services Inhoudsopgave: Het gebruikte test materiaal.... 2 Instellingen van de FC280 corrigeren via de MCT10 software....

Nadere informatie

Intramed procedure. Intramed en Windows 7. 1. Upgraden naar Windows 7

Intramed procedure. Intramed en Windows 7. 1. Upgraden naar Windows 7 1. Upgraden naar Windows 7 Voorbereiding Als u straks gebruik wilt maken van een applicatie die nu op een andere computer draait, raden wij u aan om voordat u tot de installatie overgaat alle eventuele

Nadere informatie

VERA Softkey Teleworker. Installatieprocedure

VERA Softkey Teleworker. Installatieprocedure VERA Softkey Teleworker Installatieprocedure Dit document beschrijft de te ondernemen stappen voor de installatie en ingebruikname van de VERA Softkey Teleworker. Dimitri Debock 23-10-2007 INHOUDSOPGAVE

Nadere informatie

Snel op weg met de PepperPlayer.

Snel op weg met de PepperPlayer. Snel op weg met de PepperPlayer. Dit is een korte leidraad voor de installatie van de PepperPlayer. Hierin wordt zo simpel mogelijk beschreven hoe u de PepperPlayer kunt instaleren. Kijk voor uitgebreide

Nadere informatie

Installatie Handleiding. Twan Wintjes

Installatie Handleiding. Twan Wintjes Installatie Handleiding voor AVCHDCoder Twan Wintjes 1 Hoofdstuk 1: Installatie... 3 1.1: Installeer AVCHDCoder... 3 1.2: Installeer ffdshow, Avisynth en Haali Media Splitter... 3 1.3: Ffdshow configureren...

Nadere informatie

HANDLEIDING VIEW DESKTOP. Handleiding VIEW Desktop. P. de Gooijer. Datum: 09-01-2013 Versie: 1.3

HANDLEIDING VIEW DESKTOP. Handleiding VIEW Desktop. P. de Gooijer. Datum: 09-01-2013 Versie: 1.3 HANDLEIDING VIEW DESKTOP Document: Auteur: Datum: 09-01-2013 Versie: 1.3 Handleiding VIEW Desktop M. Huibers P. de Gooijer Inleiding Het Hoornbeeck College en Van Lodenstein maakt gebruik van VMware View.

Nadere informatie

PRO 4000. NOORD 137 2931 SJ KRIMPEN a/d LEK TELEFOON: 0180593913 FAX: 0180593266 INTERNET: WWW.PRO-REC.NL

PRO 4000. NOORD 137 2931 SJ KRIMPEN a/d LEK TELEFOON: 0180593913 FAX: 0180593266 INTERNET: WWW.PRO-REC.NL PRO 4000 NOORD 137 2931 SJ KRIMPEN a/d LEK TELEFOON: 0180593913 FAX: 0180593266 INTERNET: WWW.PRO-REC.NL 1 1.0 BELANGRIJKE EIGENSCHAPPEN VAN HET PRO 4000 SYSTEEM - H.264 compressie techniek full D1 - Volledig

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 2: Architectuur ATmega32 en STK500 Door Hugo Arends, september 2012 Architectuur ATmega32 Een uitgebreide en gedetailleerde beschrijving van de ATmega32 microcontroller

Nadere informatie

Installatie Solid Edge ST5

Installatie Solid Edge ST5 Installatie Solid Edge ST5! NEEM DIT DOCUMENT DOOR VOORDAT U UW HUIDIGE SOLID EDGE VERSIE GAAT VERWIJDEREN! LET OP!! SOLID EDGE ST5 KUNT U NIET MEER OP WINDOWS XP INSTALLEREN LET OP!! DE ST5 LICENSE MANAGER

Nadere informatie

Printen met de NAS-server (PO50696)

Printen met de NAS-server (PO50696) Printen met de NAS-server (PO50696) Attentie : De Nas-server accepteert enkel gewone USB printers; multifunctionele printers worden niet ondersteund. Printen vanuit Windows 2000 is ook niet ondersteund.

Nadere informatie

RUCKUS DPSK + ZERO-IT. Technote. Alcadis Vleugelboot 8 3991 CL Houten www.alcadis.nl 030 65 85 125

RUCKUS DPSK + ZERO-IT. Technote. Alcadis Vleugelboot 8 3991 CL Houten www.alcadis.nl 030 65 85 125 RUCKUS DPSK + ZERO-IT Technote Versie: 1.0 Auteur: Thomas Snijder Datum: 17-02-2014 Alcadis Vleugelboot 8 3991 CL Houten www.alcadis.nl 030 65 85 125 Inhoud 1 Inleiding... 2 2 Configuratie... 3 2.1 CAPTIVE

Nadere informatie

Installeer de C54PSERVU in Windows Vista

Installeer de C54PSERVU in Windows Vista Installeer de C54PSERVU in Windows Vista In dit document wordt beschreven hoe u uw printer in combinatie met de Conceptronic C54PSERVU kan installeren in Windows Vista. 1. Printer installeren Voordat u

Nadere informatie

Werkomgeving. Android Studio. Android - werkomgeving 1/6

Werkomgeving. Android Studio. Android - werkomgeving 1/6 Android - werkomgeving 1/6 Werkomgeving Android Studio Installatie Ga naar de volgende URL: http://developer.android.com/sdk/index.html Klik op de knop "Download Android Studio for Windows" om het programma

Nadere informatie

Besturing van de Miniatuurwereld RM-U. Gebruik van de Bootloader

Besturing van de Miniatuurwereld RM-U. Gebruik van de Bootloader Besturing van de Miniatuurwereld RM-U Gebruik van de Bootloader Auteur: Leon J.A. van Perlo Versie: 1.0 Datum: 24 december 2012 Release beheer Deze handleiding is van toepassing op Print o RM-U Rev 00

Nadere informatie