Forum: PC-Programmierung Parameter einer mathematischen Funktion verschlüsseln


von Stefan H. (cheeco)


Lesenswert?

Ich schreibe gerade ein Berechnungsprogramm für Maschinenlemente 
(beispielsweise Getriebe). Das Programm berechnet Ergebnisse, die zum 
einen auf Herstellerdaten des Bauteils (manu_x, manu_y, manu_z) und zum 
anderen auf Benutzereingaben (usr_x, usr_y, usr_z) des Programmbenutzers 
basiert. Im Endeffekt hat man also eine (bekannte) Funktion, die das 
Ergebnis (erg_xyz) folgendermaßen berechnet:

erg_xyz = function (usr_xyz, manu_xyz)


Nun ist es allerdings so, dass der Hersteller seine internen Daten 
(manu_xyz) nicht offenlegen will, da man auf bestimmte Interna schließen 
könnte. Die einzige Möglichkeit wäre, dass der Hersteller seine Daten 
"verschlüsseln" (manu_xyz_enc) könnte. Gibt es deshalb eine 
automatisierte und standardisierte Möglichkeit, dass man die 
eigentlichen Parameter in der Berechnung versteckt, aber die Berechnung 
trotzdem noch stimmt? Also:

erg_xyz = function_encrypted (usr_xyz, manu_xyz_enc)?

Danke für eure Hilfe!

Stefan

von TestX (Gast)


Lesenswert?

nein...zum rechnen brauchst du logischerweise die daten in rohform. wenn 
du die in der funktion entschlüsselst macht es keinen sinn diese 
überhaupt zu verschlüsseln...

von georg (Gast)


Lesenswert?

TestX schrieb:
> macht es keinen sinn diese
> überhaupt zu verschlüsseln...

Keine ist vielleicht übertrieben, aber im Prinzip muss alles, was 
irgendwie verwendet wird, egal ob Programm, Daten, Keys usw., 
unverschlüsselt im Speicher sein. Daher ja die Bemühungen um Malware, 
die Speicherbereiche anderer Programme auslesen kann.

Du könntest zwar innerhalb der Funktion die Daten entschlüsseln, die 
Berechnung durchführen und die Daten gleich wieder löschen, um das Riiko 
zu verringern - aber dann müsstest du auch alle Spuren der Daten im RAM 
und Cache löschen, was deine Möglichkeiten sicher weit überschreitet, 
und noch dazu würde deine Funktion, wenn sie jemand reengeneert, die 
Geheimnisse deines Kunden offenlegen. Wenn die noch alle beisammen haben 
werden sie dem Verfahren niemals zustimmen.

Georg

von Stefan (Gast)


Lesenswert?

Hi!

Mach dass was Google und Co auch machen.
Verlagere die Berechnung auf einen Server im Internet und lass den 
Client nur die Eingaben abfragen und die Ergebnisse anzeigen.

LG Stefan

von c.m. (Gast)


Lesenswert?

wie wäre es mit einem (schlecht hackbaren) dongle das die parameter 
übermittelt bekommt, und das ergebnis ausspuckt?

von imonbln (Gast)


Lesenswert?

Oder du lieferst eine Smartcard, welche die Internen Daten beinhaltet 
und die Berechnung macht. Aber generell wenn sich das Ergebnis so 
berechnen lässt

erg_xyz = function(usr_xyz, manu_xyz)

gibt es eine inverse Funktion für die gilt:

manu_xyz = function_invers(usr_xyz, erg_xyz)

Das gilt auch für Kryptofunktionen. Sicher kann die inverse Funktion 
eine andere Komplexität haben, aber wenn die Funktion bekannt ist und 
manu_xyz interessant genug, sollte man das im Hinterkopf behalten.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Stefan H. schrieb:
> Im Endeffekt hat man also eine (bekannte) Funktion, die das Ergebnis
> (erg_xyz) folgendermaßen berechnet:
>
> erg_xyz = function (usr_xyz, manu_xyz)

Wenn function dem Benutzer nicht nur bekannt, sondern auch (zumindest
abschnittsweise) umkehrbar ist, kann aus einem oder mehreren Paaren von
erg_xyz und usr_xyz leicht manu_xyz berechnet werden.

Dazu ist keinerlei Hacker-Expertise erforderlich, und dagegen helfen
weder eine Verschlüsselung noch ein Dongle noch ein Web-Server.

von Oliver S. (oliverso)


Lesenswert?

Yalu X. schrieb:
> Wenn function dem Benutzer nicht nur bekannt, sondern auch (zumindest
> abschnittsweise) umkehrbar ist, kann aus einem oder mehreren Paaren von
> erg_xyz und usr_xyz leicht manu_xyz berechnet werden.

Und wenn ncht, dann nicht. Also wäre die Frage zu klären, ab man die 
Herstellerparameter in der Berechnung so kombinieren kann, daß kein 
Rückschluß auf die eigentlichen Werte mögich ist.

Oliver

von Tippgeber (Gast)


Lesenswert?

Wir machen das so, dass die Funktion noch Zusatzparameter erhält, welche 
in Abhängigkeit der Werte die Kurve deformieren. Die Rechnung biegt es 
wieder gerade. Die Zusatzparamter sind für jeden Kunden und jedes Gerät 
und jedes Ergebnis individuell. D.h. kein Kunde kann durch Vergleich der 
Ergebnisse auf die Berechnung schließen, auch nicht mit mehreren 
Geräten.

Das Ganze machen wir aber weniger, gegen den Kunden, sondern gegen die 
schlitzäugigen Fälscher, die Geräte und Disposables nachbauen.

Die Parameter der Disposables werden vermessen und fliessen in die 
Rechnung ein. Die Methode ist für jedes Objekt und Charge anders und 
wird von Gerät zu Gerät geänadert, damit nicht Mitarbeiter die Methode 
zur Konnkurrenz mitnahmen. Die GEräte bekommen einmal im Jahr ein 
SW-Update, wenn sie im Servive sind. Die Funtion ist für 3 Chargen 
gültig, d.h. auch wenn ein Kunde ein Gerät mal nicht zum Servie schickt 
und ein SW-update übersprungen wird und zugleich Chargen mit 
überlappender Änderung verwendet werden, klappt es noch.

Außerhalb dieses ranges sind die Messergebnisse ungenau. Der Kunde weiß 
das und hat es schriftlich, dass er die Geräte nicht verwenden darf, 
wenn sie länger, als 18 Monate nicht im Service waren. Er hat das auch 
schriftlich, dass er Chargen nicht verwenden darf, wenn sie älter als 9 
Monate sind. Tut er es dennoch, macht er sich strafbar, weil es in 
Richtung Patientengefährdung geht.

Der Kunde kann also nicht in China Disposeables einkaufen, selbst wenn 
er es aktiv tun wollte. Ausgeschlossen ist somit auch das 
stillschweigende Unterschieben von Chargen aus dem Ausland, die 
abgelaufen sind. Die Geräte plärren Alarm, wenn die nicht mehr passen.

Möglich wird das durch parameterische Funktionen mit Selbsidentitäten, 
die sich druch richtiges Mehrfachanwenden auf ein ander abbilden. D.h. 
für jeden Punkt in der Kurve gibt es eine analytische Korrektur. Diese 
sind linear unabhäng, sodass die Reihenfolge egal ist. Man kann also 
erst Parameter 1 korrigieren, dann 2 und dann 3 und oder auch 2,3,1 - es 
kommt dasselbe raus.

Die Vorschrift sieht dann so aus:

Y = F (a,b,c,d ,  k(a), k(b), k(c), k(d) )

k(a) ist die Korrekturfunktion für die Werteliste a. Sie funktioniert 
für alle Messwerte, für die a definiert ist, also z.B. die Menge in 
Millilitern. Konkret wird hier ein Durchflussmesser, dessen Werte 
ungefähr quadratisch mit der Geschwindigkeit gehen, korrigiert. Die 
Funktion k(a) macht es genauer, baut aber andere Nichtlinearitäten ein.

Aufgelöst wird es intern in der Rechung, in dem zunächst gerechnet wird:

a* = k*(a), b*= k*(c) ...  d.h. auf die übergebenden Parameter a,b,c,d 
werden 4 Entzerrfunktionen losgelassen, die neue a*, b*, c*, d* 
erzeugen.

Diese fliessen dann in die Formel. Die Formel selber ist in C verbacken 
und nicht direkt außen beobachtbar.

k und k* werden für alle Paramter paarweise gebildet. Wie gesagt für 
jeden Kunden und für jedes Gerät etwas anders. Der Kunde kann dann zwar 
Chargen, die für dieselbe Geräteklasse zugelassen ist, untereinander 
austauschen, aber nur vertikal, also nicht über die Zeit. Er muss dazu 
auch nichts Neues berechnen oder vermessen, sondern die Toleranzbreite 
steckt in den Chargencodes mit drin.

von Bernd K. (prof7bit)


Lesenswert?

Da wird wieder mal so viel Energie komplexitätssteigernden aber 
vollkommen zweckfreien und sinnlosen Firlefanz gesteckt, wenn das 
stattdessen in das eigentliche Produkt fließen würde käme ein besseres 
Produkt heraus.

Und der Kunde wäre dankbar weil er nicht schon wieder pauschal als Feind 
klassifiziert wird mit einem Produkt das vor virtuellen Defensivwaffen 
die alle gezielt gegen ihn gerichtet sind nur so strotzt und damit unter 
Umständen auch noch seine wertvolle Zeit und Nerven vergeudet weil es 
alles was einfach sein könnte unnötig verkompliziert.

0.02€

von Jack (Gast)


Lesenswert?

Du könntest einen Satz Näherungsfunktionen berechnen (z.B. Polynome, 
Splines, Bézierkurven), in dem jeweils die Hersteller-Parameter schon 
einberechnet sind. Das Ergebnis ist eine Tabelle von Konstanten für die 
jeweilige Approximation. Daraus auf die Hersteller-Parameter zu 
schließen ist schwierig.

von Cheeco (Gast)


Lesenswert?

Danke schonmal für die Antworten! Ich habe jetzt ein paar Ideen, was 
möglich ist.

- Die Daten online zu berechnen (beim Hersteller) ist eine interessante 
Idee.
- Eine Smartcard oder Dongle ist wahrscheinlich zu aufwändig.

@Yalu: Das mit der Umkehrbarkeit habe ich verstanden, ich denke aber 
dass die Funktion nicht ohne weiteres eineindeutig umkehrbar ist.

@Tippgeber: Das ist ein ziemlich abgefahrenes Verfahren, ich muss da 
nochmal eine Weile drüber nachdenken. Ich muss mal schauen, ob das für 
meinen Fall anwendbar ist, aber sowas in der Art habe ich mir 
vorgestellt.

@prof7bit: Ich gebe Dir recht. Eigentlich sollte man sich lieber auf das 
Programm konzentrieren, anstatt sich mit solchen Spielereien zu 
beschäftigen. Aber: Das Problem ist, dass das Berechnungsprogramm von 
den Daten lebt, die die Hersteller (das sind in diesem Fall nicht wir) 
zur Verfügung stellen. Ohne diese Daten (in "verschlüsselter" Form oder 
wie auch immer), ist der Mehrwert des Programms wertlos, da man doch 
wieder beim Hersteller anrufen und sich die Werte einzeln erbetteln muss 
oder die Berechung direkt an den Hersteller abgibt...

@Alle: Danke für die vielen Guten Hinweise!

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

Stefan H. schrieb:

> erg_xyz = function_encrypted (usr_xyz, manu_xyz_enc)?

Wertetabellen aus User-Eingaben, gemessenen manu-Werten und den Werten 
des erg_xyz aufstellen
rein in Excel, xy-Tabelle erstellen, Messreihen darstellen lassen und 
von Excel Trendlinie einzeichnen und deren Funktion darstellen lassen

das ist die Methode per-Hand-zu-Fuß

: Bearbeitet durch User
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.