Schutz des Programmes beim FPGA mit externem Speicher?

Gast #298334
Lesenswert?

Hallo!

Ich setze für ein neues Projekt einen FPGA (Cyclone EP1C6) ein.
Funktioniert soweit auch alles sehr gut. Da die Daten aber in einem
externen Speicher abgelegt werden (bei mir ein EPCS1SI8), frage ich
mich, wie es mit dem Schutz der Schaltung gegen Nachbauer aussieht? Ein
zuvor zusätzlich eingeplanter CPLD soll nun wegfallen, dieser hätte die
Schaltung sonst sicher gegen Nachbauten geschützt.

Potentielle Nachbauer könnten doch sicher den externen Speicher des
FPGA auslesen, die Schaltung durchklingeln und nachbauen und das
ausgelesene Programm  auf den Nachbau programmieren. Gibt es da noch
eine Schutzmöglichkeit? Können eventuell auch Daten in das FPGA direkt
gebrannt werden (ev. eine Seriennummer oder ähnliches), die dann nicht
direkt auslesbar ist?

Wäre toll, wenn mir jemand zum Thema Softwareschutz bei externem FPGA
ConfMem etwas sagen könnte! Danke!

Grüße
André
Gast #298335
Lesenswert?

fast keine moeglichkeiten.

das einzige was ein bishen hilft is ein externes 'secure
microcontroller' der nach dem FPGA config dann "tricks" macht : sehr
viel bullshit ein und rausshiebt und dann vershclusselte sachen
reinpackt was wiederum irgendwie in FPGA gepruft wird. das ganze
datenstrom muss aber nicht repeating und voll als random aussehen.

Antti
Gast #298336
Lesenswert?

>Ein zuvor zusätzlich eingeplanter CPLD soll nun wegfallen, dieser
>hätte die Schaltung sonst sicher gegen Nachbauten geschützt.

Wie das? Wenn der CPLD irgendwann den FPGA konfiguriert, dann kann man
genauso mithören und die Daten wieder aufzeichnen.

Sicherheit gibt es meines Wissens nur, wenn eine Decryption-Engine im
FPGA eingebaut ist, oder wenn der FPGA Flash-basierend ist. Das
letztere scheint jetzt erst im Kommen zu sein, aber das ist nur eine
Frage der Zeit bis es nur noch solche gibt :-)
Gast #298338
Lesenswert?

...mir fällt da auch keine Lösung welche auf "verschlüsselung" oder
externen Bauteilen basiert. Schließlich kann die Schaltung immer
durchgeklingelt und der Datenstrom ausgelesen werden (auch wenn es mit
einem hohen aufwand verbunden ist und es für einen Entwickler keine
freude bereiten kann).

Eine Lösung wäre, einen BGA Typ als FPGA einzusetzen (=> Durchklingeln
unmöglich) oder um das Durchklingeln zu erschweren eine Mulitlayer
Platine
Gast #298340
Lesenswert?

@Daz

nene, so leicht ist das nicht mehr. Angenommen der BGA ist auf der
Top-Side, so können die Leiterbahnen auf dieser Seite nicht nur einer
Region von "Pins" zugeteilt werden. Auch Vias auf der Botton-Side
können können nur einer Region zugeordnet werden. => also "unmöglich"
die Pinbelegung herauszufinden (da wäre der Aufwand einer Neuentwicklung
geringer). (Ich gehe momentan von einer parallel Programmierung aus).
Auch die Zuordnung der Daten zum Datenpin ist dann nicht mehr
nachvollziehbar.

Natürlich die non-plus-ultra Lösung. Wäre ein BGA FPGA im
Multilayer-Design (parallel Programmierung)


=> ah genau noch eine Lösung, die Platine anschließend vergießen (oder
so :-))
Gast #298346
Lesenswert?

Hallo erstmal ;)
Gleich zu Anfang: ich habe zwar in meinem Studium mit FPGAs "spielen"
müssen, komme aber eher aus der µC / Informatik-Schiene !
Also wenn ich hier absoluten Müll ablasse, nicht böse sein ;)
Soweit ich mich noch erinnern kann sind in FPGAs auch ROMs
einarbeitbar/darstellbar, soweit korrekt ?
Also warum nicht im FPGA einen Bereich definieren, der einen internen
Key darstellt und gleich noch eine passende Decodierlogik dazu ?
Es würde ja reichen einen 8bit Wert mittels mehrfachen XOR über die zu
lesenden/schreibenden Datenwörter laufen zu lassen, um ein direktes
auslesen des Programms aus dem externen Speicher zu verhindern.
Diese Schaltung müsste fest in den FPGA gebrannt sein und direkt hinter
dem Bootloader oder wie es sich hier nennt liegen.
Mit "durchklingeln" ist wohl ein Testlauf gemeint der die interne
Verschaltung des FPGA aufzeigt ?
Da ich nicht genau weiß, wie das gemacht wird kann ich nur mutmaßen.
Also, wenn es eine Signalverfolgung ist, wäre es möglich durch
sogenanntes Wormholerouting (wer Transputer kennt und die C004
Linkswitches wird wissen was ich meine) nur eine bestimmte Signalfolge
in einen bestimmten Bereich des FPGAs zu leiten und alles andere
einfach drum herum. Die Idee dahinter ist einfach die, das ein
"Durchklingler" ja nicht die vollständigen Spezifikationen hat, oder
Irre ich hier ?
Ist nur eine Idee ;)
Markus
Gast #298347
Lesenswert?

Dann brauchst Du aber einen beschreibbaren, nichtfluechtigen und nicht
auslesbaren bereich im fpga fuer den key.
Die Xilinx Spartans haben sowas nicht. Bei den Virtexen gibt es welche,
die was aehnliches eingebaut. Die Konfigurationsdaten liegen dabei
kodiert im flash und werden beim laden automatisch von einer speziellen
"dekodierengine" im virtex entschluesselt.

Gruss,
       Thomas
Gast #298348
Lesenswert?

>Diese Schaltung müsste fest in den FPGA gebrannt sein und direkt
>hinter dem Bootloader oder wie es sich hier nennt liegen.

Und genau das "fest einbrennen" geht eben bei dem genannten
Cyclone-FPGA nicht. Es ist SRAM-basiert, und muss von aussen die
Konfigurationsdaten bekommen.

Wenn man einen FLASH-basierten FPGA benutzt (von Actel), hat man diese
Probleme nicht.
Gast #298349
Lesenswert?

OK,
wie gesagt ist es lange her ;)
Ich weiß nicht welcher Typ das war, aber man konnte ohne große Probleme
eine Logik fest verdrahten, indem Fuses gesetzt wurden.
Wenn natürlich alles immer dynamisch eingeladen wird funktioniert das
nicht.
Nur Frage ich mich dann, wie das Problem mit einem zweiten FPGA des
gleichen Typs gelöst war, der müßte doch auch erstmal von außen
programmiert werden ?
Nochmal nachgelesen, also ist der CPLD mit Flash bzw. Fuses
ausgestattet und der Cyclone hat nur SRAM ?
Dann bleibt wirklich nichts anderes übrig als einen weiteren Baustein
dazwischen zu schalten.
Sorry mein Fehler,
Markus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren