เครื่องมือความเป็นส่วนตัวฟรี

ผนึกไฟล์

เข้ารหัสไฟล์ด้วยกุญแจใช้ครั้งเดียวที่สร้างขึ้นใหม่ แล้วส่งผ่านช่องทางไหนก็ได้ตามใจ ใครก็ตามที่ถือกุญแจจะเปิดมันได้ตรงนี้ บนหน้านี้เอง ไม่มีอะไรถูกอัปโหลดเลย ไม่มีวลีรหัสผ่านให้แคร็ก และคุณจะเห็นว่าข้างในมีอะไรก่อนที่อะไรจะถูกบันทึก

ทำงานทั้งหมดในแท็บนี้ หน้านี้ไม่สามารถคุยกับเซิร์ฟเวอร์ใดได้เลย

ทุกพารามิเตอร์ ระบุไว้ชัด

ไซเฟอร์
AES-256-GCM (WebCrypto), แท็ก 128 บิตต่อหนึ่งชิ้น
กุญแจ
256 บิตจาก CSPRNG ของเบราว์เซอร์ สร้างใหม่ทุกครั้งที่ผนึก ใช้ครั้งเดียว ไม่ได้สร้างมาจากอะไรทั้งสิ้น
การแบ่งชิ้น
แมนิเฟสต์ที่เข้ารหัส (ชื่อไฟล์ ขนาด ชนิด) แล้วตามด้วยไฟล์ที่แบ่งเป็นชิ้นละ 1 MiB — แต่ละชิ้นถูกยืนยันความถูกต้องแยกกัน
นอนซ์
ซอลต์ผนึกสุ่ม 32 บิต ‖ ตัวนับชิ้น 64 บิต — ไม่ซ้ำกันเลยภายในไฟล์เดียว และกุญแจก็ใช้ครั้งเดียวอยู่แล้ว
ข้อมูลที่ยืนยันความถูกต้อง
ส่วนหัว 16 ไบต์ทั้งหมด บวกลำดับของแต่ละชิ้นและจำนวนชิ้นทั้งหมด — การสลับลำดับ ตัดท้าย หรือต่อสลับชิ้น ทำให้การถอดรหัสพัง
สตริงกุญแจ
base64url 47 อักขระ: กุญแจ 32 ไบต์บวกเช็กซัม SHA-256 ขนาด 3 ไบต์ ตัวพิมพ์ผิดจึงล้มเหลวอย่างสะอาด แทนที่จะให้ข้อมูลขยะออกมา

คำตอบตรงไปตรงมาว่าสิ่งนี้ทำอะไร

ทุกอย่างเกิดขึ้นในเบราว์เซอร์ของคุณ

ทั้งการผนึกและการเปิดต่างอ่านไฟล์เข้าสู่หน่วยความจำของหน้านี้ รัน AES-256-GCM ตรงนั้นด้วยเอนจิน WebCrypto ที่มีมาให้ในเบราว์เซอร์ของคุณ แล้วส่งผลลัพธ์กลับมาเป็นไฟล์ดาวน์โหลด ไม่มีอะไรถูกอัปโหลด ไม่มีบัญชีและไม่มีการประมวลผลฝั่งเซิร์ฟเวอร์ ต่างจากส่วนอื่นของไซต์นี้ หน้านี้ไม่โหลดแม้แต่ตัวนับผู้เข้าชมไร้คุกกี้ ไม่มีระบบวิเคราะห์ชนิดใดเลย

นี่ไม่ใช่แค่คำสัญญา หน้านี้ถูกเสิร์ฟพร้อม Content-Security-Policy ที่อนุญาตให้เบราว์เซอร์ดึงได้เฉพาะไฟล์สแตติกของไซต์นี้เองเท่านั้น มันจึงไม่มีทางส่งไฟล์ กุญแจ หรืออะไรก็ตามของคุณไปยังเซิร์ฟเวอร์ใด รวมถึงของเราด้วย เปิดเครื่องมือนักพัฒนาของเบราว์เซอร์ดูขณะผนึก แล้วคุณจะเห็นคำขอเกิดขึ้นศูนย์รายการ อยากได้ข้อพิสูจน์ที่ตรงที่สุด ติดตั้งกล่องเครื่องมือแล้วผนึกในโหมดเครื่องบิน เมื่อปิดเครือข่ายแล้ว ไม่มีอะไรออกไปได้

กุญแจคือทุกสิ่ง — และเราไม่เคยมีมัน

การผนึกแต่ละครั้งสร้างกุญแจสุ่มใหม่ขนาด 256 บิตในเบราว์เซอร์ของคุณ มันถูกแสดงให้คุณเห็นครั้งเดียวและไม่ถูกเก็บไว้ที่ใดเลย: ไม่อยู่ในระบบของเรา (ไม่มีระบบใดเกี่ยวข้องอยู่แล้ว) ไม่อยู่ในที่จัดเก็บของเบราว์เซอร์ ไม่อยู่ในไฟล์ที่ผนึก ไม่มีวลีรหัสผ่านให้เดา และไม่มีอะไรให้ไล่เดาทุกความเป็นไปได้ ใครถือกุญแจกับไฟล์ก็เปิดได้ ใครไม่ถือก็เปิดไม่ได้

นั่นมีผลตามมาที่หนักแน่น: ถ้ากุญแจหาย ไฟล์ก็หายไป ไม่มีการรีเซ็ต ไม่มีตั๋วซัพพอร์ต ไม่มีการกู้คืน เราไม่ได้กำลังใจร้าย สำเนาที่เรากู้คืนได้ ย่อมเป็นสำเนาที่ใครสักคนขโมยหรือบังคับเรียกเอาไปได้เช่นกัน

ลิงก์กุญแจไม่เคยไปถึงเซิร์ฟเวอร์

ลิงก์แชร์วางกุญแจไว้หลัง # ใน URL ส่วนนั้นที่เรียกว่าแฟรกเมนต์จะถูกเบราว์เซอร์เก็บไว้กับตัว มันไม่เคยรวมอยู่ในสิ่งที่เบราว์เซอร์ส่งไปยังเซิร์ฟเวอร์ใด ไม่ว่าของเราหรือของใคร เมื่อหน้านี้โหลดขึ้นพร้อมกุญแจในลิงก์ มันจะอ่านกุญแจ สลับไปแท็บ “เปิด” แล้วลบกุญแจออกจากแถบที่อยู่ทันที เพื่อไม่ให้มันค้างอยู่ใน URL ที่มองเห็นได้หรือในประวัติเบราว์เซอร์

ถึงอย่างนั้น ใครก็ตามที่มีทั้งลิงก์และไฟล์ที่ผนึกก็เปิดมันได้ นั่นคือเหตุผลที่หน้านี้บอกให้คุณส่งไฟล์กับกุญแจผ่านคนละช่องทาง

คุณเห็นว่าข้างในมีอะไร ก่อนที่อะไรจะถูกบันทึก

การเปิดเกิดขึ้นในสองขั้นตอน ขั้นแรกหน้านี้ถอดรหัสเพียงแมนิเฟสต์ก้อนเล็ก ๆ: ชื่อไฟล์ต้นฉบับ ขนาด และชนิด แล้วแสดงให้คุณดู พร้อมคำเตือนดัง ๆ สำหรับไฟล์ชนิดที่รันโค้ดได้ (โปรแกรม สคริปต์ ตัวติดตั้ง เอกสารที่มีมาโคร HTML) และสำหรับชื่อที่พรางด้วยนามสกุลซ้อนอย่าง invoice.pdf.exe ไม่มีอะไรถูกเขียนลงเครื่องจนกว่าคุณจะคลิกถอดรหัส หน้านี้ไม่เคยเปิดหรือแสดงเนื้อหาที่ถอดรหัสแล้วด้วยตัวเอง มันเพียงเสนอไฟล์นั้นให้ดาวน์โหลด

ขอให้ชัดเจนว่าการเข้ารหัสพิสูจน์อะไรและไม่พิสูจน์อะไร ไฟล์ที่ผนึกเป็นความลับระหว่างเดินทาง การผนึกไม่ได้บอกอะไรเลยว่าใครส่งมา หรือเนื้อหาข้างในปลอดภัยหรือไม่ จงระแวงไฟล์ที่ผนึกซึ่งมาแบบไม่คาดคิด ให้เท่ากับที่คุณระแวงไฟล์แนบที่มาแบบไม่คาดคิด

เส้นแบ่งความไว้วางใจอยู่ตรงไหนกันแน่

คุณกำลังรันโค้ดที่เว็บไซต์นี้ส่งมาให้ ถ้า sealby.app หรือการเชื่อมต่อของคุณไปยังมันถูกเจาะ หน้าที่ประสงค์ร้ายก็อ่านสิ่งที่คุณใส่เข้าไปได้ ข้อนี้จริงกับเครื่องมือเข้ารหัสบนเว็บทุกตัว และเรายอมพูดมันออกมามากกว่าจะแกล้งทำเป็นไม่มี สิ่งที่เราทำเกี่ยวกับเรื่องนี้: หน้านี้เป็นไฟล์สแตติก และเราเก็บมันให้ปลอดโค้ดของบุคคลที่สาม กล่องเครื่องมือที่ติดตั้งไว้ทำให้คุณใช้เวอร์ชันที่โหลดไว้แล้วต่อไปได้ และฟอร์แมตถูกบันทึกไว้ด้านล่าง เครื่องมืออิสระจึงถูกสร้างขึ้นมารองรับมันได้

อุปกรณ์ของคุณเองก็อยู่ในเส้นแบ่งนี้ด้วย ส่วนขยายเบราว์เซอร์ที่มีสิทธิ์เข้าถึงหน้าเว็บ หรือมัลแวร์บนเครื่อง อ่านได้ทุกอย่างที่หน้าเว็บใดก็อ่านได้ ตัวไฟล์ที่ผนึกซ่อนเนื้อหาของมัน แต่ไม่ได้ซ่อนทุกอย่าง ใครถือมันไว้ก็เห็นขนาดของมัน (ราว ๆ ขนาดของต้นฉบับ) และเห็นว่ามันเป็นไฟล์ที่ผนึกโดย Sealby

ขีดจำกัด อธิบายด้วยภาษาง่าย ๆ

  • กุญแจหาย = ไฟล์หาย ไม่มีข้อยกเว้น โดยการออกแบบ
  • เรามองไม่เห็นไฟล์หรือกุญแจของคุณ เราจึงสแกนหามัลแวร์ในนั้นไม่ได้เช่นกัน คำเตือนเรื่องชนิดไฟล์อ้างอิงจากชื่อไฟล์เท่านั้น ไม่ใช่การรับประกันความปลอดภัย
  • ใครก็ตามที่มีทั้งไฟล์ที่ผนึกและกุญแจ เปิดมันได้ เครื่องมือนี้ไม่รู้และไม่ตรวจว่าเขาเป็นใคร
  • ขนาดของไฟล์ที่ผนึกเปิดเผยขนาดของไฟล์ต้นฉบับโดยประมาณ
  • หนึ่งไฟล์ ไม่เกิน 100 MB ต่อการผนึกหนึ่งครั้ง ถ้ามีหลายไฟล์ให้บีบอัดเป็น zip ก่อน

ฟอร์แมต ทีละไบต์

ทุกสิ่งที่ผู้อ่านสายเทคนิคต้องใช้ในการตรวจสอบผลลัพธ์ของหน้านี้อย่างอิสระ หรือเปิดไฟล์ .sealed ด้วย Python สามสิบบรรทัด:

bytesfieldcontents
0–7magicASCII "SEALBY-W"
8version0x01 — ค่าอื่นถูกปฏิเสธว่า “สร้างด้วยเวอร์ชันใหม่กว่า”
9algorithm0x01 = AES-256-GCM
10–13ซอลต์สำหรับซีล4 ไบต์, CSPRNG, ใหม่ทุกครั้งที่ผนึก
14–15reservedต้องเป็นศูนย์
16–จบเฟรมของชังก์แต่ละเฟรม: ความยาวไซเฟอร์เท็กซ์ uint32 BE แล้วตามด้วยไซเฟอร์เท็กซ์ AES-GCM + แท็ก 16 ไบต์

ชิ้นที่ 0 คือแมนิเฟสต์: JSON แบบ UTF-8 {"name":…,"size":…,"type":…} ชิ้นที่ 1…N−1 คือไฟล์ที่แบ่งเป็นท่อนละ 1 MiB สำหรับชิ้นที่ i จากทั้งหมด N ชิ้น: nonce = salt ‖ uint64 BE i; ข้อมูลที่ยืนยันความถูกต้อง = header ‖ uint64 BE i ‖ uint64 BE N ดังนั้นการดัดแปลง การตัดท้าย การสลับลำดับ การย้ายตำแหน่ง และการต่อชิ้นข้ามไฟล์ ล้วนไม่ผ่านการยืนยันความถูกต้อง แต่ละกรณีมีการทดสอบเชิงลบที่คอมมิตไว้เป็นข้อพิสูจน์

สตริงกุญแจ: base64url (ไม่มี padding) ของกุญแจ 32 ไบต์ ตามด้วย 3 ไบต์แรกของ SHA-256 ของมัน รวม 47 อักขระ ตัวพิมพ์ผิดจะไม่ผ่านเช็กซัม แทนที่จะให้ข้อมูลขยะออกมา

ตัวเปิดอ้างอิง (Python, ไลบรารี 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"])

นี่มีไว้สำหรับไฟล์ที่กำลังเดินทาง ส่วนตู้นิรภัยมีไว้สำหรับไฟล์ที่อยู่กับที่

การผนึกปกป้องไฟล์ระหว่างทางไปที่ไหนสักแห่ง ส่วน Sealby ปกป้องทุกอย่างที่อยู่ประจำที่: รูป ไฟล์ และโน้ตในตู้นิรภัยเข้ารหัสบน iPhone ของคุณ ไม่มีบัญชี ไม่มีเซิร์ฟเวอร์ ไม่มีใครอ่านได้นอกจากคุณ

ดาวน์โหลดบน App Store

iPhone และ iPad · iOS 17+ · ฟรี