PDA

Bekijk Volledige Versie : Encryption



Eduard Bekker
08/11/05, 14:00
Beste mensen,

Als je de functie 'crypt()' gebruikt, wordt een wachtwoord gecodeerd.
Echtiter, dat wordt elke keer dat je dat doet een andere code.

Dat schiet natuurlijk niet op, als je een geëncrypte wachtwoord wilt
gebruiken om in te loggen.

Is er ook een mogelijkheid om te encrypten met steeds de dezelfde code als
resultaat, zoals met .htacess en .htpasswd?


--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

robert
08/11/05, 14:00
Eduard Bekker <e.bekker@layout.nl>:
> Als je de functie 'crypt()' gebruikt, wordt een wachtwoord gecodeerd.
> Echtiter, dat wordt elke keer dat je dat doet een andere code.

Dat gebeurt als je crypt() geen salt-parameter meegeeft.

> Is er ook een mogelijkheid om te encrypten met steeds de dezelfde code
> als resultaat, zoals met .htacess en .htpasswd?

md5() o.i.d. gebruiken.

--
robert

Eduard Bekker
08/11/05, 14:15
Op de heugelijke dag van 08-11-2005 14:02, schreef "Erik Hensema" in
slrndn18eu.9ff.usenet@bender.home.hensema.net, <usenet@smac.hensema.net>
pakweg het volgende:

> Install http://support.microsoft.com/kb/900930 to read this message.
> begin quote of Eduard Bekker (e.bekker@layout.nl):
>> Als je de functie 'crypt()' gebruikt, wordt een wachtwoord gecodeerd.
>> Echtiter, dat wordt elke keer dat je dat doet een andere code.
>>
>> Dat schiet natuurlijk niet op, als je een geëncrypte wachtwoord wilt
>> gebruiken om in te loggen.
>>
>> Is er ook een mogelijkheid om te encrypten met steeds de dezelfde code als
>> resultaat, zoals met .htacess en .htpasswd?
>
> htpasswd gebruikt volgens mij ook crypt() hoor.
>
> crypt() is voor het *opslaan* van wachtwoorden. De
> authentificatieserver zal een plaintext wachtwoord moeten krijgen
> om die te checken.
>
> Jij wil blijkbaar een wachtwoord gecodeerd *verzenden*. Da's
> fundementeel anders.
>
> In dat geval sla je een wachtwoord in plaintext op.

Dat is het probleem: waar kun je dat wachtwoord veilig opslaan?


--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

Arnoud Galactus Engelfriet
08/11/05, 14:30
In article <BF96630B.10B56%e.bekker@layout.nl>,
Eduard Bekker <e.bekker@layout.nl> wrote:
>Dat is het probleem: waar kun je dat wachtwoord veilig opslaan?

Je moet het wachtwoord niet opslaan, maar alleen de crypt()ed
versie daarvan. En dat doe je op de server die moet controleren
of er toegang verleend moet gaan worden.

Arnoud

--
Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/

Eduard Bekker
08/11/05, 16:15
Op de heugelijke dag van 08-11-2005 14:22, schreef "Arnoud "Galactus"
Engelfriet" in dkq8qb$hck$1@toad.stack.nl, <galactus@stack.nl> pakweg het
volgende:

> In article <BF96630B.10B56%e.bekker@layout.nl>,
> Eduard Bekker <e.bekker@layout.nl> wrote:
>> Dat is het probleem: waar kun je dat wachtwoord veilig opslaan?
>
> Je moet het wachtwoord niet opslaan, maar alleen de crypt()ed
> versie daarvan.

Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
anders...


--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

Hans Spaans
08/11/05, 16:15
Eduard Bekker wrote in nl.internet.www.server-side:
> Op de heugelijke dag van 08-11-2005 14:22, schreef "Arnoud "Galactus"
> Engelfriet" in dkq8qb$hck$1@toad.stack.nl, <galactus@stack.nl> pakweg het
> volgende:
>
>> In article <BF96630B.10B56%e.bekker@layout.nl>,
>> Eduard Bekker <e.bekker@layout.nl> wrote:
>>> Dat is het probleem: waar kun je dat wachtwoord veilig opslaan?
>>
>> Je moet het wachtwoord niet opslaan, maar alleen de crypt()ed
>> versie daarvan.
>
> Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
> anders...

Kan je de betreffende code eens posten.

Hans

--
`FUD was first defined by Gene Amdahl after he left IBM to found his own
company, Amdahl Corp.: "FUD is the fear, uncertainty, and doubt that IBM
sales people instill in the minds of potential customers who might be
considering Amdahl products."' -- http://en.wikipedia.org/wiki/Fud

Ronald Klip
08/11/05, 16:15
Eduard Bekker schreef:
>
> Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
> anders...

Dat is geen probleem maar een feature. Zie de post van robert en de
uitleg in de manual.

--
groet, Ronald

robert
08/11/05, 16:30
Eduard Bekker <e.bekker@layout.nl>:
> Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
> anders...

Er van uitgaande dat het om PHP gaat is de Fine Manual daar vrij duidelijk
over: "If the salt argument is not provided, one will be randomly generated
by PHP each time you call this function."

--
robert

Arnoud Galactus Engelfriet
08/11/05, 19:45
In article <BF967D3B.10B5F%e.bekker@layout.nl>,
Eduard Bekker <e.bekker@layout.nl> wrote:
>Op de heugelijke dag van 08-11-2005 14:22, schreef "Arnoud "Galactus"
>Engelfriet" in dkq8qb$hck$1@toad.stack.nl, <galactus@stack.nl> pakweg het
>volgende:
>> Je moet het wachtwoord niet opslaan, maar alleen de crypt()ed
>> versie daarvan.
>
>Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
>anders...

Je moet wel een salt meegeven.

http://php.net/crypt

Arnoud
--
Arnoud Engelfriet, Dutch & European patent attorney - Speaking only for myself
Patents, copyright and IPR explained for techies: http://www.iusmentis.com/

Eduard Bekker
08/11/05, 21:15
Op de heugelijke dag van 08-11-2005 19:41, schreef "Arnoud "Galactus"
Engelfriet" in dkqrh8$1fph$1@toad.stack.nl, <galactus@stack.nl> pakweg het
volgende:

> In article <BF967D3B.10B5F%e.bekker@layout.nl>,
> Eduard Bekker <e.bekker@layout.nl> wrote:
>> Op de heugelijke dag van 08-11-2005 14:22, schreef "Arnoud "Galactus"
>> Engelfriet" in dkq8qb$hck$1@toad.stack.nl, <galactus@stack.nl> pakweg het
>> volgende:
>>> Je moet het wachtwoord niet opslaan, maar alleen de crypt()ed
>>> versie daarvan.
>>
>> Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
>> anders...
>
> Je moet wel een salt meegeven.
>
> http://php.net/crypt

Ja, a.d.hiervan ben ik aan de slag geweest.


$password = crypt("My1sTpassword"); # salt wordt gegenereerd (wat is in
hemelsnaam een salt?).

Kijk, hiermee, kun je een wachtwoord encrypten
De string die dit genereerd, zou je dan hieronder bij $passwoord kunnen
invullen:

if (crypt($user_input,"^dsasSDSf&sdi0poid") == $password) {
echo "Password is geverifieerd.!";
}

Maar dat werkt dus niet, omdat de gegenereerde string - ook al gebruik je
telkens hetzelfde wachtwoord - steeds verandert.


--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

Maarten Wierda
08/11/05, 21:45
Eduard Bekker wrote:

> (wat is in hemelsnaam een salt?).

Dat staat hier uitgelegd
<http://nl2.php.net/manual/en/function.crypt.php>.

Maar waarom ga je nou met crypt verder?


--
Cheers,
Maarten Wierda

Warden Dave
08/11/05, 22:15
"Eduard Bekker" <e.bekker@layout.nl> wrote:

> $password = crypt("My1sTpassword"); # salt wordt gegenereerd
> (wat is in hemelsnaam een salt?).

Het is net zoiets als 'pepper': een kleine toevoeging. (Dit zout kwam in de
zeventiger jaren van de vorige eeuw met de ontwikkeling van de UNIX 'crypt'
wachtwoord encryptie. Het had de bedoeling het kraken, door o.a. 'verdachte
overheidsinstellingen' die centen genoeg hadden voor speciale hardware,
verder te bemoeilijken.)

> Kijk, hiermee, kun je een wachtwoord encrypten
> De string die dit genereerd, zou je dan hieronder bij
> $passwoord kunnen invullen:
>
> if (crypt($user_input,"^dsasSDSf&sdi0poid") == $password) {
> echo "Password is geverifieerd.!";
> }
>
> Maar dat werkt dus niet, omdat de gegenereerde string - ook al gebruik je
> telkens hetzelfde wachtwoord - steeds verandert.

Maar als je steeds weer andere 'salt' op tafel zet (wellicht doe je dat) zal
de smaak ook steeds weer net anders zijn.

$passwd = 'mijngeheim';
$salt = substr($passwd, 0, 2);
$encPasswd = crypt($passwd, $salt);

Met dit simpele voorbeeld krijg je een wat rustiger beeld. Het is overigens
de moeite waard ook eens te lezen:
http://httpd.apache.org/docs/1.3/programs/htpasswd.html (o.a. i.v.m. de
opmerkingen betreffende Windows en TPF.)

groet,
WD

Eduard Bekker
08/11/05, 22:45
Op de heugelijke dag van 08-11-2005 21:31, schreef "Maarten Wierda" in
dkr1vq$2ipc$1@nl-news.euro.net, <moart3nAT@chelloDOT.nl> pakweg het
volgende:

> Eduard Bekker wrote:
>
>> (wat is in hemelsnaam een salt?).
>
> Dat staat hier uitgelegd
> <http://nl2.php.net/manual/en/function.crypt.php>.

Helaas, jargon, en nog in het Engels ook. Ben ik helaas niet niet
intelligent genoeg voor.


> Maar waarom ga je nou met crypt verder?

Als er een begrijpelijker alternatief is, dan graag.


--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

Eduard Bekker
08/11/05, 22:45
Op de heugelijke dag van 08-11-2005 22:13, schreef "Warden Dave" in
dkr4dr$2lg0$1@nl-news.euro.net, <warden_dave@mnsys.invalid> pakweg het
volgende:

> "Eduard Bekker" <e.bekker@layout.nl> wrote:
>
>> $password = crypt("My1sTpassword"); # salt wordt gegenereerd
>> (wat is in hemelsnaam een salt?).
>
> Het is net zoiets als 'pepper': een kleine toevoeging. (Dit zout kwam in de
> zeventiger jaren van de vorige eeuw met de ontwikkeling van de UNIX 'crypt'
> wachtwoord encryptie. Het had de bedoeling het kraken, door o.a. 'verdachte
> overheidsinstellingen' die centen genoeg hadden voor speciale hardware,
> verder te bemoeilijken.)
>
>> Kijk, hiermee, kun je een wachtwoord encrypten
>> De string die dit genereerd, zou je dan hieronder bij
>> $passwoord kunnen invullen:
>>
>> if (crypt($user_input,"^dsasSDSf&sdi0poid") == $password) {
>> echo "Password is geverifieerd.!";
>> }
>>
>> Maar dat werkt dus niet, omdat de gegenereerde string - ook al gebruik je
>> telkens hetzelfde wachtwoord - steeds verandert.
>
> Maar als je steeds weer andere 'salt' op tafel zet (wellicht doe je dat) zal
> de smaak ook steeds weer net anders zijn.
>
> $passwd = 'mijngeheim';
> $salt = substr($passwd, 0, 2);
> $encPasswd = crypt($passwd, $salt);

Ha, mijn deos ex machina duikt weer op!

Ik ga hier morgen eens naar kijken.

Trusten.

--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

Geert Wirken
09/11/05, 00:15
Eduard Bekker schreef op 8-11-2005 22:37:
>>>(wat is in hemelsnaam een salt?).
>>
>>Dat staat hier uitgelegd
>><http://nl2.php.net/manual/en/function.crypt.php>.
>
> Helaas, jargon, en nog in het Engels ook. Ben ik helaas niet niet
> intelligent genoeg voor.

De string die je aan crypt() doorgeeft wordt gecodeerd met een 'salt'.
Als je de zogenaamde salt elke keer hetzelfde houdt, krijg je ook elke
keer dezelfde string.

Als je in PHP geen salt meegeeft aan de crypt() functie wordt er voor
iedere aanroep een willekeurige salt bedacht. En dus krijg je iedere
keer dat je crypt() aanroept (met dezelfde string) een ander resultaat.

>
>>Maar waarom ga je nou met crypt verder?
>
> Als er een begrijpelijker alternatief is, dan graag.

MD5 wordt veel gebruikt om een hash van (bijvoorbeeld) wachtwoorden te
maken, en bovendien is het een veelgebruikte standaardfunctie.
Bovendien krijg je elke keer dezelfde hash voor dezelfde string.

http://nl2.php.net/manual/en/function.md5.php

Met vriendelijke groeten,
Geert Wirken

Erik Hensema
09/11/05, 10:15
Install http://support.microsoft.com/kb/900930 to read this message.
begin quote of Eduard Bekker (e.bekker@layout.nl):
> Op de heugelijke dag van 08-11-2005 14:22, schreef "Arnoud "Galactus"
> Engelfriet" in dkq8qb$hck$1@toad.stack.nl, <galactus@stack.nl> pakweg het
> volgende:
>
>> In article <BF96630B.10B56%e.bekker@layout.nl>,
>> Eduard Bekker <e.bekker@layout.nl> wrote:
>>> Dat is het probleem: waar kun je dat wachtwoord veilig opslaan?
>>
>> Je moet het wachtwoord niet opslaan, maar alleen de crypt()ed
>> versie daarvan.
>
> Dat is nu juist het probleem: de crypted versie is bij crypt() elke keer
> anders...

Dan moet je de handleiding toch even beter gaan lezen ;-)

Zorg dat je begrijpt wat salt is.

--
Erik Hensema (erik@hensema.net) ICQ# 8280101
The past always looks better than it was. It's only pleasant because
it isn't here.
-- Finley Peter Dunne (Mr. Dooley)

Erik Hensema
09/11/05, 10:15
Install http://support.microsoft.com/kb/900930 to read this message.
begin quote of Warden Dave (warden_dave@mnsys.invalid):
> Maar als je steeds weer andere 'salt' op tafel zet (wellicht doe je dat) zal
> de smaak ook steeds weer net anders zijn.
>
> $passwd = 'mijngeheim';
> $salt = substr($passwd, 0, 2);
> $encPasswd = crypt($passwd, $salt);

IEKS

Nee! Nee! Fout!

Als je een plaintext wachtwoord wilt *opslaan*:
$encPasswd = crypt($plaintext);

Als je een plaintext wachtwoord wilt *verifieren*:
$encPasswd == crypt($plaintext, $encPasswd);

Gewoon voorbeeld 1 in de php crypt() manual page. Dit is niet
moeilijk, jongens!

Aan de OP wil ik het advies geven om erg voorzichtig te werk te
gaan. Beveiliging is niet makkelijk. Crypt() wel.

--
Erik Hensema (erik@hensema.net) ICQ# 8280101
Quoting-HOWTO: http://www.leerquoten.nl

Eduard Bekker
09/11/05, 12:30
Op de heugelijke dag van 09-11-2005 00:00, schreef "Geert Wirken" in
43712dff$0$11066$e4fe514c@news.xs4all.nl, <usenet@gwirken.nl> pakweg het
volgende:

> Eduard Bekker schreef op 8-11-2005 22:37:
>>>> (wat is in hemelsnaam een salt?).
>>>
>>> Dat staat hier uitgelegd
>>> <http://nl2.php.net/manual/en/function.crypt.php>.
>>
>> Helaas, jargon, en nog in het Engels ook. Ben ik helaas niet niet
>> intelligent genoeg voor.
>
> De string die je aan crypt() doorgeeft wordt gecodeerd met een 'salt'.
> Als je de zogenaamde salt elke keer hetzelfde houdt, krijg je ook elke
> keer dezelfde string.
>
> Als je in PHP geen salt meegeeft aan de crypt() functie wordt er voor
> iedere aanroep een willekeurige salt bedacht. En dus krijg je iedere
> keer dat je crypt() aanroept (met dezelfde string) een ander resultaat.
>
>>
>>> Maar waarom ga je nou met crypt verder?
>>
>> Als er een begrijpelijker alternatief is, dan graag.
>
> MD5 wordt veel gebruikt om een hash van (bijvoorbeeld) wachtwoorden te
> maken, en bovendien is het een veelgebruikte standaardfunctie.
> Bovendien krijg je elke keer dezelfde hash voor dezelfde string.
>
> http://nl2.php.net/manual/en/function.md5.php

Ja, nu begint er iets te dagen.
Ik geloof dat ik eruit ben.

md5 en- en descryptie lijken me voor mijn doel veilig genoeg.

Of zou iemand de code 7f2713802a6691eacac0bb47b98faef6 kunnen ontcijferen
tot het ongecodeerde wachtwoord waar dit voor staat?


--
/\/\/\/\/\/\/\/\/\
..|
..| Groetjes, Eduard
..|
\/\/\/\/\/\/\/\/\/

Warden Dave
09/11/05, 12:45
"Erik Hensema" <usenet@smac.hensema.net> wrote:

> Install http://support.microsoft.com/kb/900930 to read this message.

?

> begin quote of Warden Dave (warden_dave@mnsys.invalid):

>> Maar als je steeds weer andere 'salt' op tafel zet (wellicht doe je dat)
>> zal de smaak ook steeds weer net anders zijn.
>>
>> $passwd = 'mijngeheim';
>> $salt = substr($passwd, 0, 2);
>> $encPasswd = crypt($passwd, $salt);
>
> IEKS
>
> Nee! Nee! Fout!

? Welk deel van 't suggestief weggeknipte "simpel voorbeeld" (sprekende over
'salt' en Eduard's "...steeds verandert" begreep je niet? (Er is soms niets
tegen 'random salt', maar daar ging het niet over.) Zodra ik een panklaar
niet-simpel voorbeeld geef mag je hysterisch reageren en jezelf gaan
herhalen.

[btw: Beginnende met versie 4.1 is het zo dat bij weglating van het 'salt'
argument MD5 encryptie zal worden toegepast met een automatisch gegenereerde
12-char 'salt'. Eerdere versies zullen de eerste 2 chars van het eerste
argument gebruiken en DES encryptie. Geef je bijv. een 2-char 'salt' dan kun
je dus weten dat het over standaard DES gaat, en bij 9 of meer extended DES
etc. Laat je 'salt' weg dan kan gedrag veranderlijk zijn. Het zou dus kunnen
dat je in een gegeven situatie toch 'salt' gebruiken wilt, bijv. 'salt' van
een 'salt generator'.]

WD

Warden Dave
09/11/05, 14:30
"Erik Hensema" <usenet@smac.hensema.net> wrote:

> Install http://support.microsoft.com/kb/900930 to read this message.

Talloze malen is je al gezegd dat zulke mededelingen /wel/ in bijv.
de body van een bericht in een nieuwslezergroep passen... Wellicht
kun je je daar iets van aantrekken...

> begin quote of Warden Dave (warden_dave@mnsys.invalid):
>> "Erik Hensema" <usenet@smac.hensema.net> wrote:
>>
>>> Install http://support.microsoft.com/kb/900930 to read this message.
>>
>> ?
>>
>>> begin quote of Warden Dave (warden_dave@mnsys.invalid):

>>> Nee! Nee! Fout!

>> ? Welk deel van 't suggestief weggeknipte "simpel voorbeeld"
>> (sprekende over 'salt' en Eduard's "...steeds verandert") begreep
>> je niet?

> Het is een compleet fout voorbeeld. Je gaat toch niet de eerste
> twee letters van een wachtwoord gebruiken als salt? Iemand die
> crypt() al niet helemaal begrijpt en je voorbeeld klakkeloos
> overneemt krijgt zo een vreselijk foute encryptie.
<knip>

Als je het niet over de 'veranderlijke string' maar over 'opslaan'
en robuustheid etc. gaat hebben dan moet je niet te simpel [..]
worden nee; dat is natuurlijk zo.

>> [btw: Beginnende met versie 4.1 is het zo dat bij weglating van het
>> 'salt' argument MD5 encryptie zal worden toegepast met een
>> automatisch gegenereerde 12-char 'salt'. Eerdere versies zullen de
>> eerste 2 chars van het eerste argument gebruiken en DES encryptie.
>> Geef je bijv. een 2-char 'salt' dan kun je dus weten dat het over
>> standaard DES gaat, en bij 9 of meer extended DES etc. Laat je
>> 'salt' weg dan kan gedrag veranderlijk zijn. Het zou dus kunnen
>> dat je in een gegeven situatie toch 'salt' gebruiken wilt, bijv.
>> 'salt' van een 'salt generator'.]
>
> Daarom kun je gewoon het versleutelde wachtwoord opgeven als
> salt. Kun je zelfs md5 en crypt passwords mixen zonder problemen.

Dat hoeft niet altijd zonder problemen te zijn; bijv. al omdat de
lengte(s) dan niet gelijk is/zijn.

WD

Geert Wirken
09/11/05, 16:45
Eduard Bekker schreef op 9-11-2005 12:23:
> md5 en- en descryptie lijken me voor mijn doel veilig genoeg.
>
> Of zou iemand de code 7f2713802a6691eacac0bb47b98faef6 kunnen ontcijferen
> tot het ongecodeerde wachtwoord waar dit voor staat?

Je zou een database aan kunnen leggen met de MD5-hashes van
verschillende strings, en dan kun je aan de hand van de hash de
originele string opzoeken in je MD5-database.

Probleem is dan wel dat je een gigantische hoeveelheid mogelijkheden
hebt (letters, cijfers, leestekens, verschillende lengtes), waardoor het
praktisch niet zo handig is. Dus je moet _ook_ je hashes goed beschermen.

Onderstaande sites houden zich bezig met het aanleggen van zo'n database
(en bieden de mogelijkheid om te zoeken op hash):

http://passcracking.com/
http://md5lookup.com/

--Geert