[hash] MD5 해시를 해독 할 수 있습니까?

누군가 나에게 다음과 같은 소프트웨어 시스템을 보았다고 말했습니다.

  1. 다른 시스템에서 MD5 암호화 된 비밀번호를 검색합니다.
  2. 암호화 된 비밀번호를 해독하고
  3. 시스템 자체 알고리즘을 사용하여 시스템 데이터베이스에 비밀번호를 저장하십시오.

가능합니까? MD5 해시를 해독하는 것은 가능하지 않다고 생각했습니다.

MD5 사전이 있지만 실제 해독 알고리즘이 있습니까?



답변

MD5는 암호화가 아닙니다 (일부 암호화 알고리즘의 일부로 사용될 수 있음) . 단방향 해시 함수 입니다. 원래 데이터의 대부분은 실제로 변환의 일부로 “손실”되었습니다.

MD5의 길이는 항상 128 비트입니다. 이는 가능한 128 개의 MD5 해시 가 2 있음을 의미 합니다. 그것은 합리적으로 많은 수이지만 가장 확실합니다. 그러나 주어진 해시 함수에 대한 무한한 수의 입력이 있습니다 (대부분 128 비트 이상 또는 약 16 바이트 포함). 따라서 실제로 동일한 값으로 해시되는 데이터에는 무한한 가능성이 있습니다. 해시를 흥미롭게 만드는 것은 동일한 값으로 해시되는 두 개의 데이터 조각을 찾기가 매우 어렵고 우연히 발생할 가능성이 거의 0이라는 것입니다.

(매우 안전하지 않은) 해시 함수에 대한 간단한 예는 (일방적 인 일이라는 일반적인 아이디어를 보여줍니다) 데이터 조각의 모든 비트를 가져 와서 큰 숫자로 취급하는 것입니다. 다음으로, 큰 숫자 (아마도 소수) n을 사용하여 정수 나누기를 수행 하고 나머지를 가져옵니다 ( 모듈러스 참조 ). 0과 n 사이의 숫자가 남습니다 . 동일한 문자열을 사용하여 동일한 계산을 다시 수행하면 (언제든지 컴퓨터에서 언제 어디서나) 동일한 값을 얻을 수 있습니다. 그러나 n 으로 나눌 때 정확한 나머지가있는 무한한 수의 숫자가 있기 때문에 원래 값이 무엇인지 알 수있는 방법이 없습니다 .

즉, MD5는 몇 가지 약점을 가지고있어 복잡한 수학에서는 2128 개의 가능한 입력 문자열 을 시도하지 않고도 충돌을 찾을 수 있습니다 . 그리고 대부분의 암호는 짧고 사람들이 흔히 “암호”또는 “비밀”과 같은 공통 값을 사용한다는 사실은 해시를 위해 인터넷 검색을하거나 레인보우를 사용하여 누군가의 암호를 합리적으로 추측 할 수 있음을 의미합니다. . 그렇기 때문에 항상 해시 된 비밀번호를 ” 솔트 ” 해야 하므로 해시시 두 개의 동일한 값이 동일한 값으로 해시되지 않습니다.

일단 데이터 조각이 해시 함수를 통해 실행되면 되돌아 갈 필요가 없습니다.


답변

이론 상으로는 할 수 없습니다. 해시의 요점은 한 가지 방법 일 뿐이라는 것입니다. 즉, 누군가 해시 목록을 가져와도 여전히 비밀번호를 얻을 수 없습니다. 또한 누군가가 여러 사이트에서 동일한 비밀번호를 사용하더라도 (예, 우리는 우리가해서는 안된다는 것을 알고 있지만 …) 사이트 A의 데이터베이스에 액세스하는 사람은 사용자의 비밀번호를 사용할 수 없습니다. 사이트 B.

MD5가 해시라는 사실은 정보가 유실되었음을 의미합니다. 주어진 MD5 해시에 대해 임의 길이의 비밀번호를 허용하면 동일한 해시를 생성하는 여러 비밀번호가있을 수 있습니다. 좋은 해시의 경우 계산이 불가능하여 최대 길이 이상으로 찾을 수는 없지만 대상 해시가있는 암호를 찾으면 원래 암호임을 보장 할 수는 없습니다. 그것은이다 천문학적 가능성 같은 MD5 해시를 가진 두 개의 ASCII 만, 적당한 길이의 암호를 볼 수있을 것을, 그러나 그것은 불가능합니다.

MD5는 암호에 사용하기에 나쁜 해시입니다.

  • 속도가 빠르므로 “대상”해시가있는 경우 많은 암호를 사용하여 해당 대상에 해시하는 암호를 찾을 수 있는지 확인하는 것이 저렴합니다. 솔트 링은 해당 시나리오에 도움이되지 않지만 다른 솔트를 사용하여 여러 해시 중 하나와 일치하는 비밀번호를 찾는 데 더 많은 비용을들이는 데 도움이됩니다 .
  • 임의의 이진 데이터가 아닌 인쇄 가능한 텍스트 내에서 충돌을 찾는 것이 적어도 어려울지라도 충돌을 찾기가 더 쉬운 결함이 있다고 생각합니다.

저는 보안 전문가가 아니므로 “자신의 인증 시스템을 롤하지 마십시오”이외의 구체적인 권장 사항은 제공하지 않습니다. 평판 좋은 공급 업체를 찾아서 사용하십시오. 보안 시스템의 설계 및 구현은 까다로운 사업입니다.


답변

기술적으로 그것은 ‘가능한’ 이지만 매우 엄격한 조건 ( 무지개 테이블 , 사용자 암호가 해시 데이터베이스에있을 가능성이 매우 적은 무차별 강제)입니다.

그렇다고해서

  • 실행 가능
    또는
  • 안전한

MD5 해시 를 ‘반전’하고 싶지 않습니다 . 아래에 설명 된 방법을 사용하면 필요하지 않습니다. ‘역전’MD5는 실제로 악의적 인 것으로 간주됩니다 . 일부 웹 사이트는 MD5 해시를 ‘크랙’하고 무차별 대입 할 수있는 기능을 제공하지만 사전 단어, 이전에 제출 한 암호 및 기타 단어를 포함하는 대규모 데이터베이스입니다. MD5 해시를 뒤집을 가능성매우 적습니다 . 그리고 MD5 해시를 소금에 절인 경우 에도 작동하지 않습니다! 🙂


MD5 해싱으로 로그인 작동하는 방법은 다음과 같습니다.

등록 중 :

사용자가 비밀번호를 작성합니다.-> MD5를 사용하여 비밀번호가 해시됩니다.-> 데이터베이스에 저장된 해시

로그인 중 :
사용자는 사용자 이름과 비밀번호를 입력합니다-> (사용자 이름 확인) MD5를 사용하여 비밀번호를 해시합니다-> 해시는 데이터베이스에 저장된 해시와 비교됩니다

‘비밀번호 분실’이 필요한 경우 :

2 가지 옵션 :

  • 사용자가 임의의 비밀번호를 입력하여 로그인 한 다음 처음 로그인 할 때 비밀번호를 변경하도록 버그가 있습니다.

또는

  • 사용자에게 비밀번호를 변경할 수있는 링크가 전송되고 (보안 질문 등이 있는지 추가로 확인) 새 비밀번호가 해시되고 데이터베이스에서 이전 비밀번호로 바뀝니다.

답변

직접 아닙니다. 때문에의 비둘기 집 원리 , (가능성이) 하나 개 이상의 값이이 주어진 MD5 출력에 해시. 따라서 확실하게 되돌릴 수 없습니다. 또한, MD5 어려운 찾을 수 있도록 구성되어 있는 등 반전 해시 (생산이 그러나이 있었다 공격 충돌 – 동일한 결과를 해시,하지만 당신은 제어 할 수없는 두 개의 값을 생성 어떤 결과 MD5 값 것 있다).

그러나 검색 공간을 예를 들어 길이가 N 미만인 일반 암호로 제한하면 MD5 출력 수가 관심있는 도메인의 문자열 수보다 훨씬 크기 때문에 더 이상 비가역성 속성이 없을 수 있습니다. 그런 다음 레인보우 테이블 또는 이와 유사한 것을 사용하여 역 해시를 사용할 수 있습니다 .


답변

적어도 합리적인 시간 안에는 불가능합니다.

이것이 자주 처리되는 방식은 비밀번호 “재설정”입니다. 즉, 당신은 그들에게 새로운 (임의의) 암호를주고 그것들을 이메일로 보냅니다.


답변

md5 비밀번호는 되돌릴 수 없습니다 (모든 언어로).

하지만 당신은 할 수 있습니다:

사용자에게 새로운 것을 제공하십시오.

무지개 테이블을 확인하여 오래된 것을 검색하십시오.


답변

그는 MD5 사전에 대해 혼란 스러웠을 것입니다.

암호화 해시 (MD5 등)는 한 가지 방법 이며 원본 메시지 등에 대해 다른 정보가 없는 한 다이제스트만으로 원래 메시지로 돌아갈 수 없습니다.