/ Forside / Teknologi / Internet / Sikkerhed / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Sikkerhed
#NavnPoint
stl_s 37026
arlet 26827
miritdk 20260
o.v.n. 12167
als 8951
refi 8694
tedd 8272
BjarneD 7338
Klaudi 7257
10  molokyle 6481
Godkendelses-protokol
Fra : Morten Dahl


Dato : 08-07-05 18:56

Jeg har sat mig for at finde en godkendelses-protokol der kan benyttes
til websider uden SSL og som kun bruger en hash-funktion (SHA1)..
Adgangskoden må ikke findes i klartekst i databasen.

Jeg har kigget på SKEY protokollen samt forsøgt at lave en simpel
challenge-response protokol. Jeg vil gerne høre jeres forslag - både på
andre protokoller eller ændringer til de to jeg nævner her.

Derudover vil jeg gerne høre hvordan man sikrest "samler" to værdier i
en hash-funktion - altså hvordan a + b i H(a + b) skal implementeres?
Konkatenering? Xor?


C er klienten (browseren), S er serveren, Hn(x) er hash-funktionen H
udført n gange på x.

*SKEY*:
C kender: pw
S kender: n, seed, last = Hn+1(pw + seed)

S -> C: n, seed
C -> S: Hn(pw + seed) = t
S udfører: hvis H(t) == last så last = t og n = n - 1


*Challenge-response*:
C kender: pw
S kender: seed, base = H(pw + seed)

S -> C: random, seed
C -> S: H(H(pw + seed) + random) = t
S udfører: hvis t == H(base + random)


Jeg ved ikke om det kan betale sig (?), men jeg forestiller mig at den
sidste protokol kan modificeres så adgangskoden beskyttes mod
dictionary-attack på følgende måde:

S -> C: random, seed
C -> S: H(Hi+1(pw + seed) + random) = t, i
S udfører: hvis t == H(Hi(base) + random)


På forhånd tak for hjælpen
Morten

 
 
Morten Dahl (08-07-2005)
Kommentar
Fra : Morten Dahl


Dato : 08-07-05 19:06

Nå ja, jeg forestillede mig også at klienten kunne skifte adgangskoden
ved (fra challenge-response protokollen):

S -> C: random, seed
C -> S: H(H(pw + seed) + random) XOR H(new_pw + seed) = t
S: base = H(base + random) XOR t

Kasper Dupont (09-07-2005)
Kommentar
Fra : Kasper Dupont


Dato : 09-07-05 11:50

Morten Dahl wrote:
>
> Derudover vil jeg gerne høre hvordan man sikrest "samler" to værdier i
> en hash-funktion - altså hvordan a + b i H(a + b) skal implementeres?
> Konkatenering? Xor?

I de fleste tilfælde vil jeg betragte konkatenering som det
sikreste. En af de væsentlige egenskaber ved en hash funktion
er kollision resistance. Men hvis du starter med at XORe dine
to værdier sammen kan du reelt have en kollision allerede
inden du hasher.

Om det har betydning i det konkrete tilfælde kan jeg ikke
gennemskue.

En anden ting man skal være opmærksom på er, om de to
bitstrenge du konkatenerer altid har samme længde. Hvis deres
længder varierer kan det være nødvendigt at indsætte længden
i starten.

>
> C er klienten (browseren), S er serveren, Hn(x) er hash-funktionen H
> udført n gange på x.
>
> *SKEY*:
> C kender: pw
> S kender: n, seed, last = Hn+1(pw + seed)
>
> S -> C: n, seed
> C -> S: Hn(pw + seed) = t
> S udfører: hvis H(t) == last så last = t og n = n - 1
>
> *Challenge-response*:
> C kender: pw
> S kender: seed, base = H(pw + seed)
>
> S -> C: random, seed
> C -> S: H(H(pw + seed) + random) = t
> S udfører: hvis t == H(base + random)
>
> Jeg ved ikke om det kan betale sig (?), men jeg forestiller mig at den
> sidste protokol kan modificeres så adgangskoden beskyttes mod
> dictionary-attack på følgende måde:
>
> S -> C: random, seed
> C -> S: H(Hi+1(pw + seed) + random) = t, i
> S udfører: hvis t == H(Hi(base) + random)

Jeg kan ikke overskue konsekvensen af en server,
der snyder i disse protokoler. Og hvis man ville
stole på serveren kunne man sikkert slippe afsted
med en simplere protokol.

--
Kasper Dupont -- der bruger for meget tid på usenet.
Note to self: Don't try to allocate 256000 pages
with GFP_KERNEL on x86.

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408195
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste