Meine App muss einige Daten verschlüsseln (ein Benutzersitzungs-Token). Die meisten Beispiele, die ich sehe, haben eine Methode, die einen Schlüssel mit einer Passphrase und einem Salz erzeugt, wie:
%Vor%Nach meinem Verständnis haben wir drei Optionen, um die Passphrase zu generieren:
Option # 1 funktioniert nicht für mich. Die Optionen # 2 und # 3 scheinen von Natur aus fehlerhaft zu sein, es sei denn, ich missverstehe grob, wie ich das anstellen soll (in der Hoffnung, dass ich es bin). Was ist der empfohlene Weg dies zu tun, wenn wir nicht mit # 1 gehen können? Setzen wir eine Reihe von verschleierten Reifen ein, damit ein Angreifer durchspringen und auf das Beste hoffen kann?
Danke
"Setzen wir eine Reihe von verschleierten Reifen ein, damit ein Angreifer durchspringen und auf das Beste hoffen kann?" Grundsätzlich ja. Die Größe und Anzahl der Ringe ist wie hart du es machen willst.
Wenn Sie keinen Server verwenden, ist alles, was Sie tun, um Ihre Daten zu verschleiern und zu verschlüsseln, umkehrbar. Sie können es jedoch wirklich hart machen. Zum Beispiel eine Technik, mit der ich einige Video-Assets geschützt habe.
Ersetzt die ersten 1024 Bytes des Headers (es ist MP4) mit 1024 Bytes, die aus der Mitte eines der Bild-Assets der Apps stammen. Ich habe mehrere Reparaturbetriebe ausprobiert, die die Datei nicht automatisch wiederherstellen konnten - obwohl es manuell gemacht werden kann. Dann ...
Verschlüsselt die Datei mit einem privaten Schlüssel, der aus einem anderen Bild-Asset 256 Bytes hat.
Wenn der Schlüssel extrahiert wird, wird er durch einen Algorithmus gehackt, der alle Arten von ansonsten nicht-sinnlichen Berechnungen durchführt, um den Schlüssel zu zerlegen.
Verwendete einen Objektorientierer vor der Kompilierung.
Ich habe versucht, dies selbst zu rekonstruieren, selbst wenn ich weiß, wie es gemacht wird, und es ist so schwer, dass die Anstrengung das Ergebnis nicht wert ist.
Es gibt zahlreiche Diskussionen über SO, die zusammenfassen; Wenn Sie einfach aufhören wollen zu kopieren, machen Sie es schwierig (Kosten gegen Belohnung), aber schlafen Sie sonst einfach, denn es gibt letztendlich nichts, was Sie tun können. Wenn die Daten kommerziell empfindlich sind, ist ein Server erforderlich, der mit Sicherheit auf Systemebene gekoppelt ist (z. B. Verschlüsselung des gesamten Geräts und kein Root).
Sie speichern das Salz zusammen mit den verschlüsselten Daten, es sind keine geheimen Informationen. Sie können den Schlüssel entweder vom Benutzer oder von einer Geräteeigenschaft ableiten: (Hashed) IMEI, MAC-Adresse usw.
Stellen Sie sich im Grunde vor, von wem Sie Ihre Daten schützen und warum. Da der Benutzer dies benötigt, ist es nicht sinnvoll, es vor diesen zu schützen. Wenn Sie das in einer privaten Datei speichern, können andere Apps es nicht auf einem nicht gerooteten Telefon lesen. Wenn Sie es auf verwurzelten Telefonen schützen möchten, kann die Verschlüsselung hilfreich sein, aber solange sich der Schlüssel in der App befindet oder basierend auf etwas auf dem Gerät abgeleitet wird, wird die Wiederherstellung nur erschwert oder unmöglich.
Android verfügt zwar über einen systemweiten Keystore-Service, hat jedoch keine öffentliche API und kann sich ändern. Sie können dies verwenden, um Ihre Schlüssel zu schützen, wenn Sie bereit sind, das Risiko einzugehen, dass Ihre App bei zukünftigen Versionen beschädigt wird. Einige Details hier: Ссылка
Tags und Links java android encryption