Avatar billede the_party_dog Nybegynder
17. november 2005 - 13:36 Der er 16 kommentarer og
1 løsning

Login kryptering

Hej!

Jeg går med tankerne omkring at lave noget login på en windows form,  som skal tjekke op mod en database, om brugeren har rettigheder til at komme ind, og om han har indtastet det korrekte password.

Hvordan ville I anbefalde det skulle laves? Hvis nu tager en ting af gangen.

Hash:
Man kunne hash'e brugernes password, så når de indtaster deres password, bliver hash'en hentet ud fra databasen, og sammenlignet med den de lige har indtastet(som jeg hasher inden sammenligningen). Problem ved dette: Hashen bliver sendt over netværket. Kan opsnappes, men er "ubrugelig". Kan ikke dekrypteres til brugerens password, og hvis den indtastes i formen, vil den blive hash'et igen, og så giver det en forkert hash.

Symmetrisk:
1. Brugerens password bliver krypteret med et nøgle-par, og lagt ind på databasen. Når brugeren logger ind, bliver hans password hentet fra databasen, det de-krypteres, og sammenlignes med det indtastet. Problem ved dette: Det brugte nøgle-par, skal hardcodes ind i formen, ikke særlig effektivt, hvis man skal ændre nøglerne.

2. Brugerens password bruges som den ene nøgle til at kryptere f.eks hans login navn, eller en anden standard tekst, den anden nøgle(IV) ligger fast i formen. Så når han logger ind, bliver det krypteret udlæst fra databasen, og decrypteret med hans indtastet password. Hvis der kommer noget ud, må det jo være den rigtige kode han har indtastet. Problem ved dette: Den ene nøgle(IV) ligger stadigvæk hardcodet i formen.

3. Nøgle-parret bliver lagt i en XML fil, som bliver krypteret asymmetrisk, hvor brugerens password bliver brugt som nøgle til dette. I databasen vil der så igen ligge noget standard tekst, som er krypteret med de nøgler der står i XML filen. Når bruger logger ind, vil hans password åbne XML filen, og det krypteret vil blive hentet fra databasen. Det decrypteres så med nøgle parret, og hvis der kommer tekst ud, vil det betyde at han er logget korrekt ind. Problem ved dette: XML filen kan hapses af andre, og de kan sidde og prøve på at komme ind i den, ved hjælp af bruteforce. Når de engang er færdig, må man så håbe at brugeren har skiftet nøgle par i den symmetriske kryptering.

Asymmetrisk:
Her har jeg faktisk ikke rigtig nogen opstilling til hvordan det kunne gøres, da alle de muligheder jeg lige kan komme på, virker alt for kringlet.

Det jeg ønsker, er at finde den god måde, som kan beskytte folks login oplysninger til systemet, så de ikke skal være bange for noget. Der må gerne tænkes kreativt. I starten skal dette kun bruges internt i en virksomhed, men løsning skulle gerne komme til at fungere over internettet. Så ingen løsning er for sikker.
Avatar billede arne_v Ekspert
17. november 2005 - 13:42 #1
re hash)

husk at de kan lade et andet program sende samme hash uden at det har være
gennem en hash process

løsningen kan være challenge response
Avatar billede arne_v Ekspert
17. november 2005 - 13:44 #2
alle de andre har vist samme problem
Avatar billede the_party_dog Nybegynder
17. november 2005 - 13:44 #3
Meget god point ved hash. Men de skal stadigvæk bruge noget tid på logikken inde i selve programmet, hvis de vil have data ud.

challenge response?
Vil du gerne uddybe det?
Avatar billede arne_v Ekspert
17. november 2005 - 13:50 #4
læs f.eks. http://www.coresecurity.com/files/files/11/mysql.pdf

(fokuser på challenge response, men det problem det beskriverer grunden til at
MySQL ændrede deres algoritme en lille smule i version 4.1)
Avatar billede arne_v Ekspert
17. november 2005 - 13:52 #5
Windows NTLM, Kerberos etc. bruger samme challenge response system så der er ikke
noget galt med det
Avatar billede the_party_dog Nybegynder
17. november 2005 - 14:04 #6
Kunne du kort, på dansk, forklare hvordan det ville virke? Og hvordan man skulle få det inplementeret i sin løsning? Bare overordnet, så må jeg selv få styr på detaljerne :)
Avatar billede arne_v Ekspert
17. november 2005 - 14:07 #7
serveren genererer noget random data
det sendes til client
client krypterer det med hash af password
det sendes til server
server sammenligner med data krypteret med det hash af password som den har
Avatar billede arne_v Ekspert
17. november 2005 - 14:07 #8
men det forudsætter så at du har en server process som du kontrollerer
Avatar billede the_party_dog Nybegynder
17. november 2005 - 14:09 #9
Ville en webservice i C# kunne gøre det for at opnå det ønskede resultat?
Avatar billede the_party_dog Nybegynder
17. november 2005 - 14:10 #10
Eller skal det laves med en normal "windows" process, som bare kører på maskinen? Så skulle man igang med Sockets, og sende al data den vej igennem?
Avatar billede arne_v Ekspert
17. november 2005 - 15:10 #11
web service kan bruges

sockets kan bruges

uden at vide mere om din kontekst er det svært at sige hvad der passer
Avatar billede the_party_dog Nybegynder
18. november 2005 - 11:12 #12
Jeg vil se om jeg kort kan beskrive min "kontekst" :)

Jeg skal lave et system hvor folk logger ind, og ud fra deres login bestemmes deres rettigheder i applikationen. Hvis det er master(admin) brugere, skal de kunne tilføje andre brugere, og lave om forskellige indstillinger. Alle indstillinger, og registeringer skal ske til en database.

Ville det bedste så være at lave en webservice som mit "datalag", som behandler alle forespørgelser, og tester om brugeren er korrekt logget ind. Hvis jeg ønsker at udvide min sikkerhed, så alt data mellem klienten, og servicen er krypteret, er det vel klart den bedste løsning, at have en webservice til at håndtere kommunikationen? Så man kunne indbygge noget handshake mellem klienten og servicen, så de f.eks kunne oprette et sæt symmetriske nøgler, til at køre kommunikationen mellem dem?
Avatar billede arne_v Ekspert
18. november 2005 - 17:40 #13
hvis du skal have høj sikkerhed så skal du ikke lade dit C# client program snakke
direkte med databasen

gennem en web service vil være bedre

men du bør overveje at gøre den til forretningslogik lag og ikke data lag
(af performance hensyn og sikkerheds hensyn)

kyptereret trafik er nemt

1)  kryptering på transport niveau => bare brug HTTPS fremfor HTTP

2)  kryptering på application message niveau => brug WSS (er med i WSE)
Avatar billede the_party_dog Nybegynder
22. november 2005 - 07:22 #14
Mange tak...

Jeg vil undersøge tingene nærmere. Du har klart fået mig til at tænke lidt over tingene. Kunne du måske finde noget som gør brug af WSS, som man kunne se? Det er altid lidt nemmere at forstå hele konceptet når man har noget at kigge efter.

Har været lidt inde på msdn, men synes det er meget "flyvest" det de skriver, så kan ikke rigtig se det som en helhed...
Avatar billede arne_v Ekspert
22. november 2005 - 09:28 #15
WSS kan godt være lidt langhåret

jeg har aldrig brugt det i C#

men for at forstå det er den oprindelige spec faktisk ikke så ringe:
  http://www-128.ibm.com/developerworks/webservices/library/ws-secure/
Avatar billede the_party_dog Nybegynder
22. november 2005 - 10:37 #16
Jeg bukker og takker....

Smider du et svar? Jeg er nok ik ene om at mene at eksperten ikke ville være det samme, uden dig arne...
Avatar billede arne_v Ekspert
22. november 2005 - 10:56 #17
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester