So schützen Sie einen API-Schlüssel in einer .NET-Anwendung

8

Meine Anwendung trifft auf eine Reihe von Webdiensten wie Twitter und Flickr. Es verwendet API-Schlüssel von diesen Diensten, und ich möchte sie in meinen Binärdateien verschleiern. (Ich mache mir keine Sorgen wegen Piraterie oder irgendetwas, ich muss diese Schlüssel nur geheim halten.)

Was ist der beste Weg, um darüber zu gehen?

Wenn ich sie als const SecureString speichere, werden sie dadurch ausgeblendet der Erinnerung? Die MSDN-Beschreibung besagt, dass der Text "aus dem Arbeitsspeicher des Computers gelöscht wird, wenn er nicht mehr benötigt wird", aber nicht immer im Speicher gespeichert ist.

Wird Dotfuscator es in meiner Versammlung verdunkeln? (Angenommen, ich kann es zu Arbeit bringen.)

    
Josh Santangelo 08.02.2011, 21:13
quelle

3 Antworten

8

Ich musste mich kürzlich mit genau dieser Situation befassen. Das Problem besteht nicht darin, sicherzustellen, dass jemand es nicht einfach mit einem Hex-Editor finden kann, sondern wenn es über die Verbindung zu den verschiedenen APIs gesendet wird. Wenn Sie einfach Geiger laufen lassen und Anfragen beobachten, wird der Schlüssel trotzdem angezeigt. Einige APIs haben den Vorteil eines privaten / öffentlichen Schlüssels, der ein wenig hilft.

Die einzige Lösung, die ich mir vorstellen konnte, war, einen eigenen Webservice zu erstellen, der als Proxy zwischen dem Client und der Ziel-API fungierte. Dadurch konnte ich für jedes Endgerät individuelle Schlüssel generieren, die ich aktivieren / deaktivieren konnte, und die Mehrheit der sensiblen Daten wurde in meiner Remote-Proxy-Anwendung gespeichert.

Viel Glück!

~ "Vergessen Sie nicht, Ihren Ovaltine zu trinken"

    
used2could 08.02.2011 22:02
quelle
4

Anon ist richtig, es gibt keine Möglichkeit, Daten vollständig zu schützen. jemand kann es immer verstehen.

Aber Sie möchten es so schwer wie möglich machen. Das bedeutet nicht, Dinge zu tun, die das Lesen erleichtern:

  • speichert nicht in einem Registrierungsschlüssel (z. B. TwitterAPIKey REG_SZ )
  • speichert nicht in einer Textdatei (z. B. twitterkey.txt ) oder in einer ini-Datei
  • speichert nicht in der .config Datei der Anwendung
  • wird nicht als einfacher Text in der Binärdatei
  • gespeichert
  • wird nicht unverschlüsselt in der Binärdatei
  • gespeichert

Dies wird Leute zurücklassen, die von einem Debugger und (möglicherweise) Assembler-Code wissen müssen.

Sie haben die Angriffsfläche stark reduziert.

Folge nur den ersten drei Vorschlägen und du wirst auf deinem Weg sein.

    
Ian Boyd 08.02.2011 21:36
quelle
0

Vielleicht können Sie Ihren Benutzer bitten, seine eigenen API-Schlüssel zu verwenden. Sie können sich selbst bei der API registrieren und dann in den Einstellungen Ihrer App auf ihren Schlüssel verweisen

    
Steve B 08.02.2011 22:11
quelle