Kysymys:
Mikä on paras tapa suojata sisäänkirjautuminen verkkosivustolle ilman SSL: ää tai valmiiksi jaettuja avaimia?
Filip Haglund
2011-11-16 02:10:44 UTC
view on stackexchange narkive permalink

Tänään haistelin salaamatonta wlan-liikennettä luokan aikana ja löysin melkoisen määrän salasanoja yksinkertaisesti hakemalla "pass" ja "user" wiresharkista. Osoittautuu, että noin puolet sivustoista, joita käytämme koulussa, eivät salaa tietojaan millään tavalla - he käyttävät sisäänkirjautumisen yhteydessä GET-pyyntöjä, kuten? Username = user123&password = passwd123. Aloin ajatella tätä ja nyt ihmettelen; mikä on paras tapa välttää tämä? Salaus olisi helppo kääntää, ja myös yhden kerran avaimet voidaan "helposti" kaapata. Paras ajatukseni tähän mennessä on asiakaspuolen hajautus, mutta olisiko tämä jollain tavalla huono idea?

PÄIVITYS: En tietenkään ole kertonut sinulle rajoituksia, mutta kiitos kaikista vastauksista! Palvelimella ei ole SSL: ää, ja kaikki käyttämäni on toteutettava php / asp / asp.net-palvelinpuolella tai asiakkaan javascriptinä. Ainoa olemassa oleva jaettu avain on salasana. Hyökkääjä tietää kaiken muun.

Yritän vain piilottaa salasanan hakkereilta. Loput tiedot olisivat salaamattomia, joten istunnon varastaminen olisi mahdollista. Se on seuraava ongelma. Ehkä voisit salata sivun tiedot nounilla. Koska salattua tekstiä on paljon, sanakirjahyökkäys olisi tehokas. Siksi en halua käyttää käyttäjän salasanaa salaamiseen. Ehkä voisin käyttää jotain 512 / 1024bit XOR-avainta, jonka salaan käyttäjän salasanalla? Tai jokin osa salasanasta, koska sanakirjahyökkäys olisi silti mahdollista - mutta vaikeampi.

Olisiko asiakkaiden kanssa salattu salaus sanoen 2 ensimmäistä merkkiä salasanastaan? Satunnainen luku XOR, salasanoilla 2 ensimmäistä merkkiä. Käyttäjän pitäisi olla purettavissa tämä, koska hänellä on avain (joka otetaan syötetystä salasanajonosta js: n kautta). Nousu olisi satunnainen luku, joten mikään ei pitäisi pystyä kertomaan, onko se purettu oikein.

Pohjimmiltaan: 1. Käyttäjä kirjoittaa käyttäjätunnukseen ja lähettää / vie sen palvelimelle. 2. Palvelin vastaa sivulla, jolla on salattu salaus ja salasanaruutu. 3. Javascript purkaa purkamisen, ja salasana saa XOR: n sen mukana. 4. Salasana lähetetään palvelimelle, salasana puretaan ja se hajautetaan 5. Hashia verrataan tietokantaan tallennettuun.

Huomaa: Palvelin on ilmainen ja tukee SSL: ää, mutta en en halua käyttää sitä. En pidä SSL: stä, koska se on rikki.

"salaus olisi helppo kääntää" - Ei oikeastaan.
Määritä esijaettu avain. Esimerkiksi, pidetäänkö salasanaa jaettuna avaimena?
Kiitos päivityksistä. Muutama kysymys, mikä on uhkamallisi? Oletko esimerkiksi huolissasi aktiivisesta hyökkääjästä (mies-keskellä) tai passiivisesta hyökkääjästä (salakuuntelija)?
* "Palvelimella ei ole SSL: ää" * - Joten miksi et ota SSL: tä käyttöön? Se tulee olemaan ** huomattavasti ** helpompaa kuin oman korvaavan tuotteen suunnittelu ja toteutus (ja jos suunnittelet oman korvaavan tuotteen, sillä on todennäköisesti myös turvallisuusongelmia, kuten alat huomata).
En omista palvelinta, ja se on vain hauskaa juuri nyt. Uhkamalli sisältää kaiken mitä voi kuvitella. Tietysti sillä on ongelmia. Löydetään ne!
PKI-järjestelmä on rikki, SSL ei ole rikki. Mikä tahansa sotku, jonka juuri kuvasit "turvalliseksi", on rikki, se on vitsi. Tarkoitan, että tämä kysymys kattaa vakavasti, sinun ei olisi pitänyt lähettää "ratkaisua".
Tämä kysymys sai minut nauramaan. Varsinkin viimeinen rivi. Toivon todella, että tarkoitit sitä vitsi.
OK ... SSL / TLS on tähän mennessä turvallisin versio julkisen avaimen salauksesta ... eikä se todellakaan ole rikki.
Verkkosovelluksissa mikä tahansa vaihtoehto on * paljon rikki kuin SSL. Voit kiertää SSL: n asiakassovelluksissa, mutta ei verkkosovelluksissa, joissa javascript on lähetettävä turvallisesti asiakkaalle.
Yhdeksän vastused:
Tom Leek
2011-11-16 02:48:41 UTC
view on stackexchange narkive permalink

Haluat, että kohdepalvelin pystyy käyttämään käyttäjänimeä ja salasanaa eikä nuuskijakäyttöistä hyökkääjää. Kohdepalvelimen on siis pystyttävä tekemään jotain, mitä hyökkääjä ei voi. Koska hyökkääjä voi ostaa samanlaisen tietokoneen kuin palvelin, ylimääräisen tehon on oltava jotain, jonka palvelin tietää, mutta ei hyökkääjä.

Hei, tällaista tietoa on : salasana ! Se on asia, eikö niin? Se on todellakin ennalta jaettu avain asiakkaan ja palvelimen välillä.

Salasanat ovat avaintekijöiltä melko ikäviä, koska ihmisen aivot ovat rajalliset. Silti voi työskennellä sen kanssa. Parhaat protokollat ​​ovat salasanan todennettu avaintenvaihto: ne voivat kasvattaa jaetun matalan entropian avaimen (salasanan) jaetuksi korkean entropian avaimeksi, jolla voit tehdä kaikki symmetriset yummy-asiat salaus, joka pitää (lanka) haita poissa. Ja PAKE-protokollat ​​voivat tehdä sen vastustamalla offline -sanakirjahyökkäyksiä ("offline" on tässä tärkeä sana).

Huono uutinen on, että PAKE-protokollat ​​ja yleisemmin kaikki todennusprotokollaa, joka voidaan liittää jälkikäteen vaihdettuihin tietoihin, jotta todennus todella vastustaa aktiivista hyökkääjää, on vaikea saada oikeaan. Yksinkertaisin, mutta silti turvallinen protokolla osoittautuu SSL: ksi SRP: n kanssa (tähän on olemassa RFC). Hyvä uutinen on, että SSL + SRP tarjoaa salasanapohjaisen keskinäisen todennuksen asiakkaan ja palvelimen välillä käyttämällä ei todistusta minkäänlaista (ja kun ihmiset sanovat, etteivät halua käyttää SSL: ää, he yleensä tarkoittavat, että he eivät halua käydä läpi X.509-varmenteita ja rajallista PKI-markkinaa.

Valitettavasti SSL + SRP -tuki ei ole laajaa ( GnuTLS on avoimen lähdekoodin kirjasto, joka tuntee SRP: n ).

Näytän muistan, kun sain tietää SRP: stä, että sillä oli joitain patenttiongelmia. Uskon, että se mahdollisesti loukkaa toista patenttia (ehkä EKE). Onko mitään ideaa, jos se on totta? SRP on kuitenkin hyvä ehdotus.
PAKE on todellakin erittäin mukava mekanismi. Tämä kysymys voi kuitenkin olla ylivoimainen: tavallinen SSL riittää ratkaisemaan ongelman, johon Filip näyttää viittaavan.
@mikeazo:: ssä keskustellaan Bellovinin ja Merrittin alkuperäisestä EKE-patentista (vuodesta 1992, joten sen pitäisi joka tapauksessa pian päättyä) ja mahdollisesta vuonna 2001 jätetystä Lucent-patentista. En usko, että sitä olisi ratkaistu tavalla tai toisella.
@D.W .: Oletin (väärin, näyttää siltä, ​​kuten hänen muokkauksessaan kuvattu OP), että SSL suljettiin pois sertifikaattiliiketoiminnan takia - se on tärkein syy siihen, miksi ihmiset eivät pidä SSL: stä. SRP osoittaa, että voit saada SSL-salasana-todennuksen ilman sertifikaattia.
En pidä SSL: stä - se on rikki, enkä omista palvelinta, joten en voi ottaa sitä joka tapauksessa käyttöön.
@Filip, SSL ei ole rikki. Mistä sait tuon vaikutelman? (Jos puhut BEAST-hyökkäyksestä, [on olemassa puolustuksia / lieventimiä] (http://security.stackexchange.com/questions/7416/what-can-i-do-about-tls-1-0-javascript- injektio-haavoittuvuus palvelimellani).)
Se on rikki, koska viranomaiset myöntävät sertifikaatit osoitteelle 192.168.x.x ja useita sertifikaatteja esimerkiksi google.comille. Sertifiointiviranomaiset rikkoivat SSL: n.
SSL: n "välkkyys" on todennäköisesti suuruusluokkaa vähemmän rikkoutunut kuin mikään, jonka sinä tai joku muu salausteknikko todennäköisesti toteuttaa vastaavien tavoitteiden saavuttamiseksi.
AaronS
2011-11-16 02:35:57 UTC
view on stackexchange narkive permalink

jos käytät asiakaspuolen hashia, siitä tulee todellinen sivuston salasana etkä saavuttanut mitään.

Se riippuu siitä, miten käytät asiakaspuolen hajautusta. Jos käytät HMAC: ää (nonce, HMAC (suola, salasana)), jossa suola ei muutu, ja nonce muuttuu joka kerta, "todellinen" sivuston salasana on HMAC (suola, salasana). Se tarkoittaa, että "todellinen" sivuston salasana ** on tallennettu selkeästi **. Mutta se tarkoittaa myös, että käyttäjä ei käytä uudelleen tämän sivuston salasanaa millään muulla sivustolla.
D.W.
2011-11-16 09:26:34 UTC
view on stackexchange narkive permalink

Paras tapa on käyttää SSL: ää . Mekanismi on olemassa syystä. Vaihtoehtoiset järjestelmät ovat yleensä joko epävarmoja tai mielettömän monimutkaisia.

Sanoit haluavasi tehdä sen ilman SSL: ää, mutta et antanut mitään syytä tai syytä. Et selittänyt tilannettasi tai sitä, mikä oikeuttaisi välttämään SSL: n. Näin ollen, vaikka haluaisimme antaa sinulle vaihtoehtoisia ehdotuksia, olisi mahdotonta selvittää, vastaavatko ne vaatimuksiasi.

Operaattorin mukaan palvelimella ei ole SSL: ää. Jos tämä on ainoa asia, joka pysäyttää hänet, hän voi yhtä hyvin maksaa pari dollaria ylimääräisiä kuukausia SSL-tuen lisäämiseksi, koska se olisi hänen aikansa / rahansa parempi käyttö kuin jonkin hiusverkkojärjestelmän toteuttaminen (vastaukseni mukaan lukien).
Palvelin on ilmainen minulle, enkä pidä SSL: stä.
* "En pidä SSL: stä" * ei ole kelvollinen perusta teknisen päätöksen tekemiselle siitä, mikä on paras tapa suojautua joukolta uhkia.
mikeazo
2011-11-16 18:51:55 UTC
view on stackexchange narkive permalink

Jos kaikki, mikä sinua kiinnostaa, on käyttäjän todentaminen palvelimelle (ja et välitä myöhempien tietojen salaamisesta), Lamportin Hash olisi helppo toteuttaa, koska Javascriptissa ja PHP / ASP / ssä on jo hash-funktiokirjastoja. ASP.net.

Lamport's Hash on kertaluonteinen salasanamalli, joka toimii seuraavasti (Alice on käyttäjä, Bob on palvelin):

Ensirekisteröinti

Rekisteröityessään Alice lähettää [n, hash ^ n (salasana)] palvelimelle (missä hash ^ n on seurausta salasanan hajauttamisesta, sitten sen hajauttamisesta, sitten hajauttaa tuloksen, ..., n kertaa). Palvelin tallentaa [n, hash ^ n (salasana)] tietokantaan.

Todennus

  1. Alice lähettää tunnuksensa (käyttäjätunnuksensa) Bob: "Alice"
  2. Bob vastaa sanalla "n"
  3. Alice lähettää x = hash ^ {n-1} (salasana) Bobille
  4. Bob vertaa hash (x) hänen tietokantaansa tallennetulla tiivistelmällä
    • Jos ne vastaavat, todennus onnistuu ja Bob korvaa [n, hash ^ n (salasana)] luvulla [n-1, x = hash ^ {n- 1} (salasana)]
    • Muuten todennus epäonnistuu ja Bob säilyttää tietokannassa olevan sisällön.

Käytännön näkökohdat

  • Haluat todennäköisesti käyttää suolaa salasanalla (Bob voi lähettää suolan # 2).
  • Kun n on tarpeeksi pieni, Alice täytyy vaihtaa salasanansa (tai he voivat vain vaihtaa suolaa), ja hänen on lähetettävä [n, hash ^ n (suola + salasana)] uudelleen Bobille
  • Valitse n tarpeeksi suuri niin, että uudelleenrekisteröinti ei ole liian usein
  • Koska tämä on vain yksisuuntainen todennus (käyttäjä todennetaan palvelimelle, mutta palvelin ei ole todennettu käyttäjälle), man-in-the-middle on mahdollista.

Jos Lamport's Hash ei täytä vaatimuksiasi (esim. tarvitset keskinäisen todennuksen), SRP on luultavasti paras veto, mutta siihen mennessä, kun olet ottanut sen käyttöön Javascriptissa ja PHP / ASP / ASP.netissä, olisit voinut vuokrata palvelimen, joka tukee SSL: ää, mikä on selvästi paras valinta alusta alkaen .

Kuulostaa melko hyvältä, mutta miten olisi mahdollista puolustautua MitM: ää vastaan ​​täysin?
esskar
2011-11-16 18:49:07 UTC
view on stackexchange narkive permalink

Vastaus on TLS (ei edes SSL) ilman AES: ää salausalgoritmina, koska esimerkiksi TLS: n, AES: n ja WebSocketsin yhdistelmässä on tunnettu ongelma. Kaikki muu (kuten salasanan salaus asiakkaassa javascriptin avulla) on epävarmaa. Sitä ei tietenkään voi lukea suoraan wiresharkilla, mutta javascript voi tulla keskellä olevalta mieheltä. Joten yritä vakuuttaa koulusi? siirtyäksesi TLS-palvelimiin. Tämä on helpoin tapa, eikä se vaadi sovelluskoodin muuttamista.

Tositarina! Ei ajatellut sitä, että js lähetetään selaimelle. En halua vakuuttaa koulumme, koska palvelin on (minun) yksityinen leikkipaikkamme atm. (Kukaan muu ei enää käytä sitä) Minulla ei ole mitään suurta sovellusta murehtia.
silti koulu on tavallaan suljettu järjestelmä, jossa - yleensä - opiskelijoilla on enemmän IT-osaamista kuin kenellekään opettajalla. :-) joten jos haluat todella suojata salasanasi (tai salasanasi), sinun on aloitettava suojaamalla yhteys TLS: n avulla, tallentamalla salasanasi palvelimelle PBKDF2: lla ja niin edelleen. hieman, yritä toteuttaa SRP (vain huvin vuoksi :-)). Kirjoitin siitä blogia jonkin aikaa sitten: http://esskar.wordpress.com/2009/11/03/secure-remote-password-protocol-srp/
Jeff Ferland
2011-11-16 03:40:30 UTC
view on stackexchange narkive permalink

Jos pystyt suorittamaan JavaScriptiä asiakkaalla, voit määrittää Diffie-Helman-avaimenvaihdon tai haasteen / vastausmekanismin salasanan tiivisteen perusteella (älä tallenna selkokielistä järjestelmään!) todennusprosessi, jossa salattu tunnistetieto palautetaan todennusta varten.

Ne eivät pysäytä aktiivisia MITM-hyökkäyksiä, mutta se estää passiivisia hyökkääjiä haamasta salasanoja.

Tämä on epävarmaa tulilammasta vastaan. Lisäksi se on epävarma aktiivisia hyökkäyksiä vastaan ​​(kuten oikein huomautat; mutta tämä on riittävän vakava ongelma ratkaisun hylkäämiseksi). Sitä vastoin pelkällä SSL: n käyttämisellä ei ole näitä ongelmia.
@D.W. Kyllä, jos haluat suojatun yhteyden, SSL on yleensä tapa edetä. Kysymys estää nimenomaisesti tämän. Firesheepia voidaan myös lieventää näiden menetelmien avulla jatkuvalla haastesarjalla, joka estää uusintahyökkäykset. SSL on parempi ja yksinkertaisempi toteuttaa, koska se on pakattu, mutta jos kysyttäjä on taipuvainen johonkin, on turvallisia tapoja vaihtaa salasanoja selkeästi passiivisen kuuntelijan kanssa.
Jotta se olisi vieläkin helpompaa, pyydä palvelinta luomaan satunnaislukujen haaste, sovittamaan salasana ja hash käyttämällä md5: tä (kyllä ​​tiedän, että md5 on rikki, käytä SHA: ta, jos välität). Kuten edellä todettiin, tämä ei estä MITM: ää muokkaamasta javascriptiä. Jos käsket käyttäjiä katsomaan lähdettä koko ajan, sinun pitäisi olla kunnossa
Mark C. Wallace
2012-10-22 18:18:14 UTC
view on stackexchange narkive permalink

SSL ei voi olla yhtä rikki kuin selkeät tekstisalasanat. Käytä SSL: ää. Luulen, että Scheierillä on jotain sanottavaa ihmisistä, jotka suunnittelevat omat kryptojärjestelmänsä.

symcbean
2012-10-23 02:32:45 UTC
view on stackexchange narkive permalink

En pidä SSL: stä, koska se on rikki.

Se on melko dramaattinen väite heittää pois ilman mitään selityksiä tai tukevia viitteitä. Tarkoitatko kaikkia SSL-muotoja, mukaan lukien TLS, tai erityisesti SSL v1-3: ta?

Se on paljon parempi kuin monet muut yritetyt ratkaisut ongelmaan.

Ainoa tapa luoda Suojattu tiedonsiirto tapahtuu salauksella - ja selainpohjaiselle asiakkaalle, jos et käytä SSL: n sisäänrakennettua toimintoa, toimitat koodin salauksen toteuttamiseksi (olipa se sitten Javascript, ActiveX, Java, Flash ... ) suojaamattoman yhteyden kautta. Siksi koodi voi vaarantua. Sillä ei ole merkitystä, käytätkö rot13- tai 4096-bittistä avainta PFS-algoritmin kanssa - jos sitä käsittelee suojaamattomasti toimitettu koodi, koodin muokkaaminen salasanan sieppaamiseksi on helppoa.

Jos luulet SSL: n olevan rikki ja korjaa se - se on paljon kannattavampi tapa viettää aikaa.

Mitä hän tosiasiallisesti tarkoittaa, on se, että CA-pohjainen PKI, johon useimmat SSL-toteutukset luottavat, on rikki, mikä on jonkin verran ansio. Mutta normaalille verkkosovellukselle ei ole mitään keinoa.
mgjk
2012-10-23 01:45:14 UTC
view on stackexchange narkive permalink

Ensinnäkin tarkistan, tukeeko palvelin http-todennusta yhteenvetotodennuksella. Voit ehkä ottaa sen käyttöön php: n kautta.

http://www.php.net/manual/en/features.http-auth.php

Se ei ole läheskään yhtä turvallinen kuin SSL, mutta se voi olla yksinkertainen temppu, joka estää luokan ihmisiä pyyhkimästä salasanojasi. Estä suojattava sivuston alue käyttämällä http-todennusta. He näkevät kaiken mitä teet, mutta he eivät saa http-todennussalasanaa. (he saavat kaikki muut salasanat istunnon aikana)

Yksi ongelma digest-todennuksessa on, että se pakottaa palvelimen tallentamaan huonosti hajautetun salasanan.


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...