Grub의 MD5 알고리즘은 어떻게 작동하나요? grub-md5-crypt를 실행하고 동일한 비밀번호를 입력하면 매번 다른 결과가 나타납니다. 일반적으로 md5는 항상 동일한 해시를 반환해야 하는데 왜 grub 버전이 매번 다른 것을 반환합니까?
또한 이를 염두에 두고 올바른 비밀번호를 입력하고 있는지 어떻게 알 수 있습니까? 동일한 비밀번호를 사용한 모든 암호화 생성이 다른 해시를 생성하는 경우 나중에 비밀번호를 입력할 때(이론적으로 동일한 알고리즘을 사용하여) 해시가 다르기 때문에 올바른 비밀번호가 표시되도록 어떻게 일치합니까?
소금이 어딘가에 사용되고 소금이 무작위로 생성된다고 가정하고 있는데, 소금이 무엇이고 정확히 어떻게 생성되며 어떻게 복제됩니까?
답변1
Grub 소스 코드가 가장 보기 좋은 곳입니다. 필요한 논리는 다음 위치에 있습니다 stage2/md5.c
.
int md5_password (const char *key, char *crypted, int check)
다음 형식의 문자열을 생성합니다. $1$aaaaaaaa$bbbbbbbbbbbbbbbbbbbbbb
여기서 "aaaaaaaa" 시퀀스는 임의의 솔트이고 "bbbbbbbbbbbbbbbbbbbbbbbb"는 수정된 base64로 인코딩된 md5 결과를 사용하여 특정 방식으로 비밀번호와 솔트를 1000회 혼합한 결과입니다.
수정된 base64 사전은 다음과 같습니다.
./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
실제 하이브리드 알고리즘은 GNU General Public License 버전 2(또는 이후 버전)의 조건에 따라 재배포될 수 있습니다. 이 버전은 다음에서 다운로드할 수 있습니다.GNU FTP 사이트또는 GNU 이미지.
답변2
이 비밀번호 해시는 솔트 처리되어 있습니다. 솔트는 무작위로 생성되어 해시와 함께 저장됩니다. 솔트와 해시 사이의 필드 구분 기호는 달러 기호($)입니다.