Những gì thực sự nằm bên trong một bức ảnh

Mở bất kỳ bức ảnh nào thẳng từ điện thoại và hình ảnh chỉ là một phần của tệp. Bao bọc quanh nó là một khối siêu dữ liệu mà máy ảnh đã ghi vào cùng lúc đó: hãng và kiểu thiết bị, ống kính, cài đặt phơi sáng, giây chính xác màn trập hoạt động, phiên bản hệ điều hành, và — khi dịch vụ vị trí được bật — vĩ độ và kinh độ nơi bạn đang đứng, thường chính xác đến vài mét.

Không có thông tin nào hiển thị trong hình ảnh. Tất cả đi cùng với tệp. Gửi ảnh dưới dạng tệp đính kèm email, thả nó vào một thư mục dùng chung, liệt kê một mặt hàng để bán cùng với nó, và mọi trường đó đều đi theo nó.

Công cụ ở trên đọc khối đó ra và hiển thị cho bạn trước khi nó xóa bất cứ thứ gì, vì các con số chính là lập luận. “Bức ảnh này chứa siêu dữ liệu EXIF” là một khái niệm trừu tượng. Một cặp tọa độ trỏ đến cửa trước nhà bạn thì không.

Xóa byte, không mã hóa lại

Có hai cách để xóa siêu dữ liệu khỏi hình ảnh và chỉ có một trong số đó là đúng.

Cách dễ dàng là vẽ hình ảnh lên một canvas HTML và lưu nó lại. Siêu dữ liệu biến mất vì canvas chưa bao giờ chứa bất kỳ thứ gì. Nó cũng nén lại bức ảnh — một vòng nén JPEG suy hao thứ hai nằm trên đầu máy ảnh — và loại bỏ cấu hình màu nhúng, do đó tệp “đã làm sạch” có chất lượng kém hơn hẳn bản gốc và màu sắc của nó đã bị thay đổi. Hầu hết các trình xóa siêu dữ liệu miễn phí đều hoạt động theo cách này và đó là lý do tại sao tệp bạn nhận lại thường có kích thước khác và là một bức ảnh hơi khác.

Công cụ này làm điều ngược lại. Một tệp JPEG là một chuỗi các đoạn đánh dấu (marker segment); PNG là một chuỗi các đoạn (chunk); WebP là vùng chứa RIFF. Siêu dữ liệu nằm trong các đoạn cụ thể, có thể xác định trong từng loại — các khối APPn trong JPEG, các khối eXIf, tEXt, iTXt, zTXttIME trong PNG, các khối EXIFXMP trong WebP. Việc xóa chúng chỉ là vấn đề đi theo cấu trúc riêng của tệp, bỏ qua các khối đó và sao chép phần còn lại qua mà không thay đổi.

Hình ảnh nén không bao giờ bị giải mã. Điều đó có nghĩa là dữ liệu hình ảnh trong tệp bạn tải xuống giống từng bit một so với dữ liệu hình ảnh trong tệp bạn đã cung cấp — không phải “tương tự về mặt hình ảnh”, không phải “chất lượng cao”, mà là hoàn toàn giống nhau. Sự khác biệt duy nhất giữa hai tệp là siêu dữ liệu đã được lấy ra.

Những gì chúng tôi không xóa và lý do tại sao

Hai điều được giữ lại một cách có chủ ý, và cả hai đều được hiển thị cho bạn bằng hộp kiểm phòng trường hợp bạn không đồng ý.

Cấu hình màu. Cấu hình ICC mô tả không gian màu mà các pixel được mã hóa. Các điện thoại hiện đại chụp với gam màu rộng và ảnh gam màu rộng nếu không có cấu hình màu của nó sẽ được diễn giải thành sRGB thông thường và hiển thị sai — thường là bị nhạt nhòa, đôi khi quá lòe loẹt. Cấu hình màu mô tả hình ảnh, không phải nhiếp ảnh gia, do đó nó được giữ lại theo mặc định.

Cờ xoay, khi ảnh cần đến nó. Điện thoại không xoay các pixel khi bạn quay máy ảnh; chúng lưu ảnh theo cách cảm biến nhìn thấy nó và ghi lại một số EXIF duy nhất cho biết ảnh phải được đặt ở hướng nào. Xóa con số đó đi và bản sao sạch sẽ hiển thị bị ngang trong bất kỳ ứng dụng nào tôn trọng nó. Khi một bức ảnh dựa vào nó, công cụ này sẽ xây dựng lại một khối tối thiểu chứa một giá trị đó và không có gì khác — không máy ảnh, không dấu thời gian, không vị trí.

Vị trí của những bức ảnh khác của bạn

Việc làm sạch tệp trước khi bạn gửi sẽ giải quyết được một nửa vấn đề chia sẻ. Nó không có tác dụng gì đối với các bức ảnh vẫn nằm trong thư viện ảnh của bạn, những bức ảnh này lưu giữ mọi trường mà công cụ này vừa xóa và có thể đọc được bởi bất cứ thứ gì có quyền truy cập vào thiết bị.

Đó là nửa mà Vaultine ra đời: một két mã hóa nơi các tệp được khóa bằng AES-256-GCM trên chính thiết bị, mở trong trình xem tích hợp thay vì giải mã ra ổ đĩa và được mở khóa bằng mẫu vẽ hoặc mã PIN thay vì tài khoản. Nó có một nhiệm vụ khác so với trang này — Vaultine lưu trữ các tệp, nó không chỉnh sửa siêu dữ liệu của chúng — nhưng là hai nửa của cùng một bản năng. Những bức ảnh bạn chia sẻ rò rỉ nơi bạn đã ở. Những bức ảnh bạn giữ nên được khóa.