Praktisch, wenn der Code und Schlüssel auf einer SD - Karte Maschine sind, sie werden der Lage sein , es de-zu kompilieren, sie werden der Lage sein , die Schlüssel zu entdecken und sie werden die sensiblen Daten extrahieren können.
Es ist wie beim Verschlüsseln von Filmen, eine DVD muss alle Informationen enthalten, die zum Entschlüsseln des Films erforderlich sind, damit er dem Betrachter angezeigt werden kann, damit alle Kopierschutzmechanismen für Filme endgültig zum Scheitern verurteilt sind.
Das Beste, was Sie tun können, ist die Wirtschaftlichkeit des Reverse Engineering Ihres Produkts zu ändern.
Lohnt sich die Verschlüsselung und / oder Verschleierung?
Jetzt haben wir festgestellt, dass es keine Möglichkeit gibt, sich vollständig zu schützen, die Fragen werden
- Wie wahrscheinlich ist das?
- Welchen Wert haben Ihre Algorithmen und Daten für andere?
- Was kostet der Kauf einer Lizenz zur Nutzung Ihrer Software?
- Was kostet die Replikation Ihres Algorithmus und Ihrer Daten?
- Was kostet das Reverse Engineering Ihrer Algorithmen und Daten?
- Was kostet es Sie, Ihren Algorithmus und Ihre Daten zu schützen?
Wenn dies eine erhebliche wirtschaftliche Notwendigkeit zum Schutz Ihres Algorithmus / Ihrer Daten darstellt, sollten Sie dies prüfen. Wenn beispielsweise der Wert des Dienstes und die Kosten für den Kunden hoch sind, die Kosten für das Reverse Engineering Ihres Codes jedoch viel niedriger sind als die Kosten für die Entwicklung selbst, können die Benutzer es versuchen.
Das führt zu Ihrer Frage
- Wie sichern Sie Ihren Algorithmus und Ihre Daten?
Verschleierung
Die von Ihnen vorgeschlagene Option, den Code zu verschleiern, wirkt sich negativ auf die oben genannte Wirtschaftlichkeit aus. Sie versucht, die Kosten für sie erheblich zu erhöhen (5 oben), ohne die Kosten für Sie (6) erheblich zu erhöhen. Das Problem ist, dass es wie bei der DVD-Verschlüsselung zum Scheitern verurteilt ist und wenn es genug Unterschiede zwischen 3, 4 und 5 gibt, wird es irgendwann jemand tun.
Eine andere Option ist möglicherweise eine Form der Steganografie , mit der Sie identifizieren können, wer Ihren Code entschlüsselt und mit der Verteilung begonnen hat. Wenn Sie beispielsweise 100 verschiedene Gleitkommawerte als Teil Ihrer Daten haben und ein 1-Bit-Fehler im LSB jedes dieser Werte für Ihre Anwendung kein Problem darstellt, codieren Sie eine eindeutige (für jeden Kunden) Kennung in diese Bits . Das Problem ist, wenn jemand Zugriff auf mehrere Kopien Ihrer Anwendungsdaten hat, ist es offensichtlich, dass diese unterschiedlich sind, was die Identifizierung der versteckten Nachricht erleichtert.
Schutz
Die einzig wirklich sichere Möglichkeit besteht darin, einen wichtigen Teil Ihrer Software als Service bereitzustellen , anstatt ihn in Ihre Anwendung aufzunehmen.
Konzeptionell sammelt Ihre Anwendung alle Daten, die zum Ausführen Ihres Algorithmus erforderlich sind, und packt sie als Anforderung an einen (von Ihnen kontrollierten) Server in der Cloud . Anschließend berechnet Ihr Service Ihre Ergebnisse und gibt sie an den Client zurück. was würde es anzeigen.
Auf diese Weise bleiben alle Ihre proprietären, vertraulichen Daten und Algorithmen in einer Domäne, die Sie vollständig kontrollieren, und es wird verhindert, dass ein Client diese Daten extrahiert.
Der offensichtliche Nachteil ist, dass Kunden in Ihre Servicebereitstellung eingebunden sind und Ihren Servern und ihrer Internetverbindung ausgeliefert sind. Positiv zu vermerken ist, dass sie immer auf dem neuesten Stand der Fehlerbehebungen sind. Leider lehnen viele Leute SaaS aus genau diesen Gründen ab.
Dies wäre zwar ein großer Schritt und könnte enorme Kosten verursachen (siehe oben), aber ich sehe nur so, dass Ihr Algorithmus und Ihre Daten absolut sicher sind .