Android Billing - in der Datei Security.java sollte der base64EncodedPublicKey der codierte Wert sein?

8

Sollte ich den eigentlichen öffentlichen Schlüssel meiner App direkt in den Wert dieser Variablen einfügen?

Oder sollte ich es codieren und dann, was auch immer die codierte Zeichenfolge ist, würde ich diese Zeichenfolge in den Wert dieser Variablen machen?

Was sollte es sein?

    
Genadinik 12.07.2012, 01:26
quelle

4 Antworten

4

Der öffentliche Schlüssel in Ihrer Android Developer Console (der unter "Profil bearbeiten" zu finden ist) ist bereits Base64-codiert . Kopieren Sie einfach den Inhalt des Schlüssels in Ihre Quelldatei. Zum Beispiel, wenn Sie etwas wie folgt haben:

Dann in Ihrem Security.java :

%Vor%     
aromero 14.07.2012, 03:25
quelle
2

Wie der Google-Beispielcode für die In-App-Abrechnung sagt, sollten Sie diesen öffentlichen Schlüssel verschleiern.

  

Statt nur die gesamte literale Zeichenfolge zu speichern, die hier eingebettet ist   Programm, konstruiere den Schlüssel zur Laufzeit aus Stücken oder   Verwenden Sie Bit-Manipulation (z. B. XOR mit einer anderen Zeichenfolge) zum Ausblenden   der eigentliche Schlüssel. Der Schlüssel selbst ist keine geheime Information, aber wir nicht   Ich möchte es einem Angreifer leicht machen, den öffentlichen Schlüssel durch einen zu ersetzen   eigene und dann gefälschte Nachrichten vom Server.

Ich verwende sehr einfachen Java-Code, um die Java-Klasse zu generieren, die mir den öffentlichen Schlüssel zurückgibt. Die Grundidee besteht darin, Rekursion zu verwenden, um den Schlüssel unter Verwendung der inneren statischen Klasse neu zu erstellen. Es ist nur Denkanstoß .

Es ist ein "gut genug" Ansatz für meinen Nischenmarkt. Weitere Informationen finden Sie unter diese Sicherheitsfrage zu Stackexchange auf Verschleierung.

%Vor%     
Gabriel Glenn 27.06.2014 09:31
quelle
1

Sie benötigen den öffentlichen Schlüssel im Quellcode des Programms, damit Sie die Signatur überprüfen können. Ja, es gibt ein nicht-null, unvermeidbares Risiko, dass ein Cracker es finden, durch eine Fälschung ersetzen und Ihre gefälschten Käufe füttern wird.

Sie können den Schlüssel nicht vor neugierigen Blicken verstecken, aber Sie können ihn verschleiern. Sie können die Base64-Zeichenfolge in mehrere Zeichenfolgenkonstanten an verschiedenen Stellen aufteilen und sie vor der Verwendung verketten. Lieber geben Sie den Brocken unauffällige Namen ( nicht wie MY_PUBLIC_KEY_PART_4 ). Sie können auch eine zusätzliche Schicht von Soft-Verschlüsselung anwenden - etwas wie XOR ein Wert. Sie können eine Integritätsprüfung hinzufügen - stellen Sie sicher, dass der Schlüssel nicht gefälscht wurde (sagen Sie, speichern Sie den Hash eines Schlüssels anderswo und überprüfen Sie). Aber das ist immer noch Sicherheit durch Dunkelheit - ein entschlossener Hacker wird durchkommen.

Denken Sie auch an ProGuard, das eingebaute Code-Verschleierungstool.

    
Seva Alekseyev 14.07.2012 03:56
quelle
0

Wenn Sie eine Serverkomponente als Teil Ihrer App haben, können Sie die meisten Elemente Ihrer Sicherheit, einschließlich Ihres öffentlichen Schlüssels, auf Ihren Server verschieben. Auf dem Server können Sie die Nonce generieren und den Kauf bestätigen (ich habe meinen an einen RESTFul WCF-Dienst verschoben). Wenn Ihre Serverkomponente auf .NET basiert, müssen Sie wahrscheinlich einen Modul und einen Exponenten aus Ihrem öffentlichen Schlüssel generieren, damit Sie die Klasse RNGCryptoServiceProvider verwenden können. Es gibt ein Google I / O-Video, das unter anderem eine In-App-Abrechnung bietet.

    
John J Smith 17.07.2012 20:28
quelle

Tags und Links