Công cụ riêng tư miễn phí

Niêm phong một tệp

Mã hóa một tệp bằng một khóa dùng một lần mới tinh rồi gửi nó qua bất kỳ kênh nào bạn thích. Ai giữ khóa sẽ mở nó ngay tại đây, trên chính trang này. Không bao giờ có gì được tải lên, không có cụm mật khẩu nào để bẻ, và bạn thấy bên trong có gì trước khi bất cứ thứ gì được lưu.

Chạy hoàn toàn trong tab này. Trang này không thể nói chuyện với bất kỳ máy chủ nào cả.

Mọi tham số, nêu rõ

Thuật toán mã hóa
AES-256-GCM (WebCrypto), tag 128-bit cho mỗi khối
Khóa
256 bit từ CSPRNG của trình duyệt, sinh mới cho mỗi lần niêm phong, dùng đúng một lần, không dẫn xuất từ bất cứ thứ gì
Chia khối
một manifest đã mã hóa (tên tệp, dung lượng, loại), rồi đến tệp chia thành các khối 1 MiB — mỗi khối được xác thực riêng
Nonce
salt niêm phong ngẫu nhiên 32-bit ‖ bộ đếm khối 64-bit — không bao giờ lặp lại trong cùng một tệp, mà dù sao thì khóa cũng chỉ dùng một lần
Dữ liệu được xác thực
toàn bộ 16 byte phần đầu cộng với chỉ số của từng khối và tổng số khối — đảo thứ tự, cắt cụt hay ghép chèn các khối đều phá hỏng việc giải mã
Chuỗi khóa
base64url, 47 ký tự: khóa 32 byte cộng 3 byte checksum SHA-256, để một lỗi gõ nhầm thất bại dứt khoát thay vì tạo ra rác

Câu trả lời trung thực về việc trang này làm gì

Mọi thứ diễn ra trong trình duyệt của bạn.

Cả việc niêm phong lẫn việc mở đều đọc tệp vào bộ nhớ của trang này, chạy AES-256-GCM ngay tại đó bằng engine WebCrypto có sẵn của trình duyệt, rồi trả kết quả về dưới dạng một tệp tải xuống. Không gì được tải lên. Không có tài khoản và không có xử lý phía máy chủ. Khác với phần còn lại của trang web này, trang này thậm chí không nạp cả bộ đếm lượt truy cập không cookie. Không có công cụ phân tích nào hết.

Đây không chỉ là một lời hứa. Trang được phục vụ kèm một Content-Security-Policy chỉ cho phép trình duyệt tải các tệp tĩnh của chính trang web này. Nó không có cách nào gửi tệp của bạn, khóa của bạn, hay bất cứ thứ gì khác tới bất kỳ máy chủ nào, kể cả máy chủ của chúng tôi. Hãy mở công cụ dành cho nhà phát triển của trình duyệt trong lúc niêm phong, và bạn sẽ thấy không có yêu cầu nào cả. Để có bằng chứng thẳng thừng nhất, hãy cài Hộp công cụ và niêm phong ở chế độ máy bay. Khi đã tắt mạng, không gì có thể rời đi.

Chiếc khóa là tất cả — và chúng tôi không bao giờ có nó.

Mỗi lần niêm phong sinh ra một khóa 256-bit ngẫu nhiên mới tinh ngay trong trình duyệt của bạn. Nó được hiện ra đúng một lần và không được giữ lại ở đâu cả: không trong hệ thống của chúng tôi (chẳng hệ thống nào tham gia vào đây), không trong bộ nhớ lưu trữ của trình duyệt, không trong tệp đã niêm phong. Không có cụm mật khẩu nào để đoán và không có gì để thử vét cạn. Ai giữ cả khóa lẫn tệp thì mở được. Ai không có thì không mở được.

Điều đó có một hệ quả nghiệt ngã: mất khóa là mất tệp. Không có đặt lại, không có phiếu hỗ trợ, không có khôi phục. Không phải chúng tôi cố tình không giúp. Một bản sao mà chúng tôi khôi phục được cũng là một bản sao ai đó có thể đánh cắp hoặc đòi lấy.

Liên kết chứa khóa không bao giờ tới được máy chủ.

Liên kết chia sẻ đặt khóa sau dấu # trong URL. Phần đó, gọi là fragment, nằm lại trong trình duyệt. Nó không bao giờ nằm trong những gì trình duyệt gửi tới bất kỳ máy chủ nào, của chúng tôi hay của ai khác. Khi trang này được mở với một khóa trong liên kết, nó đọc khóa, chuyển sang thẻ Mở, rồi lập tức gỡ khóa khỏi thanh địa chỉ. Nhờ vậy khóa không nằm lại trong URL hiển thị hay trong lịch sử trình duyệt.

Dù vậy, bất kỳ ai có cả liên kết lẫn tệp đã niêm phong đều mở được nó. Đó là lý do trang này bảo bạn gửi tệp và khóa qua hai kênh khác nhau.

Bạn thấy bên trong có gì trước khi bất cứ thứ gì được lưu.

Việc mở diễn ra theo hai bước. Trước hết, trang chỉ giải mã một manifest nhỏ: tên tệp gốc, dung lượng và loại. Trang hiện nó ra cho bạn, kèm một cảnh báo thật lớn với những loại tệp có thể chạy mã (chương trình, tập lệnh, trình cài đặt, tài liệu chứa macro, HTML) và với những cái tên được ngụy trang bằng phần mở rộng kép như invoice.pdf.exe. Không gì được ghi ra cho tới khi bạn bấm giải mã. Bản thân trang không bao giờ mở hay hiển thị nội dung đã giải mã. Nó chỉ đưa tệp ra để tải về.

Hãy rõ ràng về điều mã hóa chứng minh được và không chứng minh được. Một tệp đã niêm phong thì được giữ kín trên đường đi. Việc niêm phong không nói lên điều gì về việc ai đã gửi nó hay nội dung của nó có an toàn hay không. Hãy đối xử với một tệp niêm phong đến bất ngờ với sự hoài nghi đúng như dành cho một tệp đính kèm đến bất ngờ.

Ranh giới tin cậy thực sự nằm ở đâu.

Bạn đang chạy mã do chính trang web này gửi tới bạn. Nếu sealby.app hoặc kết nối của bạn tới nó bị xâm phạm, một trang độc hại có thể đọc được những gì bạn đưa vào. Điều này đúng với mọi công cụ mã hóa chạy trên web, và chúng tôi thà nói ra còn hơn giả vờ ngược lại. Chúng tôi làm gì với điều đó: trang này là một tệp tĩnh, và chúng tôi giữ cho nó không có mã của bên thứ ba. Hộp công cụ đã cài cho phép bạn tiếp tục dùng một phiên bản bạn đã tải về từ trước. Và định dạng được ghi chép bên dưới, để các công cụ độc lập có thể được xây theo nó.

Chính thiết bị của bạn cũng nằm bên trong ranh giới đó. Các tiện ích mở rộng trình duyệt có quyền truy cập trang, hay phần mềm độc hại trên máy, đều đọc được mọi thứ mà một trang bất kỳ đọc được. Tệp đã niêm phong che giấu nội dung của nó, nhưng không phải mọi thứ. Ai cầm nó cũng thấy được kích thước của nó (xấp xỉ kích thước bản gốc) và thấy rằng đó là một tệp do Sealby niêm phong.

Các giới hạn, nói bằng lời dễ hiểu

  • Mất khóa = mất tệp. Không ngoại lệ, và đó là chủ ý thiết kế.
  • Chúng tôi không thấy được tệp hay khóa của bạn, nên chúng tôi cũng không thể quét chúng để tìm mã độc. Cảnh báo về loại tệp chỉ dựa trên tên tệp. Nó không phải một bảo đảm an toàn.
  • Bất kỳ ai có cả tệp đã niêm phong lẫn chiếc khóa đều mở được nó. Công cụ không biết và cũng không kiểm tra họ là ai.
  • Kích thước của tệp đã niêm phong để lộ xấp xỉ kích thước tệp gốc.
  • Mỗi lần niêm phong một tệp, tối đa 100 MB. Nhiều tệp thì hãy nén thành ZIP trước.

Định dạng, từng byte một

Mọi thứ một độc giả kỹ thuật cần để tự xác minh đầu ra của trang này một cách độc lập, hoặc mở một tệp .sealed bằng ba mươi dòng Python:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8version0x01 — mọi giá trị khác đều bị từ chối với lý do “được tạo bằng phiên bản mới hơn”
9algorithm0x01 = AES-256-GCM
10–13seal salt4 byte, CSPRNG, mới cho mỗi lần niêm phong
14–15reservedphải bằng không
16–hếtkhung mảnh dữ liệumỗi khối: độ dài bản mã uint32 BE, rồi đến bản mã AES-GCM + tag 16 byte

Khối 0 là manifest: JSON UTF-8 {"name":…,"size":…,"type":…}. Các khối 1…N−1 là tệp chia thành từng mẩu 1 MiB. Với khối i trong tổng số N: nonce = salt ‖ uint64 BE i; dữ liệu được xác thực = phần đầu ‖ uint64 BE i ‖ uint64 BE N. Nhờ vậy can thiệp, cắt cụt, đảo thứ tự, dời chỗ và ghép chèn giữa các tệp đều không qua được khâu xác thực. Mỗi trường hợp đều được chứng minh bằng một kiểm thử phủ định đã đưa vào kho mã.

Chuỗi khóa: base64url (không padding) của khóa 32 byte, theo sau là 3 byte đầu tiên của SHA-256 của nó, tổng cộng 47 ký tự. Một lỗi gõ nhầm sẽ không qua được checksum thay vì tạo ra rác.

Trình mở tham chiếu (Python, thư viện cryptography)
import base64, hashlib, json, struct, sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SEALBY-W" and raw[8] == 1 and raw[9] == 1
assert raw[14:16] == b"\x00\x00"
header, salt = raw[:16], raw[10:14]
frames, off = [], 16
while off < len(raw):
    (n,) = struct.unpack(">I", raw[off:off + 4]); off += 4
    frames.append(raw[off:off + n]); off += n
assert off == len(raw)

kb = base64.urlsafe_b64decode(sys.argv[2] + "=")   # 47-char key string
key, check = kb[:32], kb[32:35]
assert hashlib.sha256(key).digest()[:3] == check    # typo check

N = len(frames)
def chunk(i):
    nonce = salt + struct.pack(">Q", i)
    aad = header + struct.pack(">QQ", i, N)
    return AESGCM(key).decrypt(nonce, frames[i], aad)

manifest = json.loads(chunk(0))
data = b"".join(chunk(i) for i in range(1, N))
assert len(data) == manifest["size"]
open(manifest["name"], "wb").write(data)
print("decrypted ->", manifest["name"])

Công cụ này dành cho tệp đang trên đường đi. Két sắt dành cho tệp ở lại.

Niêm phong bảo vệ một tệp trên đường tới đâu đó. Sealby bảo vệ mọi thứ ở lại: ảnh, tệp và ghi chú trong các két sắt mã hóa trên iPhone của bạn. Không tài khoản, không máy chủ, không ai đọc được ngoài bạn.

Tải trên App Store

iPhone & iPad · iOS 17+ · Miễn phí