Vraag:
filosofisch: het beperken van de wachtwoordruimte verhoogt de veiligheid
pavlak11
2016-03-18 23:08:10 UTC
view on stackexchange narkive permalink

Dit is meer een filosofische vraag.

Stel dat u probeert een goed wachtwoord te kiezen voor een bepaalde online dienst, bijvoorbeeld de e-bankingdienst van uw bank. Nu heeft de bank enkele beperkingen met betrekking tot de wachtwoorden die het toestaat: u kunt alleen (kleine letters) letters en (decimale) cijfers gebruiken, en de wachtwoord mag maximaal 6 tekens lang zijn . Dus wat is een "goede" manier om zo'n wachtwoord te selecteren?

Men zou het volgende kunnen doen (noem dit schema 1 ): selecteer willekeurig 6 karakters uit de set [a- z0-9] met uniforme waarschijnlijkheid. Dit schema heeft het nadeel dat het "zwakke" wachtwoorden kan produceren, zoals wachtwoorden die alleen letters of alleen cijfers bevatten (er is een kans van 14,2% [1] dat dit gebeurt).

Dus hier is een ander idee (bel dit schema 2 ): selecteer willekeurig (en uniform) één letter, één cijfer en 4 tekens uit de set [a-z0-9]. Gebruik dan een willekeurige permutatie van deze 6 karakters als wachtwoord. Dit garandeert dat het wachtwoord tekens bevat uit beide klassen (letters en cijfers).

Dus de vraag is: welk van de twee schema's produceert "betere" wachtwoorden?

Aan de ene In de tweede plaats produceert het tweede schema wachtwoorden die waarschijnlijk beter bestand zijn tegen eenvoudige brute force-aanvallen. Aan de andere kant staat het eerste schema strikt meer combinaties toe dan het tweede: 2 ^ 31,0 [2] versus 2 ^ 30,8 [3]; in feite is de set wachtwoorden van schema 1 een superset van die van schema 2.

Opmerking: ik bekijk dit vanuit het perspectief van de partij die het wachtwoord genereert en niet de partij die de wachtwoordbeleid.

[1] (26 ^ 6 + 10 ^ 6) / 36 ^ 6 = 0.142

[2] log2 (26 ^ 6) = 31.0

[3] log2 (36 ^ 6-26 ^ 6-10 ^ 6) = 30.8 dwz alle combinaties van 6 tekens behalve degene met alleen letters (26 ^ 6) en degene met alleen cijfers (nog eens 10 ^ 6 )

Het tweede schema is niet beter bestand tegen brute kracht dan het eerste, het zorgt er alleen voor dat gebruikers geen echt slechte kunnen krijgen. Als de implementatie uitlekt, zou het zelfs gemakkelijker zijn om te brute kracht. Ervoor zorgen dat een wachtwoord ten minste x van een bepaald type heeft, moet een eigenschap zijn van de tekenset, niet een beslissing.
Gegarandeerd dat een wachtwoord tekens van beide groepen bevat, doet niets om brute-force-aanvallen te weerstaan. Als de aanvallers bruut forceren en eerst alle cijfers proberen, dan eerst alle letters, dan de rest, ordenen ze gewoon de manier waarop ze de wachtwoordruimte uitputten, en maken het niet gemakkelijker om aan het einde te komen (wat statistisch gezien de enige is) punt). Waarom niet gewoon de eerste methode gebruiken en alle uitvoer weggooien die niet minstens 2 letters en minstens 2 cijfers bevat?
De gemiddelde entropie neemt af, maar de entropie van de zwakste wachtwoorden kan toenemen.
Het tweede schema kan wachtwoorden produceren zoals 'pass12'. Een [top 250 wachtwoord] (http://www.thetechherald.com/articles/Do-you-use-any-of-these-passwords-Change-them-if-you-do/4002/). Heel slecht.
Er _is_ een wachtwoord met een goede reden om niet te worden toegestaan: de lege string. Op die manier mag de opgegeven "gebruikersnaam" niet worden opgeslagen als het wachtwoordveld leeg wordt gelaten. Het is een feit dat u zich geen zorgen hoeft te maken.
Drie antwoorden:
TTT
2016-03-18 23:55:56 UTC
view on stackexchange narkive permalink

tldr; Het beperken van de wachtwoordruimte helpt niet tegen brute force -aanvallen, maar wel tegen intelligente -aanvallen, maar er is een nog betere manier.

Ten eerste stelt u de juiste vraag, maar gebruikt u hier de verkeerde terminologie:

... het tweede schema produceert wachtwoorden die waarschijnlijk meer zijn bestand tegen eenvoudige brute force aanvallen.

(ik denk dat je bedoelt intelligente aanvallen.)

A brute force -aanval is er een die elke mogelijke combinatie probeert zonder toegevoegde intelligentie . Brute kracht in uw voorbeeld zou zoiets zijn als:

  a, b, c, ... y, z, 0, 1 ... 9, aa, ab, ac, ... ay, az, a0, a1 ... a9, ba, bb, bc ... 99, aaa ... 999, aaaa ... 9999, aaaaa ... 99999, aaaaaa ... 999999  

Al het andere dan dat zou worden beschouwd als een inlichtingenstrategie. Voordat u brute kracht probeert, kunt u bijvoorbeeld wat tijd besparen met deze strategie:

  1. Probeer alleen getallen.
  2. Probeer woorden uit een woordenboek.
  3. Probeer de X meest populaire wachtwoorden.
  4. Probeer combinaties van de gebruikersnaam of de initialen van de gebruiker, het huidige jaar of vorig jaar, enz.
  5. Probeer brute kracht.

Uw doel, als maker van uw wachtwoord, is ervoor te zorgen dat de eerste 4 opties uw wachtwoord altijd niet vinden. Met andere woorden, u moet ervoor zorgen dat de enige manier om uw wachtwoord te achterhalen is door middel van brute kracht, en u moet er ook voor zorgen dat als er brute kracht wordt gebruikt, het lang zal duren voordat u uw wachtwoord vindt. Hoe u dat ook doet, is aan u, gezien de beperkingen van de soorten wachtwoorden die zijn toegestaan.

Wat uw specifieke vraag betreft, ik zou het meer als een willekeurige wachtwoordgenerator benaderen - het genereert er een voor u, u kijkt ernaar, en als u denkt dat het geraden kan worden met een andere methode dan brute kracht, dan hoeft u alleen maar genereer nog een willekeurige totdat je er tevreden mee bent. (Dit zou Schema 1 zijn met een twist.) Als je dit echt zou willen kwantificeren, zou je je intelligentiestrategieën kunnen laten bouwen en klaar voor gebruik (alle strategieën behalve brute kracht). Vervolgens kunt u ze testen met uw willekeurig gegenereerde wachtwoord en als het wordt gevonden, genereert u een ander totdat alle intelligente strategieën uw wachtwoord niet kunnen vinden. U krijgt dan een wachtwoord dat alleen met brute kracht kan worden ontdekt. Door deze methode te gebruiken kun je een betere entropie bereiken dan door de wachtwoordruimte te beperken zoals je hebt beschreven.

Opmerking: met de wachtwoordregels die je hebt opgegeven, kan mijn draai aan Schema 1 eindigen lijkt enigszins op schema 2, maar naarmate het aantal toegestane tekens en de wachtwoordlengte toeneemt, zou de twist van schema 1 meer entropie moeten bieden.

Het zou de moeite waard kunnen zijn om te verduidelijken dat het proberen van `9` ...` a`, `99` ...` aa`, enz. Ook een mogelijke aanval met brute kracht is, anders lijkt het erop dat `999999` veel veiliger is. wachtwoord dan `aaaaaa`!
@DavidZ - Geweldig punt. De volgorde van brute force-pogingen zou er niet toe doen. Hoewel uw wachtwoord onder normale omstandigheden lang genoeg moet zijn, is het niet relevant. Als u bijvoorbeeld, zonder de lengtebeperking, bang was dat aaaaaa veel eerder dan 999999 zou worden ontdekt, voeg dan gewoon een ander teken toe en maak er 7 tekens lang van: aaaaaaa.
(vervolg) Om je punt echt te raken, in het bovenstaande geval is het zeker mogelijk dat er 36 verschillende threads van de brute force-aanval tegelijkertijd worden uitgevoerd, elk beginnend met een ander initieel karakter.
Mike Ounsworth
2016-03-18 23:19:57 UTC
view on stackexchange narkive permalink

Ik denk dat je de complexiteit van het probleem mooi hebt samengevat, en hebt geïllustreerd waarom beide voor- en nadelen hebben. Het juiste antwoord is natuurlijk Schema 3: gebruik een langer wachtwoord , of Schema 4: schakel over naar een bank die wachtwoorden van meer dan 6 tekens toestaat .

Je hebt eigenlijk een eeuwenoude vraag opgeworpen, die je rond de vragen op deze site kunt vinden als je door de tag bladert: met enige (kleine) kans zou een volledig willekeurige wachtwoordgenerator bedenk "wachtwoord". Door de willekeurigheid te beperken, vergroot u de sterkte van uw worst-case-wachtwoord, ten koste van uw entropie. Als je een goed argument kunt aanvoeren voor een beperking die de entropie niet significant vermindert, dan denk ik dat het acceptabel kan zijn. Hoewel het algemene antwoord altijd is: als u zich zorgen maakt over de entropie van uw wachtwoordruimte, gebruik dan meer tekens.

Zolang het langere (8 -> 9) resultaat niet "wachtwoorden" of "wachtwoord1" is.;)
Tom
2018-08-02 17:31:45 UTC
view on stackexchange narkive permalink

antwoord op titelvraag:

Nee, onder geen enkel scenario, maar men beperkt de wachtwoordruimte, verhoogt de veiligheid. Het enige scenario waarin dit gebeurt, is wanneer uw beperking de uitsluiting is van bekende zwakke wachtwoorden, bijv. een zwarte lijst. Dit is trouwens de (2018) aanbevolen manier om het te doen. Vergeet alle complexiteitsonzin, dat waren IT-effecten die gelijkwaardig zijn aan alchemie.

antwoord op de volledige tekstvraag:

Uw plan twee is eigenlijk zwakker vanwege een veel voorkomende menselijke misvatting. Je zou kunnen denken dat een willekeurige generator die theoretisch "aaaaaa" kan uitspugen, zwakker is dan een generator die dat niet kan. U vergist zich echter. Uw generator die deze "zwakke" uitvoer niet kan genereren, heeft in feite een verminderde zoekruimte en elke aanvaller die het algoritme achter het schema kent, heeft een groot voordeel ten opzichte van het volledig willekeurige schema.

Merk op dat "aaaaaa" zou kunnen zijn de eerste poging is een domme aanval met brute kracht, maar de kans is erg klein en wordt gemakkelijk gecompenseerd door het feit dat de zoekruimte zo veel groter is. In feite, in een schema dat het voor de generator onmogelijk maakt om deze uitvoer te creëren, zou een aanvaller die zich bewust is van het schema er ook niet op testen.

"aaaaaa" is eigenlijk geen slecht wachtwoord en in elk realistisch aanvalsscenario wordt waarschijnlijk lang, lang na "passwd", "123456" en zelfs al hun mogelijke permutaties door de aanvaller getest. Een echte aanvaller in de echte wereld zal veel eerder vluchten of op zijn minst beginnen met een woordenboekaanval voordat hij daadwerkelijke brute-force-opsomming gebruikt.

Misschien wil je een beter voorbeeld dan "aaaaaa" versus "passwd", [pwned passwords] (https://haveibeenpwned.com/Passwords) retourneert momenteel 375.079 gebruik van "aaaaaa" en slechts 12.251 gebruik van "passwd".
rofl, dat klopt.Ik werd daar een beetje meegesleept.U kunt ":-) :-)" gebruiken dat slechts 8 keer is gezien, of ": -) (-:" dat heel gemakkelijk te onthouden is, speciale tekens heeft en slechts één treffer. :-)
Het belangrijkste punt is dat dingen die "niet echt willekeurig" lijken om uit stomme intuïtie te komen, dat ook zijn.Als je een lange reeks willekeurige getallen ziet, zie je daarin een patroon waarvan je DENKT dat het niet zou moeten zijn.Maar het tegenovergestelde is waar: ze zouden moeten.Juist door willekeur kunnen ze spontaan opduiken.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...