Kleines passwort tool in Phyton geschrieben. zusätzliche Ideen?

deydi

Lt. Commander
Registriert
Apr. 2016
Beiträge
1.154
Man kennt es, es gibt nix schlimmeres als seine Passwörter offen auf dem Pc liegen zu lassen oder irgendwo speichern, wo es bei Datenklau Weg ist. nennt mich paranoit aber, ich mag den gedanken nicht.

Passwortmanager sind zwar nett, aber auch durch Datenlecks angreifbar.

Also, habe ich auf Linux mit Phyton und der Korrigierhilfe von ChatGPT eine kleine Prototyp für ein verschlüsseltes passwort gemacht.

Im moment, noch 2 einfache phyton datein. Aber ich werde evtl. noch eine GUI hinzufügen.
Wenn jemand Ideen hat gerne Sagen.


Erst einmal, habe ich einen Code geschrieben, der mir Zufällige Ziffern, Buchstaben, sonder und satzzeichen ausspuckt.
100 Pro Zeile, 10000 Zeilen.
Diese Datei wird, als random.Txt gespeichert.

import random
import string

def generate_random_string(length):
"""Generiert einen zufälligen String aus Buchstaben, Zahlen, Sätzen und Sonderzeichen."""
characters = string.ascii_letters + string.digits + string.punctuation + " "
random_string = ''.join(random.choice(characters) for _ in range(length))
return random_string

def save_to_file(filename, content):
"""Speichert den Inhalt in einer Textdatei."""
with open(filename, 'w') as file:
file.write(content)

def main():
random_content = ""
total_length = 0
while total_length < 100000:
random_string = generate_random_string(100)
random_content += random_string
total_length += len(random_string)
if total_length >= 100000:
break
random_content += "\n"

save_to_file('random.txt', random_content)
print("Die zufälligen Ziffern, Buchstaben, Zahlen, Sätze und Sonderzeichen wurden in der Datei 'random.txt' gespeichert.")

if name == "main":
main()

Dann kommt, das auslese tool.

Dort gebe ich an:
Gib die Zeilennummer ein, die du auslesen möchtest: 20
Gib das Startzeichen (1-100) ein, ab dem du auslesen möchtest: 07
Gib die Anzahl der Zeichen ein, die du auslesen möchtest: 12

Im Terminal wird der Code teil dann Rot makiert.
Inhalt von Zeile 20, ab Zeichen 7: NnDPl#Cs;C-XQdb\ gh;l=+c9 By_Cz#kM*rj9Pw8]OM1\J?nEfTbg^B(9c+kkuxAlb"RBUJfl7pSdml03a0(xF%ZM62PcuUDn6#

So kann man wie in diesem Beispiel dann die Nummern
200712
Überall rumliegen lassen, keiner weiß, was es damit auf sich hat.
Die kombination der Kombination.

Hier der Code
def read_file_content(filename, line_number, start_index, num_characters):
"""Liest den Inhalt einer bestimmten Zeile ab einem bestimmten Zeichen und einer bestimmten Anzahl von Zeichen aus einer Textdatei."""
with open(filename, 'r') as file:
lines = file.readlines()
if line_number >= 0 and line_number < len(lines):
line_content = lines[line_number].rstrip('\n')
content = line_content[start_index:start_index+num_characters]
marked_content = line_content[:start_index] + "\033[1;31m" + content + "\033[0m" + line_content[start_index+num_characters:]
return marked_content
else:
return ""

def main():
filename = 'random.txt'
line_number = int(input("Gib die Zeilennummer ein, die du auslesen möchtest: ")) # Eingabe der Zeilennummer
start_index = int(input("Gib das Startzeichen (1-100) ein, ab dem du auslesen möchtest: ")) # Eingabe des Startzeichens
num_characters = int(input("Gib die Anzahl der Zeichen ein, die du auslesen möchtest: ")) # Eingabe der Anzahl der Zeichen

line_content = read_file_content(filename, line_number, start_index-1, num_characters) # Anpassung des Startindex (0-basiert)
print(f"Inhalt von Zeile {line_number}, ab Zeichen {start_index}: {line_content}")

if name == "main":
main()



Sudo kann man natürlich auch noch wenig gewünscht hinzufügen, dann kann man selbst wenn man drauf kommt wo der Code versteckt ist, das nicht ausführen


edit:
Beachte phyton startet bei 0 also ist zeile 20 eigentlich Zeile 21. (Im beispiel)
Das muss ich noch ausbessern.
 
Du hast also ein Python (!) Skript geschrieben das deine Passwörter in Klartext speichert?
Und wie ist das nun sicherer? :lol:
 
  • Gefällt mir
Reaktionen: jlnprssnr, DefconDev, Gizzmow und 2 andere
Du sagst du bist paranoid, aber warum nutzt du dann kryptografisch nicht sicheren Zufall? Passwörter in Textdatein? Im klartext?
Warum den random string nicht gleich in der richtigen Länge?


Zum 2. snippet:
Du validierst Deine Eingaben nicht.
Kein error handling.
Dad file würde ich auch nicht einfach so in den RAM lesen

Top passwort generator, wenn du ihn auf einem vertrauenswürdigen System betreibst, dass nicht mit dem internet verbunden wird, zu dem sonst niemand Zugang hat und auf dem sonst nichts betrieben wird. So wie es jetzt ist, wird das nichts.

deydi schrieb:
Sudo kann man natürlich auch noch wenig gewünscht hinzufügen
Macht es auch nicht sicherer

Was spricht den gegen ordentliche Module wie secrets und crypto oder urandom, pass, pwgen und Co?
 
  • Gefällt mir
Reaktionen: guzzisti
Gut zum lernen, zum benutzen aber vollkommen ungeeignet, da klartext. Da kannst die gleich in einer passwort.txt abspeichern oder als Zettel neben den Monitor hängen.
 
Die passwort.txt könnte man mit aespipe verschlüsseln.
Python könnte das eigentlich auch.
 
Ich bleib bei KeepassXC :)
 
  • Gefällt mir
Reaktionen: sh. und madmax2010
Es ist doch nur der erste Start.

Das der random generator noch offen ist, gehe ich noch an.
aber finde mal ohne die zahlen kombie in 10000 zeichen die richtigen.

Man muss auch nicht die Zeile als start punkt nehmen.
Es ist wie gesagt der anfang.


Ein selbst erstellter passwort generaror und ausleser.

Edit.
ein projekt das ich hier dokumentiere.
 
deydi schrieb:
ein projekt das ich hier dokumentiere.
ein Projekt das zeigt, wie man es nicht macht ;)

sorry, aber der gesamte Ansatz zeigt doch, dass du dir absolut überhaupt keine Gedanken um Sicherheit gemacht hast.
mir wurde als Werkstudent von meinem Chef vor über 30 Jahren eingebläut, dass ich keine einzige Zeile Code schreibe, solange das Pflichtenheft (so hat man das damals genannt) nicht abgesegnet ist. Maximal Struktogramme um das Konzept mit dem Kunden zu besprechen sind erlaubt.

du müsstest dir z.B. als erstes überlegen, wie du z.B. den Speicher wieder löschst, in dem die Passwörter abgelegt waren. Über das Grundkonzept ohne Verschlüsselung wurde ja schon gesprochen.

das sind nur zwei Punkte (und natürlich die Herangehensweise), die mir sagen, dass das ganze Projekt zum Scheitern verurteilt ist...
 
  • Gefällt mir
Reaktionen: Gizzmow, piepenkorn, H3llF15H und eine weitere Person
Ist ein tolles Beispiel von "Security through obscurity".
Einmal in die Bash History geguckt und nem Angreifer wird klar welches Script diese 6 Ziffern vom Zettel frisst.
Kann man entgegenwirken, aber damit schiebt man das Grundproblem nur vor sich her.

"Security through obscurity" ist besser als gar nix, aber einen Passwort-Manager kann man auch verstecken.
Der Knackpunkt ist dort aber das sowas nur ein weiteres Sicherheits-Layer ist, nicht das einzige.
 
natürlich kann man das Skript auch im einer Virtuelen maschine die vom intermet isoliert ist abspeichern.
Container lösungen gäbe es auch.
Man kann es auch in einen vera verschlüsselten ordner stecken. Usw
ich habe erst einmal ein skript geschrieben, das tut was es soll.

Natürlich ist alles das umständlich. Aber sicherheit und bequemlichkeit geht beides nicht.
 
  • Gefällt mir
Reaktionen: missi
deydi schrieb:
Passwortmanager sind zwar nett, aber auch durch Datenlecks angreifbar.
Alle? Oder redest du von Cloud Anbietern? Und du meinst selbst-gehostete PW Manager sind schlechter als dein Python Skript? Spitzfindig ist halt alles angreifbar, andere Software schreibst du aber trotzdem nicht selbst. Pauschal kann man aber davon ausgehen, dass bei existierenden Tools zumindest mal einige Leute mit mehr Ahnung von a) IT Security und b) Programmieren beteiligt sein werden. Aber waere auch seltsam wenn nicht, die machen das schon paar Jahre laenger vermutlich.

Ansonsten, mach ruhig, ist ja auch sowas wie dein Hobby-Projekt. Wenn du zudem auch Spass daran hast, warum nicht. Und dokumentiere hier ruhig was du machst, auch keine Scheu vor manchmal etwas harten Kommentaren. Die werden kommen bzw. hast du ja auch schon gesehen.

Minor: die Programmiersprache heisst Python, nicht Phyton - da du es immer und damit 4 mal falsch geschrieben hast, gehe ich davon aus dass es kein Typo ist, sondern du dir das vermutlich falsch eingepraegt hast. Aber wie gesagt, keine Kritik.
 
  • Gefällt mir
Reaktionen: madmax2010
deydi schrieb:
Aber sicherheit und bequemlichkeit geht beides nicht.
Das stimmt, deiner Lösung fehlt nämlich beides.

Wie gesagt, zum üben ist das nicht schlecht. Aber ums tatsächlich einzusetzen? lol garantiert nicht. Zu viele Lücken, da kannst du die Passwörter gleich wie in Chrome zb im Klartext speichern
 
  • Gefällt mir
Reaktionen: jlnprssnr und DEADBEEF
Manche haben hier wohl einiges falsch verstanden.

Meine hier gezeigten codes, sind das, was ich mir vorgestellt habe, wie es am Ende Funktonieren soll.

Im Prinzip, soll das eine Scrip eine 10000+ zeichen lange, zufällige Buchstaben, satz und Sonderzeichen lange text datei erzeugen.
Die braucht man im Grunde auch nicht verschlüsseln.

Ist eine Zeichensuppe.
Finde mal aus 100000 zufälligen Zeichen, das Passwort in einer einfachen txt datei.


die zweite Datei, soll eben, aus der txt datei und derer Zeichen ein Passwort ziehen.

Das funktoniert ja auch, im Prototype.

Es ist ja im moment absolut nicht mehr, als das. Ein Prototype, der erst einmal das macht was er soll.


Auf die Frage, warum selber machen.
Naja, ich verlass mich lieber auf meine Fehler, als auf die der anderen.

Manche Leute betreiben auch lieber ein eigenes NAS, als das sie sich auf eine Online Cloud verlassen.

natürlich kann man noch X andere sachen mit einbauen. Aber das Grundprinzip sollte ja so oder so laufen.

Ich mache das auch Hobby mäßig. es ist klar das manch einer den Kopf schütteln wird. Aber, ich lese nach jedem update durch, was Problematisch ist und bessere es aus.
 
vll. ein qr code als passwort was man immer mit dem handy bestätigen muss.. lol sogar windows anmeldung erst nach handy scann o0 naja so ala paranoja fan ist das witzig ^^
 
Viele haben ja schon was zum Konzept selbst und dessen Security Probleme geredet, die alle valide sind.
Ich gehe deswegen mal ein bisschen auf das Skript selbst, den Code sowie der Usability ein, vielleicht hilft es dir ja.

  1. Bitte das nächste mal den Code in Python tags posten, den kann man so gar nicht lesen oder direkt auf GitHub
  2. deydi schrieb:
    Sind nur 1000 Zeilen. Weil 100000 / 100 = 1000
  3. deydi schrieb:
    if total_length >= 100000:
    Warum baust du eine extra Abbruchbedingung ein wenn die while doch selbst schon die Abbruchbedingung hat. Die ganze main vom init Skript ist ein Zweizeiler:

    Python:
    def main():
        random_content_lines = [generate_random_string(100) for _ in range(10000)]
        save_to_file("random.txt", "\n".join(random_content_lines))
  4. deydi schrieb:
    characters = string.ascii_letters + string.digits + string.punctuation + " "
    Ist eine Konstante und muss nicht bei jedem Funktionsaufruf berechnet werden. Whitespaces habe ich persönlich nicht gern in einem Passwort, aber gut.
  5. Beide Skripte sind abhängig vom Verzeichnis in dem das Skript aufgerufen wird. Entweder du sagst deine Datenbankdatei random.txt soll immer genau neben dem Skript liegen, dann sowas wie:

    Python:
    import pathlib
    db = pathlib.Path(__file__).parent / "random.txt"
    Eher üblich wäre ein fixer Pfad irgendwo unter HOME oder natürlich konfigurierbar. So ist das Ganze sehr ungünstig benutzbar.
  6. Deine read_file_content hat ein Problem bei z.B. Startzeichen = 90 und Länge 12 ;-)
  7. Ich verstehe nicht warum read_file_content markiert und nicht einfach nur das Password anzeigt?
  8. Beim read skript würde mich die gestaffelte Eingabe nerven. Da wäre glaub auch ein nicht interaktives lesen gut mit einem Trenner, z.B.: pmag get 12-30-7
  9. Wo wir schon bei command line interface sind. Das Skript sollte denke mit nur einem CLI Interface kommen, so in etwa:
    pmag init --columns 10000 --rows 100 -o random.txt
    pmag get --database random.txt 13-25-10
    pmag config --database ~/pmag.db, Config könnte z.B. unter ~/.config/pmag.json liegen.
Achja dann doch noch was zum Konzept:
Die Aliase "23-15-32" merkst du dir dann alle oder schreibst du dir die dann doch noch wo auf?
Ich mein bei der Menge an Passwörtern die man so braucht kommt man ja so gut auf 30+.
Wie wäre dein Konzept für ein Mobilgerät oder benutzt du sowas nicht?
 
  • Gefällt mir
Reaktionen: TomH22, guzzisti und deydi
Bitopium schrieb:
merkst du dir dann alle oder schreibst du dir die dann doch noch wo auf?

Klassisches papier. (Oder letzten zahlen einer handynummer) 6 zahlen sind schneller einzutippen als zb. 120 zeichen.
Man kann das Tool dann aber auch als Container Passwort nutzten, für veracrypt zb.



ich werde deine tipps auf jeden fall umsetzen. Danke
 
Puhhhh.. Dir fehlen ganz massiv Grundlagen.
PW-Manager können Probleme haben, das stimmt. Die bekannteren PW-Manager sind von erfahrenden Leuten entworfen und umgesetzt sowie mindestens durch ein Review durch. Wenn diese Softwareangebote Probleme haben, wirst du als Anfänger richtig auf die Schnauze fallen!

Dein Konzept ist Mist!
Die Zufallsquelle ist kein Zufall im kryptografischem Sinne!
Du hast gar kein Konzept von Speichersicherheit! Du Schreibst das Secret (mit etwas Rauschen, welches WEIT unter der Entropie eines brauchbaren PWs liegt) ganz im Gegenteil sogar ins Dateisystem!
Dein Secret ist nicht manipulationssicher!

Lektüre für Anfänger:
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html
 
  • Gefällt mir
Reaktionen: jlnprssnr, Gizzmow, guzzisti und eine weitere Person
Zurück
Oben