ความจริงเรื่อง "ช่องคิด" ของ Claude Code และ Codex ที่ถูกเข้ารหัส และทำไม dev ต้องสนใจ
สารบัญ
สรุปให้ไว
ช่องคิดถูกเข้ารหัส
บล็อก thinking ใน log ของ Claude Code เป็นแค่ลายเซ็นเข้ารหัส ไม่ใช่เหตุผลจริง
ได้แค่ "สรุป"
สิ่งที่เราอ่านได้คือสรุปกระบวนการคิด ไม่ใช่ chain of thought ตัวจริง
replay ข้ามบัญชีได้
เอาบล็อก reasoning เก่าจาก session/บัญชีอื่นมายัดใส่แล้วผ่าน
มี side-channel
รั่ว bit ลับผ่านความยาวบล็อกและเวลาตอบได้ แม้ไม่มี API
01เรื่องเริ่มจากค่า default ที่ถูกหรี่ลงเงียบ ๆ
ต้นปีนี้ Anthropic เปลี่ยนค่าเริ่มต้นของ Claude Code แบบไม่ประกาศ ทั้งปิด adaptive thinking, เปิด redacted thinking และลด default effort ลง รวมแล้วทำให้ความลึกในการคิดของโมเดลลดลงราว 67% ผู้ใช้หลายคนสังเกตว่าผลงานแย่ลง จนสุดท้าย Anthropic ต้องออกมาอธิบาย
พอเรื่องนี้เป็นเชื้อ ก็มีนักพัฒนาชื่อ Patrick McKenna ไปนั่งไล่ log การทำงานของ Claude Code ในเครื่องตัวเอง ซึ่งเป็นสิ่งที่ควรทำถ้าอยากรู้ว่า AI agent ทำอะไรไปบ้าง แล้วเขาก็เจอของแปลก
02สิ่งที่อยู่ในช่อง "ความคิด" จริง ๆ
สิ่งที่ McKenna เจอคือ บล็อก extended-thinking ใน log แทบไม่มีข้อความเหตุผลเลย มีแค่ลายเซ็นเข้ารหัสยาวราว 600 ตัวอักษรนั่งอยู่ตรงที่ควรจะเป็นความคิด พอไปอ่านเอกสารของ Anthropic ก็พบว่าจริง ๆ เขาเขียนอธิบายไว้แล้ว แต่ใช้ภาษาอ้อมมากจนพลาดง่าย ใจความคือ สิ่งที่ extended thinking คืนกลับมาคือ "สรุป" ของกระบวนการคิด ไม่ใช่ chain of thought ตัวจริง ตัวเหตุผลจริงถูกเข้ารหัสไว้ Anthropic ถือ key เครื่องเราไม่เคยได้รับ และถ้าอยากได้ของเต็มต้องมีสัญญาระดับ enterprise
เปรียบเทียบง่าย ๆ เหมือนเซฟไฟล์ภาพคุณภาพสูงให้กลายเป็น JPEG บีบอัด แล้วแก้บนไฟล์บีบอัดนั้น สิ่งที่อยู่ใน log ของเราจึงไม่ใช่สิ่งที่ขับเคลื่อนพฤติกรรมโมเดลจริง ๆ ระหว่าง session
03นักเข้ารหัสลงไปแกะต่อ แล้วเจออะไร
ช่วงเดียวกัน Matt Green อาจารย์ด้านการเข้ารหัสที่ Johns Hopkins ก็เข้ามาดูเรื่องนี้จากอีกมุม เขาทดสอบบล็อก reasoning ของทั้ง OpenAI และ Anthropic พบว่ามันคือ ciphertext แบบ base64 ห่อใน JSON การออกแบบนี้มีเหตุผลอยู่ ในโหมดที่ฝั่ง server ไม่เก็บ state ฝั่ง client ต้องถือ state ไปเอง การส่ง reasoning ที่เข้ารหัสกลับไปให้ client ถือต่อโดยอ่านหรือแก้ไม่ได้ จึงเป็นสถาปัตยกรรมที่ฟังดูสมเหตุสมผลบนกระดาษ
แต่ของจริงต่างออกไป การแก้ ciphertext ตรง ๆ จะทำให้เกิด API error จริง แต่การ "replay" คือเอาบล็อกเก่าที่ไม่ได้แก้จาก session อื่นหรือบัญชีอื่นมายัดใส่ กลับผ่านได้สบาย การ replay ข้ามบัญชีทำได้ทั้งสองเจ้า และฝั่ง OpenAI ยัง replay ข้ามโมเดลได้ด้วย ข้อสรุปของ Green คือ ทั้งสองบริษัทน่าจะใช้ key เข้ารหัสตัวเดียวกันทั้งหมดสำหรับ reasoning ฝั่ง client ไม่ใช่ key แยกต่อ session หรือต่อบัญชี ซึ่งในโหมด zero-data-retention แปลว่า reasoning ของทุกคนถูกฝากไว้ใต้ key เดียว
ความเสี่ยงที่จับต้องได้สำหรับนักพัฒนา
- ★
ต้อง sanitize input
ถ้าทำแอปแชทผ่าน API ให้ผู้ใช้ภายนอก คนที่ยัด JSON เข้า stream ได้ อาจแทรกบล็อก reasoning ของตัวเองทำให้โมเดลทำงานเพี้ยน
- ★
บล็อกพวกนี้ "ทำงานจริง"
Green สาธิตว่า reasoning block ที่เคยคิดเรื่องเลข SSN พอ replay ไป session อื่นบนคนละบัญชี เลขนั้นโผล่ในคำตอบใหม่โดยไม่ได้ถาม
- ★
มี side-channel
สังเกต metadata อย่างความยาวบล็อกหรือเวลาตอบ ก็ดึงข้อมูลลับทีละ bit ได้ และรั่วผ่านหน้าแชตใดก็ได้แม้ไม่มี API
- ★
การตอบของผู้ผลิต
OpenAI บอก "ทำซ้ำไม่ได้", Anthropic บอกไม่เห็นนัยด้านความปลอดภัยแต่อาจอัปเดตเอกสาร, Green จึงเปิดเผยต่อสาธารณะ
04เกี่ยวอะไรกับเรา
เครื่องมือ AI ที่หลายคนใช้เขียนโค้ดทุกวันอย่าง Claude Code และ Codex "คิด" ในที่ที่เราอ่านไม่ได้ และค่า default ก็ถูกปรับเงียบ ๆ ได้ เรื่องนี้กระทบสองมุม มุมแรกคือความน่าเชื่อถือของ log ที่เราเอาไป audit อย่าเข้าใจผิดว่าบล็อก thinking สะท้อนสิ่งที่โมเดลคิดจริง มันเป็นแค่สรุป มุมที่สองคือความปลอดภัยถ้าคุณสร้างแอต่อยอด
ฟันธง: ถ้าคุณทำ API chat ให้ผู้ใช้ภายนอกป้อนข้อความ ให้ sanitize reasoning block ที่รับเข้ามาเสมอ อย่าเชื่อ payload ที่ client ส่งกลับมาแบบไม่ตรวจ และอย่าออกแบบระบบโดยสมมติว่า reasoning ที่เข้ารหัสนั้นปลอดภัยเพราะอ่านไม่ได้ เพราะมันยัง replay และรั่วผ่าน side-channel ได้ ส่วนใครใช้ Claude Code ทำงานเฉย ๆ ก็ควรไปเช็ก setting เรื่อง thinking และ effort ของตัวเอง เผื่อมันถูกหรี่ลงโดยที่เราไม่รู้ตัว นี่คือเหตุผลว่าทำไมเรื่องความปลอดภัยของตัวเครื่องมือ AI เอง ไม่ใช่แค่ของที่มันสร้าง ถึงเป็นสิ่งที่คนทำงานต้องตามให้ทัน