이 임의의 암호가 왜 너무 단순하고 체계적이라고 표시되어 있습니까?


37

passwdcracklib-checkM1uG*xgRCthKWwjIjWc*010iSthY9buc 에 따라 임의 문자열 이 암호에 대해 너무 단순하고 체계적으로 어떻게 감지 됩니까? 컴퓨터에서 사용 해보고 참조하십시오

echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check

이것은 내 비밀번호가 아니라 동일한 임의의 비밀번호 생성기에서 동일한 결과를 생성하는 무작위로 생성 된 다른 문자열입니다.


3
그것은 말한다M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici

일부 버전만이 이것을 간단한 것으로 감지합니다. 이에 대한 자세한 내용은 slm의 답변을 참조하십시오.
BeowulfNode42

대신 /dev/urandom비밀번호를 생성하는 데 사용하지 않는 이유는 무엇 입니까?
devnull

@devnull-마음에 들지 않았지만 암호를 생성하는 방법에 대한 2 가지 방법을 내 A에 추가했습니다.
slm

답변:


59

cracklib은 오픈 소스이므로 소스 코드 에서 답을 찾을 수 있습니다 .

"너무 단순하고 체계적인"은 알파벳 이웃 중 하나가 앞에 오는 문자가 너무 많다는 것을 의미합니다. 따라서 "ab"또는 "ba"는 불량한 것으로 간주되지만 b가 생략되므로 "ac"또는 "ca"는 정상입니다.

2010-03-02의이 패치 이전에는 특성 을 나타내는 최대 4자를 허용 합니다. 예를 들어, "a", "2", "3", "4"및 "5"문자가 선행 문자의 알파벳 이웃이기 때문에 "bar12345"는 실패합니다.

slm은 그의 대답 M1uG*xgRCthKWwjIjWc*010iS에서 괜찮다는 것을 알았습니다 M1uG*xgRCthKWwjIjWc*010iSt. 분석하자. cracklib-check가 생각하는 문자는 체계적인 암호를 나타냅니다.

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

이것은 최대 4 이하이지만 t를 추가합니다.

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

T가 S를 따르기 때문에 한계를 초과합니다 (테스트는 대소 문자를 구분하지 않습니다).

패치는 최대 제한을 변경하여 이와 같은 오탐을 피하기 위해 총 암호 길이에 따라 달라집니다.


1
010을 이미 3으로 계산해서는 안됩니까? 그래도 좋은 대답입니다.
John V.

1
정확한 소스 코드 차이를 제공하는 훌륭한 답변과 감사합니다. 그건 그렇고,이 파일이 fascist.c라고 불리는 이유가 있습니까?
laurent

@ this.lau_-추측하고 있습니다 : en.wikipedia.org/wiki/Fascism
slm

캐릭터와 관련하여 "작은"과 "큰"에 대해 이야기하는 것이 다소 재미 있습니까? 글쎄, ASCII 값에 대해서는 알고 있지만 너무 명확하지 않을 수 있습니다. -왜 더 간단한 방법으로 설명하지 않습니까? 직접적인 이웃이나 전임자가 등장하는 인물이 없어야합니다. 따라서 "ab"또는 "ba"는 허용되지 않지만 b가 생략되므로 "ac"또는 "ca"가 허용됩니다.
syntaxerror

왜 작거나 높을 수는 없지만 같은 것일 수 Ww있습니까?
Jeroen Vannevel

31

페도라 19에서

내가 그것을 실행할 때 나는 괜찮습니다. 저는 Fedora 19에 있습니다.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK

버전 정보는 다음과 같습니다.

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.22
Release     : 3.fc19

참고 : 이중 쿼트 대신 작은 따옴표로 시도해보십시오 *. 이상한 방식으로 확장 될 수 있기 때문입니다.

CentOS 5 및 6

CentOS 6에서 예제를 시도해도 문제가 없었지만 CentOS 5.9에서 설명한대로 실패했습니다.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: it is too simplistic/systematic

버전 정보 :

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.9                  
Release     : 3.3

버그?

당신이 우연히 만난 것은 버그 인 것 같습니다. 당신이 당신의 문자열을 가지고 점점 더 많은 문자열을 실행 cracklib-check하면 26 문자에 도착하면 실패하기 시작합니다.

# 25    
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iS"
M1uG*xgRCthKWwjIjWc*010iS: OK

# 26
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSt"
M1uG*xgRCthKWwjIjWc*010iSt: it is too simplistic/systematic

마지막 문자를 a에서 변경하여 계속 작동 t한다고 하면 더 깊이 파고 들었 v습니다.

$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSvhY9b"
M1uG*xgRCthKWwjIjWc*010iSvhY9b: OK

따라서의 버전 cracklib-check에서 하위 문자열에 매달린 것처럼 보입니다 Sth.

제공 한 문자열 덩어리에 대해 이상한 점이 있습니다. 꼬리 끝 부분을 잡고 앞 부분을 생략하면이 부분도 실패 할 수 있습니다.

$ cracklib-check <<<"jIjc*010Sth"
jIjc*010Sth: it is too simplistic/systematic

동일한 문자열로 인해 Fedora 19 및 CentOS 6에서도 문제가 발생합니다!

업데이트 # 1

@ waxwing의 매우 멋진 sleuthing을 기반으로 , 이제 4 자 이상이 너무 인접하면 사용 된 휴리스틱이 넘어 졌다는 것을 알았습니다. 이러한 휴리스틱을 변경 한 패치가 도입 되어 고려중인 암호의 전체 길이가 이러한 오 탐지를 제거하기 위해 고려되었습니다.

결론?

내 제한된 테스트 중 일부를 기반으로 여기에는 이상한 휴리스틱이 있습니다. 겉보기에는 괜찮은 특정 줄이 걸려 넘어지고 있습니다.

이것을 코드화하려고하면 암호 생성 및 평가를 래핑 한 다음 암호가 생성되면 루프에서 빠져 나가는 것이 좋습니다 cracklib-check.

또는 적어도 @maxwing이 그의 답변에서 언급 한 수정 사항이 포함 된 최신 버전으로 업그레이드하는 것이 좋습니다.

비밀번호 생성 대안

pwgen

또한 일반적으로 pwgen암호를 생성 하는 데 사용 한다고 덧붙입니다. 여기에도 도움이 될 것입니다.

$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
우란

당신은 또한에 약간의 스크립트 마법을 사용할 수 있습니다 tr, /dev/urandom그리고 fold극단적으로 높은 품질의 임의의 암호를 얻을 수 있습니다.

$ tr -dc '[:graph:]' </dev/urandom | fold -w 32 | head -n 1
;>$7\`Hl$=zn}R.b3h/uf7mY54xp}zSF

fold명령은 길이를 제어 할 수 있습니다. 대안으로 당신도 이것을 할 수 있습니다 :

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr

cracklib-2.8.9-3.1.src.rpm을 사용하여 CentOS 5.5에서 실행했습니다. 두 경우 모두 어떻게 긴 임의 문자열이 너무 간단 할 수 있습니까?
BeowulfNode42

@ BeowulfNode42-그렇지 않습니다. 버그를 발견했거나 최소한 구현의 한계를 찾은 것 같습니다.
slm

이상한. 그러나 Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6같은 기계에서 같은 문자열 은 완벽하게 괜찮습니다.
BeowulfNode42

1
큰 따옴표 glob 확장을 방지 합니다 . 문자열에 달러 기호, 백틱 등이 포함 된 경우 작은 따옴표가 여전히 더 좋습니다.
Dennis

2
"패치가 소개되었습니다 ..." 또한 해당 패치는 최근의 패치가 아니며 (사운드와 다르게) 2010 년에 이미 다시 전송 된 것입니다.
syntaxerror
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.