webForumDet fria alternativet

"Glömt lösenord"-funktion...

PHP

11 svar · 392 visningar · startad av stevenet

Medlem sedan juni 20001 251 inlägg
Frågan#1

... som skickar lösenordet till den angivna e-postadressen. Hur gör jag det om lösenordet är krypterat och inlagt i en MySQL-databas?
Tabell:
id, epost, anvandarnamn, losenord
Låt oss säga att "saltet" är 5u.

------------------
SteveNet - stevenet@webmarkit.net
Stjäl inte mer än vad du kan bära, staten hatar konkurrens.

Medlem sedan dec. 19992 555 inlägg
#2

De vanliga sätten att kryptera lösenord är med crypt() (som använder DES) eller md5(). Har jag fel när jag antar att det är någon av dessa du använt vid krypteringen?

I.s.f. måste jag tyvärr göra dig besviken. Dessa algoritmer är envägsalgoritmer. D.v.s. de går inte (skall inte gå i.a.f.) att dekryptera.

Vill du kunna göra vad du försöker att göra så måste du antingen lagra lösenordet i klartext någonstans, eller använda krypteringsalgoritmer som går att dekryptera. Det senare låter kanske jättesäkert, men är det inte eftersom du även måste lagra dekrypteringsnyckeln på servern för att det skall fungera (inte mycket bättre än att lagra lösenorden i klartext alltså).

Kort sagt - vill du ha denna funktion så måste du offra säkerheten.

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 03 nov 2000]

Medlem sedan juni 20001 251 inlägg
#3

:(

------------------
SteveNet - stevenet@webmarkit.net
Stjäl inte mer än vad du kan bära, staten hatar konkurrens.

Medlem sedan dec. 19992 555 inlägg
#4

Se det inte så negativt. ;)

Man använder ju envägsalgoritmer av en anledning. Och det är just för att höja säkerheten. Glädj dig alltså åt att du har ett säkrare inloggningssystem. :)

Det är ju hela tiden en avvägningsfråga det här med säkerhet. Ibland kanske man inte behöver den extra säkerhet som krypterade lösenord ger (beror ju på tillämpningen), och då kan man välja minskad säkerhet till förmån för ökad funktionalitet. Beror också på omständigheterna. Om det är din egen server är det t.ex. lättare att hålla klartext-lösenord hemliga än om du delar server med 100 andra på ett webhotell. Å andra sidan - om dessa 100 ändå kan komma åt de sidor du försöker skydda, utan lösenord, så kan man ju fråga sig hur mycket säkrare det totala systemet blir av att man använder krypterade lösenord.

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 03 nov 2000]

Medlem sedan juni 20001 251 inlägg
#5

:)

------------------
SteveNet - stevenet@webmarkit.net
Stjäl inte mer än vad du kan bära, staten hatar konkurrens.

Medlem sedan juni 20001 521 inlägg
#6

Om någon har glömt sitt lösenord kan du väl bara slumpa fram ett nytt lösenord och skicka det till användaren? Sedan krypterar du lösenordet och lägger in det i databasen. Det gamla kan ju inte ha varit så bra i alla fall.

------------------
Gislaved.net
"Tänk på vad du säger så att du inte säger vad du tänker."

Medlem sedan apr. 20007 588 inlägg
#7

Självklart går det att dekryptera DES. Det finns ännu inget matematiskt bevis att någon känd algoritm är helt oknäckbar.

1995 uppskattades följande värden för hårdvaruknäckning av DES-krypton med s.k brute-force, givetvis har dessa värden ändrats avsevärt nu 5 år senare, men se det som en fingervisning:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
                 Nyckellängd
Kostnad    64      80      112     128  
-------    --      --      ---     ---
$100K      1 år    70000år 10^14år 10^19år  
$1M        37dgr   7000år  10^13år 10^18år
$10M       4dgr    700år   10^12år 10^17år  
$100M      9h      70år    10^11år 10^16år
$1G        1h      7år     10^10år 10^15år
$10G       5.4min  245dgr  10^9år  10^14år 
$100G      32s     24dgr   10^8år  10^13år
$1T        3s      2.4dgr  10^7år  10^12år
$10T       0.3s    6h      10^6år  10^11år
</font>

Som du ser är det relativt kostsamt och tidskrävande, så jag förslår att du gör som det tipsats om här ovan. Generera ett nytt lösenord och skicka detta till användaren via epost. :e

[r]Ahhrgg!! Fixed-widht på perl-taggen vore mer än välkommet!!
------------------
"Common sense is the collection of prejudices acquired by age 18" - Albert Einstein

[Redigerat av sgtpepper den 04 nov 2000]

Medlem sedan juni 20001 251 inlägg
#8

Men användaren bestämmer själv sitt lösenord.
Vad tror ni om att kryptera med rövarspråket? ;)

------------------
SteveNet - stevenet@webmarkit.net
Stjäl inte mer än vad du kan bära, staten hatar konkurrens.

Medlem sedan apr. 20007 588 inlägg
#9

Kryptera det med vad du vill. Det finns ju olika hänsynstaganden när man väljer kryptoalgoritmer. Det hela beror ju på om du vill stoppa "major governments", din lillasyster eller något mitt i mellan från att läsa lösenorden i klartext.

------------------
"Common sense is the collection of prejudices acquired by age 18" - Albert Einstein

Medlem sedan dec. 19992 555 inlägg
#10

sgtpepper:

Självklart går det att dekryptera DES. Det finns ännu inget matematiskt bevis att någon känd algoritm är helt oknäckbar.

I.o.f.s. Men då får du ju snarare säga att man inte vet om det går att dekryptera DES eller inte (observera att den version av DES som används av crypt() inte är samma sak som den symmetriska krypteringsalgoritmen DES, som idag anses ganska osäker - den version av DES som crypt() använder är en envägsalgoritm utformad så att det bara skall gå att kryptera, inte dekryptera). Det finns mig veterligen inget känt fall där någon lyckats.

1995 uppskattades följande värden för hårdvaruknäckning av DES-krypton med s.k brute-force, ...

Att få fram ett lösenord med "brute-force" har ingenting med dekryptering att göra. Och jag hävdar fortfarande att det inte går att dekryptera lösenord som är krypterade med crypt() (den tabell du anger verkar just beskriva den symmetriska algoritmen DES - alltså inte samma sak som crypt() använder, som är en envägsalgoritm). I.a.f. inte med de kunskaper som finns idag - och det är ju det som är intressant i sammanhanget (den dagen som motsatsen eventuellt bevisas kommer frågeställningen att sakna relevans, eftersom man då med största sannolikhet kommer sluta använda DES i dessa sammanhang). :)

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 05 nov 2000]

Medlem sedan apr. 20007 588 inlägg
#11

Men då får du ju snarare säga att man inte vet om det går att dekryptera DES eller inte

Ja, det har du rätt i. Fel ordval av mig :)

Och jag hävdar fortfarande att det inte går att dekryptera lösenord som är krypterade med crypt() (den tabell du anger verkar just beskriva den symmetriska algoritmen DES - alltså inte samma sak som crypt() använder, som är en envägsalgoritm)

Ok, inte dekryptera, men väl knäcka. Med en brute-force attack så kommer du slutligen att ha fått fram klartextmeddelandet. Frågan är bara hur många miljarder år det tar.

Den enda skillnaden mellan crypt(3) (som jag har uppfattat det i vart fall) är ju att man utökat crypt(3) med en ytterligare permutering med ett 12-bitars saltvärde.

Hmm.. detta vart lite väl off-topic kanske? :)

------------------
"Common sense is the collection of prejudices acquired by age 18" - Albert Einstein

Medlem sedan dec. 19992 555 inlägg
#12

Ännu mer off-topic då (det har ju dock samband med ursprungsfrågan, genom att det fördjupar de svar som givits). :)

Den enda skillnaden mellan crypt(3) (som jag har uppfattat det i vart fall) är ju att man utökat crypt(3) med en ytterligare permutering med ett 12-bitars saltvärde.

I princip är det saltet som skiljer, ja. Man krypterar dessutom ett antal gånger efter varandra.

Men det som gör att man inte kan dekryptera ett krypterat lösenord beror på att man inte krypterar lösenordet på vanligt sätt, utan man utgår från ett block av nollor och använder lösenordet som nyckel för att kryptera detta block med nollor. Sedan kör man DES ett antal gånger (tror det är 25) och packar till slut om resultatet till en skrivbar sträng. Men denna sträng är alltså egentligen inte det krypterade lösenordet, utan ett antal nollor krypterade med lösenordet som nyckel (ett antal gånger).

Som sagt - jag har aldrig hört talas om någon som ens har varit i närheten av att få ut klartexten ur ett lösenord krypterat med crypt() (förutom de fall där "brute-force" använts). :)

Dock har crypt() byggd på DES svagheten att bara 8 tecken i lösenorden är signifikanta (att ha lösenord längre än 8 tecken ökar alltså inte säkerheten). Och därför har man börjat använda andra algoritmer (bl.a. md5).

------------------
Robban < robban@lipogram.com >

267 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)