두 파일에 대해 동일한 암호화 해시 또는 체크섬이 동일한 것을 의미합니까?


57

나는 2 개의 Excel 문서를 가지고 있으며 파일 이름을 제외하고 정확히 동일한 지 확인하고 싶습니다.

예를 들어, 파일은 fileone.xls및 이라고 filetwo.xls합니다. 파일 이름 외에도 내용은 동일하다고 가정하지만 이것이 확인하려는 것입니다.

나는 많은 플러그인을 설치하지 않고 이것을 검토하는 방법을 찾고있었습니다. 똑 바른 방법은 없습니다.

두 파일 모두에 대해 MD5 해시를 생성하려고했습니다. 해시가 동일하면 파일 내용이 1 : 1 동일하다는 의미입니까?


8
cryptohashes 및 때로는 일반 해시는 다른 시스템의 파일을 비교하거나 많은 수의 파일을 검색하는 데 유용 할 수 있지만 두 파일이 동일한 시스템에 있으면 cmpUnix 또는 fcWindows의 (파일 비교) 와 쉽게 비교할 수 있습니다 .
dave_thompson_085

10
shattered.io -SHA1은 md5보다 "강력한"해싱 알고리즘이며 shattered.io/static/shattered-1.pdfshattered.io/static/shattered-2.pdf 는 완전히 다른 해시 값을 갖지만 완전히 다릅니다.
스티로폼

30
참고 : 먼저 크기를 확인하십시오. 크기가 다르면 파일을 열지 않아도됩니다.
Emilio M Bumachar

42
단순한 버전 : MD5 해시는 사고 로부터 보호하기에 충분하고 다시 악의 를 방지하기에는 충분하지 않습니다 . 그것이 당신에게 충분하든 당신의 상황에 따라 결정해야합니다.
Euro Micelli

9
diff -s file1 file2그것이 동일하다고 말하면 동일합니다 (실제로 바이트 당 파일을 비교하므로 해시 충돌도 제외됩니다). 체크섬은 하나의 해시와 해당 해시의 작성자와 동일한 것으로 생각되는 항목 만있는 경우에 사용됩니다.
Bakuriu

답변:


93

해시가 동일하면 파일 내용이 1 : 1 동일하다는 의미입니까?

모든 파일은 바이트 모음입니다 (값 0-255). 두 파일 MD5 해시가 일치하면 해당 바이트 모음이 모두 정확히 같은 순서 (같은 순서, 동일한 값) 일 가능성이 큽니다.

두 파일이 128 비트 해시 인 동일한 MD5를 생성 할 가능성은 매우 적습니다. 확률은 다음과 같습니다.

실수 충돌 두 해시 확률이 1/2 인 128 1 sextillion decillion nonillion 366 920 938 octillion septillion undecillion 463 282 340 456 463 211,000 374 quintillion 천조 607,000,000,000,000 431,000,000,000 768,000,000 (에 응답으로부터 StackOverflow에 ).

해시는 "한 방향으로 만"작동합니다. 즉, 바이트 컬렉션을 가져와 해시를 얻지 만 해시를 가져 와서 바이트 컬렉션을 다시 가져올 수는 없습니다.

암호화는 이것에 달려 있습니다 (두 가지가 무엇인지 모른 채 비교할 수있는 한 가지 방법입니다).

2005 년 무렵, MD5 해시가져와 해당 해시와 일치하는 데이터를 생성하는 방법이 발견되어 동일한 MD5 해시 ( 충돌 공격 ) 를 가진 두 개의 문서를 만듭니다 . 아래 @ user2357112의 의견을 참조하십시오. 즉, 공격자는 예를 들어 동일한 MD5를 가진 두 개의 실행 파일을 만들 수 있으며, 신뢰할 수있는 대상을 결정하기 위해 MD5에 의존하는 경우 속일 수 있습니다.

따라서 MD5를 암호화 또는 보안에 사용해서는 안됩니다. 예를 들어 다운로드 무결성을 보장하기 위해 다운로드 사이트에 MD5를 게시하는 것은 좋지 않습니다. MD5 해시에 따라 파일 또는 데이터 내용을 확인하기 위해 스스로 생성하지 않은 것은 피해야합니다.

자신을 생성하면 자신에게 악의적이지 않다는 것을 알고 있습니다. 따라서 사용할 수는 있지만 다른 사람이 그것을 복제하고 MD5 해시를 공개적으로 게시하려면 더 나은 해시를 사용해야합니다.


두 개의 Excel 파일이 동일한 행과 열에 동일한 값을 포함 할 수 있지만 형식, 스타일, 설정 등으로 인해 파일의 바이트 스트림이 완전히 다를 수 있습니다.

파일의 데이터를 비교하려면 먼저 동일한 행과 열을 사용하여 CSV로 내보내고 모든 서식을 제거한 다음 CSV를 해시하거나 비교하십시오.


107
Excel 파일과 다른 오피스 문서는 마지막으로 저장된 날짜 시간 동안 새 값이 저장된 파일의 메타 데이터로 인해 아무 것도 변경하지 않고 열고 다시 저장했기 때문에 다른 해시를 가질 수 있습니다.
BeowulfNode42

29
보너스 : CSV로 내 보낸 경우, 유능 diff하거나 유사한 유틸리티를 사용 하여 파일이 동일한 해시를 갖는 것이 아니라 바이트 단위로 동일하다는 것을 실제로 확인할 수 있습니다.
Monty Harder

18
해시를 가져와 해시와 일치하는 데이터를 만드는 것은 사전 이미지 공격입니다. MD5가 현재 충돌 공격에 취약하다고 생각하지만 사전 이미지 또는 2 차 이미지 공격이 현재 가능한 것은 아니라고 생각합니다.
user2357112

2
@Tim 무슨 말을하는거야? 그는 말했다 : CSV로 내보내고 diff -sCSV가 동일한 지 확인하는 데 사용 합니다. 실제로 diff -sExcel 파일도 가능합니다. 파일 diff이 동일하다면 CSV 비교로 갈 필요가 없습니다.
Bakuriu

2
@Bakuriu 분명히 내 의견은 매우 잘못 표현되었습니다. CSV로 내 보내면 공식, 차트, 조건부 및 표준 형식과 같은 많은 정보가 손실됩니다.
Tim

37

실제로, 동일한 암호화 해시는 파일이 공격 자나 다른 악의적 인 엔티티에 의해 제작되지 않는 한 파일이 동일하다는 것을 의미합니다 . 잘 설계된 암호화 해시 기능과 의 임의 충돌 가능성은 실제로 공격자가 없을 때 무시할 정도로 작습니다.

그러나 일반적으로, 아니, 우리는 같은 해시를 갖는 2 개 개의 임의의 파일이 있다고 말할 수 없다 확실히 그들이 동일하다는 것을 의미한다.

암호화 해시 함수의 작동 방식은 임의 길이의 입력을 가져 와서 입력에서 계산 된 고정 길이 값을 출력하는 것입니다. 일부 해시 함수에는 선택할 수있는 여러 출력 길이가 있지만 출력은 여전히 ​​고정 길이 값입니다. 이 값은 최대 수십 바이트입니다. 오늘날 가장 일반적으로 사용되는 출력 값이 가장 긴 해시 알고리즘에는 512 비트 출력이 있고 512 비트 출력은 64 바이트입니다.

해시 함수의 입력이 해시 함수의 출력보다 긴 경우 입력이 출력에 적합하도록 일부 충실도를 제거해야합니다. 결과적으로 출력 길이보다 큰 길이의 입력이 여러 개 있어야 동일한 출력을 생성 할 수 있습니다.

현재 주력 SHA-256을 예로 들어 봅시다. 256 비트 또는 32 바이트의 해시를 출력합니다. 정확히 32 바이트 길이이지만 서로 다른 두 개의 파일이있는 경우 파일의 내용에 상관없이 알고리즘에 결함이 없다고 가정하여 다른 값으로 해시해야합니다. 수학적 용어로, 해시는 2256 입력 공간을 2256 출력 공간 에 맵핑하는 함수 이며, 충돌없이 가능합니다. 각 33 바이트 두 개의 파일이있는 경우,이 존재해야합니다 몇 가지 우리가 지금이 매핑하고 있기 때문에, 두 파일 모두에 대해 동일한 32 바이트 출력 해시 값을 제공 입력의 조합을 264 2에 입력 공간 (256)출력 공간; 여기서 우리는 평균적 으로 모든 단일 출력에 대해 2 8 개의 입력 이 존재한다는 것을 쉽게 알 수 있습니다 . 더 나아가서 64 바이트 파일 을 사용하면 모든 단일 출력에 대해 2256 개의 입력 이 있어야합니다 !

암호화 해시 함수는 특정 출력을 제공하는 입력을 작성하거나 동일한 출력을 제공하는 두 개의 입력을 작성하는 것이 계산 상 어렵 도록 설계되었습니다 . 이를 사전 이미지 공격 저항 또는 충돌 공격 저항이라고 합니다. 이러한 충돌을 찾는 것은 불가능 하지 않습니다 . 그것은 정말로, 정말로, 정말로, 정말로 힘들 도록 의도 된 것 입니다. 충돌 공격의 특별한 경우는 생일 공격 입니다.

공격에 저항하는 알고리즘은 다른 알고리즘보다 낫습니다. MD5는 일반적으로 요즘 완전히 고장난 것으로 여겨지지만, 마지막으로 보았지만 여전히 첫 번째 사전 이미지 저항력을 보여주었습니다 . SHA-1도 마찬가지로 효과적으로 고장납니다. 사전 이미지 공격은 시연되었지만 특정 조건이 필요하지만 그 경우가 무기 한일 것이라고 믿을 이유는 없습니다. 그 말이 다가올수록 공격은 항상 좋아지고 결코 나 빠지지 않습니다. SHA-256 / 384 / 512는 현재 대부분의 목적에 안전하다고 여전히 믿고 있습니다. 그러나 악의적으로 제작되지 않은 두 가지가 유효한지 확인하려는 경우파일은 동일합니다. 입력 공간이 이미 충분히 제한되어 있기 때문에 대부분 랜덤 충돌에 관심이 있기 때문입니다. 파일이 악의적으로 제작되었다고 믿을만한 이유가 있다면 최소한 안전하다고 여겨지는 암호화 해시 함수를 사용해야합니다.

첫 번째 사전 이미지는 특정 출력 해시 값을 생성하는 입력을 찾는 것입니다. 두 번째 사전 이미지는 지정된 다른 입력과 동일한 출력을 제공하는 입력을 찾는 것입니다. 충돌 은 입력이 무엇인지, 때로는 입력이 무엇인지에 관계없이 동일한 출력을 생성하는 두 개의 입력을 찾는 것입니다.

그러나 파일이 매우 다른 데이터 표현을 가질 수 있으며 여전히 똑같이 표시 될 수 있음 을 명심 해야합니다. 따라서 암호화 해시가 일치하지 않아도 동일 하게 보일 수 있지만 해시가 일치 하면 동일하게 나타날 가능성이 큽니다 .


2
해시 후 일치하면 파일 중 하나는 의도적 인 충돌의 결과, 또는 그들이 아닌 다음 그들이하는 보장 동일하게. 우연한 충돌 가능성은 순전히 이론적입니다. "해시가 일치하면 동일하게 나타날 가능성이 높다"고 말하는 것은 오해의 소지가 있습니다. 악의가 있고 충돌 상황이면 동일하지 않을 가능성이 있으며 그렇지 않으면 확률은 사실상 0입니다. 방어해야 할 확률이 낮은 사건은 아닙니다.
Gilles

9
@Gilles : 반대로. 마이클의 말은 정확히 맞으며 "보장"은 오도의 소지가 있습니다 (또는 사실은 잘못된 것입니다). 동일한 해시가 일치하지 않는 두 파일 (악의적 인 수정에도 불구하고)이 발생할 가능성은 매우 낮으며 실제로 무시할 수 있습니다. 그러나 0이 아닙니다 . 일반적으로 어떤 이유로 든 서로 다른 입력 동일한 해시 생성 할 가능성이 있으며 아마도 2 ^ -128보다 훨씬 높을 가능성이 있습니다 (암호 알고리즘은 검은 색 예술이지만 알고리즘은 미묘하고 알 수없는 방식으로 결함이있을 수 있습니다. 우리는 100 % 확신 할 수있는 방법이 없습니다.
데이먼

5
@Gilles " 효과적으로 0 "은 여전히 0아니며 , 이는 두 개의 서로 다른 데이터 세트가 동일한 해시를 야기 할 가능성이 여전히 있음을 의미합니다. 당신은 그것에 반대 할 수 없습니다.
Attie

5
@Attie : 두 개의 관련되지 않은 파일이 같은 값으로 해싱 할 확률은 잘못 될 수있는 다른 많은 것들 (예 : 디스크의 파일을 손상시키는 임의의 비트 오류)이 우연의 일치를 막을 가치가없는 확률보다 훨씬 낮습니다. 고의적으로 설계된 경기를 지키는 것이 가치가있을 수 있지만 우발적 인 경기는 그렇게 막을 수없는 노력이 다른 곳에서 더 잘 사용될 수 있습니다.
supercat

3
@Gills 잘못. 기회가 있다는 것을 당신은 한 숨 그러나 작은 나에게 말할 수없는 당신이 우발적 인 충돌은 충돌이 발생하지 바로 다음 피부에 후 발생할 수, 평점. 그것은 이미 완전히 잘못된 것으로 알려진 해싱 알고리즘의 속성을 암시하므로 매우 오해의 소지가 있다고 말합니다.
iheanyi

10

그것은 확률 게임이다 ... 해시는 유한 한 수의 값을 나타낼 수있다.

가정적인 (매우 약한) 8 비트 해싱 알고리즘을 고려하면 256 개의 고유 한 값을 나타낼 수 있습니다. 알고리즘을 통해 파일을 실행하기 시작하면 해시가 시작되기 시작하지만 얼마 지나지 않아 " 해시 충돌 "이 표시됩니다. 이는 두 개의 서로 다른 파일이 알고리즘에 제공 되었으며 출력 과 동일한 해시 값 을 생성했음을 의미합니다 . 분명히 여기서 해시는 충분히 강하지 않으며 " 해시가 일치하는 파일의 내용이 같다 "고 주장 할 수 없습니다 .

해시 크기를 확장하고 더 강력한 암호화 해싱 알고리즘을 사용하면 충돌을 줄이는 데 크게 도움이되고 동일한 해시를 가진 두 파일의 내용이 동일하다는 확신을 높일 수 있습니다.

이것은 우리가 100 %의 확실성에 도달 할 수 없다, 말했다 - 우리가 주장 할 수 없다 확실히 동일한 해시를 가진 두 개의 파일이 진정으로 동일한 내용이 있는지 확인하십시오.

대부분의 / 많은 상황에서 이것은 문제가되지 않으며 해시를 비교하는 것은 " 충분히 좋은 "것이지만 이는 위협 모델에 따라 다릅니다.

궁극적으로 확실성 수준을 높여야 할 경우 다음을 수행하는 것이 좋습니다.

  1. 강력한 해싱 알고리즘 사용 ( 악의적 인 사용자로부터 보호해야하는 경우 MD5 는 더 이상 적절한 것으로 간주되지 않음)
  2. 여러 해싱 알고리즘 사용
  3. 파일 크기 비교-추가 데이터 포인트는 잠재적 충돌을 식별하는 데 도움이 될 수 있지만 입증 된 MD5 충돌 은 데이터 길이를 변경할 필요가 없습니다.

100 % 확실해야하는 경우 반드시 해시로 시작하지만 해시가 일치하면 두 파일의 바이트 별 비교를 수행하십시오.


또한 다른 사람들이 지적한 것처럼 Word 및 Excel과 같은 응용 프로그램에서 생성 된 문서의 복잡성은 텍스트, 숫자, 보이는 레이아웃이 동일하지만 파일에 저장된 데이터는 다를 수 있음을 의미합니다.

Excel은 특히이 점이 좋지 않습니다. 스프레드 시트를 저장하면 아무것도 수행 하지 않고 단순히 내용이 다른 새 파일을 생성 할 수 있습니다.


6
MD5는 더 이상 암호 방식으로는 적합하지 않다고 간주 되지만 고유성 검사 (예를 들어 입력을 제어하는 ​​경우 악의가없는 경우)는 훌륭하고 빠릅니다 (128 비트가 충분해야 함)
Chris H

4
" 두 파일을 바이트 단위로 비교하여 추적합니다. "파일 비교를 수행하려면 먼저 수행해야 할 수도 있습니다. 각 파일을 모두 읽어서 계산할 필요는 없습니다. 두 파일을 다시 읽고 비교하기 위해 해시 만!
TripeHound

3
@TripeHound 파일이 로컬인지 아닌지에 달려 있습니다. 해시가 이미 있고 해시가 필요한 경우, 새 파일에 데이터베이스에 저장된 해시가 필요한 경우 등 ... 상황에 맞는 전화를하십시오.
Attie

5
아니요, 확률 게임이 아닙니다. 우연히 충돌이 발생할 가능성을 잘못 추정하고 있습니다. 그것은 일어나지 않을 것입니다. 비교하는 동안 조금 뒤집을 가능성이 높습니다. 반면에 일부 시나리오에서는 고의적 인 충돌이 발생할 수 있으며 이는 확률 게임이 아닙니다.
Gilles

3
@mbrig : 32 비트 해시는 실수로 불일치 할 위험이 있습니다. 그러나 128 또는 256 비트로 이동하면 차이가 있습니다. 128 비트를 사용하면 각각 크기가 10 억 개에 달하는 진짜 임의의 문서를 입력하는 10 억 원숭이는 동일한 해시로 2 개의 문서를 만들 확률이 약 0.3 %입니다. 256 비트를 사용하면 수십억 원숭이가 10 억 년 동안 초당 10 억 개의 적당한 크기의 임의 문서를 입력 할 수 있다고해도 일치하지 않는 해시 값을 가진 문서가 수십억 개에 달할 가능성은 거의 없습니다.
supercat

6

두 파일이 동일한 MD5 해시를 가지고 있고 특별히 제작되지 않은 경우 동일합니다. 같은 MD5 해시로 파일을 만드는 것이 얼마나 어려운지는 파일 형식에 따라 다르며 Excel 파일을 사용하는 것이 얼마나 쉬운 지 모르겠습니다.

따라서 주위에 누워 있고 중복을 찾으려고하는 파일이 있으면 MD5가 안전합니다. 파일 중 하나를 작성했고 다른 파일이 모호한 출처 인 경우 MD5는 여전히 안전합니다 (동일한 MD5 체크섬으로 다른 파일을 얻는 유일한 방법은 두 파일을 모두 만드는 것입니다). 신뢰할 수없는 사람이 예산 제안서를 보낸 후 나중에 동일한 파일이라고 주장하는 다른 파일을 보내면 MD5로는 충분하지 않을 수 있습니다.

위험을 피하려면 MD5 대신 SHA-256 또는 SHA-512를 사용하십시오. 두 파일의 SHA-256 해시가 동일하면 동일합니다. SHA-512도 마찬가지입니다. (이들과 다를 수 있다는 이론적 인 가능성이 있지만 실수로 발생할 수있는 가능성은 검증 과정에서 컴퓨터가 조금만 뒤집어 질 가능성과는 관련이없는 것보다 훨씬 적습니다. 같은 해시, 아무도 SHA-256 또는 SHA-512에 대해이 작업을 수행하는 방법을 모릅니다.)

두 Excel 파일에 서로 다른 해시가 있으면 서로 다르지만 그 차이를 알 수있는 방법은 없습니다. 데이터는 동일하지만 형식이 다를 수 있거나 속성이 다르거 나 다른 버전으로 저장되었을 수 있습니다. 실제로 Excel이 Word와 같은 경우 파일을 저장하면 메타 데이터가 업데이트됩니다. 숫자 및 텍스트 데이터 만 비교하고 서식 및 속성을 무시하려는 경우 스프레드 시트를 CSV로 내 보내서 비교할 수 있습니다.

유닉스 / 리눅스 도구를 사용할 수있는 경우 cmp두 파일을 비교 하는 데 사용할 수 있습니다 . 동일한 시스템에서 두 파일을 비교하기 위해 체크섬은 작업을 더욱 복잡하게 만듭니다.


두 파일이 동일한 MD5 해시를 가지고 있고 특별히 제작되지 않은 경우 동일합니다. 맞지 않습니다. 가능한 메시지는 무한하지만 2 ^ 64 가능한 64 비트 해시 만 있습니다. "비둘기 구멍 원리" 라고합니다. "비둘기 구멍 원리는 n품목을 m용기에 넣은 경우 n > m하나 이상의 용기에 둘 이상의 품목을 포함해야한다고 명시합니다." 2 ^ 64 개 이상의 메시지를 만들면 "특수 제작"없이 충돌이 발생합니다. 그리고 당신 단지 2 일 수도 있습니다 .
Andrew Henle

@AndrewHenle, MD5는 64 비트가 아니며 128입니다.
Charles Duffy

@CharlesDuffy 해시가 무작위로 배포되었다고 가정합니다. 그렇지 않습니다.
Andrew Henle

무작위 분포와 효과적으로 동등하다는 것은 좋은 암호 해시를 구성하는 정의의 일부입니다. 이유로 인해 많은 혼합이 있습니다. 확실히, 해시 알고리즘은 약하지만 이러한 약점에 초점을 맞추면 의도적 인 공격과 관련하여 이전에 언급 된 경고에 빠지게됩니다. (또는 당신은 MD5가 효과적으로 무작위 인 64 비트만을 가지고 있다고 말하고 있습니까? 나는 계속 유지하지 않았 음을 인정할 것입니다-그럴듯합니다-링크하십시오?)
Charles Duffy

@AndrewHenle 나는 충돌이 수학적으로 불가능하다고 말하지는 않지만 잘못 될 수는 있지만 여기서는 관련이 없습니다. 나는 그것이 일어나지 않았다고 말하고 있습니다. 거래를 완전히 바꾸는 방식으로 귀하의 의견이 잘못되었습니다. 2 ^ 128이 아닌 2 ^ 128 개의 MD5 해시가 있습니다. 이것은 충돌을 일으키기 위해 2 ^ 128 해시를 생성해야 함을 의미합니다. 실제로 생일 역설에 따르면 2 ^ 64는 이전에 생성 된 해시가 아닌 생성 한 해시간에 충돌이 발생할 수있는 거시적 가능성을 제공합니다. 그러나 우리는 충돌을 만드는 방법을 알고 있기 때문에 혼란스러워합니다.
Gilles

6

짧은 대답은 : 암호화 해시는 당신이 일치하는 해시와 파일이 같은 것을 합리적으로 확신 할 수 있도록되어있다. 의도적으로 제작되지 않은 경우 비슷한 해시 값을 가진 두 개의 약간 다른 파일의 가능성은 엄청나게 작습니다. 그러나 의도적으로 변경 될 수있는 파일을 비교하고 확인하는 데있어 MD5는 적합하지 않습니다. SHA3 ​​또는 BLAKE2와 같은 다른 해시 함수를 사용하십시오.

긴 대답 : 이상적인 해시 함수는 모든 고유 한 데이터 조각에 대해 거의 고유 한 암호화 해시를 만드는 기능입니다. 다시 말해, 우리는이 우주에 해시 값이 충돌하는 두 개의 파일이 있다는 것을 확실히 알고 있습니다.이 두 파일이 자연스럽게 함께 올 확률은 엄청나게 작습니다.

10 년 전에 저는 MD5에서 가능한 한 멀리 있어야한다고 결정했습니다. (물론, 어제까지는 그렇게하는 데 대한 잘못된 이유를 기억했습니다. 10 년은 오래 걸렸습니다. 당신은 그 이유를 기억하기 위해 과거의 메모를 다시 보았습니다.이 대답을 편집 한 1996 년에) MD5가 발견되었습니다. 충돌 공격에 취약합니다. 9 년 후, 연구원들은 동일한 해시로 PostScript 문서와 X.509 인증서 쌍을 만들 수있었습니다! MD5가 분명히 깨졌습니다. (Megaupload.com도 MD5를 사용하고 있었고 해시 충돌과 관련하여 많은 문제가있어 당시 문제가 발생했습니다.)

따라서 MD5는 양성 파일을 비교할 수 있지만 신뢰할 수는 있지만 완전히 사용을 중단해야한다고 결론을 내 렸습니다. MD5 해시를 사용하여 파일을 비교하기 시작하면 언젠가는 보안 지문을 잊어 버리고 의도적으로 동일한 해시를 갖도록 제작 된 두 파일을 비교합니다. 또한 CPU와 암호화 프로세서는 이에 대한 지원을 추가하지 않았을 것입니다.

그러나 원래 포스터는 MD5를 사용해야 할 이유가 훨씬 적습니다.

  1. 하나가 두 파일 만 비교하는 한, 바이트 단위 비교는 실제로 자체 MD5 해시를 생성하는 것보다 빠릅니다. 세 개 이상의 파일을 비교해 보면 ... 이제 합법적 인 원인이 있습니다.
  2. OP는 "다양한 플러그인을 설치하지 않고이를 검토하는 방법"을 지정했습니다. Windows PowerShell의 Get-FileHash 명령은 SHA1, SHA256, SHA384, SHA512 및 MD5 해시를 생성 할 수 있습니다. SHA 해시 기능을 하드웨어 지원하는 최신 컴퓨터에서는 생성 속도가 더 빠릅니다.

6
원하는 길이만큼 자신 만의 암호화 해시 함수를 만들 수 있습니다. 그러나 길이 는 고정 되어 있으며 비둘기 구멍 원리는 어쨌든 적용됩니다. 일반적인 해답은 "해시 만 비교하면 두 파일이 동일한 지 확인할 수 없습니다"입니다.
Kamil Maciorowski

2
@KamilMaciorowski 이론 상으로는 가능합니다. 내 맞춤형 해시 함수는 단순히 가장 큰 파일의 사본을 생성 할 수 있습니다. 그러나 나는 이것을 더 논의하는 데 관심이 없다. 진실은, 당신은 당신이 더 똑똑하고 당신에게 역효과가 있음을 증명하기 위해 nitpicking에 해당하는 이유에 대해 하향 투표했습니다. 이제 당신은 투표권을 되 찾을 수 없습니다.

@KamilMaciorowski에 동의합니다. 그것은 가능성있는 게임입니다 ... 단일 해시를 사용하면 일치하는 해시를 가진 파일이 동일하다는 것을 " 합리적으로 확신 " 할 수 있지만 100 % 보장은 없습니다. 더 나은 알고리즘을 사용하거나 여러 알고리즘을 사용하면 신뢰도를 높일 수 있습니다. 파일 크기를 비교해도 도움이 될 수 있지만 바이트 단위를 확인하지 않고 100 % 확신 할 수는 없습니다.
Attie

1
@Attie Huh! 그것이 제가 처음에 의미 한 바입니다. 감사. 🙏 나는 "합리적으로 자신감을 가질 수 있습니다"와 같은 세련된 문구에 익숙하지 않습니다. 죄송합니다. 😜 여전히 편집 버튼이있는 이유입니다. 나는 개인적으로 한 단어가 잘못되어서 좋은 대답을 버리지 않을 것입니다. 편집했습니다.

1
"좋은 답변을 버리는 것"에 대하여 : 나는 그것이 오타가 아니라는 것을 확실히 보증했다. 그런 다음 downvoted하고 동시에 당신에게 피드백을 주었다, 당신의 대답이 더 나아지기를 바랍니다. 그렇게 했으므로 내 다운 보트는 더 이상 없습니다. 기본적으로 나는 당신의 대답에 틀렸다고 생각하는 것을 말했고, Attie는 명확하게 도움을 주었고, 당신은 대답을 향상 시켰습니다. 내 관점에서 우리는 모두이 상황을 올바르게 처리했으며 전체 이야기는 매우 잘 드러났습니다. 감사합니다.
Kamil Maciorowski

5

나는 2 개의 Excel 문서를 가지고 있으며 파일 이름을 제외하고 정확히 동일한 지 확인하고 싶습니다.

실제적인 관점에서, 파일이 다른지 알아 내기 위해 파일을 직접 비교하는 것은 각 파일의 해시를 계산 한 다음 해시를 비교하는 것보다 빠릅니다.

해시를 계산하려면 두 파일의 내용을 모두 읽어야합니다.

직접 비교를 통해 동일한 지 확인하려면 두 파일의 내용이 일치하지 않을 때까지만 읽으면됩니다. 차이점을 찾으면 파일이 동일하지 않으며 두 파일에서 더 이상 데이터를 읽을 필요가 없다는 것을 알게됩니다.

두 가지 중 하나를 수행하기 전에 두 파일의 크기를 간단히 비교할 수 있습니다. 크기가 다르면 내용이 같을 수 없습니다.


하나의 실제 드라이브에서 두 개의 파일을 사용하는 경우 두 파일 읽기 사이를 전환 할 필요가 없으므로 각 파일의 I / O 속도를 따로 따로 유지할 수있는 해시 기능을 사용하는 것이 파일을 비교하는 것보다 약간 빠를 수 있습니다. 그러나 해시가 실제로 빛을 발하는 것은 메모리에 맞지 않을 정도로 많은 파일을 포함하는 비교를 시도 할 때입니다. 파일 1과 파일 2를 비교 한 다음 파일 1과 파일 3을 비교 한 다음 파일 1과 파일 4 등을 비교하여 모든 해시를 계산하는 것보다 거의 두 배 느릴 수 있습니다.
supercat

@supercat 파일이 MB보다 큰 청크로 읽 히면 파일 간 전환이 눈에 띄지 않습니다. 또한 작업 흐름에서 여러 파일을 비교하여 중복 항목을 찾는 경우 각 파일을 작성할 때 해시도 계산할 수 있습니다. 그렇게하면 무료로 많은 작업을 수행 할 수 있기 때문입니다.
Andrew Henle

파일의 큰 청크를 버퍼링하기에 충분한 공간이 있으면 전환 시간은 문제가 될 필요는 없지만 그렇지 않은 경우 일 수 있습니다. 파일이 작성 될 때 해시를 계산하는 경우 저장된 해시를 변경하거나 적어도 무효화하지 않고 파일을 수정할 수 없다는 것을 보장하는 것이 좋습니다. 파일을 중복 백업하지 않으려는 경우 저장된 해시 값만 보면 실수로 손상된 파일을 백업 할 수 있지만 손상된 파일 일치 해야 하지만 손상 되지 않은 손상 되지 않은 파일 백업 하지 않아도 됩니다.
supercat

"차이점을 찾으면 파일이 동일하지 않다는 것을 알 수 있습니다"– 반드시 그런 것은 아닙니다. XLSX 파일은 ZIP 파일로, 잠재적으로 여전히 동일한 내용을 가진 다른 순서로 내용을 저장할 수 있습니다. 그러나 압축을 풀고 각 개별 파일을 비교하더라도 XLSX 파일에는 내용에 영향을주지 않으면 서 다른 줄 끝이있는 XML 문서가 포함됩니다.
Thomas Weller

5

MD5 또는 SHA와 같은 해시는 길이가 고정되어 있으며 300 개의 영숫자 문자 (실제로 짧고 전체 영숫자 문자 세트를 사용하지 않음)라고합니다.

파일은 영숫자로 구성되며 최대 2GB 크기입니다.

가능한 해시 값보다 더 많은 파일 (최대 2GB 크기)이 있음을 쉽게 알 수 있습니다. 비둘기 구멍 원리는 일부 (다른) 파일은 동일한 해시 값을 가져야한다고 말합니다.

또한 shattered.io 1에서 설명한 것처럼 shattered.io/static/shattered-1.pdf와 sha-1 해시 값이 동일한 shattered.io/static/shattered-2.pdf의 두 가지 파일을 가질 수 있습니다. 완전히 다릅니다.

1 SHA1은 md5보다 "강력한"해싱 알고리즘입니다


실수로 인한 충돌 가능성을 고려하기에는 너무 낮습니다. MD5의 경우에도 의도적 인 충돌의 위험이 존재하며 여기서는 그다지 관련이없는 SHA-1보다 심각합니다.
Gilles

4

아니. 값이 다르면 파일이 달라집니다. 동일한 값이 파일이 동일하다는 보장은 없습니다. CRC16을 사용하여 예제를 찾기가 비교적 쉽습니다.

현대 해싱 체계와 확률의 균형에 있어서는 동일합니다.


1
문제는 우발적 인 충돌의 위험이없는 MD5에 관한 것입니다. 고의적 인 충돌의 위험이 있지만 확률의 문제는 아닙니다.
Gilles

1
또한 이름이 다른 Excel 스프레드 시트에 관한 것입니다. 바이트 비교를위한 바이트가 옵션이 될 수없는 크기는 얼마입니까? 두 개의 해싱 체계가 함께 확실성을 제공합니다.
mckenzm

2
@Gilles 모든 해시 코드는 정의상 우발적 인 충돌의 위험이 있습니다. 그 중 유일한 방법은 전체 파일을 해시 코드로 사용하는 것입니다. 귀하의 의견은 의미가 없습니다.
user207421

3

그러나 귀하의 질문은 거꾸로됩니다-해시가 동일한 데이터를 가지고 있다고 가정합시다 (100 % 보장되지는 않지만 충돌을 일으키지 않기 위해 매초 파일을 비교하는 데 충분합니다). 반드시 동일한 데이터를 갖는 것은 동일한 해시를 가질 것이라는 것을 의미하지는 않습니다. 따라서 아니요- 기본 데이터가 다르지 않고 두 파일이 다를 수있는 방법이 많이 있기 때문에 파일을 해싱하여 Excel 파일의 데이터와 다른 Excel 파일의 데이터를 비교할 수 없습니다 . 한 가지 확실한 방법-데이터는 XML로 저장되며 각 셀에는 고유 한 XML 노드가 있습니다. 해당 노드가 다른 순서로 저장되면 데이터는 동일하지만 파일은 다릅니다.



2

이 OP에 대한 답변이 제공되었지만 요약에서 도움이 될 수 있습니다.

두 파일이 동일한 지 확인하려면 파일과 해시가 사용자의 통제하에 있는지 여부에 따라 달라집니다.

파일에서 직접 해시를 생성하고 다른 사람이 고의적으로 잘못된 결론에 도달하려고 시도 할 기회 / 기술 / 동기화를 가지고 있지 않은 사람이 거의 없다면 MD5 및 SHA1과 같은 "알려진 깨진"해시까지 충분하다고 거의 확신합니다. 하지만, 내 말 것을 당신은 수백만 년 동안 빠른 속도로 파일을 생성 할 수 있으며, 당신은 것입니다 여전히 실제로 다르지만 동일한 해시를 가지고있는 두 개의 파일로 끝날 가능성합니다. 거의 확실합니다.

이 시나리오는 PC 또는 파일 서버의 두 디렉토리가 동일한 내용을 가지고 있는지, 디렉토리의 파일이 정확히 중복되는지 등을 신속하게 확인하고 파일이 확실하지 않은 경우의 시나리오입니다. 엔지니어링 / 부적절하게 수정되었으며 해싱 앱 / 유틸리티를 신뢰하여 올바른 결과를 제공합니다.

파일 중 하나 또는 미리 계산 된 해시를 조작하여 조작하여 잘못된 결론을 내릴 수있는 경우 더 강력한 (깨지지 않은) 해시 및 / 또는 기타 보안이 필요합니다. 예를 들어 파일을 다운로드하고 해시를 검사하여 파일이 유효한지 확인하면 공격자가 올바른 해시로 잘못된 파일을 엔지니어링하거나 웹 사이트를 공격하여 "올바른 해시"를 찾을 수 있습니다 "(예상) 값입니다. 이것은 광범위한 보안 문제로 귀결됩니다.


2

Windows 명령 행에서 comp유틸리티를 사용하여 두 파일이 정확히 동일한 지 여부를 판별 할 수 있습니다 . 예를 들면 다음과 같습니다.

comp fileone.xls filetwo.xls

1

해시가 동일하면 파일 내용이 1 : 1 동일하다는 의미입니까?

해시가있는 경우 제 다른, 그것은 않는 내용이 다르다는 것을 의미한다. 동일한 해시 코드는 동일한 콘텐츠를 의미하지 않습니다. 해시 코드는 정의에 따라 큰 도메인을 더 작은 범위로 축소하는 것입니다. 의미가 같지 않은 콘텐츠에 대한 코드는 동일 할 수 있습니다. 그렇지 않으면 계산에 아무런 의미가 없습니다.


그렇지 않으면 계산에 아무런 의미가 없습니다. 수학의 법칙을 어 기고 임의의 데이터를 압축하여 비둘기 구멍 원리를 위반하는 무손실 압축 기능을 발명했다면 그것을 사용하는 것이 매우 가치가 있습니다! 128 비트 해시 파일의 전체 내용을 고유하게 나타내는 것이 매우 편리 합니다. 해시를 파일로 다시 되 돌리는 압축 해제 기능이 없더라도 수학적으로 불가능한 충돌이없는 해시는 예를 들어 VM 이미지와 같이 신뢰할 수없는 데이터의 중복 찾기 속도를 높이는 것이 좋습니다.
Peter Cordes

"해시가 다르면 내용이 다르다는 것을 의미합니다." 반드시 그런 것은 아닙니다. XLSX 파일은 ZIP 파일이며 동일한 내용을 다른 파일 순서로 저장하는 것이 가능합니다.
Thomas Weller

1

이 답변은 발생할 수 있거나 발생할 수없는 시나리오와 적용 할 수있는 추론에 대한 편리한 맵입니다. 해시 함수가 이런 식으로 작동하는 이유를 알아 보려면 다른 답변을 참조하십시오.


해시 함수를 선택하고이를 고수 한 후에는 다음 사항을 모두 고려해야합니다.

          |    identical   |   different    |
          |   hash values  |  hash values   |
----------+----------------+----------------+
identical |   can happen,  | cannot happen, |
  files   |     common     |   impossible   |
----------+----------------+----------------+
different |   can happen,  |   can happen,  |
  files   |      rare*     |     common     |
----------+----------------+----------------+

* rare, unless whoever generates (at least one of) the files
  purposely aims at this scenario

동일한 파일이 다른 해시 값을 생성하는 시나리오는 완전히 불가능합니다.


항상 적용되는 두 가지 이유 :

  • 파일이 동일하면 해시 값도 동일 합니다 .
  • 해시 값이 다음 다른 경우 파일은 다른 확실히 .

엄격하지 않은 두 가지 이유 :

  • 파일이 다른 경우 해시 값은 아마 다른.
  • 해시 값은 다음 동일 할 경우 파일은 아마도 동일합니다.

0

예를 들어, 동일한 해시는 동일한 파일을 의미합니다.

다른 답변에서 알 수 있듯이 두 개의 다른 파일을 생성하여 동일한 해시를 생성 할 수 있으며 MD5는 특히 강력하지 않습니다.

따라서 많은 수의 Excel 문서를 비교하거나 다른 사람이 비교를 조작하고 싶을 경우 더 강력한 해싱 알고리즘을 사용하십시오. SHA1이 MD5보다 낫습니다. SHA256이 다시 더 좋으며 특정 사용에 대한 완전한 자신감을 가져야합니다.


-1

해시가 동일하면 파일이 동일 할 수 있습니다. 동일한 방식으로 두 파일을 수정 한 다음 (예 : 사용하지 않는 동일한 셀에 동일한 값을 넣은 후) 수정 된 파일의 해시를 비교하여 신뢰를 높일 수 있습니다. 미리 알려지지 않은 방식으로 변경되는 파일에 대해 의도적 인 충돌을 일으키는 것은 어렵습니다.


Office 파일에 저장된 추가 데이터로 인해 작동하지 않습니다. 예를 들어 저장하기 전에 같은 셀에 커서를 놓고 정확한 시간 등을 저장해야합니다. 그러나 XLSX 파일은 내부적으로 zip 파일이므로 알고리즘이 개별 파일을 다른 순서로 (어떤 목적 으로든) 저장하면, 파일은 동일하지만 해시는 동일하지 않습니다
Thomas Weller

-2

이것을 실용적인 방법으로 봅시다. "해시가 동일하다"고 말하는 대신 "두 파일의 해시를 계산하고 동일한 지 아닌지를 인쇄하는 컴퓨터 프로그램을 작성했습니다"라고 말하고 두 파일로 프로그램을 실행합니다. "같은". 몇 가지 이유가 있습니다.

파일이 동일 할 수 있습니다. 내 코드에는 버그가있을 수 있습니다 (실제로 발생한 것 중 하나는 memcmp가 아니라 strcmp와 함께 두 개의 긴 (256 바이트) 해시를 비교하는 것입니다. 각 해시의 첫 번째 바이트가 0이면 비교가 "동일"을 반환하고 하드웨어 결함 (메모리 셀에 충돌하여 전환)과 같은 해시 (해시 충돌)가있는 두 개의 다른 파일이 드물게있을 수 있습니다.

동일하지 않은 파일의 경우 가장 가능성이 높은 원인은 프로그래머 오류이며 해시를 "false"에서 "true"로 비교 한 결과로 부울 변수를 변경 한 우주 광선이 나오고 훨씬 나중에 나타납니다. 해시 충돌의 일치

각 파일을 해시하고 서버에 이미 동일한 해시가 저장된 파일을 확인하여 10,000 명의 사용자로부터 동일한 파일을 백업하지 않는 엔터프라이즈 백업 시스템이 있습니다. 따라서 충돌이 발생하면 파일이 백업되지 않아 데이터가 손실 될 수 있습니다. 누군가가 체크섬이 다른 파일과 일치했기 때문에 운석이 서버에 충돌하여 파일을 잃는 것보다 모든 백업을 파괴 할 가능성이 훨씬 높다고 계산했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.