Ich benötige einige Ideen zum Schutz eines privaten API-Schlüssels in einer Anwendung, insbesondere in einer ac # .NET-Anwendung.
Erstens verstehe ich, dass es theoretisch unmöglich ist, irgendetwas im Quellcode zu verbergen, also bin ich auf eine andere Idee gekommen, aber ich bin nicht sicher, wie plausibel es ist. Wie auch immer, wäre es möglich, irgendwie mit einem Webserver zu kommunizieren, um den privaten Schlüssel zu überprüfen und dann mit der Anwendung zu sprechen, um zu bestätigen, dass es sich um einen legitimen Handshake handelt?
Ich muss mit zwei Schlüsseln arbeiten: einem öffentlichen Schlüssel (wie der Name schon sagt, muss er nicht mit der gleichen Sorgfalt behandelt werden wie der private) und einem privaten Schlüssel, der vor anderen geschützt werden muss.
Über Ideen, wie ich das machen könnte, würde ich mich sehr freuen.
quelle
Antworten:
Zusammenfassen:
Der beste Weg, um eine Gefährdung dieses Schlüssels zu verhindern, besteht darin, die Kontrolle darüber zu behalten. Dies bedeutet, dass es niemals auf einem Server bereitgestellt werden sollte, auf dem jemand außer Ihnen die Binärdatei lesen konnte, und niemals über eine Kommunikationsverbindung gehen sollte, die Sie nicht kontrollieren.
Wenn die Binärdateien außerhalb Ihrer Kontrolle liegen, liegt letztendlich alles in ihnen außerhalb Ihrer Kontrolle. Wenn jemand Datenverkehr abfangen kann, kann er den API-Schlüssel erfassen ( möglicherweise auch, wenn Sie SSL verwenden ).
Ich sehe zwei Hauptmethoden, um dies zu erreichen. Beide enthalten Ihren privaten API-Schlüssel nicht in Ihrer bereitgestellten Anwendung:
Erhalten Sie einen eindeutigen API-Schlüssel für jede Bereitstellung
Dies würde eine zusätzliche Beziehung zum Anbieter erfordern, in der Sie Schlüssel erhalten oder Ihre Kunden Schlüssel erhalten können.
Dies ist beispielsweise bei Produkten, die die Google Maps-API verwenden, häufig der Fall. Der Ersteller der Software verfügt über einen eigenen Schlüssel, den er beim Entwickeln / Ausführen seiner Kopie verwendet, der jedoch nicht in der Software enthalten ist. Stattdessen müssen Sie als Nutzer, der diese Software installiert, zu Google gehen und Ihre eigene API anfordern Schlüssel. Die Software verfügt lediglich über eine Konfigurationsoption zum Festlegen des zu verwendenden Google Maps-API-Schlüssels.
Bei vielen Anbietern, die vertraglich API-Schlüssel ausstellen, müssen Sie diese Schritte ausführen, sodass Sie möglicherweise ohnehin auf dem falschen Weg sind. Dies ist möglicherweise die einzige Lösung, die Sie gemäß den Nutzungsbedingungen des Anbieters und verwenden dürfen / oder irgendwelche rechtlichen Verträge, die Sie möglicherweise mit ihnen haben.
Verwenden Sie einen Proxy
Richten Sie eine Proxy-API ein, bei der Ihre Anwendung Ihre API (auf Ihren Servern) aufruft und Ihre API wiederum die API des Anbieters mithilfe des Schlüssels aufruft.
Möglicherweise benötigen Sie zusätzlichen Schutz für Ihre API, z. B. um sicherzustellen, dass nur Ihre Anwendung diese verwendet. Dies könnte geschehen durch:
Beachten Sie hierbei, dass Sie dies möglicherweise nicht tun dürfen. Ihr Anbieter verfügt möglicherweise über Nutzungsbedingungen oder gesetzliche Verträge, die Sie daran hindern, einen "Aggregationsservice" oder einen Proxy zu erstellen. Sie müssen dies daher überprüfen.
Umgang mit Fehlverhalten
Selbst wenn Ihr Schlüssel nicht kompromittiert wird und einer Ihrer Kunden etwas unternimmt, das den Anbieter veranlasst, Ihren Schlüssel zu blockieren, werden plötzlich ALLE Ihre Kunden deaktiviert, und Sie müssen nur alle anderen aktualisieren.
Wenn Sie einen Ihrer Kunden blockieren möchten (z. B. wenn er nicht mehr bezahlt, die Software raubkopiert hat usw.), können Sie dies nicht tun, ohne ein Update für alle anderen auszugeben und dann den Schlüssel zu deaktivieren.
Die Logistik für alles, was über eine Handvoll Kunden hinausgeht, wird schnell unhaltbar.
Unabhängig davon, ob Sie als Proxy fungieren oder über einen eindeutigen Schlüssel für jede Installation verfügen, können Sie mit jeder dieser Situationen relativ einfach umgehen (und dies hat für andere kaum oder gar keine Auswirkungen).
Der Versuch, den Schlüssel zu schützen, während er in Ihre Software eingebettet ist, ist letztendlich eine vergebliche Anstrengung. Unabhängig davon, was Sie tun, kann jeder Angreifer, der Zugriff auf die Binärdateien, die Quelle und / oder den Kommunikationskanal hat und fest genug ist, um auf den Schlüssel zuzugreifen, dies tun.
Also nicht einbetten. "Der einzige Gewinnzug ist, nicht zu spielen."
quelle
Wenn Sie einen Schlüssel im Objektcode haben, ist dieser per Definition öffentlich. Es gibt Hacks um Obfuscatoren, die Objektcode schnell dekompilieren. Ein privater Schlüssel würde sich außerhalb des Objektcodes und in einer anderen Datei befinden. Der schwierige Teil ist, dem Benutzer diesen privaten Schlüssel zur Verfügung zu stellen. Nach der Bereitstellung können Sie eine Signatur des privaten Schlüssels, die am Ende der Datei angeheftet ist, und einen öffentlichen Schlüssel in der Anwendung verwenden, um die Integrität des privaten Schlüssels zu überprüfen. Ein Webserver kann diese Überprüfung auch durchführen, wenn Sie über einen sicheren Kommunikationskanal verfügen.
quelle