{
  "provenance": {
    "surface": "fbcom_login",
    "sourceSha256": "109951956c30436d50334ee90d3c93151e885b0250e5d31b5f3ff196a5d191e8",
    "gate549": true,
    "limitations": [
      "Origin and browser state differ from facebook.com",
      "Gate 549 fixed to the v2 path observed in the captured run",
      "No Facebook network access or server-side scoring reproduced"
    ],
    "adaptation": "Local module loader; exposes W/U material and hashes from a single collection; original drawing and normalization algorithms retained",
    "capturedAt": "2026-10-18",
    "module": "CIPCanvasID"
  },
  "researchEvidence": {
    "capturedAt": "2026-10-18",
    "method": "Owned Chrome profile, home to registration, synthetic interaction, no submit. Non-blocking BodyInit observation; deflate decompression; CDP request/response correlation.",
    "summary": {
      "bodyRecords": 17,
      "decodedCompressedWads": 11,
      "matchedRequests": 17,
      "http200": 17,
      "staticModulesAudited": 8013,
      "bdDecryptedPackets": 2,
      "bdDecryptedSignalIds": 21
    },
    "limitations": [
      "Instrumentation may affect timing or detection.",
      "Same-URL request association is temporal (1–2ms), not a captured native request-body byte digest.",
      "HTTP 200 does not prove field retention, interpretation or risk scoring.",
      "Findings are one desktop session, not all Facebook experiments/platforms/accounts.",
      "Decrypted BD packets in this window contain static signals and heartbeat; key timing/presence transmission is not established."
    ],
    "findings": [
      {
        "id": "device_payload",
        "title": "CPU/RAM, GPU, WebGPU/WebNN và HDR",
        "level": "transport_observed",
        "fields": [
          "cpu_cores",
          "ram",
          "gpu_renderer",
          "gpu_vendor",
          "webgpu_available",
          "webgpu_shader_f16",
          "webnn_gpu",
          "webnn_npu",
          "display_hdr"
        ],
        "conclusion": "Các trường này hiện diện trong web_perf_device_info_log ở trang chủ và trang đăng ký. Đây là bằng chứng payload, không chỉ suy ra từ tên API."
      },
      {
        "id": "bd_presence",
        "title": "Chuột và cảm ứng: sự hiện diện",
        "level": "source_observed",
        "fields": [
          "30106",
          "30107",
          "t",
          "ctx",
          "v",
          "mousedown",
          "mousemove",
          "touchstart",
          "touchcancel"
        ],
        "conclusion": "Bộ thu BD gửi false ban đầu, true khi có sự kiện, rồi tạm ngừng một giờ. Bộ thu này không ghi quỹ đạo/tọa độ."
      },
      {
        "id": "bd_key_timing",
        "title": "Nhịp bàn phím: mã phím cố định 0",
        "level": "source_observed",
        "fields": [
          "30100",
          "action",
          "key_code",
          "t",
          "ctx"
        ],
        "conclusion": "Mã nguồn có nhánh gkx 21049: keydown → action 2, keyup → action 1, key_code luôn bằng 0; kèm thời điểm và ngữ cảnh. Chưa xác nhận nhánh này bật trong phiên khảo sát."
      },
      {
        "id": "bd_transport",
        "title": "Gói BD đã gửi tới Facebook",
        "level": "transport_observed",
        "fields": [
          "asid",
          "ct",
          "sjd",
          "sid",
          "hb_timestamp",
          "signal_flush_timestamp",
          "sc",
          "i",
          "fda",
          "fds",
          "hbi",
          "sbs",
          "dbs",
          "bbs",
          "hbv"
        ],
        "conclusion": "Đã giải mã thành công hai gói BD: heartbeat và 20 signal tĩnh (21 mã khác nhau tổng cộng), khớp request /ajax/bz và HTTP 200. Ánh xạ mã bằng module nguồn; không giữ khóa, định danh hay nội dung fingerprint cũ trong sổ công khai."
      },
      {
        "id": "bd_heartbeat",
        "title": "Nhịp heartbeat",
        "level": "transport_observed",
        "fields": [
          "38001",
          "f",
          "id"
        ],
        "conclusion": "Signal 38001 đã thấy sau giải mã, gồm f và id. f là true cố định trong nguồn; đây là nhịp báo hoạt động, không phải phép đo con người."
      },
      {
        "id": "plugin_extensions",
        "title": "Đuôi tên file plugin",
        "level": "source_observed",
        "fields": [
          "30019",
          "navigator.plugins[i].filename"
        ],
        "conclusion": "Lấy phần sau dấu chấm đầu tiên, loại trùng và giới hạn 10; không phải danh sách browser extension."
      },
      {
        "id": "storage_estimate",
        "title": "Hạn mức và dung lượng storage",
        "level": "transport_observed",
        "fields": [
          "storageQuota",
          "storageUsage",
          "quota",
          "usage"
        ],
        "conclusion": "storageQuota và storageUsage xuất hiện trong payload perf đã giải nén. Đây là ước lượng theo origin, không phải tổng dung lượng ổ đĩa."
      },
      {
        "id": "navigation_context",
        "title": "Ngữ cảnh điều hướng và cấu trúc trang",
        "level": "transport_observed",
        "fields": [
          "referrer",
          "documentDOMElementCount",
          "workerStart",
          "navFetchStart",
          "workerProcessingTime",
          "httpProtocol",
          "navigationType",
          "cause",
          "custom_data_json",
          "dest_path",
          "source_path",
          "sid_raw"
        ],
        "conclusion": "Payload perf có số phần tử DOM, giao thức, loại điều hướng và các mốc tải trang. Nguồn còn có worker timing và referrer; không đồng nhất tất cả các trường nguồn với những trường đã gửi."
      },
      {
        "id": "performance_observers",
        "title": "Render và độ trễ tương tác",
        "level": "source_observed",
        "fields": [
          "layout-shift",
          "largest-contentful-paint",
          "event",
          "longtask",
          "long-animation-frame",
          "processingStart",
          "processingEnd",
          "duration",
          "blockingDuration",
          "sourceURL",
          "sourceFunctionName",
          "forcedStyleAndLayoutDuration"
        ],
        "conclusion": "Nguồn có CLS, LCP, input event timing, long tasks và long animation frames. LCP đã thấy trong payload perf. Trang đo xuất entry thô có giới hạn, không tự khẳng định là điểm INP/CLS chuẩn."
      },
      {
        "id": "cpu_pressure",
        "title": "CPU pressure",
        "level": "source_observed",
        "fields": [
          "PressureObserver",
          "cpu",
          "state",
          "cpu_pressure"
        ],
        "conclusion": "Nguồn có PressureObserver lấy mẫu CPU mỗi giây, dùng qua cấu hình enableCPUPressureTracking. Chưa chứng minh bật trong phiên; nominal khởi tạo không phải giá trị đo."
      },
      {
        "id": "runtime_native_features",
        "title": "Bộ nhớ và khả năng runtime",
        "level": "source_observed",
        "fields": [
          "jsHeapSizeLimit",
          "totalJSHeapSize",
          "usedJSHeapSize",
          "deviceMemory",
          "measureUserAgentSpecificMemory",
          "gc"
        ],
        "conclusion": "Nguồn kiểm tra heap memory, khả năng API đo bộ nhớ, hàm native và gc. Khả năng API không đồng nghĩa API đã thực thi."
      },
      {
        "id": "accessibility_virtual_cursor",
        "title": "Dấu hiệu con trỏ hỗ trợ tiếp cận",
        "level": "source_observed",
        "fields": [
          "keyCode",
          "clientX",
          "clientY",
          "offsetX",
          "offsetY",
          "isTrusted",
          "mozInputSource",
          "webkitForce",
          "indicated_browsers",
          "is_virtual_cursor_action"
        ],
        "conclusion": "Nguồn dùng trạng thái phím và tọa độ click, isTrusted cùng các thuộc tính browser để suy đoán virtual cursor. Điều này thuộc module khác với bộ thu BD presence; chưa chứng minh log đã gửi."
      },
      {
        "id": "adblock_detection",
        "title": "Suy đoán trình chặn quảng cáo",
        "level": "source_observed",
        "fields": [
          "display",
          "MozBinding",
          "clientWidth",
          "onload",
          "onerror"
        ],
        "conclusion": "Nguồn thử CSS của phần tử mồi và tải ảnh dạng quảng cáo. Lỗi mạng cũng có thể gây kết quả dương; trang đo không tự chạy request mồi."
      },
      {
        "id": "time_spent",
        "title": "Thời gian sử dụng dưới dạng bit array",
        "level": "transport_observed",
        "fields": [
          "start_endpoint",
          "start_event",
          "start_time",
          "tos_array",
          "tos_cum",
          "tos_id",
          "tos_len",
          "tos_seq",
          "sid_raw"
        ],
        "conclusion": "Đã thấy web_time_spent_bit_array gửi mảng bit thời gian hoạt động, tổng, độ dài và số thứ tự. Metadata phiên được bỏ khỏi sổ bằng chứng công khai."
      },
      {
        "id": "registration_timelock",
        "title": "Thử thách tính toán khi đăng ký",
        "level": "source_observed",
        "fields": [
          "lox_pow_solution",
          "CONTACTPOINT",
          "FULLNAME"
        ],
        "conclusion": "Nguồn có nhánh tính lox_pow_solution từ challenge phụ thuộc cấu hình. Khảo sát sâu không gửi đăng ký, không chứng minh nhánh này được thực thi."
      },
      {
        "id": "webstorage_lengths",
        "title": "Tên khóa và độ dài dữ liệu storage",
        "level": "transport_observed",
        "fields": [
          "local_storage[key]",
          "session_storage[key]"
        ],
        "conclusion": "process_keys gửi tên khóa kèm độ dài giá trị. Không được diễn giải metadata này là toàn bộ nội dung storage. Trang đo làm tương tự tại origin riêng, không lưu nội dung giá trị."
      },
      {
        "id": "perf_metadata",
        "title": "Thông số mạng, bộ nhớ và viewport trong telemetry",
        "level": "transport_observed",
        "fields": [
          "total_mem",
          "downlink_megabits",
          "rtt_ms",
          "httpProtocol",
          "navigationType",
          "ssr_viewport_width",
          "ssr_viewport_height",
          "storageQuota",
          "storageUsage",
          "documentDOMElementCount"
        ],
        "conclusion": "Payload perf chứa RTT/downlink, bộ nhớ thiết bị và viewport ước lượng phía SSR. Các giá trị thời gian CPU server hoặc RTT phía load balancer là annotation phía máy chủ, không giả lập thành phép đọc JavaScript của trình duyệt."
      }
    ],
    "bdStaticSignalIds": [
      "38001",
      "11020",
      "30000",
      "30001",
      "30002",
      "30003",
      "30004",
      "30005",
      "30006",
      "30007",
      "30008",
      "30012",
      "30013",
      "30015",
      "30018",
      "30022",
      "30040",
      "30093",
      "30094",
      "30095",
      "30109"
    ]
  }
}
