Linuxで強力なパスワードを作成する方法は?


24

Linuxで(通常ユーザーと管理ユーザーの両方に)強力なパスワードを作成する方法と、それを実行する特定のプログラムがあるかどうかは疑問です。

回答:


23

pwgenは、パスワードを生成するための多くのプログラムの1つです


16

個人的には、生成されたパスワードは覚えにくいため、パスワードジェネレーターは使用しませんが、1つのポータブルソリューションは/ dev / urandomを使用することです

特殊文字を含まないランダムなパスワードの作成は、10文字の長さです:

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

これは、/ dev / urandomからバイトを取得し、trコマンドで指定されたパターンに適合しないものを削除し、で10文字に制限することで機能しheadます。

特殊文字を含むランダムなパスワードの作成は、10文字です:

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

これは、tr不要なバイトを削除した後、少なくとも1つの特殊文字を強制的に使用することを目的としているため、わずかに異なる手法を使用します。これは、foldコマンドを使用して行を10のグループにラップしgrep、特殊文字を含む行のみをフェッチすることで機能します。head次に、要件を満たす最初のパスワードを取得します。


1
また、使用することができる[:print:]ためtrtr -dc '[:print:]'あなたはビットの被害妄想している場合、)。問題は、キーボードで使用可能な記号になります
...-lgeorget

11

私は数年前にこの小さなスクリプトを書き、それ以来ずっと使用しています。どちらかといえば、それprintfはBASHの興味深い誤用であり、残念ながらスクリプトではめったに見られないBASHの素敵な機能を使用しています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

スクリプトアーロンに感謝します!!!
ガスマ

4

また、システムエントロピーを使用して強力なパスワードを生成するオプションを提供するKeePassXを追加します。すべての機能はGUIを使用します。また、パスワードを管理し、それらを暗号化されたファイルに保存するオプションも提供します。

KPXパスワードジェネレーターインターフェースは次のようになります。

ここに画像の説明を入力してください


3

apg 簡単に覚えられるパスワードが必要な場合は、悪い選択ではありません。

; 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)

これによると、パスワードは少なくとも12文字の長さにする必要があることに注意してください。


2

私はランダムではないものを使用していますが、すべての攻撃の目的、マスターパスワード、および他のパスワードを生成するための最後のパスに対して十分に多様です。マスターパスワードの生成方法は次のとおりです。

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

そして出力

H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M= 

ここで、いくつかのセクションを選択してパスワードを作成し、それらを再配置し、一部を省略し、ランダムまたはそれと同じように文字または2を追加します。シードを覚えている限り、これを再生成し、パスワードを回復できます(あまり多くの変更を加えない限り)


1

pwgen は、複雑さ、文字クラス、生成するパスワードの数、長さなどを設定するためのいくつかのパラメーターを指定できるすばらしい小さなcliツールです


1

XKCDスタイルのパスフレーズを生成するための1回限りのスクリプトを次に示します。 /usr/share/dict/wordsほとんどの単語は長いので、これに適した辞書ではありませんが、簡単に入手できます。より良いパスフレーズには、S / Keyワンタイムパスワードの単語リストなどの短い単語の辞書を使用できます。

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

GNOMEユーザーであり、さまざまなアカウントのパスワードも保存する必要がある場合は、Revelationパスワードマネージャーを試してください。基本的なパスワードジェネレーター機能があり、パスワードの長さのみを設定し、文字と数字の他に句読点を含めるかどうかを選択できます。


0

間違っている場合は修正してください。しかし、私が理解した限りでは、コンピューターが完全にランダムな文字列を見つける方法はありません。そこで、次のアイデアを思いつきました[そして、それが完全にバカではないことを願っています]。

26面のサイコロを投げると、26が1:26であると言えます。言い換えると、26を投げるチャンスは約0.04%です。さらに、サイコロにはメモリもバグもありません。私は次のアイデアを思いつきました:

  • 各面がアルファベットの文字と一致する26面のサイコロを取得する
  • 各辺が0〜9の数字と一致する10面のサイコロを取得
  • コインを投げる
  • 頭の意味:手紙サイコロを投げる
  • 尾の意味:サイコロを投げる

印刷する用紙モデル:

:私はMath Proではないので、これについて説明した2600誌の記事を読んでからこのアイデアを思いつきました。基本コンセプトに自分のアイデアをいくつか追加しました。

また、これは単に「最初のブルートフォースパスワードクラッカーを書く」ための完璧な例ではないのだろうか。しかし、あなたの質問は、議論するためにこのアイデアを生み出す完全な理由を私に与えました。


1
実際には、完全にランダムなビットを生成する方法がいくつかあります。たとえば、HDDからの電磁ノイズやIOレートの変動を使用する場合...「疑似ランダムジェネレーター」と呼ばれるジェネレーターで期待されるのは、実行されるアルゴリズムによって、出力されるシーケンスを真のランダムシーケンスと区別できないことです。多項式時間。
lgeorget

1
Dicewareシステムに興味があるかもしれません。同様の考え方に従っていますが、使用するサイコロは6面のみです。 world.std.com/~reinhold/diceware.html-
ジャンダー

0

.zshrc.localファイルに2つのエイリアスを追加して、強力なパスワードを作成しています。

最初は:

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

タイプpw.graphの出力は、スペースバーを除くキーボードで入力できるすべての文字の5行です。

/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?}

2番目は次のとおりです。

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

pw.alnumと入力すると、印刷可能なすべての文字と数字が大文字と小文字の両方で出力されます。

E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv

通常、pw.graphを使用して、行のランダムな部分をコピーします。一部のパスワードは記号を許可しないため、そのためにpw.alnumの一部を使用します。


0

私はこれを.htmlファイルとして保存して使用します:

<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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.