Kysymys:
Ovatko suolatut SHA-256/512-hashet edelleen turvallisia, jos hashes ja niiden suolat ovat alttiina?
Seppo Erviälä
2011-06-21 18:03:28 UTC
view on stackexchange narkive permalink

Skenaario: haitallinen käyttäjä varastaa tietokannan hajautetuista ja suolatuista salasanoista, mukaan lukien jokaisen salasanan suolat. Salasanat ovat 6-10 merkkiä pitkiä, ja muut kuin tekniset käyttäjät valitsevat ne.

Voiko tämä haitallinen käyttäjä murtaa nämä salasanat?

Ymmärrän, että MD5 ja SHA-1 eivät ole enää turvallisia koska GPU-avustetut salasanan palautustyökalut voivat laskea miljardeja näitä hajautuksia sekunnissa GPU: ta kohti.

Entä SHA-256 tai SHA-512? Ovatko ne tällä hetkellä turvallisia? Entä muutaman vuoden kuluttua?

[Salaushajautustoimintojen käyttöajat] (http://valerieaurora.org/hash.html) on erittäin mielenkiintoinen. Muunnelma, josta olen kuullut, on aina käyttää * kahta * hajautusalgoritmia. Tällä tavoin voit aina poistaa yhden heti, kun se on epävarma, ja saat aikaikkunan kaikkien dataesiintymien siirtämiseen.
@l0b0 käyttötapauksesta riippuen, mikä voi olla haitallista kryptosysteemin yleiselle turvallisuudelle. Esim. Käyttämällä heikkoa tiivistettä vahvana hashina syötetään edelleen vahva hash hyvin alhaisella entropialla (jos tämä on sinun tilanteesi kannalta).
Neljä vastused:
#1
+61
erickson
2011-06-21 20:58:30 UTC
view on stackexchange narkive permalink

Kysymyksessä ei mainita, kuinka monta hajautuskierrosta suoritetaan. Ja koko vastaus riippuu siitä.

Kaikki hash-toiminnot ovat vaarallisia, jos käytät vain yhtä iterointia. Hajautusfunktio, riippumatta siitä, onko se SHA-1 vai joku SHA-2-perheestä, tulisi toistaa tuhansia kertoja. Pidän 10 000 iteraatiota vähimmäisarvona, ja 100 000 iteraatiota ei ole kohtuutonta, kun otetaan huomioon tehokkaan laitteiston edullisuus.

Lyhyet salasanat ovat myös vaarallisia. 8 merkin tulisi olla vähimmäismäärä, jopa pieniarvoisille kohteille (koska käyttäjät käyttävät samaa salasanaa uudelleen useissa sovelluksissa).

150 dollarin näytönohjaimella voit suorittaa 680 miljoonaa SHA-1-hajautuslaskentaa sekunnissa. Jos käytät vain yhtä hajautuskierrosta, kaikki 6-merkkiset salasanat voidaan testata hieman yli 15 minuutissa (olettaen, että kaikkia 94 tulostettavaa ASCII-merkkiä käytetään). Jokainen lisämerkki kertoo ajan 94: llä, joten 7 merkkiä vaatii yhden päivän, 8 merkkiä vaatii 103 päivää tässä asetuksessa. Muista, että tämä skenaario on 14-vuotias GPU: ta käyttävä, ei järjestäytynyt rikollinen, jolla on oikeaa rahaa.

Harkitse nyt useiden iteraatioiden suorittamisen vaikutusta. Jos suoritetaan 1 000 hajautuksen toistoa, 6-merkkinen salasanatila kestää melkein 12 päivää 15 minuutin sijasta. 7-merkkinen tila vie 3 vuotta. Jos käytetään 20000 iteraatiota, nämä luvut nousevat vastaavasti 8 kuukauteen ja 60 vuoteen. Tässä vaiheessa edes lyhyitä salasanoja ei voida etsiä tyhjentävästi; hyökkääjän on palattava takaisin "todennäköisesti" salasanojen sanakirjaan.

On syytä huomata, että monet salasanat voidaan peittää paljon pienemmällä merkkimäärällä. http://www.r-bloggers.com/character-occurrence-in-passwords/
Mutta tässä on suurin virheeni, en ymmärtänyt, että nämä algoritmit on tarkoitus toistaa satoja kertoja.
@Seppo --- ** tuhansia ** kertoja, ei satoja. Jopa alkuperäinen PKCS # 5 suosittelee vähintään 1000 iteraatiota. Sinun pitäisi ajatella kymmeniä tuhansia. Hyvä asia on, että sinun pitäisi pystyä päivittämään nykyiset salasanan tiivistelmät pakottamatta käyttäjiä valitsemaan uusia salasanoja. Jos pahiksilla on jo huonosti hajautetut salasanat, on liian myöhäistä (mieti varmuuskopioita jne.). Mutta jos he eivät vielä tee niin, ei ole liian myöhäistä korjata asioita.
Voit myös käyttää bcryptia tai vastaavia työkaluja, jotka vaativat jonkinlaista työtekijää hidastamaan hajautusprosessia puolestasi. http://codahale.com/how-to-safely-store-a-password/
PBKDF2: n iterointiluku on hajautusratkaisun työtekijä. Bcrypt ei todellakaan ole niin eksoottinen. Molemmat saavuttavat hitauden viritettävällä avaimen johtamisrutiinilla. Yksi keskeinen ero on, että bcrypt tosiasiallisesti käyttää johdettua avainta tunnetun tavallisen tekstin salaamiseen ja saadun salatun tekstin tallentamiseen, kun taas useimmat hajautusratkaisut vain tallentavat johdetun avaimen suoraan. Mielestäni molemmat lähestymistavat ovat kuitenkin vankkoja.
Lyhyesti sanottuna yleiset kryptografiset hajautusalgoritmit on suunniteltu nopeiksi. Salasanan suojaaminen vaatii hitaan salausalgoritmin. Nopeasta salauksen hajautusalgoritmista, joka toistetaan 2 ^ 16 kertaa, tulee hidas kryptografinen hajautusalgoritmi. Lisää sitten muita vaatimuksia, kuten suoloja jne.
"Jokainen ylimääräinen merkkikerroin kertoo ajan 94: llä, [...] 7 merkkiä vaatii yhden päivän, 8 merkkiä 7 vuotta" - eikö 8 merkkiä tarvitse vaatia 94 päivää?
Lisäksi bcrypt: eikö ole se, että bcrypt on yhtä hidas GPU: lla (tai ainakin nopeus on paljon pienempi)? Voimme odottaa hyökkääjiltä GPU: ta, mutta useimmilla palvelimilla ei, joten kaikki, mikä vähentää hyökkääjän etua, vaikuttaa hyvältä.
@nick: kyllä ​​- @erickson on väärä noin 8 merkistä: 94 ^ 8/680 10 ^ 6/3600/24 ​​=> 103 päivää. GPU: iden ja bcryptin osalta, mitä olen nähnyt, ei ehkä ole paljon julkaistu työtä bcryptin optimoimiseksi heille, mutta ei ole syytä ajatella, että se olisi erittäin vaikeaa.
Saatuani uuden vahvistuksen, korjasin sen 8 merkille.
@nealmcb Uskon, että Thomas Pornin on todennut, että bcrypt on suunniteltu tekemään GPU: sta ja laitteistosta hitaampaa. Jotain tietojen mutaatiosta pakottaakseen heidät lyömään, pitää jatkaa iskemistä päämuistiin?
Bcryptin suorittama työ avaimen johtamisessa on sama kuin PBKDF2, joten laitteiston tulisi vaikuttaa molempiin yhtä. Saatat ajatella scryptia, joka on suunniteltu estämään muistin optimointi.
@erickson: ei, siinä on todellakin eroa. PBKDF2 SHA-256: lla on kaikki 32-bittiset aritmeettiset operaatiot; bcrypt on näennäissatunnainen pääsy (lukeminen ja kirjoittaminen) 4 kt: n puskurissa. Tämä tekee bcryptistä paljon vaikeampaa optimoida GPU: lla. Scrypt vain rakentuu edelleen tähän konseptiin, laajentamalla muistipuskurin _megatavuun_ (koska vaikka bcrypt on vihamielinen GPU: lle, nykyaikaisella FPGA: lla on pienet upotetut RAM-lohkot, jotka toimivat hienosti siitä - mutta FPGA kärsii salauksen toteutuksista).
@ThomasPornin En tajunnut sitä, kiitos. Minun on tarkasteltava lähemmin `bcrypt`.
Surullinen totuus on scrypt ja bcrypt eivät tarjoa paljon käytännön parannusten ja raakan voiman suhteen: kierros vie enemmän aikaa, mutta voit käytännössä tehdä niistä vähemmän, koska olet rajallinen sen suhteen, kuinka kauan voit viedä tarkistuksen hash. GPU / FPGA / ASIC ovat saaneet paljon parempaa salausta, ja niillä on kohtuullinen liikkumavaraa ennen kuin Mooren laki rajoittaa niitä. Suorittimet paranevat huomattavasti SHA-256: lla, kun taas GPU: ita / FPGA / ASICia rajoittaa nyt Mooren laki SHA-256: lle. Keskipitkän ja pitkän aikavälin näkymät suosivat SHA-256: ta.
Se on ensimmäinen kerta, kun olen nähnyt nämä tiedot, näyttää mielenkiintoiselta!Onko sinulla jotain lukea tarkempaa selitystä?
KYSYMYS: Joten tässä vastauksessa oletetaan, että hyökkääjä * tietää * oikein käytettyjen sekoituskierrosten määrän?Joten, jos pystyt piilottamaan koodisi, käyttääkö se turvallista vaihtoehtoa matalaa mutta epäselvää numeroa, kuten esimerkiksi 628 hajautuskierrosta tasaisen numeron kuten 1000 tai 10000 sijaan?
@csstudent1418 Ei, se ei lisäisi turvallisuutta.Ensinnäkin se on eräänlainen turvattomuus hämäryyden kautta.Suunnittele järjestelmäsi siten, että se on turvallinen, kun algoritmit ovat näkyvissä ja vain avaimet ovat salaisia.Mutta mikä tärkeintä tässä tapauksessa, hyökkääjä voi tarkistaa jokaisella iteroinnilla enintään valitsemansa maksimimäärän.Joten jos valitset 628, he rikkovat salasanan matkalla 10000: een.
#2
+17
Nemo
2011-06-21 20:34:20 UTC
view on stackexchange narkive permalink

Suolaa voidaan pitää julkisena käytännössä määritelmän mukaan.

Mitä tulee hashiin ja kuinka "turvalliseen" se on, pidän kiinni suosituksista, joita NIST antaa Yhdysvaltain valtion virastot. Kuten Wikipedia-artikkelissa sanotaan:

SHA-1 poistetaan käytöstä useimmissa julkishallinnon käyttötarkoituksissa; Yhdysvaltain kansallisen standardi- ja teknologiainstituutin mukaan "liittovaltion virastojen tulisi lopettaa SHA-1: n käyttö ... sovelluksiin, jotka vaativat törmäyskestävyyttä mahdollisimman pian, ja niiden on käytettävä SHA-2-hash-perhettä toimintoja näille sovelluksille vuoden 2010 jälkeen "

Voit spekuloida, kuinka turvallisia tai vaarallisia ovat erilaiset algoritmit, mutta miksi vaivautua, kun sinulla on teknisiä tietoja, Yhdysvaltain hallitus pitää tarpeeksi hyvänä omaan käyttöönsä?

[muokkaa]

Muuten, kysymyksesi näyttää heijastavan väärinkäsitystä siitä, miten nämä analyysit suoritetaan. Hajautusfunktiossa on paljon enemmän kuin sen bittien lukumäärä.

160-bittisen hashin kuten SHA-1: n pakottaminen raakaa vaatii 2 ^ 160 vaivaa; sitä ei yksinkertaisesti tapahdu, riippumatta siitä kuinka monta "GPU: ta" heität siihen. Itse asiassa sitä ei todennäköisesti tapahdu maailmankaikkeuden elinaikana. (Totta, törmäyksen pakottaminen raakana vaatii "vain" 2 ^ 80 vaivaa. Mutta se vaatii myös 2 ^ 80 tallennustilaa . Onnea siinä.)

Syy MD5 ja SHA-1: tä pidetään "mahdollisesti vaarallisena", koska jokaisessa algoritmissa on havaittu heikkouksia, jotka saattavat vähentää työtapaa, aivan jyrkän voiman alapuolella. Syy siirtymiseen uudempaan algoritmiin (kuten SHA-2) on välttää tunnetut heikkoudet; syy käyttää 256 bittiä on tarjota jonkin verran puskuria tuntemattomia heikkouksia vastaan. Sillä ei ole mitään tekemistä "GPU: iden" kanssa; vastustaa raa'an voiman hyökkäyksiä, 160 bittiä riittää.

Samanlaiset lausunnot koskevat muuten kaikkia salauksia.

Nyt on mahdotonta yliarvioida, kuinka paljon enemmän NSA: n ihmiset tietävät näistä asioista kuin sinä tai minä. He antavat suosituksia Yhdysvaltain valtion virastoille ja Yhdysvaltain teollisuudelle NIST: n kautta. Joten ellei vastustajasi ole itse merkittävä maailmanhallitus, NIST-suositukset ovat enemmän kuin riittäviä. Ohita kaikki itse julistamat "asiantuntijat", jotka yrittävät kertoa sinulle toisin; NSA on paremmin toiminnassaan kuin voit kuvitella.

Jos vastustajasi on merkittävä maailmanhallitus, kukaan SO: lla ei ole pätevä auttamaan sinua. Ja sinulla on paljon suurempia ongelmia kuin mitä hash-toimintoa käyttää.

[edit 2]

Oletan tietysti, että käytät tätä toimintoa jo osana tavallista salasanan hajautusjärjestelmää. , kuten PKCS # 5 (tunnetaan myös nimellä "PBKDF2"), ja kysymyksesi koski puhtaasti mitä hash-toimintoa tulisi käyttää.

PBKDF2 suosittelee vähintään 1000 iteraatiota, mutta sinä voi valita mitä haluat. Hyökkääjän raa'an voiman ponnistus nousee lineaarisesti tämän luvun kanssa, joten 10000 iteraatiota vs. 1000 tarkoittaa, että kunkin salasanan raakavoima vie 10 kertaa kauemmin.

Jos pystyn laskemaan hajautukset todella nopeasti, mikä estää minua käymästä läpi kaikkia mahdollisia salasanayhdistelmiä, jotka ovat enintään 8 merkkiä pitkiä?
Myös salasanojen merkkijakauma ei ole satunnaista: http://www.r-bloggers.com/character-occurrence-in-passwords/
@Seppo: Suola. Sinun on toistettava _each_ salasanan haku, jonka haluat murtaa. Huomaa myös, että oletetaan, että käytät standardia, kuten [PKCS # 5] (http://tools.ietf.org/html/rfc2898), joka lisää joukon iteraatioita, jotta raa'an voiman hyökkäykset vaikeutuvat jopa yhdelle salasanalle . Pohjimmiltaan neuvoni on pitää kiinni tavallisista algoritmeista ja toimintatavoista.
160-bittisen salaisuuden, jossa kukin bitti on erillinen satunnaismuuttuja, joka on tasaisesti jakautunut koko {0}, pakottaminen kestää 2 ^ 160 aikaa. Raa'asti pakotetut käyttäjän salasanat, jotka on hajautettu ja joissa monet salasanat ovat 6 kirjainta, eivät käytä isoja kirjaimia, numeroita tai erikoismerkkejä ja löytyvät englanninkielisestä sanakirjasta, vievät huomattavasti vähemmän aikaa.
#3
+1
SantosLHalper
2011-06-21 20:24:52 UTC
view on stackexchange narkive permalink

Jos hyökkääjä tietää suolan, hän voi laskea uuden sateenkaaren taulukon suolan arvon perusteella.

Se riippuu käytettävästä algoritmista. Coda Halen mukaan MD5 ja SHA-hajautusalgoritmien perhe ovat yleiskäyttöisiä ja tarkoitettu nopeudelle. Lyhyesti sanottuna hän päättelee, että nämä eivät riitä estämään sanakirjahyökkäyksiä ja että bcrypt on oikea tapa edetä, koska salasanojen murtamiseen tarvitaan enemmän asennusaikaa, mikä hidastaa hyökkääjää huomattavasti. Tässä on toinen mielenkiintoinen artikkeli aiheesta bcrypt.

Entä SHA-256 tai SHA-512? Ovatko ne tällä hetkellä turvallisia? Entä muutaman vuoden kuluttua?

Varoitetaan, tällä väitteellä on kaksi puolta. On bcrypt -puoli ja SHA-256 ja ylöspäin. Jos uskot SHA-perheen puoleen kuuluvia, uskon, että olet SHA-256: lla turvassa yli muutaman vuoden, jopa jotkut väittävät, että SHA-1 suolalla on edelleen tarpeeksi hyvä, mutta jos haluat olla Turvallisena pidän kiinni SHA-256: sta. On foorumi, jossa mainitaan myös, että MD5: llä on vielä 5–10 vuotta aikaa todistaa "riittävän epäluotettavaksi". Valitettavasti en voi lähettää linkkejä siihen, koska olen jo saavuttanut korkeimman kahden.

Henkilökohtaisesti käytän SHA-256: ta suolan kanssa, mutta minun täytyy ehdottomasti lukea lisää bcrypt ja arvioida uudelleen. Toivottavasti tämä auttaa. Tämä on eräänlainen kysymys, jota voit viettää helposti lukemattomia tunteja tutkimukselle, mutta silti mielenkiintoinen.

Tässä on [foorumi] (http://www.forensicfocus.com/index.php?name=Forums&file=viewtopic&t=7326), jossa MD5 mainitaan, vielä 5-10 vuotta. Myös väite, että SHA-1 on [vielä tarpeeksi hyvä] (http://www.crimulus.com/2010/09/30/the-effectiveness-of-salting-a-sha1-hash-then-storing-it -as-a-sha1-hash /).
Joo, porsaanreikiä varten!
SHA-256 ja suola ovat kunnollisia; mutta anteeksi, tämä neuvo on vain huono. MD5 on helppo murtaa reaaliajassa jopa 12 merkkiin. Ei ole todellakaan mitään syytä haluaa työntää porsaanreikää, jonka tiedät jo olevan vanhentunut, kun saatavilla on täysin moderneja ratkaisuja ilman paljon lisätoimia.
#4
-1
Jim
2011-06-21 18:58:29 UTC
view on stackexchange narkive permalink

Suolan tarkoituksena on suojata hyökkäyksiltä käyttämällä rainbow-pöytää. Jos hyökkääjä tietää suolan, hän voi laskea uuden sateenkaaren taulukon suolan arvon perusteella.

Lyhyt vastaus olisi kyllä. Varastettu suola antaa hyökkääjälle mahdollisuuden käyttää sateenkaaren hyökkäystä näitä tunnistetietoja vastaan ​​(vaikka hyökkääjän on ensin rakennettava ainutlaatuinen sateenkaaritaulukko).

Pitkä vastaus riippuu siitä, kuinka monimutkaisia ​​nämä salasanat ovat . Jos käyttäjä käyttää yksinkertaista salasanaa ( stackoverflow ), varastetulla suolalla olisi suurempi vaikutus salasanaan. Jos käyttäjä käyttää monimutkaista salasanaa ( $ TACK0verflow ), varastetulla suolalla olisi paljon pienempi vaikutus (koska niitä ei todennäköisesti näy missään sateenkaaritaulukossa).

Tämä on väärin ja kuvastaa sateenkaaripöytien ja suolojen väärinkäsitystä.
Eikö sinun pitäisi luoda uutta suolaa kullekin salasanalle?
@Seppo Erviälä: Jos haluat tehdä sen oikein, kyllä ​​- mutta usein ohjelmoijat tulkitsevat suolan vakiona merkkijonoksi, joka liitetään salasanaan. Toivottavasti tämä "suola" luodaan satunnaisesti asennuksen aikana. Tarpeetonta sanoa, että nämä variantit antaisivat sateenkaaren taulukon luomisen salasanojen murtamiseen. Ainakin hyökkääjän on luotava uusi sateenkaaripöytä.
@GregS: on yksi yhteisömme hienoimmista asioista, että jos sinulla on lisätietoja tai erilaisia ​​tietoja, voit antaa ne yksinkertaisesti lähettämällä vastauksen ...
@GregS: Olisi mukavaa, jos pystyt osoittamaan minne menin pieleen.
Ainoa syy sateenkaaripöydän laskemiseen on * uudelleenkäyttö * pyrkimys laskea taulukko. Taulukon laskentakustannukset ovat hiukan enemmän kuin kaikkien taulukon kattamien mahdollisten salasanojen kokeilemisen kustannukset. Suola eliminoi sateenkaaripöydän edut, koska jokaisella salasanalla on erilainen suola.
Pohjimmiltaan suolat suojaavat tiedostoa kokonaisuutena, mutta eivät suojaa yhtä salasanaa. Ilman suolaa hajotat koko tiedoston yhdellä kertaa kaikkien mahdollisten salasanojen yli. * Vaihtelevien * suolojen avulla voit rikkoa yhden salasanan kaikkien mahdollisten salasanojen yli. Voi, ja suolat suojaavat sitä, että joku huomaa, että toinen kryptattu merkkijono on sama kuin heidän, sillä on mahdollisuus, että molemmat käyttivät samaa salasanaa.
Luulen, että Jim käyttää vain termiä "sateenkaaren pöydän hyökkäys" tarkoittamaan "raakaa voimahakua" siinä tapauksessa, että käytetään ainutlaatuisia sisäänpääsysuoloja.
@Yuliy,, jos näin Jim käyttää sanaa "sateenkaaren pöydän hyökkäys", hän käyttää sitä väärin. Tällä lauseella on jo hyväksytty merkitys, eikä se ole sama kuin "raakavoiman etsintä".


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...