简体中文

图像和照片·图像元数据隐私工具

EXIF、TIFF 和 IFD:每张照片中仍保留着 1990 年代的结构

· 背景

exif 文件格式 图像隐私

JPEG APP1 段打开到 TIFF 标头和链接的图像文件目录
原始 ToolAcre 矢量图

EXIF 在 1995 中发布,并借用了 TIFF 的数据模型,这就是为什么 JPEG 内的元数据块实际上是一个带有目录、标签和偏移量的小型 TIFF 文件。了解其结构就可以解释剥离器可以干净地去除什么以及为什么。

隐藏在 JPEG 中的 TIFF 文件 — 为什么 EXIF 看起来与 JPEG 格式的其余部分完全不同的谜团

JPEG 可以包含 TIFF 形状的数据结构,但不是 TIFF 图像。其 APP1 Exif 有效负载以标识符开始,然后是 TIFF 标头,其偏移量和目录组织相机、时间和 GPS 值。共享解析器还使用 PNG eXIf 和 WebP EXIF 块中找到的 TIFF 块,这就是为什么一个读取器为三个容器提供服务的原因。

存储库未建立 EXIF 的原始日期

工作簿提供了起源故事和年份,但此处使用的存储库来源未建立标准历史、组织或发布日期。本节没有重复未引用的年表,而是在代码中锚定了有用的事实:EXIF 有效负载使用 TIFF 字节顺序、魔术和目录机制,浏览器解析器可以检查这些机制而无需解码图片数据。

TIFF 的目录模型 — 标头、字节顺序标记、IFD0 和 12 字节条目,包含标记、类型、计数和值或偏移量

TIFF 标头说明多字节值是小端还是大端,带有一个神奇值并指向 IFD0。每个目录都以计数开始,并存储包含标签、类型、值计数以及内联数据或偏移量的固定大小条目。这种安排让较小的值位于条目中,而较长的字符串和有理数则位于块的其他位置。

该解析器实际遵循的目录

此实现遵循 IFD0,然后是 Exif 和 GPS 指针。它故意跳过互操作性指针作为面向用户的值,并且不会递归地追踪 IFD1 缩略图。认为完整的 EXIF 目录模型是错误的;它是产品的可读位置、身份、时间戳、软件和技术领域所需的有界子集。

标签编号和数据类型 - 为什么 Make 是 0x010F,为什么有理数是整数对,以及为什么字符串以空字节结尾

标签是在其目录上下文中解释的数字标识符,而字段类型决定字节宽度和解码。 ASCII、整数和有理数值受到不同的处理。未知标签由十六进制数字标记而不是猜测,并且 GPS 目录内的任何未知标签仍被分类为位置,因为其目录提供了该上下文。

当今重要的实现边界

操作边界在这里比版本时间线更重要。目录的上限为 512 条目,跳过 64 元素的值和超出范围的偏移量。 MakerNote 内部结构和 IFD1 未解码。这些限制可防止格式错误或恶意块将元数据查看器转变为无界解析器,同时仍允许删除其整个容器块。

这不包括 JPEG 压缩本身和 MakerNote 的私有格式

JPEG 阅读器仅解析用于显示的 APP1 Exif,而不解析 XMP 或 IPTC 内容,并且尽管共享相关结构,但不支持的 TIFF、DNG 和 RAW 图像将被拒绝。清洁过程中会刻意保留颜色配置文件。因此,该工具演示了包含 TIFF 目录的使用,而无需声称是通用 TIFF 或取证元数据引擎。

要点:EXIF 在设计上是独立的 — 图像元数据隐私工具可以向您显示目录并删除整个块,而无需触及图像

EXIF 足够独立,可以进行整个块检查和删除:找到容器块,解析您支持的有界目录,或者删除该块而不解析每个私有字节。打开照片,比较表中的 IFD0、Exif 和 GPS 字段,并在整个工作流程中保持可读覆盖范围和移除覆盖范围之间的区别可见。