Linux'ta güçlü şifreler nasıl oluşturulur?


24

Linux'ta (hem normal hem de yönetici kullanıcılar için) nasıl güçlü şifreler oluşturabileceğimi ve bunun için özel programlar varsa merak ediyorum.

Yanıtlar:



16

Şahsen, şifre oluşturucuyu kullanmamayı tercih ediyorum, çünkü oluşturulan şifre hatırlaması çok zor, ancak bir taşınabilir çözüm / dev / urandom kullanmak.

Özel karakter içermeyen rastgele şifreler oluşturmak, 10 karakter uzunluğundadır:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10` 
dyxJRKldvp

Bu, / dev / urandom'dan baytları kaparak, trkomutta belirtilen kalıba uymayanları silerek ve onu 10 karakterle sınırlayarak çalışır head.

Özel karakterler içeren rasgele şifreler oluşturmak, 10 karakter uzunluğundadır:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0

Bu, tristenmeyen baytları temizledikten sonra biraz farklı bir teknik kullanır , çünkü fikir onu en az bir özel karaktere zorlamaktır. Bu fold, satırı 10'lu gruplara sarma komutunu kullanarak , ardından grepyalnızca özel bir karakter içeren satırları almak için çalışır. headsonra gereksinimleri karşılayan ilk şifreyi alır.


1
Biraz paranoyaksanız ( ) [:print:]için de kullanabilirsiniz . O zaman sorun klavyenizdeki semboller olacak ...trtr -dc '[:print:]'
lgeorget

11

Bu küçük senaryoyu birkaç yıl önce yazdım ve o zamandan beri kullanıyordum. Eğer bir şey varsa, ilginç bir suistimal printfve BASH'in maalesef senaryolarda nadiren gördüğüm güzel bir özelliğini kullanıyor typeset.

#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org

typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
    echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
    for ((j=0; j < $length; j++)); do
        set=$(($RANDOM % 20))
        if   [ $set -le 6 ];  then o=65; l=26; # 35% uppercase
        elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
        elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
        elif [ $set -le 18 ]; then o=58; l=7;  # 10% symbolic
        elif [ $set -le 19 ]; then o=33; l=15; fi
        ord=$(($o + $RANDOM % $l))
        printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
    done
    echo
done

Komut dosyası için teşekkürler Aaron !!!
Gasuma

4

Ayrıca GUI kullanarak, birkaç hoş özelliğe sahip güçlü şifreler oluşturmak için sistem entropisini kullanma seçeneği sunan KeePassX'i de eklerdim . Ayrıca, şifrelerinizi yönetme ve şifreli bir dosyaya kaydetme seçeneği sunar.

KPX şifre üreticisi arayüzü şöyle görünür:

görüntü tanımını buraya girin


3

apg Kolayca hatırlanabilecek bir şifre istiyorsanız, kötü bir seçim değildir.

; apg -m 16 -a 0 -t
ByajNudgolIston9 (Byaj-Nud-gol-Ist-on-NINE)
Af}ockhuecUjrak8 (Af-RIGHT_BRACE-ock-huec-Uj-rak-EIGHT)
IakijKadmomIvgig (Iak-ij-Kad-mom-Iv-gig)
NutIlOsyahodBeef (Nut-Il-Os-ya-hod-Beef)
anMechOybekazell (an-Mech-Oyb-ek-az-ell)
VumushCummAd{fra (Vum-ush-Cumm-Ad-LEFT_BRACE-fra)

Göre unutmayın bu , Ţifrenizin en az 12 karakterden oluşmalıdır.


2

Rasgele olmayan bir ürün kullanıyorum, ancak tüm saldırı amaçları için yeterince çeşitli ... ana şifre ve diğer şifreler oluşturmak için son geçiş . Ana parolayı şu şekilde oluşturuyorum

echo -n "some seed" |  openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'

ve çıktı

H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M= 

Şimdi sadece birkaç bölümden birini seçin ve bir şifre oluşturun, bunları yeniden düzenleyin, biraz dışarıda bırakın, bir karakter ekleyin veya rastgele yapmak için bir karakter ekleyin. Tohumunuzu hatırlayabildiğiniz sürece bunu yeniden oluşturabilir ve şifrenizi geri kazanabilirsiniz (çok fazla değişiklik yapmadığınız sürece)


1

pwgen karmaşıklığı, karakter sınıflarının oluşturduğu parola sayısını, uzunluğu vb. ayarlamak için bir dizi parametre belirtmenize izin veren harika bir küçük araçtır.


1

İşte XKCD tarzı şifreler oluşturmak için bir kerelik komut dosyası . /usr/share/dict/wordskelimelerin çoğu uzun olduğu için bunun için iyi bir sözlük değil, fakat kolayca erişilebilir. Daha güzel şifreler için S / Key One-Time Password kelime listesi gibi kısa kelimeler sözlüğünü kullanabilirsiniz .

dict="/usr/share/dict/words"
max="`wc -l <"$dict"`" \
    perl -e '$count=4;
        $/=\4; while (<>) {
            print unpack('L') % $ENV{max} + 1, qq(\n); last unless --$count
        }' /dev/urandom | 
    while read n ; do 
        tail -n "+$n" "$dict" | head -1
    done

0

Bir GNOME kullanıcısıysanız ve çeşitli hesaplarınız için şifreleri saklamanız gerekiyorsa, Vahiy şifre yöneticisini deneyebilirsiniz . Yalnızca şifre uzunluğunu ayarlamanız ve harflerin ve rakamların yanı sıra noktalama karakterlerini eklemeyi seçip seçmemenizin temel bir şifre oluşturma özelliği vardır.


0

Yanılıyorsam düzelt ama: Ben anlaşıldığı kadarıyla, orada hiçbir bilgisayar tamamen rasgele dize ile gelebilir yol. Bu yüzden şu fikre ulaştım [ve tamamen aptalca olmadığını umuyorum]:

Biri 26 taraflı bir zar atarsa, atma şansı, diyelim ki 26: 1:26. Başka bir deyişle: 26 atma şansı yaklaşık% 0,04'tür. Ayrıca, bir zar hafızası ve böcekleri yoktur. Aşağıdaki fikir geldi:

  • 26 taraflı bir zar alın, burada her bir taraf alfabenin bir harfiyle eşleşir
  • Her iki tarafın da 0 ile 9 arasında bir sayı ile eşleştiği on taraflı zar alın
  • yazı tura atmak
  • kafa demektir: mektup zar atmak
  • kuyrukları demek: sayı zarını atmak

Yazdırılacak Kağıt Modelleri:

Not : Bir Math Pro değilim ve 2600 dergisinde bunu tarif eden bir makaleyi okuduktan sonra bu fikre ulaştım. Sadece temel kavram üzerine kendi fikirlerimin bazılarını ekledim.

Ayrıca : Bunun ' ilk kaba kuvvet şifrenizi kırıcı yazma ' için mükemmel bir örnek olmadığını merak ediyorum . Ancak sorunuz, tartışılmak üzere bu fikri ortaya çıkarmak için bana mükemmel bir neden verdi.


1
Aslında tamamen rastgele bitler üretmenin bazı yolları var. Örneğin, HDD'nizdeki elektromanyetik gürültüyü ya da G / Ç oranlarındaki değişimi kullanma ... 'Sahte ve sözde jeneratörler' olarak adlandırılan üreticilerin umduğu şey, ürettikleri dizinin, içinde çalışan herhangi bir algoritma ile gerçek bir rastgele diziden ayırt edilememesidir. polinom zamanı.
lgeorget

1
Diceware sistemi ilginizi çekebilir. Benzer bir fikri takip ediyor, ancak sadece altı yüzlü zar kullanıyor. world.std.com/~reinhold/diceware.html
Jander

0

Güçlü şifreler oluşturmak için .zshrc.local dosyama iki takma ad ekledim.

İlk olarak:

alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"

Pw.graph yazmanın sonucu, boşluk çubuğu hariç klavyede yazılabilen her karakterden beş satırdır:

/d=|&mRq!g$QaNZ'L;CfEli,D3\)*h-jkerzv?{y"_Ic(0BtxJwF59:@G}KV1X2o>S~[#]s+W%A.<6bpTO^uP7U4HMYn`8
RIdW87{a4O3][?&rTn=m/:Y`_u*hqy2c%s@!ZPM$5to1f-.U9ClK,)'jDi0"pw>EzN^|gX~BSAJk\VFG(H<bx}+Q6#vL;e
s^H@yEo/X$|d?_jw7-n'l>m"Cb\W5.tTe0APB1D!#69[p+(8x}F&~RM`q3Q%vhfOiUZz]ucJk:)*agGV;=NY4{,K2SLrI<
$/t|!s}og5u:X~hcJUyYHf>;l<zDedL`.T*K8]CBSW[(xw+Mm^E3r16b-97%'@jVR{ZG#0p4AP=,I?\n&"a)vqNkQ2iO_F
,7n|^Y\%MpeBqvhI3mE<9zPS/~+sU`4ZoCWl&uxd'ft"kjcOy0X!{a-T_6RKiVg5Hb21D)w>@*N8;A[(rLG=$Q:.#]FJ?}

İkincisi:

alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"

Pw.alnum yazmanın çıktısı, hem büyük hem küçük harf ile yazdırılabilir her harf ve sayıdır:

E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv

Genellikle pw.graph kullanır ve çizginin rastgele bir kısmını kopyalarım. Bazı şifreler sembollere izin vermez, bu yüzden pw.alnum'un bir kısmını kullanırım.


0

Bu bir .html dosyası olarak kaydedilmiş kullanın:

<script>
var keylist="abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*_"
var temp=''

function generatepass(plength){
temp=''
for (i=0;i<plength;i++)
temp+=keylist.charAt(Math.floor(Math.random()*keylist.length))
return temp
}

function populateform(enterlength){
document.pgenerate.output.value=generatepass(enterlength)
}
</script>

<form name="pgenerate">
<input type="text" size=32 name="output">
<input type="button" value="Generate Password" onClick="populateform(this.form.thelength.value)"><br />
<b>Password Length:</b> <input type="text" name="thelength" size=3 value="32">
</form>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.