3 คะแนน โดย GN⁺ 2026-02-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • สคริปต์ที่ทำให้ ขั้นตอนยืนยันอายุของหลายแพลตฟอร์มผ่านเป็นผู้ใหญ่อัตโนมัติ
  • หาก วางโค้ดแล้วรันในคอนโซลของ Discord ระบบจะส่งคำขอ API ไปยัง /age-verification/verify โดยอัตโนมัติ และย้ายไปยังหน้าการยืนยันเสร็จสิ้น
  • บน แพลตฟอร์มอื่นอย่าง Twitch, Kick, Snapchat ก็สามารถยืนยันด้วยวิธีเดียวกันได้โดยกรอก URL ของ QR code
  • เครื่องมือนี้อาศัยช่องโหว่ของ โครงสร้างการประมวลผลข้อมูลใบหน้าของระบบ k-id เพื่อสร้างเมทาดาทาที่ดูถูกต้องตามกฎหมายได้แม้ไม่มีใบหน้าจริง
  • เป็นวิธีที่ คัดลอกการเข้ารหัส AES-GCM และโครงสร้างข้อมูลที่คาดเดาได้ เพื่อให้ผ่านขั้นตอนตรวจสอบ โดยสร้างขึ้นตามกระแสการขยายการยืนยันอายุในระดับโลก

ขั้นตอนการยืนยันบน Discord

  • เป็นวิธีการคัดลอกและรันสคริปต์เฉพาะใน Developer Console (F12) ของเว็บแอป Discord
    • สคริปต์จะดึง webpack module cache ของ Discord ออกมา ค้นหา API client ภายใน แล้วส่งคำขอไปยังเอ็นด์พอยต์ /age-verification/verify
    • จากนั้นจะรีไดเรกต์ verification_webview_url ที่ได้จากผลลัพธ์ของคำขอไปยัง age-verifier.kibty.town
  • ผู้ใช้เพียง แก้แคปช่าแล้วรอจนกว่าหน้าจะแสดงคำว่า “success” ก็ถือว่ายืนยันเสร็จสิ้น
  • ด้วยกระบวนการนี้ บัญชี Discord จะถูก แสดงว่าอยู่ในสถานะยืนยันว่าเป็นผู้ใหญ่แล้ว

วิธีการยืนยันบนแพลตฟอร์มอื่น (Twitch, Kick, Snapchat ฯลฯ)

  • ใน หน้าการยืนยันอายุของแต่ละแพลตฟอร์ม ให้เลือกตัวเลือก ‘selfie’ แล้วคัดลอก URL ของ QR code ที่แสดงอยู่
  • วาง URL ดังกล่าวลงในช่องกรอกของ age-verifier.kibty.town แล้ว คลิกปุ่ม ‘verify’
  • หลังจากนั้นขั้นตอนการยืนยันจะดำเนินไปโดยอัตโนมัติและแสดงข้อความว่าสำเร็จ

หลักการทำงาน

  • ระบบยืนยันอายุ k-id ที่ Discord ใช้งานไม่ได้ส่งวิดีโอใบหน้าไปยังเซิร์ฟเวอร์ แต่ส่งเพียง เมทาดาทาที่เกี่ยวข้องกับใบหน้าและรายละเอียดของกระบวนการ
    • ด้วยโครงสร้างนี้ หาก ดัดแปลงและส่งเมทาดาทาให้ดูถูกต้องตามกฎหมาย ก็สามารถผ่านการยืนยันได้โดยไม่ต้องมีใบหน้าจริง
  • หลังจากที่เคยมีการเปิดเผย k-id verifier ของ amplitudes มาก่อน พาร์ตเนอร์อย่าง faceassure ก็เพิ่มความเข้มงวดในการตรวจสอบ แต่เครื่องมือนี้ยังเลี่ยงได้ด้วยวิธีใหม่

รายละเอียดทางเทคนิคของขั้นตอน

  • ขั้นที่ 1: คัดลอกพารามิเตอร์การเข้ารหัส
    • เมื่อนำไปเทียบกับคำขอที่ถูกต้องตามปกติ พบว่ามีพารามิเตอร์ encrypted_payload, auth_tag, timestamp, iv ที่ขาดหายไป
    • ใช้การเข้ารหัสแบบ AES-GCM โดยสร้างคีย์จากการนำ nonce + timestamp + transaction_id ไปอนุพันธ์ด้วย HKDF(SHA-256)
    • จากนั้นจึงสร้างพารามิเตอร์ที่ขาดหายไปขึ้นมาโดยจำลองโครงสร้างเดียวกัน
  • ขั้นที่ 2: ดัดแปลงข้อมูลการคาดการณ์
    • เมื่อคัดลอกการเข้ารหัสได้สมบูรณ์แล้วแต่ยังล้มเหลว จึงพบว่า การตรวจสอบพึ่งพา ‘prediction arrays’ (outputs, primaryOutputs, raws)
    • สร้าง outputs และ primaryOutputs จากข้อมูล raws โดยใช้ z-score เพื่อตัดค่าผิดปกติออก
    • นอกจากนี้ยังมีการตรวจสอบเงื่อนไขต่อไปนี้
      • ค่า xScaledShiftAmt, yScaledShiftAmt ต้องเป็นหนึ่งในสองค่าที่กำหนดเท่านั้น
      • ชื่อสื่อ (กล้อง) ต้องตรงกับรายการอุปกรณ์จริง
      • เวลาที่สถานะเสร็จสมบูรณ์ต้องสอดคล้องกับไทม์ไลน์
  • มีการเผยแพร่ โค้ดโอเพนซอร์สที่ทำกระบวนการเหล่านี้ครบถ้วน ไว้แล้ว และทุกคนสามารถตรวจสอบได้

การเปิดเผยและที่มาของการพัฒนา

  • ผู้สร้างกล่าวขอบคุณ xyzeva, Dziurwa และ amplitudes ที่เคยทำงานที่เกี่ยวข้องมาก่อน
  • มีการอธิบายว่า Discord มีแผน บังคับใช้การยืนยันอายุทั่วโลกอย่างเต็มรูปแบบในเดือนมีนาคม จึงได้ทดลองค้นหาวิธีใหม่ในการเลี่ยงการตรวจสอบนี้

1 ความคิดเห็น

 
GN⁺ 2026-02-12
ความคิดเห็นจาก Hacker News
  • วิธีที่ แข็งแกร่งจริง ๆ คือสร้างสัญญาณวิดีโอเทียมแทนการใช้เว็บแคมจริง
    คิดว่าไม่มีแพลตฟอร์มไหนป้องกันสิ่งนี้ได้
    ต่อให้แพลตฟอร์มต้องการ อินพุตกล้องที่ปลอมแปลงได้ยาก แบบโทรศัพท์มือถือ ก็แค่วางกล้องไว้หน้าจอความละเอียดสูงก็จบ
    เกมแมวจับหนู แบบนี้คงอยู่ได้ไม่นาน

    • ก็สงสัยอยู่ว่าแพลตฟอร์มอยากจะหยุดมันจริง ๆ หรือเปล่า
      การยืนยันอายุด้วยวิดีโอเซลฟีที่ไม่สมบูรณ์แบบกลับเป็นผลดีกับทุกฝ่าย
      คนที่มีสามัญสำนึกไม่ต้องอัปโหลดใบขับขี่หรือพาสปอร์ต และแพลตฟอร์มก็รักษาผู้ใช้ไว้ได้ง่ายขึ้น
      เว็บโป๊ก็สร้างบัญชีผู้ใช้เพื่อติดตามและเพิ่มรายได้โฆษณาได้
      นักการเมืองก็ประกาศได้ว่า “เราได้นำนโยบายจำกัดอายุมาใช้แล้ว” และผู้ปกครองก็สบายใจว่าลูกไม่ได้ดูสื่อลามก
      สุดท้ายแล้วมันคือโครงสร้างที่ ทุกฝ่ายชนะ
    • มีอุปกรณ์ที่มีความสามารถด้าน การยืนยันตัวตนด้วยฮาร์ดแวร์ อยู่แล้ว อย่างเช่นกล้อง Windows Hello
      วิธีตรวจสอบแบบนี้สุดท้ายก็น่าจะไปในทิศทางนั้น
      บางทีหนึ่งในเหตุผลที่ Google ดันแอปเฉพาะบน Play Store ก็คงเพื่อสร้าง ซอฟต์แวร์เชนที่ตรวจสอบได้ แบบนี้
    • ถ้าสแกนใบหน้าไม่ได้ ก็สลับไปตรวจบัตรประชาชน/เอกสารยืนยันตัวตนได้
      ท้ายที่สุดแล้วมันก็เป็นปัญหาระดับ แค่สับสวิตช์ตัวเดียว
    • มีข่าวลือว่า Apple จะเพิ่ม เซ็นเซอร์ภาพหลายสเปกตรัม ใน iPhone รุ่นถัดไป
      ถ้ามาคู่กับการทำแผนที่ 3D กลเม็ดแบบเอาหน้าจอไปฉายคงใช้ไม่ได้
      ปัญหาคือบริการยืนยันอายุแบบของ Discord ไม่ได้พยายามอย่างจริงจัง
    • เห็นด้วยว่าเกมแบบนี้คงอยู่ได้ไม่นาน แต่เหตุผลต่างกัน
      ผมแค่จะไม่เล่นเกมนี้และ เลิกใช้แพลตฟอร์มไปเลย
  • วิธีนี้มีปัญหาอยู่สามข้อ

    1. มันลดความยุ่งยากของการยืนยันอายุ ทำให้คนอยู่ต่อใน ระบบนิเวศแบบปิด
    2. มันทำให้ การยืนยันที่ล่วงล้ำกว่าเดิม ถูกทำให้ดูชอบธรรมด้วยเหตุผลว่า “วิธีที่เป็นมิตรต่อความเป็นส่วนตัวถูกหลบเลี่ยงได้ง่ายเกินไป”
    3. มันชักชวนให้รัน โค้ดตามอำเภอใจ ในขณะที่ล็อกอินบัญชีอยู่
    • การพิสูจน์ว่าสิ่งหนึ่งทำได้ กับการสนับสนุนให้ทำ เป็นคนละเรื่องกัน
      นี่เป็น ตัวอย่างงานวิศวกรรมย้อนกลับที่ยอดเยี่ยม ซึ่งแสดงให้เห็นว่าการตรวจสอบโดยไม่ละเมิดความเป็นส่วนตัวนั้นยากแค่ไหน
      โค้ดถูกเปิดเผยไว้แล้ว ดังนั้นประเด็นเรื่องการรันโค้ดตามอำเภอใจ (#3) จึงไม่เข้าข่าย
      ถ้าบริษัทตอบโต้ด้วยวิธีที่ล่วงล้ำกว่าเดิม (#2) ผู้ใช้ก็ย้ายแพลตฟอร์มได้เสมอ
  • คิดว่าเป็นไอเดียที่ ฉลาดพอตัว
    ดูเหมือน Discord จะผ่อนการยืนยันอายุให้เหลือแค่ระดับที่พอจะบอกหน่วยงานกำกับดูแลได้ว่า “เรามีมาตรการปกป้องเด็กอยู่นะ”
    แต่ถ้ารัฐบาลเริ่มจับตาจริงจัง วิธีแบบนี้คงอยู่ได้ไม่นาน
    ตอนนี้บางประเทศเริ่ม要求 การยืนยันตัวตนชีวมิติที่เข้มงวดยิ่งขึ้น แล้ว และบางบริการก็กำลังย้ายไปใช้การยืนยันผ่านแอปมือถือ
    กลเม็ดแบบ JavaScript ล้วน ๆ จะใช้ไม่ได้ผลมากขึ้นเรื่อย ๆ

  • แนะนำให้ห่อโค้ดไว้ด้วยฟังก์ชันที่เรียกใช้ทันที (IIFE) ตอนรัน
    บน macOS Safari มันใช้ไม่ได้ เพราะไม่รองรับ top-level await
    ดูข้อมูลที่เกี่ยวข้องได้ที่ caniuse.com/wf-top-level-await

    • Safari ดูเหมือนจะมี ท่าทีไม่อยากรองรับมาตรฐานเว็บสมัยใหม่
      ตอนนี้ตามหลังไปแล้วราว 5 ปี
  • ลองแล้ว ระบบรีไดเรกต์ไปที่ https://age-verifier.kibty.town/webview?url=null
    และขึ้นข้อความ {"error":"error parsing webview url"}
    ดูเหมือนว่าบัญชี Discord ของผมกำลังอยู่ในการ ทดสอบ A/B เลยใช้ผู้ให้บริการยืนยันตัวตนเจ้าอื่นชื่อ Persona

    • Persona เป็นบริษัทที่ขึ้นชื่อเรื่อง การเก็บและแชร์ข้อมูล คล้ายกับการต้องโชว์บัตรประชาชนตอนเข้าไปในบาร์
      ลองค้นหาดูจะเจอข้อมูลเพิ่มเติม
    • ทวีตที่เกี่ยวข้อง: https://x.com/xyz3va/status/2021734252505604108
    • หวังว่าคอมเมนต์นี้จะขึ้นไปอยู่ด้านบน เพื่อให้ ทีมงานความปลอดภัยได้เห็น
  • ใช้งานได้จริง
    ผมได้รับข้อความจาก Discord ว่า “ถูกจัดว่าเป็นกลุ่มผู้ใหญ่แล้ว”
    (เสียงบรรยาย) และในวินาทีนั้นเอง ผมก็ตระหนักว่าบัญชีถูกแฮ็กแล้ว ;)

    • ของผมก็ใช้ได้เหมือนกัน
      หวังว่าบัญชีอายุ 11 ปีของผมจะไม่เกิดปัญหา แต่ถ้ามันขอใบหน้าหรือเอกสารยืนยันตัวตน ผมคง ลบบัญชีทิ้ง
    • น่าจะสนุกกว่าถ้าใช้ตัวละคร g-man จาก Half-Life มายืนยันตัวตน
    • เผื่อไว้เลยไป เปลี่ยนรหัสผ่าน ทีหลัง
  • ไม่เข้าใจว่าทำไมคนรุ่นใหม่ถึงยัง ยึดติด กับบริการที่เป็นปฏิปักษ์กับตัวเองขนาดนั้น
    ความสะดวกของการอยู่บนแพลตฟอร์มที่ไม่ชอบ มันมากกว่าความพยายามในการหาทางเลือกจริงหรือ?

    • คำพูดว่า “หาทางเลือกก็แค่ใช้แรงนิดหน่อย” นั้นตั้งอยู่บนสมมติฐานว่ามี พื้นฐานทางเทคนิค
      เด็กรุ่นนี้จำนวนมากแทบไม่คุ้นกับเทอร์มินัลหรือแม้แต่แนวคิดเรื่องพาธไฟล์
      พวกเขาอาจค้นหาเป็น แต่การตั้งค่าทางเลือกด้วยตัวเองเป็นอีกเรื่องหนึ่ง
      ที่สำคัญกว่านั้นคือ แทบไม่มีการรับรู้เลยว่าทางเลือกอาจมีอยู่จริง
    • นอกจากผลของเครือข่ายแล้ว ยังมีปัญหาเรื่อง การขาดทางเลือกที่ใช้งานได้จริง
      แพลตฟอร์มเปิดอย่าง Matrix ยังขาดฟีเจอร์อยู่ และ Discord ก็เป็น ตัวเลือกที่แย่น้อยที่สุด ในตอนนี้
    • สุดท้ายเหตุผลมันเรียบง่าย — เพราะ ผลของเครือข่าย
      เพื่อน ๆ อยู่ที่นั่น ผมก็เลยอยู่ที่นั่น
    • ชุมชน Discord ส่วนใหญ่ไม่ได้อยู่ในการควบคุมของผม
      ทุกครั้งที่ย้ายแพลตฟอร์ม สมาชิกจะลดลงและชุมชนก็พังทลาย
      สิ่งที่ถูกเรียกว่า “ความพยายามเล็กน้อย” จริง ๆ แล้วคือการฆ่าชุมชน
    • ก็เหมือนกับเหตุผลที่คนวัยกลางคนยังใช้ Facebook Marketplace
      ต่อให้ใช้แพลตฟอร์มอื่น สุดท้ายก็ เหลืออยู่คนเดียว
      แทบเป็นไปไม่ได้เลยที่จะทำให้ทุกคนย้ายพร้อมกัน
  • ผ่านแคปช่าบน Discord ได้แล้ว แต่
    มีข้อผิดพลาดว่า {"error":"failed to execute k-id privately action (status=404)"}
    ทั้งที่ผมเป็นผู้ใหญ่อย่างชัดเจน ขั้นตอนแบบนี้มัน เหลวไหลสิ้นดี
    จะโดนแบนก็ไม่สน

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

  • เกมแมวจับหนู ของการยืนยันอายุดิจิทัลเป็นภาระด้านกฎระเบียบมหาศาล
    ถ้าหลบเลี่ยงได้ง่ายขนาดนี้ แพลตฟอร์มก็แค่ติ๊ก ช่องทำตามกฎระเบียบ เท่านั้น
    และฐานความเชื่อถือที่แท้จริงก็เปราะบางมาก

    • จริง ๆ ก็มีวิธีที่ทำให้ทุกฝ่ายพอใจได้
      แต่บริษัทไม่ชอบ เพราะจะไม่ได้ครอบครอง ข้อมูลผู้ใช้ผู้ใหญ่ที่ผ่านการยืนยันแล้ว
      ดูเพิ่มเติมได้ที่ บล็อก Age Assurance Europe ของ Google
    • มันไม่มีทางสมบูรณ์แบบได้
      จุดประสงค์ของระบบแบบนี้ไม่ใช่การปิดกั้นอย่างสมบูรณ์ แต่คือ เพิ่มแรงเสียดทานเพื่อไม่ให้คนทั่วไปหลบเลี่ยงได้ง่าย ๆ