At lave et godt password

Kategorier: Nørderier , Tanker , Udvikling

21. december, 2008

Jeg har fundet en måde hvorpå jeg endelig kan begynde at huske mine passwords uden at forfalde til let-genkendelige tricks. Jeg har til formålet skrevet et program der kan genere passwords der er relativt tilfældige og relativt nemme at huske. Som en advarsel kan jeg fortælle at jeg på ingen måde er sikkerhedsekspert, hvorfor råd givet i dette indlæg ikke bør stoles på over en dørtærskel. For eksempel er det sikkert en rigtigt dårlig idé at publicere den algoritme man bruger til at generere passwords.

Et godt password er vel i princippet minimum 16 tegn langt og består af en tilfældig række af store og små bogstaver, tal og specialtegn. Problemet ved denne type af passwords er at de for de fleste er relativt svære at huske, især hvis man arbejder et sted hvor passwordet skal skiftes jævnligt.

Problemet ved passwords der er nemme at huske er at man ofte forfalder til at bruge kendte ord, navne på ens børn og den slags.

Min løsning er ikke specielt original, og implementationen er ikke nødvendigvis optimal. Idéen bygger på passwords man kan udtale og derfor memorisere relativt hurtigt selvom de er delvist tilfældigt genereret.

Eksempler kunne være:

PasswordUdtale
W33cThigwi:k-thig
ThiekSaiPetThi:k-saj-pet
c3rCrysMoser-krys-mo

Implementationen bygger på at stykke et password sammen af stavelser. En stavelse skal ifølge min børnelærdom indeholde en vokal og et antal konsonanter. En funktion til at generere en stavelse kunne se sådan ud:

# Function to create a syllable up to a maximum length def make_syllable(max_length): syl = '' # If there is only room for one character, use a number if max_length == 1: syl += random.choice(numbers) else: while True: # syllable starts with a consonant and a vowel syl = "%s%s" % (random.choice(start_consonants), random.choice(vowels)) # maybe there is a consonant at the end if random.choice((True,False)): syl += random.choice(end_consonants) # maybe the syllable is capitalized if random.choice((True,False)): syl = syl[0].upper() + syl[1:] # break if syllable does not exceed max_length if len(syl) <= max_length: break return syl

En stavelse starter med en konsonant efterfulgt af en vokal. Muligvis sættes der en konsonant i slutningen. For at tilføre ekstra mystik kan stavelsen starte med stort bogstav. Hvis der kun er plads til ét tegn vil der blive indsat et tal.

Funktionen bygger på en række definerede grupper: vowels, start_consonants, end_consonants og numbers. Der kan tilføjes mere end blot enkelte tegn i som elementer i disse grupper. Eksempelvis er 'ee', 'ai' og 'ie' med i vowel-gruppen, 'pr' og 'tr' i start_consonant-gruppen og 'ng' og 'nt' i end_consonant-gruppen.

Man kunne beskylde funktionen for at være lidt for simpel og rigid - hvilket ville være berettiget. Men som et udgangspunkt virker den udemærket.

For at lave et helt password, skal stavelserne sættes sammen:

def generate_password(plength=8): generated_password = '' # add syllable until length is achieved while not len(generated_password) == plength: generated_password += make_syllable(plength-len(generated_password)) return generated_password

Tada!

Koden kan hentes som et sammenhængende python-program. Du kan bruge koden til hvad du vil, og du behøver ikke henvise til mig på nogen måde. Jeg er dog altid interesseret i at høre om den kan bruges til noget, ligesom forbedringer modtages med kyshånd.

Kommentarer

  1. Jesper Louis Andersen skriver:

    Kig paa 'Automated password generator' - apg. Den er i de fleste distributioner.

  2. Niels Kjøller Hansen skriver:

    Ja, den ser ud til at gøre præcis det jeg ledte efter. Men det var ganske sjovt at gøre et forsøg på at genopfinde den dybe tallerken.

    Plus at jeg er virkelig dårlig til at læse c, så jeg har svært ved at lure præcis hvad apg laver.

  3. Bottes UGG skriver:


    Votre article m'a donné beaucoup de reflexions. Allez-vous faire des folies sur une paire de bottes ugg cette saison ? Ces bottes sont très belles.

Kategorier

Arkiv

Blogroll