Wenn ich die Verifizierung auf einen Remote-Server verlagern möchte, denke ich, dass der Prozess etwa so aussehen wird:
%Vor%Wenn ich es richtig verstehe, soll die Nonce die Replay-Attacken-Schwachstelle reduzieren und die Verifizierung soll die Spoofing-Schwachstelle reduzieren. Der Grund dafür, dass die Dokumente die Sicherheitsverarbeitung auslagern, ist, dass der Verifizierungsschritt Zugriff auf den öffentlichen Schlüssel meines öffentlichen Android Market-Publishers erfordert und das Ziel des Remoteservers darin besteht, dass dieser Schlüssel nicht in meinen Code eingeschlossen / berechnet werden muss.
>Erste Frage, gibt es einen Sicherheitsgrund für den Remote-Server, um die Nonce-Erzeugung / Prüfung durchzuführen? Wenn der Bestätigungsschritt korrekt ausgeführt wurde, würden wir vom entfernten Server herausfinden, ob die Nachricht gefälscht wurde. So scheint es mir, dass das Nonce nur da ist, um jemanden zu finden, der das IN_APP_NOTIFY erneut sendet.
Zweite Frage, warum ist es wichtig, ob unser öffentlicher Schlüssel eine wörtliche Zeichenfolge ist? Die Dokumentation sagt, "Sie möchten es einem Hacker oder böswilligen Benutzer nicht leicht machen, den öffentlichen Schlüssel durch einen anderen Schlüssel zu ersetzen." Mir ist nicht klar, wie jemand meine App ausnutzen könnte, selbst wenn sie die Binärdatei so bearbeiten könnten, dass sie einen böswilligen öffentlichen Schlüssel enthält, ohne die App verlassen zu müssen.
Dritte Frage, habe ich nicht alle die gleichen Probleme, die Verifizierung von meinem Remote-Server zu überprüfen (z. B. öffentlichen Schlüssel auf meinem Remote-Server in der Anwendung speichern)?
Vierte Frage, ist all diese zusätzliche Sicherheit für nichts, wenn ich die Ergebnisse dieser Kaufbestätigung am Telefon speichern möchte (dh ich möchte nicht den Kaufstatus der entsperrten Inhalte überprüfen müssen, wenn ein Benutzer darauf zugreift der Inhalt)?
Erste Frage, gibt es einen Sicherheitsgrund für den Remote-Server, um die Nonce-Erzeugung / Prüfung durchzuführen?
Ja, der Server sollte die Nonce generieren und die Überprüfung durchführen. In der Regel sollte alles, was sicherheitsrelevant ist, fast immer auf dem Server erfolgen. Ein Nonce ist eine "Nummer, die nur einmal verwendet wird". Das richtige für den Server ist also:
Zweite Frage, warum ist es wichtig, ob unser öffentlicher Schlüssel eine Literalzeichenfolge ist?
Etwas, wenn Sie Sicherheitsüberprüfungen für die Anwendung durchführen, völlig irrelevant, wenn Sie Ihre Arbeit auf einem Server ausführen (wie Sie sollten).
Wenn Sie Sicherheit in der Anwendung ausführen, kann die Anwendung gehackt werden, um die Sicherheit zu umgehen. Eine Technik besteht darin, den öffentlichen Schlüssel zu ändern, was einfacher ist, wenn er als einzelne Zeichenfolge gespeichert wird.
Dritte Frage, habe ich nicht alle die gleichen Probleme, die Verifizierung von meinem Remote-Server zu verifizieren (z. B. öffentlichen Schlüssel auf meinem Remote-Server in der Anwendung zu speichern)?
Nein, wirst du nicht. Niemand kann auf den Code des Servers zugreifen / ihn ändern. Zumindest so "einfach" wie die Dose in der Anwendung.
Vierte Frage, ist all diese zusätzliche Sicherheit für nichts, wenn ich die Ergebnisse dieser Kaufbestätigung am Telefon speichern möchte (dh ich möchte nicht den Kaufstatus des freigeschalteten Inhalts überprüfen müssen, wenn ein Benutzer greift auf den Inhalt zu)?
Nun, es kommt darauf an.
Die "sicherste" Möglichkeit zur Implementierung von In-App-Käufen mit einem Server beinhaltet:
Tags und Links android security in-app-purchase