Hallo Zusammen,
ich möchten gerne für einen Chinesen Binarys (nicht Quellcode) für
STM32 Boards pro Stück verkaufen. Ich selbst kann die Software
einspielen
(mit Kopierschutz), allerdings sollen auch Kunden später die Software
aktualisieren können...
Doof wäre natürlich wenn der Chinese 3 Stück bezahlt und 30 verkauft,
nachdem er die Binary hat.
Wäre folgendes sinnvoll?
1. Beim ersten Aufspielen der Software bekommt jedes Board
eine Etikette mit einer ID (z.B. "A456A":)), die auch im
Flash-ROM steht und im EPROM steht eine zugehörige
Hidden-ID (z.B. "B456B")
2. ID im Flash und Hidden-ID stehen in irgendeinem Zusammenhang,
kann ich mir ja ausdenken. Ob der Zusammenhang
stimmt wird bei jedem Start überprüft.
3. Kunden die die Software Updaten wollen, gehen zu
Projekt-Homepage, geben Ihre ID an und bekommen eine
Binary mit dieser ID zum bestehend Hidden Key.
(in der Binary kann man das ja noch maschinell
reinschreiben, wenns immer an der gleiche
Stelle steht. Die Homepage hat eine Datenbank
aller ID's und Hidden-IDs).
Dadurch würde man
1. Auf der Homepage bemerken, wenn plötzlich viele Kunden
mit der gleichen ID die Software updaten wollen.
2. Das unerlaubt Verfielfältigen des Boards erschweren.
EEprom darf man nicht vergessen. (kann man den
überhaupt beschreiben mit normalen Programmiergeräten?)
Oder gibt es andere/bessere Wege so etwas zu berwerkstelligen?
Nur Vertrauen wär nicht gut
Vielen Dank
Jens
Jens schrieb:> Oder gibt es andere/bessere Wege so etwas zu berwerkstelligen?
Nicht beim Chinesen herstellen lassen?
Wer die Herstellung aus der Hand gibt, kann nie sicher sein, wo die
Daten überall hinwandern.
Jens schrieb:> hallo, die herstellung kann ich nicht übernehmen.
Dann beschreib doch bitte mal ein bisschen mehr, was du willst.
Suchst du eine reine Software-Implementation, oder lässt sich mit der
Hardware tricksen (EPROM, burrowed Widerstände, versteckte Prüfleitung
in Multilayer,...)
Wer soll die Hardware produzieren?
Software selbstgestrickt?
:-)
Ich würde gar keine Zahlen verstecken, sondern irgendwelche Takte zählen
oder Zeiten prüfen, Spannung abfragen, Prüfzahlen bilden, notfalls
EEPROM frisch beschriften (damit er als "Spezialteil" sichtbar ist)...
Ein Programm haben findige Studenten selbst mit Zettel und Codetabelle
in wenigen Tagen geknackt. Laufzeiten optimieren ist nicht nicht ganz so
einfach.
Jens schrieb:> Oder gibt es andere/bessere Wege so etwas zu berwerkstelligen?
Die Flash-Routinen für das Software-update könnten ja schon beim
Prozessorhersteller einschließlich Krypto-Algorithmus aufgespielt
werden. Diese dürfen danach nicht mehr von außen lesbar sein.
(Partieller Zugriffsschutz).
Liefern brauchst Du dann nur die Prozessoren und das Signierte Binary.
Wenn die Signatur nicht zum geschützten Block paßt wird die SW nicht
ausgeführt.
Hilft natürlich nur solange wie der Prozessorhersteller und Dein
Hardwarelieferant nicht kooperieren.
Gruß Anja
Der "Chinese" ist ja nicht doof, so ein Trivial-Verfahren ist in ein
paar Minuten erledigt:
Er geht zu Deiner Homepage, und lässt sich zwei Binaries mit
verschiedenen IDs generieren. Die beiden Binaries vergleicht er und
findet so die Stelle mit der ID.
Nun hat er es ganz einfach und schaut mit dem Disassembler nach, wo
diese ID abgefragt und verglichen wird. In der Nähe des Vergleichs steht
ein bedingter Sprung. Diesen bedingten Sprung ändert der schlaue Chinese
in einen festen Sprung oder in ein Nop, je nach dem.
Ergebnis: Eine Software der die ID schnurz piep egal ist.
So hat man schon vor 20 Jahren Software gecrackt.
vorab: es gibt keinen perfekten kopierschutz..
wenn du es so machst wie du beschreibst, wird der hersteller schnell
merken wo die "hidden" id ist und schon vor einer update.bin auf den
zusammenhang kommen.. mit ein wenig assambler wird er einen
"kopierschutz" überspringen..
du könntest das nur machen wenn du die boards programmierst, ohne das
der hersteller die bin bekommt.
so hast du nicht nur die gewissheit das er nicht mehr macht als
lizenziert, und die welt ist viel einfacher...
wenn es so sein muss kannst du,
die programmierapplikation, die der hersteller zum programmieren seiner
boards nutzt, selber liefern.
stm32 µc haben eine uniqueid viele andere auch..
die programmierapplication flasht erstmal eine bin aufs board die der
programmierapplication diese unique id sendet.
die programmierapplication erstellt eine bin die nur im zusammenhang mit
der unique id läuft und flasht diese auf das board.
zusätzlich kannst du eigene ids verwenden sodass du für deine datenbank
eigene und einfachere ids hast.
gruß
ED schrieb:> auch der AES bootloader muss vorher aufgespielt werden.
Wenn ihm sein Werk so heilig ist, dann sollte er das erste Flashen der
Boards selber unternehmen.
Skript Kiddy schrieb:> ED schrieb:>> auch der AES bootloader muss vorher aufgespielt werden.>> Wenn ihm sein Werk so heilig ist, dann sollte er das erste Flashen der> Boards selber unternehmen.
ist auch das einzigst "sichere".
aber das wird wohl nicht möglich sein.
ED schrieb:> aber das wird wohl nicht möglich sein.
Warum nicht? Platinen fertigen und bestücken lassen und dann per Post zu
ihm.
Er kann dann das Erstflashen durchführen und dann das Produkt
ausliefern. Dann sollten Updates relativ sicher durchführbar sein.
aus dem ersten post geht hervor das er nur eine art software entwickler
ist...
weder gehören ihm die platinen noch die produkte..
es werden denke ich auch nicht 10 platinchen sein..
wenn ich software entwicker engagiere tue ich das nicht für eine
handvoll platinen. für ein schiffscontainer nach d und wieder zurück
nach china wird sich das nicht lohnen. er kann ja da runter fliegen :)
ED schrieb:> aus dem ersten post geht hervor das er nur eine art software entwickler> ist...
Finde ich nicht. Da hat sich der TO aber auch nicht wirklich klar
ausgedrückt. Die genauen Umstände sollte er vielleicht nochmal genau
darlegen, bevor hier weiter gemutmaßt wird.
Gruß Skriptkiddy.
Hi,
Skript Kiddy schrieb:> Wie wäre es mit nem Cryptoverfahren?> Nen AES-Bootloader würde sich anbieten. Der Schlüssel ist dann> gerätespezifisch und den kennst nur du.Skript Kiddy schrieb:> Wenn ihm sein Werk so heilig ist, dann sollte er das erste Flashen der> Boards selber unternehmen.
ICh halte einen -wie auch immer- mit Cryptoverfahren arbeitenden
Bootloader auch als das einzig HALBWEGS sichere ansehen.
Und das erstflashen scheint ja gerade KEIN Problem sein, wenn man seinen
erten Beitrag aufmerksam liest scheint es so, als das es so sowieso
geplant ist und es nur um evtl. Firmwareupdates geht!
Sonst wäre sein eigener Lösungsvorschlag ja auch unsinnig,
Jens schrieb:> Ich selbst kann die Software> einspielen (mit Kopierschutz), allerdings sollen auch Kunden später die> Software aktualisieren können...> ...> Wäre folgendes sinnvoll?>> 1. Beim ersten Aufspielen der Software bekommt jedes Board> eine Etikette mit einer ID (z.B. "A456A":)), die auch im> Flash-ROM steht und im EPROM steht eine zugehörige> Hidden-ID (z.B. "B456B")
Eine andere Methode könnte sein wenn man sicher weiß das ein bestimmter
Teil des Programms auf ewig unverändert bleibt diesen einfach bestehen
zu lassen und diesen Programmteil bei den Updates auszulassen. Das
bedeutet der Kunde hat kein lauffähiges Programm in der HAnd. Im Prinzip
ist das Update dann eine Art Patch
Ist aber deutlich umständlicher und erfordert neben dem Schreiben des
eigendlichen C Programms (gehe ich bei STM32 mal von aus) auch noch das
man sich wirklich intensiv mit dem daraus entstandenen Assembler PROG
sowie den genauen Adressen im Programspeicher beschäftigt damit die
Bruchstücke später auch wirklich passen. Zu dem Mehraufwand kommt dann
noch die eingeschränkte Flexibilität.
Ich denke aber dagegen ist die Verschlüsselte übertragung der Binaries
definitiv die bessere Wahl, da man dort wesentlich flexibler ist mit
Ausnahme des Bootloaders auf keine bestehenden Strukturen rücksicht
nehmen muss.
Gruß
Carsten
Hat das Board einen LAN Anschluss?
Ist der STM32 in der Lage, sein eigenes Flash zu beschreiben?
Dann sollte der Bootloader direkt eine Verbindung zum Server aufbauen
und mit seiner Seriennnummer, einem Secret und einer mit dem Server
verhandelten (PGP Schlüsseltausch?) Zahl einen Schlüssel generieren,
womit die Daten übertragen werden, welche dann ins Flash gebrannt
werden.
Ähnlich kann es auch ohne direkten Netzzugang ablaufen - nur der
Schlüsseltausch entfällt dann.
Der Bootloader kann in beiden Fällen Seriennummer und Secret enthalten,
welche auch dem Server bekannt sind.
Das Geheimnis ist in diesem Fall der Bootloader - aber der soll sich ja
auch nicht ändern. (EEprom entfällt dann)
Sobald dieser kopiert wurde, ist dieses System offen. Dann greift nur
noch die Methode, die SN zu sperren. Oder bei diesen Geräten eine SW auf
das Gerät aufzuspielen, welche dem Benutzer sagt, sich mit Dir in
Verbindung zu setzen.
Die Kopierer werden nun, den ja bekannten Bootloader bei ihren Geräten
so modifizieren, daß diese Geräte ihr Update von deren Server holen.
Dies haben sie sich vorher bei Dir geholt (1x) ...
Ergo muss die Betriebssoftware prüfen, ob der Bootloader einwandfrei ist
...
Und für alle, die sich darüber streiten, wie er initial die SW da drauf
bekommt:
Jens schrieb:> Ich selbst kann die Software einspielen
Gruß
Jobst
Wichtiger als der Kopierschutz scheint mir ein klare Anschrift des
Herstellers einzubrennen und eine Prüfsumme davon zu bilden. Wenn einer
die Firma ändert schmiert das Ding nach 15 Minuten ab ...