답변:
시스템이 암호 해시를 사용하여 암호 (예 : MD5, SHA1 등)를 저장하는 경우 이러한 해시는 모든 양의 데이터로 만들 수 있으므로 암호 길이 자체에는 제한이 없습니다. MD5 또는 SHA1 해시는 전체 하드 드라이브에 대해 생성 될 수 있으며 일반적으로 법의학 목적으로 수행됩니다. 비트가 조금이라도 조금이라도 바뀌면 매우 다른 해시가 있으므로 데이터가 변경되었는지 확인할 수 있기 때문입니다. 즉, 동일한 알고리즘을 사용하여 데이터가 변경되었는지 테스트 할 수 있습니다. Linux (현재 Linux 이상)는 이와 동일한 해시 함수를 사용합니다. 암호를 묻고 사용자가 제공 한 암호의 암호 해시를 작성하고이 해시가 저장된 암호와 일치하는지 확인합니다.
이러한 해시를 사용하면 약간의 단점이 있습니다. 예를 들어 해시의 크기는 유한합니다. 예를 들어 MD5 해시는 128 비트입니다. 이는 MD5 해시에만 2^128
있거나 340,282,366,920,938,463,463,374,607,431,768,211,456
가능한 조합 이 있음을 의미합니다 . 이제는 큰 숫자이지만 이것이 의미하는 것은 동일한 해시를 생성하는 두 개의 다른 항목이나 키가있는 해시 충돌이라고 할 수 있다는 것입니다. 이론적으로, 더 큰 키 크기, 충돌의 낮은 확률은 더 이상은 브 루트 포스에 암호를해야하지만, 엄격하게 엔트로피를 평가하고 얼마나되는가 CAN그러나 그들이 시도하는 첫 번째 항목이 해시 충돌 인 경우에도 일치하는 항목이 될 가능성도 있습니다. 일반적으로 말하면 키 크기가 더 큰 해시를 사용하는 것이 더 안전합니다. MD5라고 가정하면 340,282,366,920,938,463,463,374,607,431,768,211,456
가능한 일치 항목 중 첫 번째 암호가 일치 할 가능성은 극히 적습니다. 크래커를 많이 시도하고 있기 때문에 또한 좋은 암호를 선택 사용하는 단어 목록, 이름 목록 및 이러한 목록의 돌연변이 (즉, 단어는 "물고기"그들은 시도 할 경우 fish1234
, fish!@#$
등)가 암호를 강제 짐승에 의존하기 전에.
시스템이 암호 해시를 사용하여 암호를 저장하는지 알 수있는 방법은 /etc/shadow
파일을 살펴 보는 것입니다 (루트 액세스 권한이 있다고 가정). 모든 줄의 형식은 다음과 같습니다 user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved
. 비밀번호 필드는로 시작할 수 있습니다 $num$
(예 : 비밀번호 필드 의 md5 해시는 $1$01234567$b5lh2mHyD2PdJjFfALlEz1
시작 위치와 같습니다 $1$
). 이것으로 시작하면 시스템이 암호화 해시를 사용하고 있음을 의미합니다. 모든 최신 시스템에서 비밀번호 필드의 형식은입니다 $id$salt$hash
. id는 사용중인 암호화 해시 유형을 지정합니다. 솔트는 알려진 해시의 미리 계산 된 테이블로부터 보호하기 위해 키 (일반 텍스트 비밀번호)와 연결된 임의로 생성 된 문자열입니다. 해시는 솔트 및 키 / 암호로 생성 된 암호화 해시입니다. 비밀번호 입력란이$num$
그런 다음 암호화 해시를 사용하고 있습니다.
숫자가 의미하는 바는 다음과 같습니다.
$1$
MD5를 사용하고 있음을 의미$2$
또는 $2a$
복어를 사용한다는 의미입니다$5$
SHA-256을 사용하고 있음을 의미$6$
SHA-512를 사용하고 있음을 의미SHA-512는 glibc가 제공하는 최고의 해시입니다. 나는 복어가 얼마나 강한 지 모르지만 glibc의 일부가 아니며 그것을 추가 한 특정 배포판에서만 사용할 수 있습니다. SHA-512는 충돌이 예상되기 전에 512 비트 키 또는 2 ^ 512 가능한 조합을 생성하며 복잡한 암호를 사용하면 실제 암호 또는 해시에서 충돌을 찾기 위해 컴퓨터 클러스터가 매우 오랜 시간이 걸립니다. .
또한 시작하지 않는 해시가 있으면 $num$
DES를 사용하고 있으며 8 자 길이로 제한됩니다. DES를 사용하는 구형 시스템 또는 적어도 일부는 크기 암호를 사용하지만 처음 8 자만 사용한다고 생각합니다. 이것은 당신이 당신의 암호를 설정 mybigbigapple
하고 누군가가 암호 mybigbigcity
를 사용하면 DES 는 그 암호 를 사용할 수 mybigbig
있고 그 이후의 것은 버려 지기 때문에 허용 됩니다.
2008 년 4 월에 릴리스 된 8.04 기준의 Ubuntu는 MD5 해시를 사용했습니다. 2008 년 10 월에 릴리스 된 8.10의 Ubuntu와 그 이후의 모든 버전은 SHA-512 해시를 사용합니다. 2008 년 4 월 이전까지는 잘 모르겠지만, 대부분의 모든 배포판에는 해시가 사용되었다고 생각합니다.
Ubuntu의 현재 12.04 및 14.04 LTS (장기 지원 릴리스)는 기본적으로 SHA-512를 사용하는 것으로 보이며 $6$
/ etc / shadow 파일의 해시 앞에 붙인 것처럼 볼 수 있습니다 .
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
이제 해싱 알고리즘에 허용되는 키 또는 비밀번호의 길이 만 허용되는 비밀번호 크기를 결정하는 것은 아닙니다. 관심이있는 다른 항목은 프로그램 작성 방법과 프로그램 자체가 지원할 길이입니다. 현대의 모든 passwd 프로그램들과 아마도 crypt(3)
Linux에서 대부분의 기능 일 것입니다 . crypt는 오랫동안 (최소한 MD5가 사용되고 그 이전에 사용되었으므로) 실제 키에 대한 문자 포인터를 허용했습니다. 즉, 키가 얼마나 오랫동안 허용되는지에 대한 유일한 제한은 프로그램이 사용할 수있는 RAM의 양에 따라 결정되지만 모든 사람이 기억할 수있는 암호보다 훨씬 더 길다는 것을 의미합니다. (수백만의 문자?).
비밀번호의 길이에 대한 질문에 답변해야합니다. 도움이 되었기를 바랍니다.
참고 문헌 :
암호 저장 방법, MD5, SHA1, BlowFish 등에 따라 저장 방법 자체에서 설정 한 암호에 제한이 없다고 생각합니다.
이전 구현에는 8 자 또는 255 자로 제한 될 수 있습니다.
이것은 www.serverfault.com에 더 적합한 질문처럼 보입니다. :)
passwd 명령은 암호화를위한 mcrypt 명령과 관련이 있습니다. mcrypt의 소스 코드에 따르면 stdin의 최대 크기는 512 자 (암호)로 제한되어 있지만 2 년 전입니다 ....-(다음 시간에이 답변을 업데이트하겠습니다) ... 예 ... 소스 코드 디렉토리 src에 mcrypt의 2.6.8에는 getpass.c 파일이 있습니다. 처음에는 거기에 값 512가 정적 문자 값으로 설정되어 있습니다. (1.4GB까지 펌핑하고 싶습니다 ...) :