누군가 나에게 다음과 같은 소프트웨어 시스템을 보았다고 말했습니다.
- 다른 시스템에서 MD5 암호화 된 비밀번호를 검색합니다.
- 암호화 된 비밀번호를 해독하고
- 시스템 자체 알고리즘을 사용하여 시스템 데이터베이스에 비밀번호를 저장하십시오.
가능합니까? MD5 해시를 해독하는 것은 가능하지 않다고 생각했습니다.
MD5 사전이 있지만 실제 해독 알고리즘이 있습니까?
누군가 나에게 다음과 같은 소프트웨어 시스템을 보았다고 말했습니다.
가능합니까? 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 출력 수가 관심있는 도메인의 문자열 수보다 훨씬 크기 때문에 더 이상 비가역성 속성이 없을 수 있습니다. 그런 다음 레인보우 테이블 또는 이와 유사한 것을 사용하여 역 해시를 사용할 수 있습니다 .
password
동일한 해시를 생성하지만 모두 무작위로 보이지만 충분히 근접 할 수있는 다른 모든 무한 입력이 아니라고 확신 할 수는 없습니다.
적어도 합리적인 시간 안에는 불가능합니다.
이것이 자주 처리되는 방식은 비밀번호 "재설정"입니다. 즉, 당신은 그들에게 새로운 (임의의) 암호를주고 그것들을 이메일로 보냅니다.
md5 비밀번호는 되돌릴 수 없습니다 (모든 언어로).
하지만 당신은 할 수 있습니다:
사용자에게 새로운 것을 제공하십시오.
무지개 테이블을 확인하여 오래된 것을 검색하십시오.
MD5는 해싱 알고리즘이므로 해시 값을 되돌릴 수 없습니다.
사용자가 다른 비밀번호를 제공하고 해시를 계산하여 새 비밀번호로 저장하는 "비밀번호 변경 기능"을 추가해야합니다.
되돌릴 수없는 방법과 이유 및 왜 원하지 않는지에 대한 다른 모든 답변을 여기에서 확인하십시오.
완벽 함을 위해 가능한 일치하는 항목을 찾을 수있는 레인보우 테이블 이 있습니다. 레인보우 테이블의 답변이 사용자가 선택한 원래 비밀번호가되어 혼동 될 수 있다는 보장은 없습니다.
또한 소금에 절인 해시에는 작동하지 않습니다. 많은 보안 전문가들은 소금 을 추천합니다.
역함수를 찾는 관점에서 해시 함수를 "되 돌리는"방법은 없습니다. 앞에서 언급했듯이 이것은 해시 함수를 갖는 요점입니다. 가역적이지 않아야하며 빠른 해시 값 계산이 가능해야합니다. 따라서 주어진 해시 값을 산출하는 입력 문자열을 찾는 유일한 방법은 가능한 모든 조합을 시도하는 것입니다. 이를 이런 이유로 무차별 대입 공격이라고합니다.
가능한 모든 조합을 시도하는 데 많은 시간이 걸리며 이는 해시 값이 비교적 안전한 방식으로 비밀번호를 저장하는 데 사용되는 이유이기도합니다. 침입자가 내부의 모든 사용자 암호를 사용하여 데이터베이스에 액세스 할 수있는 경우 어떤 경우라도 느슨해집니다. 해시 값이 있고 (이상적으로 말하면) 강력한 암호가 있으면 공격자의 해시 값에서 암호를 얻는 것이 훨씬 더 어려워집니다.
해시 값을 저장하는 것은 해시 값을 계산하는 것이 비교적 빠르기 때문에 성능 문제가 아닙니다. 따라서 대부분의 시스템은 사용자가 입력 한 비밀번호의 빠른 해시 값을 계산 한 다음 사용자 데이터베이스에 저장된 해시 값과 비교합니다.
MD5는 해시에서 원본 콘텐츠를 다시 가져올 수 있기 때문이 아니라 작업을 통해 동일한 해시로 해시하는 두 개의 메시지를 만들 수 있기 때문에 고장난 것으로 간주됩니다.
MD5 해시를 해시 해제 할 수 없습니다.
사전을 사용하여 원본 메시지를 검색하는 온라인 도구를 찾을 수 있습니다.
어떤 경우에는 사전 방법이 쓸모가 없을 수 있습니다.
예를 들어 다음은 하나의 MD5 암호 해독기 온라인 도구입니다.
예, 정확히 당신이 요구하는 것이 가능합니다. 도움없이 MD5 암호를 '암호 해독'할 수는 없지만 MD5 암호를 다른 알고리즘으로 다시 암호화 할 수는 있습니다.
사용자가 이전 MD5 암호를 사용하여 새 시스템에 로그온 할 수 있도록 준비해야합니다. 그들이 로그인하는 시점에 그들은 당신의 로그인 프로그램에 당신이 가지고있는 MD5 해시와 일치하는 것으로 밝혀진 암호의 해시 되지 않은 버전을 부여했습니다. 그런 다음이 해싱되지 않은 암호를 새 해시 알고리즘으로 변환 할 수 있습니다.
분명히 이것은 사용자가 암호를 알려줄 때까지 기다려야하기 때문에 확장 된 프로세스이지만 작동합니다.
(NB : 7 년 후, 잘만되면 누군가 유용 할 것입니다)
아니요, 할 수 없습니다. 사전을 사용하거나 원하는 해시를 얻을 때까지 다른 값을 해시 할 수 있습니다. 그러나 "암호 해독"할 수 없습니다.
MD5에는 약점이 있지만 ( Wikipedia 참조 ) 해시를 미리 계산하려는 일부 프로젝트가 있습니다. Wikipedia는 이러한 프로젝트 중 일부를 암시합니다. 내가 아는 (그리고 존중하는) 것은 ophrack입니다. 사용자에게 자신의 암호를 말할 수는 없지만 작동하는 암호는 말할 수 있습니다. 그러나 나는 생각합니다 : 잊어 버린 경우를 대비하여 새 비밀번호를 우편으로 보내십시오.
MD5 해시 알고리즘은 되돌릴 수 없으므로 MD5 디코딩은 불가능하지만 일부 웹 사이트에는 대량의 암호 일치 세트가 있으므로 온라인으로 MD5 해시를 디코딩 할 수 있습니다.
온라인 시도 :
이론적 으로 해시 값을 해독 할 수는 없지만 원래 일반 텍스트를 다시 가져 오는 더러운 기술이 있습니다.
아니요, 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 , scrypt 및 PBKDF2 입니다. 합리적으로 최근의 암호 해싱 경쟁에서 우승 한 다양한 형태의 Argon2 도 있습니다 . 여기 CrackStation 은 암호 보안에 관한 좋은 블로그 글입니다.
공격자가 해시 계산을 수행하지 못하도록하여 암호가 올바른지 확인할 수 있습니다. 이를 위해 후추를 비밀번호 해시의 입력으로 사용할 수 있습니다. 대안 적으로, 해시 값은 물론 AES와 같은 암호 및 CBC 또는 GCM과 같은 동작 모드를 사용하여 암호화 될 수있다. 그러나 암호 / 해시보다 더 높은 액세스 요구 사항 으로 비밀 / 키를 독립적으로 저장 해야합니다 .
해싱은 한 가지 방법이기 때문에 암호 해시를 알고리즘에 넣고 암호를 일반 텍스트로 다시 가져올 수는 없습니다. 그러나 사람들이 한 일은 해시를 생성하고 큰 테이블에 저장하여 특정 해시를 입력 할 때 해시와 일치하는 비밀번호를 테이블에서 확인하고 해당 비밀번호를 사용자에게 반환하도록하는 것입니다. 이를 수행하는 사이트의 예는 http://www.md5online.org/ 입니다. 최신 비밀번호 저장 시스템은 등록시 비밀번호 상자에 동일한 비밀번호를 입력 할 때 다른 해시가 생성되도록 솔팅 알고리즘을 사용하여이를 방지합니다.
아니요, MD5에서 광범위한 취약점을 찾을 수 없을 때까지 단방향 해시 기능이므로 md5를 해독 / 역전 할 수 없습니다. 또 다른 방법은 일부 웹 사이트에 많은 양의 암호 데이터베이스 세트가 있으므로 온라인에서 MD5 또는 SHA1 해시 문자열을 해독 할 수 있습니다. http://www.mycodemyway.com/encrypt-and-decrypt/md5 와 같은 웹 사이트를 시도했지만 제대로 작동하지만 해시가 해당 데이터베이스에 저장되어 있으면 실제 문자열을 얻을 수 있습니다. .