Mein Ver/Entschlüsseln - Eure Meinung
- TroaX
- Beiträge: 660
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
- Wohnort: NRW
- Kontaktdaten:
Re: Mein Ver/Entschlüsseln - Eure Meinung
Kein Passwort speichern! Denke bitte an das AES Interface! Beim cracken kann die Schlüsselerzeugung übersprungen werden!
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Mein Ver/Entschlüsseln - Eure Meinung
Ein bisschen muss ich widersprechen. Den Hash des Passworts kann man schon speichern, aber nur, wenn es lange genug dauert den Hash zu generieren (Stichwort "Runden") und am besten auch nur mit Salt.
Wenn es darauf hinausläuft, dass man mit dem Passwort weitere Dinge verschlüsselt, dann muss man den Hash nicht speichern, da man das entschlüsselte Ergebnis verifizieren kann, aber sonst tut das jede anständige Webseite genau so.
Wenn es darauf hinausläuft, dass man mit dem Passwort weitere Dinge verschlüsselt, dann muss man den Hash nicht speichern, da man das entschlüsselte Ergebnis verifizieren kann, aber sonst tut das jede anständige Webseite genau so.
- TroaX
- Beiträge: 660
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
- Wohnort: NRW
- Kontaktdaten:
Re: Mein Ver/Entschlüsseln - Eure Meinung
Bitte jetzt nichts durcheinander bringen. In Fällen, wo nur ein Hash mit dem dazugehörigen Passwort gegengeprüft werden soll, ist das Speichern unausweichlich. Bei einem Einsatz wie diesem dient es aber als Schlüssel für die Verschlüsselung. Und da darf man das definitiv nicht, da jede noch so kryptografisch sichere Routine zur Schlüsselerzeugung obsolet wird.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Re: Mein Ver/Entschlüsseln - Eure Meinung
Hallo Allerseits.
Frage: Ist es nicht sogar oberwichtig, einen weiteren Schlüssel anzulegen?
Denn sonst kann ich mein Passwort auch gleich direkt speichern.
Der Eindringling braucht sonst doch nur eine Befehlszeile, um mein Prg zu starten.
Er nimmt ein eigenes Passwort, erzeugt daraus den SHA3- Code,
(SHA3$ = StringFingerprint(Sein eigenes Passwort, #PB_Cipher_SHA3, 512)
trägt sich dieses SHA3- Wort in die Datei ein, in der mein SHA- Code liegt
und startet das Prg. Nun mit seinem Passwort.
Auch ein mehrfaches nachvercoden des codes bringt so nichts mehr.
Die Frage ist doch viel mehr, wie wird ein Schlüssel mit dem Passwort verschmolzen?
Beispiel:
Oder sehe ich da wieder was falsch?
Gruß: Bernd
Frage: Ist es nicht sogar oberwichtig, einen weiteren Schlüssel anzulegen?
Denn sonst kann ich mein Passwort auch gleich direkt speichern.
Der Eindringling braucht sonst doch nur eine Befehlszeile, um mein Prg zu starten.
Er nimmt ein eigenes Passwort, erzeugt daraus den SHA3- Code,
(SHA3$ = StringFingerprint(Sein eigenes Passwort, #PB_Cipher_SHA3, 512)
trägt sich dieses SHA3- Wort in die Datei ein, in der mein SHA- Code liegt
und startet das Prg. Nun mit seinem Passwort.
Auch ein mehrfaches nachvercoden des codes bringt so nichts mehr.
Code: Alles auswählen
For i = 1 To Len(pw$)*Len(pw$)
SHA3a$ = StringFingerprint(SHA3a$, #PB_Cipher_SHA3, 512)
;Debug SHA3a$ ; Wird so auf Laufwerk gespeichert
Next
Beispiel:
Code: Alles auswählen
Procedure.s erzeuge_schluessel(passwort$, matrix$)
For i = 1 To Len(passwort$)
a1 = i : a2 = i + 1
If a2 > Len(passwort$) : a2 - Len(passwort$) : EndIf
x = Asc(Mid(passwort$, a1, 1))
y = Asc(Mid(passwort$, a2, 1))
pw$ + Mid(matrix$, x, 1) + Mid(matrix$, y, 1)
Next
pw$ = pw$ + passwort$ + pw$
; Könnte man noch mehr verbiegen
ProcedureReturn pw$
EndProcedure
Gruß: Bernd
PB 5.31 (x86) & (x64) Win10
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mein Ver/Entschlüsseln - Eure Meinung
Wozu? Dein Passwort wird doch nirgends gespeichert, sondern nur der Hashwert, der sich nicht umkehren läßt. Der Hashwert dient nur der Überprüfung auf Richtigkeit des Passwortes, das nirgends gespeichert ist. So läßt sich, bei richtigem Passwort, alles fehlerfrei wieder entschlüsseln und nur dann.BSP hat geschrieben:Frage: Ist es nicht sogar oberwichtig, einen weiteren Schlüssel anzulegen?
Denn sonst kann ich mein Passwort auch gleich direkt speichern.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Mein Ver/Entschlüsseln - Eure Meinung
Hallo ts-soft.
Ja, aber was wenn der Eindringling sich ein eigenes Passwort nimmt,
den zum Hashwert umwandelt, den Hashwert an meiner Stelle in die Datei einträgt?
Dann findet mein Prg doch seinen Hashwert, zu dem sogar nur er das Passwort kennt.
Oder?
Gruß: Bernd
Ja, aber was wenn der Eindringling sich ein eigenes Passwort nimmt,
den zum Hashwert umwandelt, den Hashwert an meiner Stelle in die Datei einträgt?
Dann findet mein Prg doch seinen Hashwert, zu dem sogar nur er das Passwort kennt.
Oder?
Gruß: Bernd
PB 5.31 (x86) & (x64) Win10
- man-in-black
- Beiträge: 362
- Registriert: 21.08.2006 17:39
Re: Mein Ver/Entschlüsseln - Eure Meinung
auch wenn der Hash so umgangen wird, muss mit dem PW trotzdem noch die Entschlüsselung erfolgen.
Der Hash soll nur verhindern, dass man in 90% der Fälle umsonst mit der Entschlüsselung beginnt, wenn das PW
nicht stimmt.
Er macht die Datei maximal unbrauchbar für alle.
MFG
MIB
Der Hash soll nur verhindern, dass man in 90% der Fälle umsonst mit der Entschlüsselung beginnt, wenn das PW
nicht stimmt.
Er macht die Datei maximal unbrauchbar für alle.
MFG
MIB
Re: Mein Ver/Entschlüsseln - Eure Meinung
@men-in-black
Das ist genau der Gag - wenn das Passwort nicht stimmt *SOLL* man ewig zum überprüfen benötigen. Dadurch wird es erst sicher. Wenn ich schnell das Passwort überprüfen kann, dann hab ich keinerlei Sicherheit.
Mir war langweilig, ich hab mal ein Grundgerüst ohne Interface gebastelt:
Ohne Debugger dauert das ganze Program (ohne ausgabe übrigens) um die 8s (I7 hier), weil dreimal ein Key berechnet wird.
Das ist genau der Gag - wenn das Passwort nicht stimmt *SOLL* man ewig zum überprüfen benötigen. Dadurch wird es erst sicher. Wenn ich schnell das Passwort überprüfen kann, dann hab ich keinerlei Sicherheit.
Mir war langweilig, ich hab mal ein Grundgerüst ohne Interface gebastelt:
Code: Alles auswählen
;todo counter variable!
EnableExplicit
UseSHA3Fingerprint()
#id=$1234567887654321
#SaltByte=32
#KeyBits=256
#KeyByte=#KeyBits/8
#IVCount=10
Structure RndData
byte.a[32]
EndStructure
Structure Password
Title.s
User.s
Password.s
RndData.RndData
EndStructure
Structure json
List passwords.password()
EndStructure
Structure iv
byte.a[16]
EndStructure
Structure CryptFileHeader
id.q
count.l
salt.a[#SaltByte]
iv.iv[#IVCount]
;json.b[0]
EndStructure
Structure Cryptkey
byte.a[#KeyByte]
EndStructure
Global MasterPassword.s
Global FileHeader.CryptFileHeader
Global CryptKey.CryptKey
Global jsonStruct.json
Procedure StrToByte(str.s,*out,byte)
Protected i
For i=0 To byte-1
PokeA(*out, Val("$" + Mid(str,i*2+1,2)) )
*out+1
Next
EndProcedure
Procedure CreateCryptKey()
Protected *buffer
Protected *write
Protected size,fp
Protected hash.s
Protected i
size=StringByteLength(MasterPassword,#PB_UTF8)+#SaltByte
*buffer=AllocateMemory(size)
If *buffer=0
ProcedureReturn #False
EndIf
*write=*buffer+PokeS(*buffer,MasterPassword,-1,#PB_String_NoZero|#PB_UTF8)
CopyMemory(@FileHeader\salt,*write,#SaltByte)
fp=StartFingerprint(#PB_Any,#PB_Cipher_SHA3,#KeyBits)
AddFingerprintBuffer(fp,*buffer,size)
hash.s=FinishFingerprint(fp)
StrToByte(hash,@CryptKey,#KeyByte)
For i=0 To FileHeader\count
fp=StartFingerprint(#PB_Any,#PB_Cipher_SHA3,#KeyBits)
AddFingerprintBuffer(fp,CryptKey,#KeyByte)
hash.s=FinishFingerprint(fp)
StrToByte(hash,@CryptKey,#KeyByte)
Next
Debug "MasterPassword:"+MasterPassword
Debug "Key:"+hash
FreeMemory(*buffer)
ProcedureReturn #True
EndProcedure
Procedure SaveCrypt(file.s)
Protected out,js
Protected size,*buffer,*out
Protected ivnb
Protected ret
FileHeader\id=#id
FileHeader\count= CryptRandom(899999)+100000
CryptRandomData(@FileHeader\salt,#SaltByte)
CryptRandomData(@FileHeader\iv,SizeOf(iv)*#IVCount)
CreateCryptKey()
Repeat
out=CreateFile(#PB_Any,file)
If out=0
Break
EndIf
js=CreateJSON(#PB_Any)
If js=0
Break
EndIf
InsertJSONStructure( JSONValue(js), @jsonStruct, json)
size=ExportJSONSize(js)
If size<16:size=16:EndIf
*buffer=AllocateMemory(size*2)
*out=*buffer+size
If *buffer=0
Break
EndIf
ivnb=CryptRandom(9)
Debug "useIV:"+ivnb
If ExportJSON(js,*buffer,size)=0
Break
EndIf
If AESEncoder(*buffer,*out,size,@CryptKey,#KeyBits,@FileHeader\iv[ivnb])=0
Break
EndIf
Debug ComposeJSON(js)
Debug "Header:"+SizeOf(cryptFileHeader)
WriteData(out,FileHeader,SizeOf(CryptFileHeader))
Debug "AES-Data:"+size
WriteData(out,*out,size)
ret=#True
Until #True
If out
CloseFile(out):out=0
EndIf
If *buffer
FreeMemory(*buffer):*buffer=0
EndIf
If js
FreeJSON(js):js=0
EndIf
Debug "SaveCrypt:"+ret
ProcedureReturn ret
EndProcedure
Procedure LoadCrypt(file.s)
Protected in
Protected size
Protected ret=#False
Protected *buffer
Protected *out
Protected js
Protected ivnb
Repeat
in=ReadFile(#PB_Any,file)
If in=0:Break:EndIf
size=Lof(in)
If size<=SizeOf(CryptFileHeader): Break :EndIf
size-SizeOf(CryptFileHeader)
ReadData(in,@FileHeader,SizeOf(CryptFileHeader))
If FileHeader\id<>#id:Break:EndIf
*buffer=AllocateMemory(size*2)
*out=*buffer+size
If *buffer=0:Break:EndIf
ReadData(in,*buffer,size)
CreateCryptKey()
For ivnb=0 To 9
Debug "Test iv "+ivnb
If AESDecoder(*buffer,*out,size,@CryptKey, #KeyBits,@FileHeader\iv[ivnb])
js=CatchJSON(#PB_Any,*out,size)
If js
Break
EndIf
EndIf
Next
If js=0:Break:EndIf
Debug ComposeJSON(js)
ExtractJSONStructure(JSONValue(js), @jsonStruct, json)
ret=#True
Until #True
If in
CloseFile(in):in=0
EndIf
If *buffer
FreeMemory(*buffer):*buffer=0
EndIf
If js
FreeJSON(js):js=0
EndIf
Debug "LoadCrypt"+ret
ProcedureReturn ret
EndProcedure
;-init
If OpenCryptRandom()=#False
Debug "Crypt-Error"
End
EndIf
Define timer=ElapsedMilliseconds()
;-userinput!
MasterPassword="irgendwasWirresZumTestä89"
;Simulate passwordinput
Debug "******** Add Passwords"
AddElement( jsonStruct\passwords())
jsonStruct\passwords()\Title="HomePage1"
jsonStruct\passwords()\user="Igel"
jsonStruct\passwords()\password="Password1"
AddElement( jsonStruct\passwords())
jsonStruct\passwords()\Title="HomePage2"
jsonStruct\passwords()\user="Maus"
jsonStruct\passwords()\password="Password2"
AddElement( jsonStruct\passwords())
jsonStruct\passwords()\Title="HomePage3"
jsonStruct\passwords()\user="Hügel"
jsonStruct\passwords()\password="Password3"
;Add Randomvalues
ForEach jsonStruct\passwords()
RandomData(jsonStruct\passwords()\RndData,SizeOf(RndData))
Next
;savefile
Debug "******** Save"
SaveCrypt("demo.passwords")
;wir schreiben sinnlose daten
Debug "******** Clear"
FillMemory(FileHeader,SizeOf(CryptFileHeader))
FillMemory(CryptKey,SizeOf(CryptKey))
FreeList(jsonStruct\passwords())
;loadfile
Debug "******** load"
LoadCrypt("demo.passwords")
Debug "******** output"
ForEach jsonStruct\passwords()
Debug jsonStruct\passwords()\Title
Debug " "+jsonStruct\passwords()\user
Debug " "+jsonStruct\passwords()\password
Next
MessageRequester("Test", " time:"+Str(ElapsedMilliseconds()-timer))
Zuletzt geändert von GPI am 01.07.2017 08:51, insgesamt 1-mal geändert.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: Mein Ver/Entschlüsseln - Eure Meinung
Hallo men in black.
Ok, verstehe. Hatte wohl das berüchtigte Brett vorm Kopf.
Meine Daten liegen ja nicht im Klartext in meinem Speicher, (Dateien, Variablen),
sondern ebenfalls mit meinem Passwort verbunden verschlüsselt.
Startet mein Prg nun mit einem fremden Passwort, wird nur Datenmüll erzeugt.
Ok. Weitere fragen werden sicher noch folgen.
Also Gruß & Dank an Alle.
Bernd
Ps. Hallo GPI.
Du warst etwas schneller, ich war noch am schreiben.
Ich werde mir Dein Prg noch anschauen.
Danke auch an Dich schon mal.
Ok, verstehe. Hatte wohl das berüchtigte Brett vorm Kopf.
Meine Daten liegen ja nicht im Klartext in meinem Speicher, (Dateien, Variablen),
sondern ebenfalls mit meinem Passwort verbunden verschlüsselt.
Startet mein Prg nun mit einem fremden Passwort, wird nur Datenmüll erzeugt.
Ok. Weitere fragen werden sicher noch folgen.
Also Gruß & Dank an Alle.
Bernd
Ps. Hallo GPI.
Du warst etwas schneller, ich war noch am schreiben.
Ich werde mir Dein Prg noch anschauen.
Danke auch an Dich schon mal.
PB 5.31 (x86) & (x64) Win10
- TroaX
- Beiträge: 660
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
- Wohnort: NRW
- Kontaktdaten:
Re: Mein Ver/Entschlüsseln - Eure Meinung
@BSP: Du scheinst meinen Beitrag irgendwie nicht richtig gelesen zu haben, oder?
Das Passwort wird weder als Hash und vor allem erst recht nicht in Klartext gespeichert. Da gibt es auch keinen Grund für. Die Verschlüsselung ist Grundsätzlich dann sicher, wenn der Schlüssel für die Ver-/Entschlüsselung nicht gespeichert wird. Der Nutzer muss diesen also immer bei Programmstart eingeben. Ob das Passwort korrekt ist oder nicht wird geprüft, indem die entschlüsselten Daten auf Validität geprüft werden. Daten invalide = Passwort falsch! Es spricht nichts dagegen, die Daten auf Validität zu prüfen, anstatt einen zwei Hashwerte zu vergleichen. Und wenn du (wie ich es auch schon geschrieben habe) ein strukturiertes Format nimmst, für das PB auch einen Parser hat (XML oder JSON), sagt dir dessen Parser, ob die Daten valide sind oder nicht.
Das ist der Natur geschuldet, das die Erzeugung eines Schlüssels absolut unabhängig von der Verschlüsselung selbst vorgenommen werden. Liegen in dem Programm oder in den dafür vorgesehenen Files alle Daten vor, die zum entschlüsseln der Daten benötigt werden, können die Daten von dritten entschlüsselt werden, ohne das Passwort zu kennen!
Per Reverse-Engineering ist es möglich, die Routinen nachzuvollziehen, die die Schlüssel und Vektoren aus diesen Daten extrahieren. Der Angreifer kann in jeder Programmiersprache sich dann Routinen schreiben, die automatisch diese Daten zusammentragen und dann mit dem AES-256 die Daten entschlüsseln. Die AES-Algorithmen sind spezifizierte Standards und liefern bei identischen Schlüsseln und Vektoren identische Ergebnisse. Genauso ist es mit MD5, SHA1, SHA2, SHA3 oder Blowfisch. All diese Algorithmen sind spezifizierte Standards. Ein Angreifer will an die Daten. Und da geht er den Weg des geringsten Widerstandes und der wäre nun einmal, mit gespeicherten Daten, die er aus den Dateien ermitteln kann, direkt an den Algorithmus zu gehen. Denn dieser wird zwar von deinem Programm verwendet. Aber die verschlüsselten Daten sowie die Verschlüsselungsmethode sind von deinem Programm vollkommen unabhängig! Das Passwort interessiert nicht, wenn er beim Reverse-Engineering feststellt, das er den Schlüssel auch direkt aus gespeicherten Daten extrahieren kann. Und das wäre effizient möglich. Das Cracken eines Hashes nicht! Wenn du also den Schlüssel nicht speicherst, wird der Angreifer feststellen, das er eine völlig unbekannte Variable cracken muss. Und es bleibt zu bezweifeln, das er das versuchen wird.
Also nochmal auf den Punkt: Du musst das Passwort (auch als Hash) nicht speichern und ich rate davon auch dringlichst ab!
PS: Ein unsicheres Passwort betrifft eine Person. Beim speichern von Schlüsseln und gehashten Passwörtern hingegen könntest du alle Nutzer dieses Programms kompromittieren. Nehmt dieses Thema nicht auf die leichte Schulter!
EDIT: Da haben sich ein paar Beiträge zwischengeschoben
Das Passwort wird weder als Hash und vor allem erst recht nicht in Klartext gespeichert. Da gibt es auch keinen Grund für. Die Verschlüsselung ist Grundsätzlich dann sicher, wenn der Schlüssel für die Ver-/Entschlüsselung nicht gespeichert wird. Der Nutzer muss diesen also immer bei Programmstart eingeben. Ob das Passwort korrekt ist oder nicht wird geprüft, indem die entschlüsselten Daten auf Validität geprüft werden. Daten invalide = Passwort falsch! Es spricht nichts dagegen, die Daten auf Validität zu prüfen, anstatt einen zwei Hashwerte zu vergleichen. Und wenn du (wie ich es auch schon geschrieben habe) ein strukturiertes Format nimmst, für das PB auch einen Parser hat (XML oder JSON), sagt dir dessen Parser, ob die Daten valide sind oder nicht.
Das ist der Natur geschuldet, das die Erzeugung eines Schlüssels absolut unabhängig von der Verschlüsselung selbst vorgenommen werden. Liegen in dem Programm oder in den dafür vorgesehenen Files alle Daten vor, die zum entschlüsseln der Daten benötigt werden, können die Daten von dritten entschlüsselt werden, ohne das Passwort zu kennen!
Per Reverse-Engineering ist es möglich, die Routinen nachzuvollziehen, die die Schlüssel und Vektoren aus diesen Daten extrahieren. Der Angreifer kann in jeder Programmiersprache sich dann Routinen schreiben, die automatisch diese Daten zusammentragen und dann mit dem AES-256 die Daten entschlüsseln. Die AES-Algorithmen sind spezifizierte Standards und liefern bei identischen Schlüsseln und Vektoren identische Ergebnisse. Genauso ist es mit MD5, SHA1, SHA2, SHA3 oder Blowfisch. All diese Algorithmen sind spezifizierte Standards. Ein Angreifer will an die Daten. Und da geht er den Weg des geringsten Widerstandes und der wäre nun einmal, mit gespeicherten Daten, die er aus den Dateien ermitteln kann, direkt an den Algorithmus zu gehen. Denn dieser wird zwar von deinem Programm verwendet. Aber die verschlüsselten Daten sowie die Verschlüsselungsmethode sind von deinem Programm vollkommen unabhängig! Das Passwort interessiert nicht, wenn er beim Reverse-Engineering feststellt, das er den Schlüssel auch direkt aus gespeicherten Daten extrahieren kann. Und das wäre effizient möglich. Das Cracken eines Hashes nicht! Wenn du also den Schlüssel nicht speicherst, wird der Angreifer feststellen, das er eine völlig unbekannte Variable cracken muss. Und es bleibt zu bezweifeln, das er das versuchen wird.
Also nochmal auf den Punkt: Du musst das Passwort (auch als Hash) nicht speichern und ich rate davon auch dringlichst ab!
PS: Ein unsicheres Passwort betrifft eine Person. Beim speichern von Schlüsseln und gehashten Passwörtern hingegen könntest du alle Nutzer dieses Programms kompromittieren. Nehmt dieses Thema nicht auf die leichte Schulter!
Das würde nur gehen, wenn der Schlüssel für die Verschlüsselung unabhängig vom Passwort wäre. Und dann haste ein größeres Problem. Weil dann haste irgendwo bereits den Schlüssel für die Verschlüsselung gespeichert. Das ist da fatalste von allen.Ja, aber was wenn der Eindringling sich ein eigenes Passwort nimmt,
den zum Hashwert umwandelt, den Hashwert an meiner Stelle in die Datei einträgt?
Dann findet mein Prg doch seinen Hashwert, zu dem sogar nur er das Passwort kennt.
Oder?
Und genau das ist ein fataler Trugschluss. Der Entschlüsselungsversuch dauert deutlich länger als das Hashen eines Passwortes. Was würdest du als Angreifer eher versuchen? Die Verschlüsselung cracken und 1.000 Versuche die Minute schaffen oder den Hash cracken und 100.000 Versuche die Sekunde schaffen? Und wer das Passwort über den Passwordhash gecracked bekommt, kann über das Tool dann auch die Daten entschlüsseln. Du hast also beim Versuch, Rechenzeit durch den Wegfall von Fehlentschlüsselung zu sparen, dem Programm eine Sicherheitslücke verpasst.auch wenn der Hash so umgangen wird, muss mit dem PW trotzdem noch die Entschlüsselung erfolgen.
Der Hash soll nur verhindern, dass man in 90% der Fälle umsonst mit der Entschlüsselung beginnt, wenn das PW
nicht stimmt.
EDIT: Da haben sich ein paar Beiträge zwischengeschoben
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript