LinuX-TUX schreef op dinsdag 16 januari 2007 @ 16:38:
[...]
Sorry hoor, maar ... ik mis wat, waarom heb ik die sessie dingen enzo nodig? Ik zie toch gewoon een plain text username en plain text wachtwoord voorbij flitsen? Ik mis hier geloof ik iets (ach ja, devven doe ik al 2 jaar niet meer, maar ik wil toch wel echt weten wat ik nu technisch heb gemist)
Waar word dan die hash gecreeerd als ik op "login" klik?
[...]
Jajajaja, maar even voor het gemak (en dan nog "miereneukmodes", genoeg hotspots waar ze niet eens encryptie gebruiken. Bij mij op school BV, moet je een sessie gaan starten voor je verder gerouteerd word)
ik leg het nog een keer uit

:
server >> ontvangt een HTTP request van de gebruiker
server >> genereert een sessie_id en een willekeurige KEY. dit is gewoon stukje willekeurige text.
server >> server creert de HTML pagina met daarin de KEY als waarde van het login formulier.
server >> stuurt dan de HTML pagina als platte text naar de browser van de gebruiker.
oke, dus de HTML pagina met daarin de KEY en een aantal javascript functies worden dus als platte text naar de gebruiker gestuurd. volg je het nog
gebruiker >> de gebruiker vult zijn 'username' en wachtwoord in op het HTML formulier.
gebruiker >> de velden op het HTML formulier bevatten nu dus het wachtwoord en de 'username'.
gebruiker >> klikt op 'login', dit is gewoon een HTML button waarmee dus het formulier wordt verzonden.
gebruiker >> op de '<form' tag van het HTML formulier zit de 'onsubmit' tag toegevoegd welke dus wordt uitgevoerd zodra het formulier wordt verzonden.
gebruiker >> een javascript functie pakt dan de waarde van het wachtwoord en de KEY uit het html formulier en creert een HMAC hash, en stopt die weer als waarde terug in het veld waar het wachtwoord eerst stond.
gebruiker >> het formulier wordt dan verzonden met in het wachtwoord veld dus het door javascript gehashde wachtwoord.
dus voor het formulier wordt verstuurd word door javascript het wachtwoord gehashed en weer opnieuw ingevuld. deze wordt dan dus weer naar de server gestuurt zoals elke ander ingevuld formulier.
server >> ontvangt het HTML formulier, en kijkt in de sessie, welke server-sided is opgeslage. de client heeft allen de sessie_id als cookie meegekregen en kan dus alleen zeggen welke sessie van hem is, maar niet wat er in die sessie staat. dat blijft server-sided.
server >> de server creert dan zijn eigen HMAC hash van het wachtwoord wat op de server is opgeslage, met de key uit de sessie.
server >> als die eigen HMAC hash klopt met dat wat de gebruiker heeft opgestuurd wordt een login verleend. zoniet dan beging het hele spelletje weer van vooraf aan met een nieuwe key weer opnieuw.
dus het enige wat tussen de gebruiker en de server wordt verstuurd:
1) HTTP request
2) login pagina met daarin de key als waarde van het HTML formulier
3) het formulier met daarin het door javascript ge-hashde wachtwoord.
4) de 'welkom' pagina als de login klopt en de 'sorry probeer het nogmaals' als het niet klopt.
en omdat de key telkens ook aan de server kant veranderd, kun je een ge-hashed wachtwoord niet meer opnieuw gebruiken

.
wat je veels te veel nog ziet gebeuren

is dat het wachtwoord als plaintext naar de server wordt gestuurd zodat het daar dan kan worden gehashed wat uiteraard het stelen van wachtwoorden of het misbruiken van logins natuurlijk wel erg makkelijk maakt

.
ook moet je niet vergeten dat als ik een stukje spyware op jouw computer al je in en uitgaand verkeer laat loggen dat dat ook een man-in-de-middle attack is, al hoewel het dan ook wel loont om meteen een keylogger te implementeeren

. toch doet veel spyware spul dit niet omdat ip-packetjes op poort 80 loggen gewoon een stuk makkelijker is.
ik hoop dat ik het principe van HMAC hashing nu duidelijk genoeg heb uitgelekt, daarnaast is er ook nog veel over te vinden op internet en met google. leesvoer dus.