Verschleierung von Strings in Python

8

Ich habe eine Passwort-Zeichenfolge, die an eine Methode übergeben werden muss. Alles funktioniert gut, aber ich fühle mich nicht wohl dabei, das Passwort im Klartext zu speichern. Gibt es eine Möglichkeit, die Zeichenfolge zu verschleiern oder wirklich zu verschlüsseln? Ich bin mir bewusst, dass Verschleierung rückentwickelt werden kann, aber ich denke, ich sollte zumindest versuchen, das Passwort ein wenig zu verschleiern. Zumindest ist es nicht sichtbar für ein Indizierungsprogramm oder ein streunendes Auge, das einen kurzen Blick auf meinen Code wirft.

Ich kenne pyobfuscate, aber ich möchte nicht, dass das ganze Programm verschleiert wird, nur eine Zeichenkette und möglicherweise die ganze Zeile selbst, wo die Variable definiert ist.

Zielplattform ist GNU Linux Generic (Wenn das einen Unterschied macht)

    
Caedis 11.06.2009, 16:47
quelle

6 Antworten

21

Wenn Sie nur einen flüchtigen Blick auf ein Passwort vermeiden möchten, sollten Sie das Encoding / Decoding des Passworts von / nach in Erwägung ziehen base64 . Es ist nicht sicher im geringsten, aber das Passwort wird nicht zufällig menschlich / Roboter lesbar sein.

%Vor%     
John G 11.06.2009, 16:57
quelle
2

Offensichtlich ist es Ihre beste Option, dies an eine dritte Partei zu delegieren. Wenn Sie sich bei einer Verbindung mit anderen Anmeldeinformationen (z. B. dem Benutzerkonto, unter dem Ihr Prozess läuft) authentifizieren können, können Sie die Berechtigungsstufen bis zur Betriebssystemebene beibehalten. Alternativ könnten Sie, wenn es wichtig genug / möglich ist, den Benutzer auffordern (stattdessen den Schlüssel in der (möglicherweise) etwas weniger hackbaren Wetware zu speichern)

Wenn Sie ein Passwort oder einen Schlüssel speichern möchten, empfehle ich Ihnen, seperate in einer von Ihnen eingelesenen Datei zu speichern. falls notwendig, verschleiern. Dies hat die Vorteile, dass:

  • Sie können die Dateiberechtigungen für die Datei so eng wie möglich festlegen (dh nur lesbar für das Konto, in dem Ihr Programm läuft), im Gegensatz zum Rest Ihres Programms, das von mehr Personen gelesen werden kann.

    >
  • Sie werden es nicht versehentlich in Ihr Versionskontrollsystem einchecken!

  • Sie müssen nicht auf druckbare Zeichen beschränkt sein (oder ungeschicktes Escaping verwenden) für eine Python-Zeichenkette. Sie können also, wenn möglich, eine beliebige Schlüsseldatei anstelle eines für Menschen lesbaren Passwortes verwenden. Wenn es nicht von Menschen eingegeben wird, gibt es keinen Grund, alle Schwächen von Passwörtern zu haben.

Zur Verdeutlichung können Sie base64 wie vorgeschlagen verwenden oder ein Hausbrühschema wie XORing oder Entschlüsselung mit einem anderen Schlüssel, der woanders gespeichert ist und beide Standorte benötigt. Seien Sie sich bewusst, dass dies nicht gegen etwas schützt, das über das opportunistische Schultersurfen hinausgeht (falls ja) - stellen Sie sicher, dass es auch eine gewisse echte Sicherheit gibt (einschließlich offensichtlicher wie physischer Zugriff auf die Maschine!)

    
Brian 11.06.2009 18:13
quelle
1

Sie sollten es vermeiden, das Passwort zuerst klar zu speichern. Das ist die einzige "wahre" Lösung.

Jetzt können Sie das Passwort einfach mit dem Hash-Modul (md5 und ähnliche Module in Python 2.5 und darunter) verschlüsseln.

%Vor%     
David Cournapeau 11.06.2009 16:52
quelle
0

Viele passwort-akzeptierende Protokolle und Einrichtungen bieten eine Möglichkeit, eine Schlüsseldatei anstelle eines Kennworts anzugeben. Diese Strategie wird wahrscheinlich hier funktionieren; anstatt ein Passwort hart zu codieren, einen Dateinamen hart zu codieren (oder noch besser, machen Sie es zu einem Parameter!). Sie könnten sogar bis zu SSH gehen und das Laden von Keyfiles verweigern, die nicht (1) im Besitz des aktuellen Benutzers (2) sind und nur von diesem Benutzer gelesen werden können.

    
Dan Davies Brackett 11.06.2009 16:52
quelle
0

Es hängt sehr davon ab, warum Sie das Passwort behalten und wo Sie das Gefühl haben, dass es ein Sicherheitsproblem gibt.

Wenn Sie dieses Passwort zukünftig speichern oder an eine Datenbank anpassen:

Dies sollte eigentlich kein Problem sein, aber wenn Sie besorgt sind, verwenden Sie die Passwortverschlüsselung Ihrer Datenbank frühzeitig und speichern Sie diese (SELECT PASSWORD ('mySamplePassword');), dann vergleichen Sie die verschlüsselte Version direkt in Ihrer späteren Abfrage.

Wenn Sie es für die spätere Übertragung speichern:

Es gibt wirklich nicht viel, was du tun kannst. Die Übertragung selbst ist sehr wahrscheinlich leichter zu schnüffeln als Ihre Handhabung des Passworts.

Ohne ein paar weitere Details zu wissen, was Sie tun, ist das schwer zu beantworten.

    
jkerian 11.06.2009 17:18
quelle
0

Die base64-Antwort eignet sich gut zum Verschleiern des Kennworts und funktioniert ohne Benutzereingriff auf Kosten von Unsicherheit. Wenn der Benutzer mit Zugriff auf einen Systemschlüsselring-Dienst angemeldet sein kann, sehen Sie sich den Schlüsselbund an. Ich habe es verwendet, um Passwörter sowohl auf OS X- als auch auf Linux-Systemen zu speichern.

    
velotron 16.02.2016 21:44
quelle