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


260

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

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

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

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


7
MD5를 되 돌리면 여러 개의 암호도 생성됩니다.
Carles Company

231
MD5는 다이제스트 알고리즘입니다. 소를 스테이크로 바꾸는 것으로 생각하십시오. 이제 그 반대로 바꾸십시오.
기계 달팽이

5
@ 내가 이해하는 것부터, 예, 그러나 당신이 그 많은 것을 가지고있는 경우에만. 그리고 알고리즘이 의도적으로 정보를 잃어 버렸기 때문에 반대의 경우도 불가능합니다.
Jordan

8
@mechanicalsnail은 그 비유를 감안할 때 스테이크의 DNA에서 완전한 완벽한 클론을 만들 수 있습니다. :))
Trimikha Valentius 10

8
@TrimikhaValentius MD5는 소화 알고리즘입니다. 스테이크> 소화> 생산량으로 생각하십시오. 이제 그 반대로 바꾸십시오.
user4157124

답변:


424

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

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

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

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

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


22
그러나 MD5 해시 공간에서 원래 생각했던 것보다 더 많은 충돌이 있습니다. 더 이상 암호에 대한 최상의 해시로 최적으로 간주되지 않습니다.
Cheeso

12
대부분의 비밀번호는 MD5 해시보다 짧으므로 일반적으로 각 해시마다 하나의 비밀번호 만 있습니다. (원본이 아니더라도 하나를 찾는 것으로는 계정에 액세스하기에 충분합니다.) 단방향 기능의 요점 은 여러 개의 다른 사전 이미지가 없기 때문에 원래 이미지가 무엇인지 알 수 없습니다 그러나 하나의 원래 가치조차 찾기가 정말 어렵습니다 .
Paŭlo Ebermann

2
@Nick : 실제로 RFC1321은 "알고리즘은 임의의 길이의 메시지를 입력으로받습니다"
Adam Batkin

6
@Olathe-동의하지 않습니다. 해시 고려할 때이다 일반적으로 원래의 입력 (100 % 확실성)를 결정하는 것은 불가능. 가능한 모든 (해시 된) 출력을 생성하는 무한한 수의 입력이 있습니다. 필자는 일반적으로 ASCII 문자 문자열을 찾고 있고 12 바이트보다 작다는 것을 알고 있다면 주어진 출력을 생성하는 입력이 하나뿐 일 가능성이 있기 때문에 일반적으로 말했습니다. 그러나 항상 충돌이 일어날 것입니다 (무한한). 그리고 당신이 (내 예에서와 같이) 어떤 외부 제약이 없다면 당신은 어느 것이
옳은지를

2
@Adam Batkin, 당신 말이 맞지만 100 % 확실성을 의미하지는 않습니다. 100 % 확실성으로 암호 해독을 수행 할 수 없습니다. 발신자는 다른 영어 일반 텍스트를 해독하는 동일한 키를 사용하여 영어 일반 텍스트가 아닌 임의의 횡설수설을 의미했을 수 있지만 영어의 확률은 100 %에 매우 가깝습니다. 마찬가지로 긴 UTF-8 일본어시 암호와 횡설수설 문자열 중에서 선택할 때시의 확률은 거의 100 %입니다. 이것은 사전 선택된 제약 조건이 아닌 사실 후 확률을 사용하여 수행 할 수 있습니다. 분명히 일반적으로 할 수는 없지만 여전히 유용합니다.
Olathe

154

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

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

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

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

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


2
예, 다른 방법이 있지만 Jon이 위에서 말한 내용을 이해해야합니다. '비밀번호를 이메일로 보내면 안됩니다. 민감한 정보는 여전히 중요합니다.' -가장 낮은 수준에서 전자 메일을 가로 챌 수 있으며 중요한 정보를 검색 할 수 있습니다. 암호는 일반적으로 데이터베이스에서 해시로 유지하여 가능한 한 안전하게 유지해야합니다.
Daniel 5

3
또한 암호를 되돌릴 수 있다면 데이터베이스에 액세스하는 모든 사람이 사용자의 암호를 얻을 수 있다는 것을 의미합니다. 좋은 생각이 아닙니다 . 한 가지 방법은 암호가 표준이되어야합니다. 토큰 기반이없는 다른 시스템으로 인증 해야하는 경우 절대로 실제 비밀번호 (암호화 됨) 만 유지하십시오 .
Jon Skeet

1
수신자 웹 서버가 발신자의 메일 서버가 다시 시도하기를 기다리기 위해 수신 메일을 거부하는 스팸 방지 조치를 보았습니다 (스팸봇은 보통 한 번만 시도합니다). 10 분 초과 시간을 쉽게 초과 할 수 있습니다.
sisve

1
@ravisoni :하자 찾는 것이라고 아마도 무작위 력 또는 룩업 테이블을 통해, 동일한 해시 값을 갖는다. 이것이 원래 일반 텍스트 값이라는 보장은 없습니다.
Jon Skeet

5
@ravisoni : 여기서 "오른쪽"은 무슨 뜻입니까? 비밀번호를 알 수없는 경우 공개 된 비밀번호가 원래 비밀번호인지 여부를 알 수 없습니다. 그러나 요점은 정의에 의해 MD5와 같은 한 가지 방법으로 정보를 잃는다는 것입니다. 이와 같은 사이트 에서 일치하는 암호를 얻을 수 있다는 사실은 MD5가 보안상의 이유로 사용하기에 나쁜 알고리즘이라는 증거 일뿐입니다.
Jon Skeet

52

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

그렇다고해서

  • 실행 가능
    또는
  • 안전한

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


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

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

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

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

2 가지 옵션 :

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

또는

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

1
이쑤시개가 몇 개 있습니다. 무지개 테이블은 무차별 강제력이 아닙니다. 실제로 몇 문자의 무차별 암호 (매우 간단한) 암호를 사용하는 프로그램과 사이트가 있습니다 (일반적으로 몇 시간 또는 며칠 동안 반복되며 해시를 채우고 루프에 나타날 수 있음). 안타깝게도 많은 암호의 품질이 부족하다는 점을 감안할 때 하나의 팝업 가능성은 "매우 작은 기회"가 아닙니다.
Maarten Bodewes

32

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

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


1
동일한 출력에 해시되는 다른 값을 찾는 것을 "충돌"이라고합니다. 이것이 MD5 해시 시스템을 파괴하는 가장 일반적인 방법입니다.
Nicole

5
@Renesis, 이전에 알려진 값으로 해시되는 데이터를 찾는 것을 "사전 이미지"라고하며 실제로 충돌보다 훨씬 어렵습니다. MD5에 대해서는 아직 사전 이미지 공격이 없었지만 충돌 공격이 사용되었습니다.
bdonlan

해시 함수의 요점 (비밀번호 저장에 사용되는 경우)은 동일한 해시를 제공하는 가능한 암호가 많지 않지만 (대부분이 해시 자체보다 길다) 찾기가 어렵다는 것입니다. 그중 하나 (시스템에 액세스하기에 충분할 것입니다). 그리고 네, 레인보우 테이블 때문에 무염 해시를 사용하지 않습니다. 암호 공간이 작기 때문에 MD5 / SHA-* / ....와 같은 빠른 암호 대신 느린 암호 해시 (예 : bcrypt 또는 scrypt)를 사용합니다.
Paŭlo Ebermann

1
기술적으로는 하드웨어가 오작동했을 수 있으므로 MD5를 확실하게 수행 할 수 없습니다. 같은 방식으로, 암호가 password동일한 해시를 생성하지만 모두 무작위로 보이지만 충분히 근접 할 수있는 다른 모든 무한 입력이 아니라고 확신 할 수는 없습니다.
Olathe 2013

비둘기 구멍 원리는 물론 적용되지만 , 특정 값으로 해시되는 두 번째 입력, 예를 들어 일반 비밀번호를 통한 해시를 찾는 것은 여전히 계산 상 불가능 합니다. 주어진 H (X)로 해시되는 X를 찾으면 X가 올바른 입력인지 확인할 수 있습니다. 이것은이 답변의 첫 번째 부분과 나머지 부분의 대부분을 부정확하게 만듭니다.
Maarten Bodewes

13

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

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


5
해시는 소금에 절인되지 않은 경우, 모든 걸리는이 ... 해시 값에 대한 구글 검색을 얼마나 자주 놀라게 될 것
마이클 Borgwardt

1
하지만 암호 검색 시스템에 대한 정말 실제 심지어 무염 일 : 안
마 로브

12

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

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

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

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


1
무지개 테이블 아이디어 Nix. 당신이 소금을 피우고 있고 있어야한다면, 어쨌든 작동하지 않을 것입니다.
Steven Sudit

1
@StevenSudit 강력한 암호 해시를 사용하는 대신 MD5를 사용하여 암호를 해시 하는 경우 소금을 사용 한다고 가정 할 수 없습니다 . 어쩌면 그들은 할 수도 있고 아닐 수도 있습니다.
Maarten Bodewes

10

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

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


8

암호 해독 (알고리즘 방식으로 해시 값에서 일반 텍스트를 직접 가져옴)

그러나 레인보우 테이블 이라는 것을 사용하는 방법이 있습니다 . 당신의 암호가 소금없이 해시된다면 그것은 가능합니다.


7

MD5는 해싱 알고리즘이므로 해시 값을 되돌릴 수 없습니다.

사용자가 다른 비밀번호를 제공하고 해시를 계산하여 새 비밀번호로 저장하는 "비밀번호 변경 기능"을 추가해야합니다.


7

쉬운 방법은 없습니다. 이것은 처음에 암호를 해시하는 지점입니다. :)

당신은 한 가지 해야 할 수있을 수동으로 그들을 위해 임시 비밀번호를 설정하고 그것을 보낼 수있다.

나는 나쁜 아이디어이기 때문에 이것을 언급하는 것을 망설이고 (어쨌든 작동하지 않을 수도 있음) milw0rm 과 같은 레인보우 테이블에서 해시를 찾아서 이전 암호를 복구 할 수 있는지 확인할 수 있습니다.


6

되돌릴 수없는 방법과 이유 및 왜 원하지 않는지에 대한 다른 모든 답변을 여기에서 확인하십시오.

완벽 함을 위해 가능한 일치하는 항목을 찾을 수있는 레인보우 테이블 이 있습니다. 레인보우 테이블의 답변이 사용자가 선택한 원래 비밀번호가되어 혼동 될 수 있다는 보장은 없습니다.

또한 소금에 절인 해시에는 작동하지 않습니다. 많은 보안 전문가들은 소금 을 추천합니다.


잘못되었습니다 . 일치하는 것이 발견되면 원래 암호가 될 것입니다. 그렇지 않은 경우 H (X)가 주어지면 충돌이 발생할 수 있습니다. 여기서 X는 적에 의해 미리 정의 된 구조가없는 메시지입니다. MD5와 같은 해시 함수가 깨진 경우에도 암호로 안전한 해시 함수에 대한 충돌을 찾는 것은 계산 상 불가능합니다.
Maarten Bodewes

@MaartenBodewes : "일치하는 것이 있으면 원래 암호가 될 것입니다." 암호의 길이를 무제한으로 가정하면 어떻게되는지 알 수 없습니다. 나는 말하고 싶지만 매우 가능성이 원래 암호로,하지만하지 않습니다 될 수 있습니다. MD5 해시보다 더 많은 수의 암호가 있다는 사실은 의미 한다 동일한 해시 두 개의 암호가 될 가능합니다. 그러한 충돌 을 찾는 것이 계산 상 불가능하기 때문에 존재하지 않는 것은 아닙니다. 아니면 내가 널 오해 했니?
Jon Skeet

이 충돌 찾는 계산 불가능한 경우 @JonSkeet는 목적에 다음 하나 발견 우연을 똑같이 가능성 또는 나쁘다. MD5의 제한된 출력 공간과 생일 문제로 인해 충돌이 발생할 확률은 2 ^ 64에서 약 1 (즉, 출력 공간의 약 절반)이며 약 2 ^ 64 해시와 일치합니다. 그리고 이것은 아마도 메시지가 작고 암호로 간주되는 특정 형식을 가져야한다고 생각하지 않습니다. 대부분의 암호는 2 ^ 64 비트 미만의 엔트로피를 갖습니다.
Maarten Bodewes

1
@MaartenBodewes : 그러나 "천문학적으로 가능하지 않은"과 "불가능한"사이에는 큰 차이가 있습니다. 올바른 비밀번호 임을 확신 한다는 귀하의 진술 , IMO. 그것은 존재하지 않는 수학적 확실성을 암시합니다.
Jon Skeet

한 번에 2 ^ 128 비트 AES 키를 추측 할 수도 있습니다. "정확한"가능성은 거의 없습니다. 암호화는 이러한 종류의 확률에 의존합니다. 모든 실제적인 목적을 위해, 입력 메시지 / 암호를 찾으면 원하는 것이 될 것입니다. 즉 이론적으로 가능한 다른 입력 메시지를 찾는 것은 좋은이지만,이 질문에 대한 StackOverflow의에 그것을 고려 할 필요가 없다. 그리고 무지개 테이블은 가능한 암호로 채워져 있습니다. 충돌 가능성이있을 정도로 충분한 데이터가 포함되어 있지 않습니다 (무의식적으로 매핑을 덮어 쓰거나 유명 해짐).
Maarten Bodewes

4

역함수를 찾는 관점에서 해시 함수를 "되 돌리는"방법은 없습니다. 앞에서 언급했듯이 이것은 해시 함수를 갖는 요점입니다. 가역적이지 않아야하며 빠른 해시 값 계산이 가능해야합니다. 따라서 주어진 해시 값을 산출하는 입력 문자열을 찾는 유일한 방법은 가능한 모든 조합을 시도하는 것입니다. 이를 이런 이유로 무차별 대입 공격이라고합니다.

가능한 모든 조합을 시도하는 데 많은 시간이 걸리며 이는 해시 값이 비교적 안전한 방식으로 비밀번호를 저장하는 데 사용되는 이유이기도합니다. 침입자가 내부의 모든 사용자 암호를 사용하여 데이터베이스에 액세스 할 수있는 경우 어떤 경우라도 느슨해집니다. 해시 값이 있고 (이상적으로 말하면) 강력한 암호가 있으면 공격자의 해시 값에서 암호를 얻는 것이 훨씬 더 어려워집니다.

해시 값을 저장하는 것은 해시 값을 계산하는 것이 비교적 빠르기 때문에 성능 문제가 아닙니다. 따라서 대부분의 시스템은 사용자가 입력 한 비밀번호의 빠른 해시 값을 계산 한 다음 사용자 데이터베이스에 저장된 해시 값과 비교합니다.


대부분의 암호가 충분히 안전하지 않고 공격자가 사전 공격을 수행 할 수 있기 때문에 해시 기능의 속도 가 매우 큰 문제 라는 점을 제외하고는이 답변에는 아무런 문제 가 없습니다. 이러한 이유로 빠른 암호 보안 해시 기능 대신 느린 암호 해시 기능이 사용됩니다.
Maarten Bodewes

3

MD5는 해시에서 원본 콘텐츠를 다시 가져올 수 있기 때문이 아니라 작업을 통해 동일한 해시로 해시하는 두 개의 메시지를 만들 수 있기 때문에 고장난 것으로 간주됩니다.

MD5 해시를 해시 해제 할 수 없습니다.


3
설계 상 모든 길이의 해시는 충돌로 어려움을 겪습니다. 가변 길이 데이터를 제한 할 때는 피할 수 없습니다. MD5는 충돌의 사실이 아니라 충돌 속도 때문에 사용되지 않는 것으로 간주됩니다.
Jonathan Lonowski

MD5는 충돌하는 입력을 구성 할 가능성이 입증 되었기 때문에 고장난 것으로 간주됩니다.
Ned Batchelder

3

사전을 사용하여 원본 메시지를 검색하는 온라인 도구를 찾을 수 있습니다.

어떤 경우에는 사전 방법이 쓸모가 없을 수 있습니다.

  • SALT 메시지를 사용하여 메시지가 해시 된 경우
  • 메시지가 두 번 이상 해시 인 경우

예를 들어 다음은 하나의 MD5 암호 해독기 온라인 도구입니다.


사전 공격이 아닌 레인보우 테이블 은 소금을 사용하는 경우 쓸모가 없습니다. 소금없이 한 번 이상 해싱하면 레인보우 테이블이 허용되지만 기존의 온라인 테이블을 찾는 것은 확실하지 않습니다.
Maarten Bodewes

2

작동 할 수있는 유일한 방법은 (우리가 암호를 해시하고 소금을 추가하지 않고 소금을 추가하지 않고 소금을 알아야하는 경우) 사전 공격 도구를 얻는 것입니다 , 많은 단어, 숫자 등의 파일이 두 행을 만듭니다. 한 행은 단어, 숫자 (사전), 다른 하나는 단어의 해시이며 일치하는 경우 해시를 비교합니다 ...

그것은 cryptanalysis에 가지 않고 유일한 방법입니다.


2

예, 정확히 당신이 요구하는 것이 가능합니다. 도움없이 MD5 암호를 '암호 해독'할 수는 없지만 MD5 암호를 다른 알고리즘으로 다시 암호화 할 수는 있습니다.

사용자가 이전 MD5 암호를 사용하여 새 시스템에 로그온 할 수 있도록 준비해야합니다. 그들이 로그인하는 시점에 그들은 당신의 로그인 프로그램에 당신이 가지고있는 MD5 해시와 일치하는 것으로 밝혀진 암호의 해시 되지 않은 버전을 부여했습니다. 그런 다음이 해싱되지 않은 암호를 새 해시 알고리즘으로 변환 할 수 있습니다.

분명히 이것은 사용자가 암호를 알려줄 때까지 기다려야하기 때문에 확장 된 프로세스이지만 작동합니다.

(NB : 7 년 후, 잘만되면 누군가 유용 할 것입니다)


답장을 보내 주셔서 감사합니다. 그러나 나는 당신을 "1 up"할 것입니다. :) 실제로 이것을했는지 기억할 수는 없지만 이론 상으로는 효과가 있습니다. 비밀번호를 다시 암호화 할 수 있도록 모든 단일 사용자가 로그인 할 때까지 기다리지 않고 해시 버전의 비밀번호를 간단히 암호화 할 수 있습니다. 따라서 모든 암호는 MD5 해시 된 다음 암호화됩니다. 비밀번호 확인을 업데이트하여 동일한 작업을 수행하면 사용자 개입없이 사용자 데이터를 안전하게 보호 할 수 있습니다.
John Bubriski

위의 의견에 한 가지 더주의하십시오. 암호화 전문가가 아니므로 보안에 더 이상의 보안 관련 사항이 있는지 확실하지 않습니다. 예를 들어, 암호화하기 전에 약하게 해시 된 약한 암호를 암호화하면 암호화 보안이 손상 될 수 있습니다 (다른 소금도 사용할 수 있습니까?). 또한 MD5 해시 암호를 사용하여 백업을 수행 할 수도 있습니다. 이 유형의 업그레이드를 수행 할 때 기존의 모든 비밀번호를 완전히 무효화하는 것이 좋습니다.
John Bubriski

암호 전문가는 이중 암호화에 대해 걱정하지만 문제가있는 사소한 사례 만 발견했다고 생각합니다. 그러나 MD5가 여전히 너무 길지 않은 텍스트 암호로 안전하기 때문에이 경우 유용하지 않다고 생각합니다. 이전 개발자가 소금을 추가하는 것을 잊어 버린 경우에도 이중 해싱이 유용 할 수 있습니다. 바라건대, 백업이 손실되지 않고 어쨌든 암호화됩니다.
user3710044

1

아니요, 할 수 없습니다. 사전을 사용하거나 원하는 해시를 얻을 때까지 다른 값을 해시 할 수 있습니다. 그러나 "암호 해독"할 수 없습니다.


md5를 원본 텍스트로 바꾸는이 웹 사이트를 보았습니다 : md5.gromweb.com . 그러면 어떻게 가능합니까?
samach

2
@ samach321-쉬움 : 해시 문자열 DB가 있습니다. "문자열을 MD5 해시로 변환"상자에 입력 한 내용이 DB에 추가됩니다. 다른 소스에서 MD5 해시를 가져 와서 입력하십시오. 그것이 그들의 DB에있는 것이 아니라면 결과를 얻지 못할 것입니다.
Vilx-

1

MD5에는 약점이 있지만 ( Wikipedia 참조 ) 해시를 미리 계산하려는 일부 프로젝트가 있습니다. Wikipedia는 이러한 프로젝트 중 일부를 암시합니다. 내가 아는 (그리고 존중하는) 것은 ophrack입니다. 사용자에게 자신의 암호를 말할 수는 없지만 작동하는 암호는 말할 수 있습니다. 그러나 나는 생각합니다 : 잊어 버린 경우를 대비하여 새 비밀번호를 우편으로 보내십시오.


MD5가 손상되었다는 사실 (특정하지만 중요한 함수 사용을 위해)은 레인보우 테이블과 전혀 관련이 없습니다 (해시의 사전 계산을 언급 할 때 암시하는 것입니다).
Maarten Bodewes

1

MD5 해시 알고리즘은 되돌릴 수 없으므로 MD5 디코딩은 불가능하지만 일부 웹 사이트에는 대량의 암호 일치 세트가 있으므로 온라인으로 MD5 해시를 디코딩 할 수 있습니다.

온라인 시도 :

MD5 해독

md5online

md5decrypter


네, 그러나 이것은 이미 "사전이 있다는 것을 알고 있습니다"라는 문구와 같은 질문으로 덮여 있습니다. 따라서 사전을 지적하는 것만으로는 대답으로 간주되지 않습니다.
Maarten Bodewes

1

이론적 으로 해시 값을 해독 할 수는 없지만 원래 일반 텍스트를 다시 가져 오는 더러운 기술이 있습니다.

  1. bruteforcing의 모든 컴퓨터 보안 알고리즘 고통 bruteforcing의를 . 이 아이디어를 기반으로 오늘날의 GPU는 그래픽 프로세서를 사용하여 일반 텍스트를 대량으로 무차별 처리하여 일반 텍스트를 다시 가져올 수있는 병렬 프로그래밍 아이디어를 사용합니다. 이 도구 hashcat 이이 작업을 수행합니다. 마지막으로 cuda 버전을 확인했을 때 6 분 안에 7 자 길이의 문자를 무차별 처리 할 수있었습니다.
  2. 인터넷 검색 : 해시를 복사하여 Google에 붙여넣고 해당 평문을 찾을 수 있는지 확인하십시오. 이것은 당신이 무언가를 테스트 할 때 해결책이 아니지만 시도해 볼만한 가치가 있습니다. 일부 웹 사이트는 사전의 거의 모든 단어에 대한 해시를 유지합니다.

2
사전 공격은 다른 방법이거나 입력 암호를 ​​알고있는 다른 데이터베이스와 비교하는 것입니다.
Maarten Bodewes

1

아니요, MD5와 같은 해시 함수를 되돌릴 수 없습니다. 출력 해시 값이 주어지면 입력 메시지에 대한 충분한 정보가 알려지지 않은 경우 입력 메시지를 찾을 수 없습니다.

암호 해독은 해시 함수에 대해 정의 된 함수가 아닙니다. 암호화 및 암호 해독은 CBC 모드의 AES와 같은 암호 기능입니다 . 해시 함수는 암호화 하거나 해독 하지 않습니다 . 해시 함수는 입력 메시지 를 요약 하는 데 사용됩니다 . 이름에서 알 수 있듯이 의도적으로 리버스 알고리즘은 없습니다 .


MD5는 암호로 안전한 단방향 해시 기능 으로 설계되었습니다 . 입력 메시지의 대부분이 미리 결정되어 있어도 MD5에 대한 충돌을 쉽게 생성 할 수 있습니다. 따라서 MD5는 공식적으로 손상되었으며 MD5는 더 이상 암호로 안전한 해시로 간주되어서는 안됩니다. 그러나 여전히 해시 값으로 이어지는 입력 메시지를 찾는 것은 불가능합니다. H (X) 만 알려진 경우 X를 찾으십시오 (그리고 X에는 적어도 하나의 128 바이트의 사전 계산 된 데이터 블록을 가진 사전 계산 된 구조가 없음) . MD5에 대한 알려진 사전 이미지 공격없습니다 .

일반적으로 무차별 대입 또는 (증강 된) 사전 공격을 사용하여 암호를 추측하거나 데이터베이스를 비교하거나 레인보우 테이블에서 암호 해시를 찾아 보는 것도 가능합니다. 일치하는 것이 있으면 입력을 찾은 것으로 계산됩니다. 해시 함수는 충돌 공격에 대해 안전하게 보호됩니다 찾는 X'있도록 H(X') = H(X)주어진 H(X). 따라서 X가 발견 되면 실제로 입력 메시지임을 계산적으로 확신합니다. 그렇지 않으면 결국 충돌 공격을 수행했을 것입니다. 레인보우 테이블은 공격 속도를 높이는 데 사용할 수 있으며 특정 해시가 지정된 암호를 찾는 데 도움이되는 특수한 인터넷 리소스가 있습니다.

물론 다른 시스템에서 생성 된 비밀번호를 확인하기 위해 해시 값H(X)재사용 할 수 있습니다. 수신 시스템이 수행하는 것이 유일 결정적 함수의 결과를 저장하는 F소요 H(X)의 입력으로한다. 하면 X다음 시스템에 주어진다 H(X)따라서 F계산 될 수 있으며, 그 결과는 비교 될 수있다. 즉, 비밀번호가 올바른지 확인 하기 위해 해시 값을 해독 할 필요없으며 해시를 다른 값으로 저장할 수 있습니다.


MD5 대신 암호 해시 또는 PBKDF (암호 기반 키 파생 함수) 를 사용하는 것이 중요합니다 . 이러한 함수 는 해시와 함께 솔트 를 사용하는 방법을 지정합니다 . 이렇게하면 동일한 암호에 대해 다른 사용자 나 다른 데이터베이스에서 동일한 해시가 생성되지 않습니다. 이러한 이유로 암호 해시는 소금이 충분히 크고 적절하게 무작위 화되는 한 무지개 테이블을 사용할 수 없습니다.

암호 해시에는 또한 작업 요소 (때로는 반복 횟수를 사용하여 구성됨)가 포함되어있어 솔트 및 해시 값이 지정된 암호를 찾는 공격을 상당히 느리게 할 수 있습니다. 솔트 및 해시 값이있는 데이터베이스를 도용 할 수 있으므로 중요합니다. 마지막으로, 암호 해시도있을 수 있습니다 메모리 하드 상당한 양의 메모리가 해시를 계산하는 데 필요한되도록. 이로 인해 공격자가 검색 속도를 높이기 위해 특수 하드웨어 (GPU, ASIC, FPGA 등)를 사용할 수 없습니다. 후추 또는 병렬 처리량과 같은 다른 입력 또는 구성 옵션도 암호 해시에 사용할 수 있습니다.

그러나 암호 해시 인 H(X)경우에도 누구나 암호를 확인할 수 H(X)있습니다. 암호 해시는 여전히 결정론 적이므로 누군가가 모든 입력과 해시 알고리즘 자체를 알고 있다면 X계산에 사용하고 H(X)다시 결과를 비교할 수 있습니다.

일반적으로 사용되는 비밀번호 해시는 bcrypt , scryptPBKDF2 입니다. 합리적으로 최근의 암호 해싱 경쟁에서 우승 한 다양한 형태의 Argon2 도 있습니다 . 여기 CrackStation 은 암호 보안에 관한 좋은 블로그 글입니다.


공격자가 해시 계산을 수행하지 못하도록하여 암호가 올바른지 확인할 수 있습니다. 이를 위해 후추를 비밀번호 해시의 입력으로 사용할 수 있습니다. 대안 적으로, 해시 값은 물론 AES와 같은 암호 및 CBC 또는 GCM과 같은 동작 모드를 사용하여 암호화 될 수있다. 그러나 암호 / 해시보다 더 높은 액세스 요구 사항 으로 비밀 / 키를 독립적으로 저장 해야합니다 .


0

MD5는 암호화 (단방향) 해시 함수이므로 직접 해독 할 수있는 방법이 없습니다. 암호화 해시 함수의 전체 목적은 실행 취소 할 수 없다는 것입니다.

당신이 할 수있는 한 가지는 해시 된 것을 추측 한 다음 동일한 기능으로 해시하고 일치하는지 확인하는 무차별 대입 전략입니다. 해시 된 데이터가 추측하기 쉽지 않으면 시간이 오래 걸릴 수 있습니다.


-1

해싱은 한 가지 방법이기 때문에 암호 해시를 알고리즘에 넣고 암호를 일반 텍스트로 다시 가져올 수는 없습니다. 그러나 사람들이 한 일은 해시를 생성하고 큰 테이블에 저장하여 특정 해시를 입력 할 때 해시와 일치하는 비밀번호를 테이블에서 확인하고 해당 비밀번호를 사용자에게 반환하도록하는 것입니다. 이를 수행하는 사이트의 예는 http://www.md5online.org/ 입니다. 최신 비밀번호 저장 시스템은 등록시 비밀번호 상자에 동일한 비밀번호를 입력 할 때 다른 해시가 생성되도록 솔팅 알고리즘을 사용하여이를 방지합니다.


-1

아니요, MD5에서 광범위한 취약점을 찾을 수 없을 때까지 단방향 해시 기능이므로 md5를 해독 / 역전 할 수 없습니다. 또 다른 방법은 일부 웹 사이트에 많은 양의 암호 데이터베이스 세트가 있으므로 온라인에서 MD5 또는 SHA1 해시 문자열을 해독 할 수 있습니다. http://www.mycodemyway.com/encrypt-and-decrypt/md5 와 같은 웹 사이트를 시도했지만 제대로 작동하지만 해시가 해당 데이터베이스에 저장되어 있으면 실제 문자열을 얻을 수 있습니다. .


1
MD5는 암호화가 아니며 단방향 암호화조차도 아닙니다 (처음에는 의미가 없습니다).
Maarten Bodewes

@MaartenBodewes 내 실수는 암호화 기능이 아니며 해시 기능입니다. 감사합니다.
Rafi Ahmad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.