동일한 폴더에서 여러 개의 DMG 파일을 만들었습니다. 체크섬은 각각 다릅니다?


3

꽤 오래 전에 같은 디렉토리에서 같은 파일 등으로 DMG 파일을 생성하더라도 결과가 항상 다르다는 것을 알았습니다. 크기는 서로 ~ 15 바이트 더 짧을뿐만 아니라 SHA 체크섬 (및 HEX 편집기에서 볼 때 내용)이 크게 다릅니다. 호기심을 피하기 위해 단일 텍스트 파일 만 포함하는 동일한 폴더에서 5 개의 압축 된 암호화되지 않은 DMG 파일을 만들었습니다. 결과는 다음과 같습니다.

  • 0.dmg | 크기-26204 바이트, 체크섬-5ba9ba0ee4d8ec5ba4718f1b491baf31c2c4e642
  • 1.dmg | 크기-26221 바이트, 체크섬-a86d76f6c07ee5a81c0aefb31b6fd40ef787ebd5
  • 2.dmg | 크기-26235 바이트, 체크섬-a31f4cf29e4e2858b7ac63c82574499200d81108
  • 3.dmg | 크기-26209 바이트, 체크섬-f3c19414279b6d6b94b90341453906e4a69e28dd
  • 4.dmg | 크기-26217 바이트, 체크섬-9603c0334125762fc7908343e3ee400e038fe779

나는 "APFS의 데이터 랜덤 라이저"에 대한 정보를 찾기 위해 인터넷을 탐색했지만, 분명히 하나의 것을 찾을 수 없었으며, 많은 사람들이 실제로이 "기능"에 대해 알지 못했습니다. 그것에 대한 정보가 있습니까?

macOS 10.12.6을 실행 중이며 DMG 파일은 디스크 유틸리티를 사용하여 생성되었지만 hdiutil과 동일한 결과를 얻습니다.


2
적절한 답변을 제공하기 위해 더 많은 정보가 필요합니다. 그러나 메타 데이터 (액세스 타임 스탬프 등) 만 있어도 소스가 실제로 변경되고 DMG에 이러한 변경 사항이 반영된 것 같습니다. 컨테이너에서 다른 파일 시스템으로 테스트 해 보셨습니까?
jsejcksn

1
바이트가 변경되면 데이터가 변경되어 체크섬이 변경됩니다. jsejcksn이 옳고 메타 데이터가 변경되고 있다고 생각합니다 (15 바이트는 매우 작음). 먼저 데이터를 압축 한 다음 dmg를 작성하고 dmg를 작성하기 전에 데이터와 체크섬이 동일하게 유지되는지 또는 디렉토리를 보호하십시오.
Unassuming Guy

파일 시스템을 RW로 설정하고 2 개의 DMG 파일을 만들었으며 그 중 하나가 두 번째보다 40 바이트 더 큽니다. 아마도 당신이 옳고 그 텍스트 파일의 메타 데이터가 변경 될 것입니다 ( "마지막으로 열었습니다", 아마도?) 파일 정보를 출력하는 간단한 스크립트를 작성하려고 시도하면 유용한 결과가 나올 것입니다.
L0W_P1X3L 18:49에

Christian이 제안한대로 파일을 잠그겠습니다.
L0W_P1X3L

1
@ L0W_P1X3L : 디스크 이미지의 자세한 구조를 검사하여 변경된 내용을 찾아야합니다. 압축되지 않은 경우 훨씬 쉬울 것입니다. 그러나 일반적으로 동일한 파일이 정확히 동일한 디스크 이미지를 생성 할 것으로 기 대해서는 안됩니다. 디스크 이미지 형식에는 실제로 제어하기 어려운 많은 외부 정보가 포함될 수 있습니다. 왜 동일한 디스크 이미지를 여러 번 얻고 싶은지 잘 모르겠지만 실제 목표가 무엇이든 다른 방법으로 찾아야합니다.
Gordon Davisson

답변:


2

기존의 사본은 dmg동일하지만 별도로 작성된 dmg파일은 동일 하지 않습니다.

효과적으로 다른 보장

애플 디스크 이미지 .dmg 형식은 효과적으로 두 개의 디스크 이미지가 동일 비트에 대한 비트 수 없다는 것을 보장합니다. 동일한 내용을 포함하는 디스크 이미지 간 평등은 형식의 실제 요구 사항이 아닙니다.

0x6B6F6C79/ koly블록 내의 UUID

dmg파일 형식 안에는 koly구조가 있습니다. 이 구조에는 유형 의 SegmentID 가 포함됩니다 uuid_t. 128 비트 UUID (Universally Unique Identifier )입니다. SegmentID 식별자만으로도 모든 dmg파일이 1 비트 이상 차이가 날 수 있습니다.

iTunes 11.0 디스크 이미지에서 HFSleuth 를 사용 하면 내장 된 UUID가 표시됩니다.

HFSleuth> ver
Verbose output is on
HFSleuth> fs iTunes11.dmg
KOLY header found at 200363895:
    UDIF version 4, Header Size: 512
    Flags:1
    Rsrc fork: None
    Data fork: from 0, spanning 200307220 bytes
    XML plist: from 200307220, spanning 56675 bytes (to 200363895)
    Segment #: 1, Count: 1
    Segment UUID: 626f726e-7743259b-6086eb93-4b42fb65
    Running Data fork offset 0
    Sectors: 1022244

위의 예에서 라인 Segment UUID: 626f726e-7743259b-6086eb93-4b42fb65은 디스크 이미지에 포함 된 범용 고유 식별자입니다.

1 비트 차이 및 해시 함수

1 비트의 차이로 인해 SHA-2와 같은 암호화 해시 함수 출력이 50 % 이상 변경됩니다.

구조 내에서 UUID를 사용하면 모든 디스크 이미지가 고유 한 것이 아니라 디스크 이미지 내에서 세그먼트를 쉽게 식별 할 수 있습니다. UUID는 디스크 이미지의 범위를 넘어서 고유성 속성을 제공한다는 것이 UUID 사용의 부산물입니다.

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