Etikettarkiv: FPGA

Wired gräver efter Bitcoins med hårdvara

(Uppdaterad med länk till artikel om KNCminer.)

I en kommentar till en tidigare postning om bitcoins pekade Robert Andersson på en artikel hos Wired. Wired testar just nu en dedikerad Bitcoin-grävare från Butterfly Labs.

Butterfly Labs Bitcoin-grävare
Butterfly Labs Bitcoin-grävare. En snygg liten maskin.

I artikeln sätter Wired fingret på ett viktigt fenomen med Bitcoin – att det blir svårare och svårare att gräva efter bitcoins. I början räckte det med en vanlig dator. I dag krävs det massiva system av datorer, helst utrustade med kraftiga grafikprocessorer.

Därmed går kostnaden för att gräva upp – både att anskaffa utrustningen och att driva utrustningen, i första hand energiförbrukning. Ett sätt att minska den rörliga kostnaden är att använda allt mer effektiv, dvs specialiserad hårdvara. Det finns i dag både FPGA- och ASIC-baserade bitcoingrävare (Wireds maskin från Butterfly Labs är en sådan maskin). Gizmodo har en artikel som visar lite hur Bitcoin-utrustningen har utvecklats på några få år. Den här gamla utrustningen är inte längre speciellt konkurrenskraftig:

Galet stor Bitcoinmaskin
En system för att gräva Bitcoins som borde ge sysadmin magsår.

Några som håller på och utvecklar FPGA-baserade bitcoingrävare är svenska KnCMiner. Daniel Goldberg och Linus Larsson har skrivit en mycket intressant om KnCMiner och deras maskiner.

Men vad göra för att vara mer effektiv än system med specialiserade Bitcoin ASIC:ar? Lägga kostnaden på någon annan. Tyvärr börjar det dyka upp flera tecken på att Botnets används även för att gräva efter Bitcoins. Tidigare i år fick ett Botnet kallat ZeroAccess gräver efter Bitcoins med hjälp kapade datorer. En synnerligen tråkig om än egentligen inte oväntad utveckling med Bitcoins.

Sedan påpekar Wired och Robert att hela systemet med Bitcoins bygger på säkerheten hos hashfunktionen SHA-256. Och så är det, om vi snabbt kan forcera SHA-256 kommer Bitcoin-systemet att kollapsa. Men då har vi troligen större problem med den digitala säkerheten i vårt samhälle och på Internet än att en digital valuta faller samman.

Ny version av SipHash-core med högre prestanda

Den öppna hårdvaruimplementation av den kryptografiska hashfunktionen SipHash som Secworks utvecklat finns nu i en ny version.

I den nya versionen har antalet adderare dubblerats så att den den inre iterationen nu kan utföras på en cykel. Detta gör att antalet cykler för att bearbeta ett meddelande om upp till 8 Bytes (ett block) minskat från 28 till 10 cykler. För långa meddelanden går latenstiden mot 0,5 cykler/Byte.

Storleksmässigt har SipHash-core krympt något och kräver nu Alteras Cyclone IV-teknologi 1088 LE:s, en minskning med 25%. Däremot har maximala klockfrekvensen minskad till 90 MHz. Detta gör att SipHash-core i Alteras teknologi för långa meddelanden kan hantera datatakter på mer än 1 Gbps.

Altera Cyclone IV

Den nya versionen finns i det publika repot för SipHash-core hos Gitorious.

Bunnie bygger en laptop

Andrew Bunnie Huang, är en av världens mest kända hårdvaruhackers, känd bland annat för att vara den person som hackade Xbox (och skrev en bok om det).

Bunnie
Bunnie

Ett av Andrews senaste kända projekt är att bygga en egen laptop. Laptopen är byggd runt en ARM A9-processor med fyra kärnor. Här är en bild på moderkortet som i dag kan boota upp Linux:

Bunnies moderkort.
Moderkortet, men mååånga portar.

Förutom det man kan förvänta sig av stöd för hårddiskar, minne, tangentbord etc har Bunnies laptop en massa roliga saker som man inte brukar hitta i en vanlig laptop. Här är en lista:

mini PCI-express slot (for blob-free wifi, bluetooth, mobile data, etc.)
UIM slot for mPCIe mobile data cards
Dual-channel LVDS LCD connector (up to QXGA (2048×1536) @ 60Hz resolution) with USB2.0 side-channel for a display-side camera
Resistive touchscreen controller (note: captouch displays typically come with a controller)
1.1W, 8-ohm internal speaker connectors
2x USB2.0 internal connectors for keyboard and mouse/trackpad
Digital microphone
3-axis accelerometer
header for optional AW-NU137 wifi module

External ports:
HDMI
SD card reader
headphone + mic port (compatible with most mobile phone headsets, supports sensing in-line cable buttons)
2x USB 2.0 ports, supporting high-current (1.5A) device charging
1Gbit ethernet

“Fun” features:
100 Mbit ethernet — dual Ethernet capability allows laptop to be used as an in-line packet filter or router
USB OTG — enables laptop to spoof/fuzz ethernet, serial, etc. over USB via gadget interface to other USB hosts
Utility serial EEPROM — for storing crash logs and other bits of handy data
Spartan-6 CSG324-packaged FPGA — has several interfaces to the CPU, including a 2Gbit/s (peak) RAM-like bus — for your bitcoin mining needs. Or whatever else you might want to toss in an FPGA.
8x FPGA-driven 12-bit, 200ksps analog inputs
8x FPGA-driven digital I/O
8x FPGA-driven PWM headers, compatible with hobby ESC and PWM pinouts — enables direct interfacing with various RC motor/servo configurations & quad-copter controllers
Raspberry-Pi compatible expansion header
13x CPU-driven supplemental digital I/Os
3x internal UART ports

Att det sitter en hyggligt stor och kapabel FPGA kopplad direkt till CPU:n öppnar upp för massor med roliga möjligheter, inte bara att gräva efter Bitcoins.

Än så länge finns det inget skal, tangetbord eller skärm så laptopen är just nu ett kort på Bunnies labbord. Men projektet har väckt stor uppmärksamhet och det pratas om Crowdfunding för att ta fram det som behövs för att tillverka färdiga laptops. Och naturligtvis kommer Bunnie att släppa alla designdokument för sin design fri så om inte han själv tar fram en riktig laptop finns det möjligheter för andra att göra det.

Riktigt kul pryl, och inte minst för att labba på eller använda ute i fält för datainsamling skulle den här laptopen kunna vara riktigt, riktigt användbar. Jag vill ha en. Eller två.

OpenCL för FPGA-konstruktion

Uppdaterat med referens till artikel om OpenCL från Altera.

En ny version av OpenCL

För ett par veckor sedan släppte organisationen Khronos version 1.2 av OpenCL. OpenCL är en utökning av programspråket C99 samt ett ramverk med verktyg och bibliotek. Med OpenCL är det möjligt att bygga program som utnyttjar parallell beräkningskapacitet i processorer (CPU), grafikprocessorer (GPU) m.m. Inte minst viktigt är att OpenCL gör det möjligt att programmera heterogena system, dvs system där det finns olika typer av processorelement.

Kärnan i OpenCL är möjligheten att skapa segment kallade kernels av kod och data koden skall bearbeta. Det är upp till dig som programmerare att beskriva hur de parallella operationerna ska utföras, vilka dimensioner problemet ska ha etc. När väl din kernel är skapad och kompileras genereras kod som körs på den parallella hårdvaran samt sekventiell kontrollkod avsedd för en kontrollprocessor. Kontrollkoden ser till att skicka kernel och data till den parallella hårdvaran, får kernel exekverad och tar slutligen emot resultatet.

Den vanligaste användningen av OpenCL är för att programmera GPU:er i datorer. OpenCL börjar även användas för att programmera den ökande mängden processorkärnorna i vanliga processorer, nätverksprocessorer och digitala signalbehandlingsprocessorer (DSP). Inte minst är detta intressant i högpresterande inbyggda system som basstationer för mobilsystem.

För den som vill titta närmare på OpenCL 1.2 finns specifikationen här (pdf).

Sponsorer av OpenCL är företag som Apple, AMD, Intel och IBM, men även Ericsson stödjer Khronos och OpenCL.

En ny version av OpenCL är egentligen inte så intressant. Det som fick mig att reagera på EE Times artikel var istället att företaget Altera officellt börjat stödja OpenCL. Altera tillverkar inte processorer – hårdvara som har en fix instruktionsuppsättning man kompilerar sin kod till. Altera bygger FPGA:er.

Sidospår om FPGA-konstruktion

En FPGA är en digital krets fylld med små byggblock, ledningar och kopplingselement. Hur byggblocken fungerar och hur dom kopplas samman via ledningar och kopplingselementen styrs av bitar lagrade i kontrollregister. Genom att skriva ner en konfiguration i kontrollregistren går det att få FPGA:n att implementera olika digitala funktioner. Gränssnitt för Ethernet, MP3-avkodare, filter för bildbehandling och faktiskt hela processorer och digitala system går att implementera i en modern FPGA. Man kan till och med implementera en FPGA i en FPGA.

Poängen med en FPGA är att den är väldigt parallell med massor av små byggblock, men det finns ingen egentlig instruktionsuppsättning eller schemaläggare som styr hur exekveringen går till. Det är en ren digital struktur och det är upp till dig som användare att skapa den konfiguration du behöver. Detta arbete är mer likt traditionell digital konstruktion än att programmera en processor, även om du använder assembler.

Normalt används konstruktionsspråk som Verilog, SystemVerilog (SV) eller VHDL. Den generella abstraktionsnivån i dessa konstruktionsspråk är relativt låg. Så länge som jag arbetat med digital konstruktion (sedan mitten av 1990-talet) har det dock funnits en strävan, en trend mot att försöka lyfta abstraktionsnivån.

Det har kommit och gått en massa försök med högnivåsyntes till nya språk som SystemC. En i min åsikt gemensam egenskap med dessa lösningar har varit en stor komplexitet och oförmåga att leva upp till de produktivitetsökningar man utlovar. Genom att gräva ner sig i schemaläggningar, delning av resurser, optimeringar etc har verktygen blivit komplexa, svåra att arbeta med och kräver mycket datorresurser.

Altera C2H

En som tog en liten annan väg var faktiskt Altera som för några år sedan lanserade C2H. C2H är ett verktyg för att ta vanlig C-kod och konvertera till digital hårdvara. Och det som gör C2H så smart, var att de är så dum.

Du som konstruktör får hela ansvaret att skriva din C-kod så att C2H kan fatta hur motsvarande hårdvara ser ut. Använder du 17 multiplikationer i din funktion får du 17 multiplikatorer. Vill du använda färre multiplikationer får du skriva om din kod så att samma multiplikationsuttryck används flera gånger.

Å andra sidan är C2H snabb. På några minuter kan du generera hårdvara och få återmatning. Eftersom C2H även är en del av utvecklingsverktygen för Alteras processor Nios II kan du dessutom testa att köra koden som ren SW, profilera din kod och sedan försöka konvertera de kritiska funktionerna till hårdvara.

Den magi som finns i C2H är kopplingen mellan hårdvaran och den kontrollkod som skapas för Nios II-processorn som krävs för att styra den genererade hårdvaran och använda den i resten av applikationen.

För den som vill veta mer finns det utbildningsmaterial och användarguide för C2H. Det finns även ett exempel på acceleration av beräkning av Mandelbrotmängder. Den arkitektur som används ser ut så här:

Arkitekturen hos Alteras Mandelbrotsberäknare.

I exemplet nås 60 gångers prestanda jämfört med en ren SW-implementation.

Acceleratorn blir alltså en applikationsspecifik stödprocessor till processorn. Men det går att bygga coprocessorer som är kapabla att själva läsa och skriva till minnen och arbeta självständigt.

FPGA – den nya OpenCL-arkitekturen

När jag tittar igenom det material från Altera som finns om OpenCL får jag samma känsla som när jag såg C2H första gången.

Du som konstruktör får ansvaret för att styra vad som ska bli parallell hårdvara och att det data som skall bearbetas finns i rätt format etc. Och kanske det viktigaste – att försöka parallellisera de delar som spelar roll för applikationen. Den magi, infrastruktur får att få systemet att hänga ihop sköter Altera och OpenCL.

Att ha FPGA som målplattform för OpenCL öppnar upp för nya typer av heterogena arkitekturer med mulicore, GPU och FPGA:er blandat. En FPGA kommer aldrig att komma upp i de klockfeekvenser som en GPU snurrar i så för vissa applikationer kommer en FPGA inte att ersätta CPU eller GPU.

(En tumregel att en FPGA når en tiondel av klockfrekvensen som en direktimplementerad digital krets. Den funktion som implementeras kräver dessutom ungefär tio gånger så mycket digitala grindar i en FPGA.)

Fördelen med FPGA:n är istället att den är en generisk digital struktur med mängder av “processorelement”. Antalet element och hur elementen fungerar kan direkt anpassas (skapas) för att processa en OpenCL-kernel. Detta gör att du kan få mycket högre prestanda i en mer flexibel arkitektur. Och precis som med C2H kan du med OpenCL alltid pröva, och analysera din kod som ren SW-lösning på en multicore-maskin eller på GPU innan du konverterar valda delar till hårdvara.

Det finns en bra preso om OpenCl för FPGA (pdf) av Desh Singh från Altera som visar hur Altera tänker sig att det ska fungera. Från preson är det klart att Altera stödjer både system med FPGA:er på kort i traditionella datorer och system där även processorn implementeras i FPGA:n.

Det finns även en mycket bra artikel från Altera om hur OpenCL är tänkt att fungera (pdf). Artikeln visar hur OpenCL används för att skapa parallella instanser av kernelspecifik logik som processar data. Instanserna styrs sedan av kontrollkod som körs på mjuka processorer i FPGA:n (exempelvis Nios), hårda ARM-kärnor (Altera har FPGA:er med ARM-kärnor) eller x86-processorer.

I artikeln finns även ett prestandatest i form av en Black Scholes. Enligt artikeln är själva OpenCL-koden är på ungefär 300 rader och är porterbar till CPU, GPU och FPGA.

en fyrkärnig Intel Xeon-processor ger 240 miljoner simuleringar/s, en GPU 950 miljoner/s och Alteras Stratix IV-krets 2200 miljoner simuleringar/s.

Slutsatser

För hårdvaruarkitekturer är det en gammal sanning av det är programmeringsverktygen som avgör. Oavsett hur bra, snygg och smart din arkitektur är, kommer ingen att vilja använda den om det inte finns verktyg – program som gör att det effektivt går att programmera applikationer för arkitekturen. Detta gäller microcontrollers, desktopprocessorer, DSP:er, närverksprocessorer. Och FPGA:er.

Jag tror att Altera med satsningen på OpenCL visar att man faktiskt fattar detta och ger sina kunder och användare nya sätt att bygga hårdvara som implementeras i deras FPGAer. Själva poängen är ju för Altera att sälja fler FPGA:er – och gärna genom att hitta nya marknader och kunder än de som traditionellt bygger egna digitala konstruktioner.

Jag ser inte OpenCL som ersättning för C2H. Visst, du kan bygga motsvarande hårdvara med C2H som OpenCL, men egentligen är verktygen för olika typer av problemdomäner.

OpenCL ancvänder du för att bygga parallell hårdvara för att maximera prestanda i problem där du parallellisera upp delberäkningar. C2H använder du för att bygga systemet runt din parallella hårdvara.

När du byggt din AES-kernel till din parallella AES-kryptoknäckare i OpenCL använder du C2H för att bygga paketprocessing och koppla Gbit Ethernet-gränssnitten med AES-motorn. Slutligen lägger du kontrolllkod i Nios II-processorn för att få allt att arbeta ihop.

Heterogent. Inbyggt. I en FPGA-krets. Snyggt.


Testchip för SHA-3-finalisterna

För några dagar sedan meddelade forskare vid Center for Embedded Systems for Critical Applications, en del av ECE-labbet på Virginia Tech, att dom färdigställt ett testchip som implementerar finalisterna i hashtävlingen SHA-3.

Kretsen NIST SHA-3 ASIC @VT är tillverkad i en 130nm-process från IBM med cellbibliotek från Artisan (numera en del av ARM). De algoritmer som implementeras är de fem SHA-3-finalisterna BLAKE-256, Grostl-256, JH-256, Keccak-256 och Skein512-256. Dessutom inkluderar kretsen en referensimplementation av SHA-256. Layouten på kretsen ger en bra bild av kostnaden i hårdvara mellan de olika kandidaterna:

Layout av SHA-3-chipet
Layout av SHA-3-chipet

Blake ser ut att vara den algoritm som är närmast SHA-256 i storlek och Gröstl sticker ut som klart mest kostsam. Nästa steg är att se vilken prestanda algoritmerna ger. Tidigare resultat har visat att speciellt Keccak varit riktigt effektiv i hårdvara. Det viktiga är att den blivande SHA-3-algoritmen helst skall ge minst samma prestanda som SHA-256 i hårdvara och dessutom kosta lika mycket eller mindre. Som det ser ut just nu är det ingen kandidat som är billigare i hårdvara.

För den som är nyfiken på testchipet finns det ett datablad att läsa. Det finns även komplett källkod och utvecklingsprojektfiler för att implementera samtliga kandidater i andra omgången (som ledde fram till NISTs uttagning av de fem finalisterna) i FPGA-teknologi.

Fungerande attacker mot kryptoskydd i FPGA

Bruce Schneier har bloggat om fungerande, dvs praktiskt genomförbara attacker mot kryptoskyddet i FPGA:er från Xilinx.

En RAM-baserad FPGA (Field Programmable Gate Array – en digital krets vars funktion kan bestämmas efter att kretsen tillverkats) behöver konfigureras varje gång den startas (strömsätts). Konfigurationen består av en bitfil, dvs en hög med bitar som definierar kretsens konfiguration. Bitfilen laddas in från ett för FPGA-kretsen externt minne, oftast ett litet FLASH-minne.

Eftersom FPGA-kretsarna utan sin konfiguration är identiska (iaf i så motto att två kretsar av samma modell) är det enkelt att kopiera en konstruktion genom att läsa ut bitfilen från det externa minnet.

För att förhindra detta erbjuder Xilinx precis som andra leverantörer av RAM-baserade FPGA:er ett kryptobaserat kopieringsskydd. Bitfilen krypteras när den genereras. Internt i FPGA:n finns sedan en kryptomotor, oftast baserade på symmetriska blockkrypton som 3DES eller AES samt register för att hålla kryptonyckeln. Nyckeln går att skriva ner till registren men går inte att läsa ut. Utan korrekt kryptonycklar kommer bitfilen när den laddas in inte att blir korrekt. Detta gör att en kopierad bitfil inte går att använda och produkten är skyddad.

Det forskarna Amir Moradi, Alessandro Barenghi, Timo Kasper och Christof Paar nu har visat är att för Xilinx FPGA-familj Virtex-II Pro går det enkelt att genomföra en sidoattack som avlöjar de interna kryptonycklarna. Författarna säger sig även kunna manipulera bitfilen och den vägen introducera ny/förändrad funktionalitet. Författarna skriver:

After measuring the power consumption of a single power-up of the device and a modest amount of o -line computation, we are able to recover all three di erent keys used by its triple DES module. Our method allows extracting secret keys from any real-world device where the bitstream encryption feature of Virtex-II Pro is enabled.

As a consequence, the target product can be cloned and manipulated at will of the attacker. Also, more advanced attacks such as reverse engineering or the introduction of hardware Trojans become potential threats. As part of the side-channel attack, we were able to deduce certain internals of the hardware encryption engine.

Nu är Virtex-II Pro en relativt gammal FPGA-familj så man skulle kunna tycka att detta inte är så intressant.

Virtex-II Pro

Men författarna har även publicerat artikeln On the Portability of Side-Channel Attacks – An Analysis of the Xilinx Virtex 4 and Virtex 5 Bitstream Encryption Mechanism. I denna artikeln visar man att även nyare FPGA:er, som använder AES, också är känsliga:

We demonstrate sophisticated attacks on off-the-shelf FPGAs that go far beyond schoolbook attacks on 8-bit AES S-boxes. We were able to perform the key extraction by using only the measurements of a single power-up.

Access to the key allows cloning and manipulating a design, which has been encrypted to protect the intellectual property and to prevent fraud.

För mig som sysslar med säkerhet och hårdvara är detta kanonspännande. Hur det interna bitformatet för en FPGA ser ut (dvs vilka bitar som styr vad) är normalt sett inte tillgängligt. Och det kryptografiska skydd av bitfilen leverantörerna erbjuder har låtit väldigt säkert och bra – klart starkare än det rent fysiska skydd som microcontrollers använder för att skydda ROM-innehållet.

Samtidigt har det saknats vital information om HUR skyddet faktiskt fungerar. På vilket sätt genereras nycklarna? (iaf en leverantör säger explicit att dom tranformerar nycklen, men inte hur detta sker). Vilken kryptomod används? (det är blockkrypton som används och då krävs det en kryptomod). Hur har implementationen testats för riktade attacker? Detta är några frågor jag försökt få svar på. De artiklar som nu publicerats kastar en del ljus på hur det faktiskt fungerar.

Nu väntar vi bara på reaktionerna från Xilinx (och dess konkurrenter).