md5 (x) == x 인 MD5 고정 소수점이 있습니까?


114

MD5 변환에 고정 된 점이 md5(x) == x있습니까? 즉, x와 같은 x가 있습니까?


8
어떤 MD5 변환? 수학적인 것 (모든 비트 문자열에서 128 비트까지) 또는 바이트 문자열에서 32 자 16 진수 문자열 (실용적인 것)? 둘 다에 대한 답변이 동일하다는 것은 분명하지 않습니다 ...
Rafał Dowgird

4
글쎄, 그들은 있는 같은 대답 오른쪽? 128 비트 길이 md5(x) == x이기 때문에 128 비트 길이 md5(x) 아닌 x가 존재하지 않는다는 것을 알고 있습니다 . 따라서 128 비트 도메인의 md5에 고정 소수점이있는 경우에만 임의 크기 입력 에 대해 md5에 고정 소수점이 있습니다.

1
실제 32 자 hexstring의 경우 16 진수를 대문자 [AF]로 표현하든 소문자 [af]로 표현하든 임의의 선택이기 때문에 나는 그것들이 같은 대답이라고 생각하지 않습니다. 두 표현 모두 동일한 128 비트 숫자에 해당하지만 MD5에 대한 입력으로 제공 될 때 다른 해시를 생성합니다. 에 고정 된 지점이 확률 그래서 하거나 진술의 사실이다1-(1/e)*(1/e) ≈ 86.47%
의 Dušan

답변:


138

MD5 합계는 길이가 128 비트이므로 고정 소수점도 반드시 128 비트 길이 여야합니다. 문자열의 MD5 합계 균일 주어진 128 비트 열이 정점임을 그 확률 모든 가능한 합계를 통해 분배되는 것을 가정하고있다 1 / 2 (128) .

따라서, 어떠한 128 비트 스트링 고정 소수점 없을 확률은 (1 - 인 1 / 2 (128) ) (2) (128) , 고정 된 지점이 확률은 1 정도로 - (1 - 1 / 2 (128) ) (2) (128) .

N이 무한대로 갈수록 한계 때문에 (1 - 1 / N ) N 이고 1 / E , 및 2 128 - 확실히 매우 큰 수이고,이 확률은 거의 정확하게 1 1 / E ≈ 63.21 %.

물론 실제로 관련된 임의성은 없습니다. 고정 된 점이 있든 없든 상관 없습니다. 그러나 고정 소수점이 있다고 63.21 % 확신 할 수 있습니다. (또한이 숫자는 키 스페이스의 크기에 의존하지 않는다는 점에 유의하십시오. MD5 합계가 32 비트 또는 1024 비트 인 경우 약 4 또는 5 비트보다 크면 대답은 동일합니다.)


11
모든 문자열의 MD5 합계가 가능한 모든 합계에 대해 균일하게 분포되어 있다고 실제로 가정 할 수 있습니까?
Ori Pessach

13
예. 큰 수와 모듈러스는 대략 무작위 분포를 형성합니다. 그렇지 않으면 계속 충돌 할 것입니다. md5의 특성으로 인해 출력이 무작위로 배포됩니다.
Stefan Kendall

2
나는이 답변에있는 답변을 사용 : security.stackexchange.com/questions/3851/...
CesarB에게

1
여기, 금색 배지가 있습니다.
Dennis

md5가 무작위가 아니라 결정적이라는 점을 제외하고.
PyRulez

13

내 무차별 대입 시도는 12 개의 접두사와 12 개의 접미사 일치를 발견했습니다.

접두사 12 : 54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d137956603122ad86d762

접미사 12 : df12c1434cec7850a7900ce027af4b78-> b2f6053087022898fe920ce027af4b78

블로그 게시물 : https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN


링크가 작동하지 않습니다. 구글 플러스 4 월 종료
Typewar

죄송합니다 ... 블로그 게시물을 저장하지 않았고 Google+ 백업이 작동하지 않습니다. 그러나 여기 내 GitHub의 프로젝트는 다음과 같습니다 github.com/thomasegense/MD5FixPointSearch
토마스 Egense

당신은 이것에 대해 확신합니까 : prefix 12 : 54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d137956603122ad86d762 md5sumLinux 명령을 사용했는데 다른 결과
ThunderPhoenix

md5sum을 올바르게 사용하고 있는지 확실하지 않습니다. 여기에서 온라인으로 확인할 수도 있습니다 : onlinemd5.com
Thomas Egense

11

해시는 되돌릴 수 없으므로 알아 내기가 매우 어렵습니다. 이 문제를 해결하는 유일한 방법은 해시의 가능한 모든 출력에 대해 해시를 계산하고 일치 항목이 있는지 확인하는 것입니다.

자세히 설명하자면 MD5 해시에는 16 바이트가 있습니다. 즉, 2 ^ (16 * 8) = 3.4 * 10 ^ 38 개의 조합이 있습니다. 16 바이트 값에 대한 해시를 계산하는 데 1 밀리 초가 걸린 경우 모든 해시를 계산하는 데 10790283070806014188970529154.99 년이 걸립니다.


2
모든 것을 시도해야한다면 사실 입니다. 그러나 고정 소수점이 없는지 확인하기 위해 가능한 모든 입력을 시도해야합니다. 고정 된 점이 있으면 (그리고 Adam Rosenfield의 대답은있을 수 있음을 시사합니다) 운이 좋은 추측 하나만 있으면됩니다.
Naaff

이 함수는 수학적 역이 없다는 점에서 되돌릴 수 없지만 이는 주어진 출력에 대해 둘 이상의 입력이있을 수 있음을 의미합니다. 일반적으로 주어진 출력에 대한 입력 공간은 무한하지만 128 비트 값으로 시작된 것을 알고 있다면 가능성을 좁힐 수 있습니다. 함수를 블랙 박스로 취급하지 않고 대신 사양을 읽고 몇 가지 수학적 사고를 적용하면 "거꾸로 작동"할 가능성이 있습니다.
rndmcnlly

2
@Naaff : "가능한 모든 입력을 시도해야합니다"-모든 해시를 시도하는 것보다 더 쉽습니다. 어떻게? 가능한 여러 입력이 동일한 출력으로 해시 될 수 있기 때문에 정반대입니다.
Piskvor는

1
@Piskvor : 당신은 Naaff가 의미하는 바를 오해했습니다. 더 명확한 방법은 "고정 점이없는 경우에만 가능한 모든 입력을 시도 할 것입니다 (공백 2 ^ 128에서)"입니다. 즉, 작동하기 전에 모든 가능성을 시도해야합니다. 따라서 1.08e28 년 또는 운이 좋은 추측!
P Daddy

"해시를 계산하는 데 1 밀리 초가 걸린 경우". 최신 GPU는 초당 수십억 개의 해시를 계산할 수 있으며, 이는 이보다 훨씬 더 빠릅니다. 하지만 여전히 시간이 오래 걸립니다.
markasoftware

0

예 / 아니오 대답은 없지만 제 추측은 "예"이며 또한 2 ^ 32 개의 고정 소수점이있을 수 있습니다 (문자 문자열 해석이 아닌 비트 문자열 해석의 경우). 많은 창의력이 필요한 멋지고 간결한 퍼즐처럼 보이기 때문에 적극적으로 작업하고 있습니다 (즉시 무차별 대입 검색에 만족하지 않는 경우).

내 접근 방식은 다음과 같습니다. 수학 문제로 취급하십시오. 128 개의 부울 변수와 입력 (일치해야하는) 측면에서 출력을 설명하는 128 개의 방정식이 있습니다. 알고리즘의 테이블과 패딩 비트의 모든 상수를 연결함으로써 128 비트 입력 사례에 최적화 된 알고리즘을 생성하기 위해 방정식을 크게 단순화 할 수 있기를 바랍니다. 이러한 단순화 된 방정식은 효율적인 검색을 위해 멋진 언어로 프로그래밍하거나 다시 추상적으로 처리하여 한 번에 단일 비트를 할당하고 모순을 감시 할 수 있습니다. 입력과 일치하지 않음을 알기 위해 출력의 몇 비트 만 볼 필요가 있습니다!


정말 흥미 롭군요.이 길을 따라 가면서 진행 상황을 공유해주세요.
user230910

-1

아마도,하지만 우리가 가지고있는 것보다 더 오래 걸리거나 MD5를 손상시키는 것을 수반 할 것입니다.


6
깨지지 않았습니다. 그들이 할 수 있었던 것은 합리적인 시간 안에 동일한 해시와 동일한 2 개의 문자열을 생성하는 것입니다. 특정 해시와 동일한 문자열을 생성하는 것은 여전히 ​​매우 어렵습니다.
Kibbee

9
내가 MD5 ( "The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
Kip

5
고정 소수점은 아마도보다 포괄적 인 MD5 위반으로 이어질 수있는 수학에 약간의 영향을 미칠 것입니다. 나는 Glomek이 정말로 '아마도'를 정당화 할 수 있다고 확신하지 않습니다. 나는 모호하지 않고 '가능하게'받아 들일 것입니다.
Jonathan Leffler

-9

두 가지 해석이 있으며 둘 중 하나를 선택하면 고정 소수점을 찾을 확률이 81.5 %로 증가합니다.

  • 해석 1 : 이진 으로 된 MD5 출력의 MD5 가 입력과 일치합니까?
  • 해석 2 : 16 진수 로 된 MD5 출력의 MD5 가 입력과 일치합니까?

13
16 진수를 의미하는 MD5 알고리즘에는 아무 것도 없습니다. 바이트에서 작동하고 바이트를 생성합니다. 따라서 후자의 해석은 유효하지 않다고 생각합니다.
Nick Johnson

해석 1에 고정 된 점이 있는지 여부에 관계없이 해석 2에 고정 된 점이있을 수 있습니다. 그러나 문제를 탐구하는 데 관심이 있다면 해석 1이 이겼 기 때문에 시작하기에 훨씬 더 좋은 곳인 것 같습니다. 대 / 소문자 및 문자 인코딩에 대해 모든 종류의 임의의 결정을 내릴 필요가 없습니다. 게다가 바이너리 케이스에는 비트 수가 적습니다!
rndmcnlly

4
16 진수가 실제로 무엇인지 잘못 해석하고 있습니다. 10 진수, 8 진수 또는 3 진수로 표현할 수있는 것처럼 2 진수를 16 진수로 표현할 수 있습니다. 이것은 숫자이고 다른 표현을 가지고 있습니다. 그래서 해석 1과 2는 같은 것입니다. 당신이 생각하는 것은 문자열 표현인데, 이것은 전혀 같은 16 진수는 아니지만 완전히 다른 이진 값입니다. 사실 서로 다른 문자 세트에 여러 가지 16 진 문자열을 가질 수 있습니다. 128 비트 해시 값은 "16 진"문자열로 표시 될 수 있지만 문자열과 동일하지 않습니다. 문자열이 동일한 이진 데이터가 아닙니다.
정의

Dustin, 해석 2는 실제로 디스플레이 문자열의 MD5를 의미합니다.
Joshua

4
하지만 문자 인코딩에 직접적으로 의존한다는 점에서 그 아이디어에는 큰 문제가 있습니다. 다른 인코딩 스키마는 완전히 다른 결과 집합을 생성합니다. MD5가 작동하는 방식에 대한 오해를 바탕으로 전체 프로젝트와이를 폭로하는 기사도 있습니다. acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
정의

-23

엄밀히 말하면 MD5의 입력 길이는 512 비트이고 출력은 128 비트이므로 정의상 불가능하다고 말할 수 있습니다.


4
아니요, 1 바이트 문자열의 MD5가 있습니다.
Joshua

7
입력은 모든 크기가 될 수 있습니다. 입력이 512 바이트 미만이면 패딩되지만 작은 입력은 여전히 ​​허용됩니다. Wikipedia에서 : "MD5는 가변 길이 메시지를 128 비트의 고정 길이 출력으로 처리합니다. 입력 메시지는 512 비트 블록 (16 개의 32 비트 리틀 엔디안 정수)의 청크로 분할됩니다. 메시지는 패딩됩니다. 길이는 512로 나눌 수 있습니다. "
Naaff

그래서 당신은 0000000001 = 1이라고 가정하고 있습니까? 나는 그 질문이 기껏해야 제대로 지정되지 않았다고 주장합니다.
Ori Pessach

11
MD5에 대한 입력 은 128 비트가 될 수 있습니다. MD5가 그 입력을 채우고 싶다면 솔직히 MD5의 사업입니다. 입력은 여전히 ​​잘 정의되어 있습니다. 마찬가지로 출력은 잘 정의 된 128 비트입니다. (잘 정의 된) 입력과 (잘 정의 된) 출력이 모두 같으면 MD5 (x) = x입니다.
Naaff

2
@Joshua MD5 빈 문자열 (즉, 0 바이트)도 존재합니다
Kip
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.