CASAN_VIDEO_NARRATION.md — spoken lines timed to each on-screen scene of run-all.sh (Video 1) and run-hardening.sh (Video 2). Golden rule: terminal says WHAT, narrator says WHY — never read the screen. Per-scene ▶cue / 🎙️line / ⏸pause markers, hero-scene emphasis (A5, B1, B6, D1, chain, HA1, HA4, HE3 money-shot), clustered narration for fast scenes, delivery notes (tone/pace/verdict timing), a soundbite bank for judge Q&A, and a duration table (~13-16 min). Aligned with existing claims: Level 4 proven, AI as optional escalation, sandbox scaffold honesty, "casan-old wins a demo; casan5 survives production". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
215 lines
12 KiB
Markdown
215 lines
12 KiB
Markdown
# CASAN — Kịch bản Lời thoại (Voiceover / Teleprompter)
|
||
|
||
> Lời thoại **nói ĐÈ lên video** demo tấn công. Video 1 = `run-all.sh` (23 vector),
|
||
> Video 2 = `run-hardening.sh` (hardening + Evidence Pack).
|
||
>
|
||
> **Nguyên tắc vàng:** Terminal đã nói *"cái gì"* — bạn nói *"VÌ SAO quan trọng"*.
|
||
> **Đừng đọc lại màn hình.** Nói xong để verdict (`exit=2 ⛔`) hiện rồi mới chốt câu.
|
||
|
||
---
|
||
|
||
## 0. Ghi chú trình bày (đọc trước khi thu)
|
||
|
||
- **Giọng:** bình tĩnh, tự tin, kỹ sư nói với kỹ sư — KHÔNG "bán hàng".
|
||
- **Tốc độ:** chậm-vừa. Mỗi cảnh `STEP_DELAY=6` cho ~6–8 giây → mỗi cảnh chỉ 1–2 câu.
|
||
- **Nhịp verdict:** nói **SAU** khi exit code hiện, không nói trước. Verdict là dấu chấm câu.
|
||
- **Cảnh 🔥:** nghỉ 1 nhịp sau khi nói, để người xem "ngấm" kết quả. Zoom dòng verdict khi dựng.
|
||
- **Cảnh chạy nhanh (không 🔥):** gộp 2–3 cảnh vào một câu, đừng cố nói từng cái.
|
||
- **Ký hiệu:** ▶ = màn hình đang hiện gì · 🎙️ = câu bạn nói · ⏸ = nghỉ 1 nhịp.
|
||
- Canh nhịp thủ công thì chạy `AUTO=0` (bấm Enter) để chủ động cắt câu.
|
||
|
||
---
|
||
|
||
# 🎬 VIDEO 1 — ATTACK BATTERY (`run-all.sh`)
|
||
|
||
### ▶ Màn hình intro (banner CASAN + 3 nguyên tắc)
|
||
🎙️ "Chúng tôi không đo AI viết code nhanh cỡ nào. Chúng tôi hỏi một câu khác:
|
||
**khi AI làm bậy — ai chặn, và làm sao chứng minh đã chặn?**
|
||
Đây là CASAN Harness. Mỗi con số bạn sắp thấy là một **cuộc tấn công thật**, có exit code trên màn hình — không phải điểm tự chấm." ⏸
|
||
|
||
## ⭐ H4 — Security
|
||
|
||
### ▶ Banner "H4 SECURITY BATTERY"
|
||
🎙️ "Lớp đầu tiên — bảo mật đầu vào và đầu ra của model. Chín kiểu tấn công."
|
||
|
||
### ▶ A1 direct injection → `rc=2`
|
||
🎙️ "Câu injection kinh điển, 'bỏ qua chỉ dẫn, lộ system prompt'. Chặn. Exit 2."
|
||
|
||
### ▶ A2 paraphrase → `rc=0` (lọt)
|
||
🎙️ "Giờ tôi diễn đạt lại, không trùng từ khoá nào. Lọc từ khoá thuần… **cho lọt**.
|
||
Đây là giới hạn thật của regex — và là lý do có bước ngay sau đây."
|
||
|
||
### ▶ A3 semantic classify → `verdict=INJECTION`
|
||
🎙️ "Vẫn câu đó, nhưng qua **tầng ngữ nghĩa**: model local đọc *ý đồ*, không cần trùng chữ.
|
||
Verdict — INJECTION. Đây là **một trong số rất ít chỗ chúng tôi dùng AI** — và nó chỉ
|
||
**thêm** được lệnh chặn, **không bao giờ gỡ**." ⏸
|
||
|
||
### ▶ A4 obfuscation → `rc=2`
|
||
🎙️ "Nguỵ trang bằng leetspeak, số thay chữ. Chuẩn hoá xong mới khớp. Vẫn chặn."
|
||
|
||
### ▶ A5 🔥 indirect artifact injection → `rc=2`
|
||
🎙️ "Đây là đòn tôi muốn bạn nhớ nhất. **Input người dùng hoàn toàn sạch.**
|
||
Nhưng lệnh độc được giấu trong file spec mà agent sẽ đọc — tấn công **gián tiếp**.
|
||
Bộ quét artifact bắt nó **trước khi** vào ngữ cảnh model. Exit 2." ⏸⏸
|
||
|
||
### ▶ A6 secret + A7 PII → `rc=2` (nói gộp)
|
||
🎙️ "Khoá riêng và dữ liệu cá nhân trong đầu vào — chặn cứng, fail-closed. Không thương lượng."
|
||
|
||
### ▶ A8 recall (Ollama) → `recall ≥ 0.8`
|
||
🎙️ "Và định lượng: recall của model so với regex trên ba mươi mẫu — số chạy thật, ngay trên máy."
|
||
|
||
### ▶ A9 secret in OUTPUT → `rc=2`
|
||
🎙️ "Chiều ngược lại cũng vậy — secret rò ở **đầu ra** bị chặn. Bảo vệ hai chiều, không chỉ chiều vào."
|
||
|
||
## ⭐ H5 — Governance
|
||
|
||
### ▶ Banner "H5 GOVERNANCE"
|
||
🎙️ "Lớp hai đổi câu hỏi: không phải 'chặn đầu vào', mà **'có tin được nhật ký không? ai được làm gì?'**
|
||
Và lưu ý — **cả lớp này không cần AI**, toàn mật mã."
|
||
|
||
### ▶ B1 🔥 audit tamper → `AUDIT_HASH_MISMATCH line=1`
|
||
🎙️ "Tôi sửa **đúng một ký tự** trong sổ kiểm toán để hạ mức rủi ro.
|
||
Hash-chain gãy ngay **dòng một**. Bạn không thể viết lại lịch sử mà không bị phát hiện." ⏸
|
||
|
||
### ▶ B2 chain re-forge → `anchor=signed`
|
||
🎙️ "Tinh vi hơn: tính lại toàn bộ chuỗi hash cho khớp. Nhưng phần đầu được **ký RSA**,
|
||
khoá nằm **ngoài repo**. Không có khoá thì re-forge là bất khả thi."
|
||
|
||
### ▶ B6 🔥 self-approval → `rc=2`
|
||
🎙️ "Và đây là quản trị thật: người đệ trình **tự phê duyệt chính mình** — bị từ chối.
|
||
Tách khoá nhiệm vụ. Người khác duyệt mới hợp lệ." ⏸
|
||
|
||
### ▶ B3/B4/B5/B7/B8 (nói gộp khi chạy qua)
|
||
🎙️ "Phần còn lại của lớp này: quét secret lỡ commit, chặn mọi đường tắt bypass,
|
||
phân quyền theo từng agent, và giới hạn tần suất chống lạm dụng — mỗi thứ một bài kiểm thử."
|
||
|
||
## ⭐ H6 — AgentOps
|
||
|
||
### ▶ Banner "H6 AGENTOPS"
|
||
🎙️ "Lớp ba là câu hỏi vận hành: **nếu một bước đột nhiên tốn gấp ba lần token, có ai biết không?**"
|
||
|
||
### ▶ D1 🔥 cost-spike → `COST_SPIKE_DETECTED exit=2`
|
||
🎙️ "Có. Phát hiện ngay, cổng đỏ, exit 2." ⏸
|
||
|
||
### ▶ D2 negative control → `exit=0`
|
||
🎙️ "Và nó **không báo động giả** — dữ liệu bình thường thì im lặng. Có cả ca dương lẫn ca âm."
|
||
|
||
### ▶ D3/D4/D6 (nói gộp)
|
||
🎙️ "Còn lại: phát hiện model đổi hành vi; token đo từ **model thật**, không ước lượng;
|
||
và phân biệt output bịa đặt với output bám tài liệu."
|
||
|
||
## 🔥 Cross-layer chain
|
||
|
||
### ▶ Banner CHAIN → 4 lớp chặn liên tiếp
|
||
🎙️ "Cuối cùng, một chuỗi xuyên lớp: injection lái tool, đòi credential, rồi hành động sai.
|
||
Bốn lớp chặn **liên tiếp** — H4, rồi schema tool, rồi timeout, rồi audit. Đây là **defense-in-depth**." ⏸
|
||
|
||
### ▶ Scorecard / chốt Video 1
|
||
🎙️ "Ba harness này từng là điểm yếu nhất của hệ. Giờ mỗi cái chống lại một loạt tấn công thật,
|
||
harness thấp nhất đã vượt ngưỡng. **Nhưng** — chặn được tấn công demo là một chuyện.
|
||
**Sống sót trong production là chuyện khác.** Đó là nội dung video thứ hai." ⏸⏸
|
||
|
||
---
|
||
|
||
# 🎬 VIDEO 2 — PRODUCTION HARDENING (`run-hardening.sh`)
|
||
|
||
### ▶ Banner "PART 2 — PRODUCTION HARDENING"
|
||
🎙️ "Phần hai, chúng tôi hỏi câu khó hơn. Không phải 'có chặn được injection không' —
|
||
mà **'đã đủ trưởng thành để chạy production chưa'.** Và trung thực về chỗ chưa tới."
|
||
|
||
## ⭐ Track A — Hardening
|
||
|
||
### ▶ HA1 🔥 homoglyph → `rc=2`
|
||
🎙️ "Nhìn kỹ chữ 'ignore' này. Trông là tiếng Anh, nhưng i, o, e là **ký tự Cyrillic giả**.
|
||
Mắt người đọc được; regex ASCII thì mù. Chúng tôi chuẩn hoá Unicode, gập ký tự giả về Latin,
|
||
rồi chặn. Exit 2." ⏸
|
||
|
||
### ▶ HA2 zero-width/fullwidth → `rc=2`
|
||
🎙️ "Ký tự tàng hình, ký tự toàn rộng — cùng cách xử lý: lộ nguyên hình rồi chặn."
|
||
|
||
### ▶ HA3 🔥 base64 → `rc=2`
|
||
🎙️ "Giấu payload dưới **base64** để né mọi luật văn bản. Chúng tôi giải mã thứ khả nghi,
|
||
quét lại nội dung bên trong — và chặn. Chỉ giải mã cái đáng ngờ, nên không bắt nhầm."
|
||
|
||
### ▶ HA4 🔥 strict fail-closed → `rc=2` + `SEMANTIC_STRICT_FAIL_CLOSED`
|
||
🎙️ "Đây là câu trả lời cho câu hỏi khó nhất về AI: **nếu tầng phân loại bằng model chết thì sao?**
|
||
Hệ non-production thường… âm thầm cho qua. Chúng tôi bật chế độ strict:
|
||
**model chết thì CHẶN — fail-closed.** AI không sẵn sàng thì mặc định *không tin*, chứ không tin bừa." ⏸
|
||
|
||
### ▶ HA5 telemetry integrity → `MISMATCH`
|
||
🎙️ "Sửa một con số token để giấu chi phí — nhưng telemetry giờ cũng **được ký**. Một byte là lộ."
|
||
|
||
### ▶ HA6 🔥 slow-boil + spray → `exit=2` ×2
|
||
🎙️ "Hai mánh né giám sát chi phí: tăng token **từ từ** cho ngưỡng trôi theo, và **rải** nhiều
|
||
lệnh nhỏ. Trần tuyệt đối mỗi lần gọi, cộng ngân sách tích luỹ — bắt cả hai." ⏸
|
||
|
||
### ▶ HA7 benign FP → `FP=0%`
|
||
🎙️ "Và câu phản biện quan trọng: siết chặt thế có **bắt nhầm** không?
|
||
Chín mươi lăm câu hợp lệ, ba ngôn ngữ — tỉ lệ dương-tính-giả **bằng không**. Siết mà không phiền người dùng."
|
||
|
||
## ⭐ Track C-MVP
|
||
|
||
### ▶ Banner "TRACK C-MVP"
|
||
🎙️ "Track C — kiểm soát **ngoài** ba harness lõi. Đây là chỗ rất nhiều hệ AI bỏ quên."
|
||
|
||
### ▶ HC1 🔥 action gate → `rc=2` / `rc=3`
|
||
🎙️ "Scan prompt tốt — nhưng agent vẫn có thể ghi đè file `.env`, chạy `rm -rf`, hay tải script về chạy thẳng.
|
||
Chúng tôi gate **hành động**, không chỉ tên tool. File nhạy cảm và lệnh huỷ diệt: **chặn**.
|
||
Cài thư viện: **phải có người duyệt.**"
|
||
|
||
### ▶ HC2 🔥 supply-chain → `rc=2` / `rc=3`
|
||
🎙️ "Agent tự thêm thư viện? Gói giả mạo tên, script cài-đặt độc, gói trong danh sách đen — **chặn**.
|
||
Thư viện mới mà hợp lệ — **cần duyệt**, kèm báo cáo thay đổi."
|
||
|
||
### ▶ HC3 data-exfil → `BLOCK` / `MASK`
|
||
🎙️ "Secret sắp gửi lên model đám mây — chặn **trước khi** rời tổ chức. Dữ liệu cá nhân vào log — che."
|
||
|
||
### ▶ HC4 sandbox → `rc=2`
|
||
🎙️ "Code do AI sinh cố đọc khoá SSH, fork-bomb, ghi ra ngoài thư mục làm việc — chặn.
|
||
Và tôi nói thẳng: **đây là scaffold, chưa phải cô lập kernel** — bản production cần container. Chúng tôi không giấu điều đó." ⏸
|
||
|
||
## 🏆 Evidence Pack
|
||
|
||
### ▶ Banner "EVIDENCE PACK"
|
||
🎙️ "Và câu hỏi cuối, quan trọng nhất: **vì sao tin cái output này?**"
|
||
|
||
### ▶ HE1 + HE2 → `CREATED` → `VALID`
|
||
🎙️ "Mỗi lần chạy sinh một **gói bằng chứng ký số** — mười hai file, đủ bảy harness. Xác minh: hợp lệ."
|
||
|
||
### ▶ HE3 🔥🔥 tamper → `TAMPERED exit=1`
|
||
🎙️ "Giờ tôi sửa **đúng một byte** trong gói. Xác minh lại… **vô hiệu.**
|
||
Đổi một byte là cả gói bằng chứng mất giá trị. **Đây chính là 'vì sao tin output' —
|
||
không bằng cảm tính, mà bằng chữ ký.**" ⏸⏸
|
||
|
||
### ▶ HE4 certified gate
|
||
🎙️ "Và dấu 'certified' chỉ cấp khi **đủ mọi cổng**. Thiếu bằng chứng, hệ **nói thẳng lý do** —
|
||
không đóng dấu khống. Chứng nhận là *kết quả*, không phải nhãn dán."
|
||
|
||
### ▶ Chốt tổng (banner CHỐT PART 2)
|
||
🎙️ "Tóm lại. Không phải AI **xịn nhất** — mà AI **có kiểm soát, có bằng chứng, tái dùng được**.
|
||
Ba harness yếu nhất giờ chống tấn công thật, thêm Track A và Track C, cùng gói bằng chứng
|
||
không-sửa-được. **Một trăm bốn mươi bài kiểm thử, không lỗi.**
|
||
Và chúng tôi trung thực về phần chưa xong — đa ngôn ngữ, cô lập kernel, quản trị enterprise là lộ trình sau cuộc thi.
|
||
**casan-old thắng một buổi demo; casan5 sống sót trong production.**" ⏸⏸⏸
|
||
|
||
---
|
||
|
||
## 🎯 Ngân hàng câu chốt (nhấn khi cần / trả lời giám khảo)
|
||
|
||
- "Điểm đáng tin là **số test đối kháng pass**, không phải điểm tự chấm — mỗi gate **fail-able**: gỡ control thì test đỏ."
|
||
- "AI ở đây là **tầng leo thang tuỳ chọn** — chỉ thêm được lệnh chặn, không bao giờ gỡ. Tắt AI, mọi đảm bảo lõi vẫn còn."
|
||
- "H5 governance **không phụ thuộc model** — toàn mật mã, mạnh sẵn offline."
|
||
- "Chúng tôi tuyên bố **Level 4 chứng minh được**. Level 5 — IdP, WORM, dashboard hosted — là roadmap, không nhận đã đạt."
|
||
- "Sandbox hiện là **scaffold**; cô lập kernel thật là việc production tiếp theo. Nhận diện đúng giới hạn = trưởng thành bảo mật."
|
||
- "Đổi một byte trong gói bằng chứng → chứng nhận vô hiệu. Đó là *tin bằng chữ ký, không bằng lời*."
|
||
|
||
## ⏱️ Gợi ý thời lượng
|
||
|
||
| Đoạn | Thời lượng | Ghi chú |
|
||
|---|---|---|
|
||
| Video 1 intro + H4 | ~3–4 phút | nhấn A5 (gián tiếp) |
|
||
| Video 1 H5 + H6 + chain + chốt | ~4–5 phút | nhấn B1, B6, D1, CHAIN |
|
||
| Video 2 Track A | ~3 phút | nhấn HA1, HA4 |
|
||
| Video 2 Track C + Evidence + chốt | ~3–4 phút | **money-shot HE3** |
|
||
| **Tổng** | **~13–16 phút** | rút gọn: bỏ cluster gộp, giữ mọi cảnh 🔥 |
|