openssl이 비밀번호를 해독하는 방법

openssl이 비밀번호를 해독하는 방법

저는 리눅스와 PHP에서 암호화와 복호화를 배우고 있습니다. 그래서 openssl과 이것이 비밀번호 해시를 생성하는 방법에 대해 세 가지 질문이 있습니다.

1-linux 명령을 사용하여 비밀번호를 생성했다고 가정합니다.

openssl passwd

첫 번째 관찰은 해시가 생성될 때마다 다르다는 것입니다! 왜 그런 겁니까? 소금 때문인가? 이것이 나의 첫 번째 질문입니다.

2- 이제 두 번째 질문은 이 비밀번호를 테스트하는 것입니다. 이 비밀번호의 정확성을 테스트하고 그것이 올바른지 아닌지에 대한 이진 답변을 얻고 싶다고 가정해 보겠습니다. openssl을 사용하여 이 작업을 어떻게 수행할 수 있나요? 내 질문이 이해가 되지 않는다면 무슨 openssl passwd소용이 있겠습니까?

3- 해싱을 사용하여 비밀번호를 암호화하고 openssl passwd매번 임의의 솔트를 추가하는 경우 openssl은 비밀번호(또는 다른 프로그램)를 어떻게 해독합니까?

감사해요.

답변1

openssl은 알고리즘과 솔트를 사용하여 비밀번호를 암호화합니다. 소금을 제공하지 않으시면 무작위로 선택됩니다.

소금은 결과 해시에 제공됩니다.

예를 들어

 openssl passwd -1 foo
 $1$pyuddMjp$3.deTnHdrVVVLoh5zkQ0B.

어디

  • 1은 프로토콜입니다(여기서는 md5입니다).
  • pyuddMjp는 소금입니다

귀하가 passwd(예: foo)를 알고 있는지 확인하려면 salt와 함께 passwd 옵션을 사용하여 결과 해시를 비교해야 합니다.

  • x=바

    openssl passwd -1 -salt pyuddMjp $x $1$pyuddMjp$kNkQHWoF8WVh7Oxvae5YX1

  • x=foo인 경우

    openssl passwd -1 -salt pyuddMjp $x $1$pyuddMjp$3.deTnHdrVVVLoh5zkQ0B.

답변2

우선 openssl 명령은 일반적으로 비밀번호를 암호화하는 데 사용되지 않습니다. 다음에서 openssl에 대해 읽을 수 있습니다.http://en.wikipedia.org/wiki/OpenSSL

Unix 시스템에서는 비밀번호가 단방향 해시를 사용하여 암호화되므로 원래 비밀번호를 복구하기 위해 해독할 수 없습니다.

암호화의 한 형태에서 솔트는 일반적으로 미리 결정된 문자열이거나 처음 몇 문자와 같은 일반 텍스트 버전에서 생성되며 이를 사용하여 해시를 재생성하고 둘을 비교합니다.

PHP를 언급하셨으니 확인해 보세요.PHP 암호화자세한 내용은 기능을 참조하세요.

답변3

허용된 답변을 바탕으로 구축합니다. 비밀번호 해시가 원래 설정된 비밀번호와 일치하는지 확인하고 싶습니다.아이디어설정.

첫째, 명령줄 기록에 비밀번호가 표시되는 것을 원하지 않습니다.

# cat > pass.txt
mypasswd1
<ctrl>+d

# cat > badpass.txt
faulty
<ctrl>+d

그런 다음 MD5 해시를 생성합니다.

# RET=$(openssl passwd -1 -in pass.txt)
# echo $RET
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/

"salt"는 $로 구분된 세 번째 필드입니다(선행/null 필드 포함). "소금"을 저장하세요

# SALT=$(echo $RET | cut -d\$ -f 3)
# echo $SALT
nhyuaE7S

그래서 비밀번호가 실제로 MD5 해시와 일치하는지 확인하기 위해 $RET변수에 저장된 해시를 "test"의 첫 번째 줄과 비교합니다.

# echo "$RET" ; openssl passwd -1 -salt "$SALT" $(cat pass.txt) "$RET"
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/
$1$nhyuaE7S$3pGvIF7UwuvhJjXzR4Yb.0

일치하는 것 같습니다. diff확인해 보겠습니다.

# diff <(echo "$RET") <(openssl passwd -1 -salt "$SALT" $(cat pass.txt) "$RET" | head -1)
# echo $?
0

지금까지는 괜찮습니다. 하지만 "잘못된" 비밀번호도 확인하고 일치하는 비밀번호가 없는지 살펴보겠습니다.

# echo "$RET" ; openssl passwd -1 -salt "$SALT" $(cat badpass.txt) "$RET"
$1$nhyuaE7S$ld2wuucUlRUQE8iAnJhjF/
$1$nhyuaE7S$t6MTdY2QafzUtBMMVzf5B.
$1$nhyuaE7S$3pGvIF7UwuvhJjXzR4Yb.0

# diff <(echo "$RET") <(openssl passwd -1 -salt "$SALT" $(cat badpass.txt) "$RET" | head -1) >/dev/null
# echo $?
1

이제 저장된 MD5 해시(예: 구성 파일)가 비밀번호와 일치하는지 실제로 "증명"하는 테스트가 있습니다.생각하다맞다.

제 가정이 틀리거나 틀렸다면 댓글로 알려주세요.

관련 정보