Forum: FPGA, VHDL & Co. Einsteiger FPGA für Parallelisierung von Kryptografischen Algorithmen


von Daniel R. (h3po)


Lesenswert?

Hallo zusammen,

Ich bin Student im Programm Bachelor IT-Sicherheit an der Ruhr-Uni 
Bochum und möchte mir die parallelisierung von Kryptografischen 
Algorithmen (symmetrische Verschlüsselung, ECC, Hashes) aneignen. Da 
eine potente ATI GPU bei mir schon vorhanden ist, hatte ich mich bei der 
Recherche zunächst darauf konzentriert. Die Einstiegshürden für 
OpenCL/Stream erscheinen mir aber etwas hoch.
Da am Horst-Görtz-Institut an der RUB bereits mit FPGA gearbeitet wird 
(http://www.copacobana.org/) und ich die Chance habe, im Sommersemester 
einen FPGA-Kurs mitzumachen, überlege ich nun in diese Richtung.

Bisher habe ich mir nur mit 8-Bit Architekturen die Füße nass gemacht, 
habe also keine Erfahrungen mit FPGA und stehe etwas verwirrt da, weil 
die meisten Tutorials sich wohl auf andere Anwendungsgebiete 
konzentrieren.

Ich suche nun ein Einsteiger-Board (~100€) mit einem geeigneten FPGA. 
Auf welche Merkmale muss ich achten?
Bisher habe ich folgendes zusammengetragen:

- Interface USB oder JTAG, Programmer ist vorhanden (BusPirate)
- Breite LUT könnten für symmetrische Verfahren von Vorteil sein
- I/O Bandbreite/Schnittstellen unwichtig
- SRAM-basiert mit kleinem uC als Coprozessor vorteilhaft (?)

In der angepeilten Preisklasse komme ich eigentlich nur auf drei 
Möglichkeiten, Altera Cyclone III/IV oder Xilinx Spartan-3A / Spartan-6.
Mir fällt es allerdings schwer, die Dinger zu vergleichen.
Bei der Copacobana kommen Spartan-3 mit 1000K-Gates zum Einsatz, die 
jeweils 4 DES Cores beherbergen und eine Verschlüsselung pro Takt bei 
200MHz machen. Ein vom Preis vergleichbarer Spartan-6 kommt (wenn ich 
das richtig abschätze) auf etwa das doppelte "Fassungsvermögen", ist 
aber nur mit 33MHz angegeben. Wie vergleicht man sowas sinnvoll? Und wie 
ordne ich einen Cyclone III oder IV da mit ein?

Boards:
- ZTex USB-FPGA Module 1.11a mit Spartan-6 XC6SLX9 (117€ + Versand aus 
DE)
- Digilent Basys2 250 Academic mit Spartan-3E-250 via Trenz (53€ + 
Versand aus DE)
- Xilinx Microboard LX9 mit Spartan-6 XC6SLX9 via Trenz (103€+ Versand 
aus DE)
- Noname mit Xilinx Spartan-3E XC3S500E via EBay (80€ + Steuern)
- Terasic DE0-Nano mit Cyclone IV EP4CE22F17C6N (60€ + Steuern)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Daniel R. schrieb:
> möchte mir die parallelisierung von Kryptografischen
> Algorithmen (symmetrische Verschlüsselung, ECC, Hashes) aneignen.
Das ist also Aufgabe A

Daniel R. schrieb:
> mit FPGA gearbeitet wird
> (http://www.copacobana.org/) und ich die Chance habe, im Sommersemester
> einen FPGA-Kurs mitzumachen, überlege ich nun in diese Richtung.
Das ist also Aufgabe B

Die Aufgaben A und B haben prinzipiell erstmal nichts miteinander zu tun 
(man kann Algorithmen auch anders parallelisieren und man kann FPGAs 
auch für was anderes nehmen).

Dann schaust du dir die Aufgabe B genauer an:
Dafür mußt du erst mal lernen was FPGAs sind, das ist Aufgabe B1.
Und du mußt eine Möglichkeit finden, deine Algorithmen ins FPGA zu 
bekommen. Eine Möglichkeit wäre da die Beschreibungssprache VHDL. Die zu 
Lernen wäre dann die Aufgabe B2.

Ich würde dir vorschlagen, deine Algorithmen erst mal in C auf der GPU 
laufen zu lassen. Und "nebenher" nächtens noch mit dem FPGA und VHDL 
rumzumachen.

Wenn du alles auf einmal willst, dann darfst du dich auf eine sehr sehr 
steile Lernkurve gefasst machen...

Daniel R. schrieb:
> Ein vom Preis vergleichbarer Spartan-6 kommt auf etwa das doppelte
> "Fassungsvermögen", ist aber nur mit 33MHz angegeben.
Woher kommt diese Angabe?

Ich rate dir: kauf irgendein FPGA-Board und fang damit an. Welches?
Sieh dich doch mal mit der suchfunktion hier im Forum um, und du findest 
z.B. den Beitrag "Entscheidung FPGA Einsteigerboard"

von Daniel R. (h3po)


Lesenswert?

Ok das mit dem Lernziel hätte ich vielleicht genauer ausdrücken sollen. 
Bisher mache ich vieles in Python und C und parallelisiere mit 
Threading. Jetzt würde ich gerne den nächsten Schritt machen und 
stattdessen die bisherige Thread-Logik von z.B. einem 
AES-Verschlüsselungsschritt auf einem FPGA implementieren.

Das Problem mit den bisherigen Threads hier, den Tutorials und Videos 
die ich mir angesehen habe ist, dass sich als Entscheidungsbasis viel 
auf Peripherie konzentriert wird.
Ich brauche keinen Grafik-Ausgang, LED, Taster, Codecs etc. All der Kram 
ist aber bei den einschlägigen Einsteiger-Boards immer dabei. Wenn ich 
mein erstes Hello World schreiben und eine LED zum blinken bringen will, 
kann ich diese problemlos selber am Board anbringen.
Deshalb wollte ich nochmal hier fragen, ob jemand evtl. ein Board/Eine 
FPGA Familie für den speziellen Zweck empfehlen kann.

von Thomas (Gast)


Lesenswert?

Für Studenten kann man eigentlich ohne weiteres die Digilent Boards 
empfehlen. Die bieten schon sehr viel für's Geld. Auch wenn du mit der 
Peripherie (noch) nichts anfangen kannst, liefert zB das Atlys 
ordentlich Ressourcen selbst für größere Projekte:

http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,836&Prod=ATLYS

von schorsch (Gast)


Lesenswert?

Auf der einen Seite hätten wir also OpenCL bzw. IL ("assembler") auf 
einer bekannten VLIW4/5 oder neuerdings auch MIMD-Architektur auf einer 
AMD-GPU die mit einem schnellen Bus an den Rest des Systems angebunden 
ist, selbst nochmal grosse mengen einfach verwendbarem RAM mitbringt, 
und letztlich verlangt das man "einfach nur" Code schreiben kann, den 
man dann bequem aus Visual Studio heraus mit dem APP Profiler und 
gDEBugger debuggen und untersuchen kann.

Auf der anderen Seite hätte man einen FPGA mit einer scheinbar völlig 
unbekannten Sprache, bei der man zudem noch komplett anders denken muss 
als bei Software, bei dem das Debuggen eine Qual ist, bei dem man sich 
dann noch grosse Gedanken machen muss wie zum Henker man denn überhaupt 
erstmal schnell genug die Daten in den FPGA und aus dem FPGA heraus 
bekommt (nutzlos den BRAM-Inhalt im Kreis verschlüsseln ist wohl kaum 
das Ziel), und wo alles nunmal Hardwardesign ist.

Wenn nun die Einstiegshürden für OpenCL (C Code mit Syntaxergänzungen 
schreiben können) bereits zu Hoch sind, und man bisher nur mit 8Bit 
herumgespielt hat, was genau bringt einen dann auf die Idee das man sich 
am noch unbekannteren Hardwaredesign versuchen sollte ?

von Harro (Gast)


Lesenswert?

Vielleicht wäre ein Softcore die richtige Brücke?

von j. c. (jesuschristus)


Lesenswert?

Irgendwie verstehe ich nicht so recht, was Du eigentlich willst. Willst 
Du Kryptographie betreiben oder willst Du FPGAs zu programmieren lernen?
Ich würde Dir raten
Dich an der Uni umzuhören, ob nicht jemand nen Hiwi braucht. So kann man 
da in die Forschung schnuppern und dann mal sehen was die da so nehmen 
und treiben. Auf Verdacht ein FPGA board kaufen wird eher nicht dazu 
führen, dass Du zum Kryptoexperten wirst.

von PittyJ (Gast)


Lesenswert?

Daniel R. schrieb:
> Ich brauche keinen Grafik-Ausgang, LED, Taster, Codecs etc. All der Kram
> ist aber bei den einschlägigen Einsteiger-Boards immer dabei. Wenn ich
> mein erstes Hello World schreiben und eine LED zum blinken bringen will,
> kann ich diese problemlos selber am Board anbringen.
> Deshalb wollte ich nochmal hier fragen, ob jemand evtl. ein Board/Eine
> FPGA Familie für den speziellen Zweck empfehlen kann.

Doch, das wirst du brauchen. Irgendwas wird nicht funktionieren, und 
dann bist du froh über jede Möglichkeit der Einflussnahme. Einfach mal 
ein Datenwort auf das LCD-Display anzeigen, und die Knöpfe zum Debuggen 
missbrauchen. Das erleichtert die Sache ungemein.

Und du solltest mit den Blink-, Entprell- und ähnlichen Beispielen 
anfangen, weil VHDL/FPGA doch sehr anders ist, und nicht mit einer 
normalen Programmiersprache vergleichbar ist.
Diese Unterschiede zu erkennen und anwenden zu können, das benötigt doch 
einiges an Erfahrung.

Meine Meinung: kauf ein Board mit vielen Gimmicks drauf. Setzt dich ein 
halbes Jahr hin, und versuche erst einmal diese Gimmicks zu bedienen. 
Wenn das geht, dann bist du bereit für AES/DES auf einem FPGA.

von Daniel R. (h3po)


Lesenswert?

schorsch schrieb:
> Wenn nun die Einstiegshürden für OpenCL (C Code mit Syntaxergänzungen
> schreiben können) bereits zu Hoch sind, und man bisher nur mit 8Bit
> herumgespielt hat, was genau bringt einen dann auf die Idee das man sich
> am noch unbekannteren Hardwaredesign versuchen sollte ?
Für OpenCL gibt es an der uni keine Literatur zum ausleihen, genau 3 
Bücher über CUDA im Präsenzbestand von den Bauingenieuren. Für Xilinx 
FPGAs gibts den Kurs nächstes Semester + Massenhaft Bücher.
Ich nehme an, deine Anmerkungen zum throughput beziehen sich auf die 
Anwendung von Verschlüsselung auf große Datenmengen. Das ist aber 
erstmal nicht von Interesse.

j. c. schrieb:
> Auf Verdacht ein FPGA board kaufen wird eher nicht dazu
> führen, dass Du zum Kryptoexperten wirst.
Mit Sicherheit nicht. Aber es ist doch nicht vergebens, auch wenn ich 
nicht direkt Profi werde.

@PittyJ: du hast Recht.

Allgemein: Ich hatte von VHDL eigentlich das Bild, dass es sich um _gar 
keine_ Programmiersprache handelt, sondern eben um eine 
Hardware-Beschreibungssprache.

Könnte bitte noch jemand was zu den 33MHz Taktraten bei Spartan-6 vs. 
250MHz bei Spartan-3 sagen?

von Daniel R. (h3po)


Lesenswert?

Nachtrag:
j. c. schrieb:
> Irgendwie verstehe ich nicht so recht, was Du eigentlich willst. Willst
> Du Kryptographie betreiben oder willst Du FPGAs zu programmieren lernen?
"Kryptografie" und "Kryptanalyse" bekomme ich im Laufe des Studiums noch 
beigebracht. In der Zwischenzeit mache ich (und eine handvoll 
Kommilitonen) mir einen Spaß daraus, die behandelten 
Verschlüsselungsverfahren und Angriffe zu implementieren. Manche Sachen 
sind aber selbst mit Threading auf einem Quadcore schlecht machbar. Aus 
diesem Grund wollte ich mal mit anderen Architekturen experimentieren.
Der Anstoß dazu war vor kurzem eine Aufgabe, bei dem ich eine 14-Megabit 
Zahl Faktorisieren musste, die aus den kleinen Primfaktoren 2...101 
bestand. Mit GMP war das in etwa 2 Tagen erledigt. Wäre nun z.B. 
interessant, einen riesigen divider per FPGA zu implementieren und mal 
mit Radix 2^1024 anstatt 2^64 zu rechnen ;)

--

Bitte seht mir meine Naivität nach und verkrampft euch nicht so bei dem 
Versuch, mir klar zu machen wie unsinnig es ist was ich hier mache. 
Andere Leute aus meinem Studiengang beschäftigen sich grade mit 
Battlefield 3 und Skyrim.

von j. c. (jesuschristus)


Lesenswert?

Hey ne, kein Ding. Ich habe Dich schon plastisch vor mir gesehen, als 
ich Deinen Eingangspost gelesen habe. Mir ging es damals genauso. Ich 
habe die Nächte durchgelötet und früh 2 Stunden vor der Vorlesung tat 
die Schaltung dann. Geile Zeit.
Aber woran ich mich auch erinnere, ist die grenzenlose Naivität die ich 
damals hatte. Mangels der Erfahrung, es wirklich getan zu haben, habe 
ich mir viele Sachen einfach zu simpel vorgestellt. Mir ging es damals 
mit DSPs so. Daher dachte ich, es hilft Dir vielleicht ein wenig, wenn 
Du versuchst die Sache strukturiert anzugehen. Gleich nen humanoiden 
Roboter bauen geht nicht, man muss erstmal ne LED zum leuchten bringen 
;-)
Interessant für Dich ist vielleicht eher noch als FPGA das 
GPU-Computing, aber das machst Du sicher schon...

von Clemens M. (panko)


Lesenswert?

Eine gewisse Naivität ist es aber auch, die einen durch das Studium 
treibt.
Halte es für einen guten Ansatz einfach mit einem Board anzufangen. Ich 
habe mich damals leider nicht mit fpga beschäftigt und die Denkweise 
fällt mir nun schwer. Ist gute 15 Jahre her.
Als Board habe ich mir privat eines von Digilent gekauft. Nexys2 mit 
einem S3E. Das finde ich Klasse auch Preis/Leistungsmäßig (bei dem sehr 
begrenzten Zeit und Wissensaufwand den ich rein stecken kann)
Ob ein S3 oder ein S6 für deine Anwendung gekauft werden sollte, kann 
höchstens jemand anders sagen, die Frage wie wahrscheinlich überhaupt 
Verschlüsselungen mit dem ganzen Datenaustausch darauf laufen werden, 
kannst du nur selber beantworten. Will sagen wenn du vor dir selber 
nicht ganz sicher bist, so weit zu gehen wäre für mich der Preis höher 
als Leistung einzustufen.

Abgesehen davon sind doom und co. nebst dem übrigen abstrakten 
Sudentenleben auch 'geile' Erfahrung, die ich nicht missen möchte. Und 
die für mich auch den Wert des Studierens ausmachen.
Was daran verwerflich sein soll erschließt sich mir nicht. Wir hatten ja 
schon öfter die Frage soll ich studieren und lohnt sich studieren. 
'lohnen' ist ein weiter Begriff.

von Thomas (Gast)


Lesenswert?

Daniel R. schrieb:
> Könnte bitte noch jemand was zu den 33MHz Taktraten bei Spartan-6 vs.
> 250MHz bei Spartan-3 sagen?


Dazu musst du mal erzählen woher du die Angabe hast.
Die Taktrate hängt immer vom Design ab. Verwendet man auf beiden FPGAs 
das gleiche Design wird der Spartan6 auf Grund niedriger Durchlaufzeiten 
der Schnellere sein.

von Christian R. (supachris)


Lesenswert?

Außerdem hat der Spartan 6 6-Bit LUTs, was in punkto Logik-Laufzeit 
nochmal einiges bringen kann. Eigentlich ist der Spartan 6 dem Spartan 3 
immer überlegen. Mir fällt auf Anhieb nichts ein, was beim Spartan 3 ein 
Vorteil wäre.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian R. schrieb:
> Mir fällt auf Anhieb nichts ein, was beim Spartan 3 ein Vorteil wäre.
Man sollte beim Spartan6 beim Initialisieren von Signalen/Variablen 
aufpassen, dass der selbe Wert verwendet wird, wie für einen möglichen 
Resetwert. Sonst wird zusätzliche Logik nötig, weil diese 
Reset/Preset-Pfade dann nicht doppelt verwendet werden können.
Sowas wäre also schlecht:
1
 signal  cnt : integer := 0;  -- Initwert anders als ...
2
3
 process begin
4
    wait until rising_edge(clk);
5
    if reset='1' then
6
       cnt <= 345;            -- ... Resetwert --> zusätzliche Logik nötig  :-o
7
    else 
8
       cnt <= cnt+1;      
9
    end if;
10
 end process;

Aber wenn man sowieso keinen Reset verwendet (wozu auch), dann ist diese 
Einschränkung hinfällig.

von Strubi (Gast)


Lesenswert?

Was wäre denn mit folgendem Ansatz:

1. Erst mal alles herstellerunabhängig im Trockendock durchsimulieren 
(GHDL ist dazu sehr wegen der VHPI-Schnittstelle zu empfehlen, siehe 
auch 'ghdlex' im Netz)
2. Resourcen abschätzen: Wieviele Gates (-> welches FPGA), welche 
Interfaces (->welches Board) sind nötig?
3. Mit den herstellerspezifischen freien Tools (Webpack, Quartus, usw.) 
nochmal bauen um (2) zu verifizieren
4. Ab damit in die Hardware, debuggen, und nochmal debuggen (das kann 
dauern)

Im Endeffekt ist oft das ursprünglich angepeilte Projekt immer eine 
Nummer zu gross für einen alleine, aber ein guter Dozent wird möglichst 
zusehen, einzelne Studenten nicht zu verheizen. Deswegen ist eine reine 
Simulationsarbeit mit guter Test-Szenario-Abdeckung u.U. schon ein 
ausreichender "proof of concept", bei dem man sich auf die 
Aufgabenstellung konzentrieren kann.

Gruss,

- Strubi

von Daniel R. (h3po)


Lesenswert?

Also erstmal zu der Verwirrung mit den Taktraten:
Ich habe mich dabei auf die Angaben der Farnell-Suchmaschine bezogen. 
Muss natürlich nicht stimmen, ich habe nicht sämtliche Datenblätter 
durchgelesen.
Jedenfalls fängt die Angabe für "Max. Betriebsfrequenz" bei den 
Spartan-3A bei 250MHz an, bis jenseits der 300MHz. Bei den Spartan-6 
steht (fast) überall 33MHz. Als ich grade nochmal nachgeschaut habe, 
tauchten da dann noch 4 einzelne Spartan-6 auf, die mit 450MHz angegeben 
sind.
Ob es sich dabei um einen Fehler handelt, können diejenigen unter euch 
entscheiden, die die Datenblätter verstehen.

Strubi: Ich habe keinen Zwang und auch kein Projekt bzw. "Aufgabe".

Ich habe inzwischen eine Antwort bezüglich des FPGA-Kurses bekommen, und 
es wäre wohl eine absolute Ausnahme wenn ich da als Bachlor mitmache. 
VHDL-Kenntnisse werden vorausgesetzt. Da der Kurs schon Anfang April 
losgeht und für mich dazwischen noch die Klausuren liegen, wird das also 
wohl nichts.

Herzlichen Dank für eure Antworten.
Ich werde mir für meine privaten Experimente wohl eins der einschlägigen 
Einsteigerboards kaufen. Mir gefällt das Terasic DE0-Nano eigentlich am 
besten, werde mal schauen wie ich das hier in Deutschland bekomme. Habe 
jedenfalls keine Lust mal wieder zum Zoll laufen zu müssen.

von Christian R. (supachris)


Lesenswert?

Naja, die Angaben bei Farnell sind sinnlos. Schau ins Datenblatt, da 
steht beim Spartan 6 beispielsweise:

F MAX Global clock tree (BUFGMUX) LX devices
400         400         375         250        MHz

Von links nach rechts Speedgrades -3 -3N -2 -1L

BlockRAM und DSP Einheiten laufen aber weniger schnell. Aber auch 
jenseits der 250MHZ Marke bei -2 oder schneller.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.