Linux (일반 사용자와 관리자 모두)에서 강력한 암호를 만들 수있는 방법과이를 수행 할 특정 프로그램이 있는지 궁금합니다.
pwgen 은 암호를 생성하는 많은 프로그램 중 하나입니다.
개인적으로 생성 된 암호는 기억하기가 매우 어렵 기 때문에 암호 생성기를 사용하지 않는 것을 선호하지만 휴대용 솔루션 중 하나는 / dev/urandom 을 사용하는 것입니다.
특수 문자가 포함되지 않은 임의의 암호를 생성하는 데 길이는 10 자입니다.
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
이는/dev/urandom에서 바이트를 가져와 tr
명령에 지정된 패턴에 맞지 않는 바이트를 삭제하고 head
를 사용하여 10 자로 제한하여 작동합니다.
특수 문자가 포함 된 임의 암호를 만드는 데 10 자 길이입니다.
$ cat /dev/urandom | tr -dc '[email protected]#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[[email protected]#$%^&*()_+{}|:<>?=]' | head -n 1
[email protected]
이것은 tr
가 원하지 않는 바이트를 제거한 후 약간 다른 기술을 사용합니다. 아이디어는 적어도 하나의 특수 문자를 갖도록하는 것입니다. 이는 fold
명령을 사용하여 행을 10 개의 그룹으로 줄 바꿈 한 다음 grep
을 사용하여 특수 문자가 포함 된 행만 가져 오는 방식으로 작동합니다. 그런 다음 head
은 요구 사항을 충족하는 첫 번째 암호를 가져옵니다.
저는이 작은 대본을 몇 년 전에 썼고 그 이후로 계속 사용해 왔습니다. 어쨌든 printf
의 흥미로운 남용이며 불행히도 스크립트에서 거의 볼 수없는 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
또한 KeePassX 를 추가하여 시스템 엔트로피를 사용하여 몇 가지 Nice 기능으로 강력한 암호를 생성하는 옵션을 제공합니다. 모두 GUI를 사용합니다. 또한 암호를 관리하고 암호화 된 파일에 저장하는 옵션도 제공합니다.
KPX 암호 생성기 인터페이스는 다음과 같습니다.
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)
this 에 따라 비밀번호는 12 자 이상이어야합니다.
나는 무작위가 아닌 것을 사용하지만 모든 공격 목적에 대해 충분히 다양합니다. 마스터 암호 및 마지막 패스 다른 암호를 생성합니다. 마스터 비밀번호를 생성하는 방법은 다음과 같습니다.
echo -n "some seed" | openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'
및 출력
H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M=
이제 섹션 몇 개를 선택하고 암호를 만들고, 재정렬하고, 일부를 생략하고, 문자를 추가하거나, 2 개를 추가하여 무작위로 만듭니다. 시드를 기억할 수있는 한이를 다시 생성하고 비밀번호를 복구 할 수 있습니다 (너무 많이 수정하지 않는 한).
다음은 XKCD-style 암호를 생성하는 일회성 스크립트입니다. /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
pwgen
은 복잡도, 생성 할 암호의 문자 클래스 수, 길이 등을 설정하기위한 여러 매개 변수를 지정할 수있는 멋진 작은 CLI 도구입니다.
내가 틀렸다면 정정하되, 내가 이해하는 한, 컴퓨터가 완전히 임의의 문자열을 내놓을 수있는 방법은 아니 입니다. 그래서 저는 다음과 같은 아이디어를 생각해 냈습니다. [완전히 멍청하지 않기를 바랍니다] :
26면 주사위를 던지면 던질 기회, 즉 26은 1:26입니다. 즉, 26을 던질 확률은 약 0.04 %입니다. 또한 주사위에는 메모리가없고 버그도 없습니다. 나는 다음과 같은 아이디어를 생각 해냈다.
인쇄 할 종이 모델 :
참고 : 저는 수학 전문가가 아니며 2600 매거진에서 이것을 설명하는 기사를 읽은 후이 아이디어를 생각해 냈습니다. 기본 개념에 대한 내 아이디어를 추가했습니다.
또한 : 이것이 '첫 번째 무차별 암호 대입 암호 크래커를 작성하십시오'에 대한 완벽한 예가 아닌지 궁금합니다. . 그러나 귀하의 질문은 저에게이 아이디어를 논의 할 완벽한 이유를주었습니다.
강력한 암호를 만들기 위해 .zshrc.local 파일에 두 개의 별칭을 추가했습니다.
첫 번째는 다음과 같습니다.
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%[email protected]!ZPM$5to1f-.U9ClK,)'jDi0"pw>EzN^|gX~BSAJk\VFG(H<bx}+Q6#vL;e
s^[email protected]/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?}
두 번째는 다음과 같습니다.
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의 일부를 사용합니다.
.html 파일로 저장된 이것을 사용합니다.
<script>
var keylist="[email protected]#$%^&*_"
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>
그놈 사용자이고 다양한 계정에 대한 암호를 저장해야하는 경우 Revelation 암호 관리자를 사용해 볼 수 있습니다. 암호 길이 만 설정하고 문자와 숫자 외에 구두점 문자를 포함할지 여부를 선택하는 기본 암호 생성기 기능이 있습니다.