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

แยกขั้นตอนการซื้อออกจากขั้นตอนเซสชัน

สถาปัตยกรรม Privacy Pass ใน RFC 9576 ให้คำศัพท์ ได้แก่ ไคลเอนต์ ผู้รับรอง ผู้ออก และต้นทาง ไคลเอนต์พิสูจน์คุณสมบัติบางอย่างต่อผู้ออกและได้รับโทเคน ภายหลังจึงนำหนึ่งอันเสนอต่อต้นทาง ซึ่งตัดสินใจว่าจะให้บริการหรือไม่ เมื่อนำมาใช้กับ VPN คุณสมบัติที่รับรองอาจเป็นหน่วยการเข้าถึงหนึ่งหน่วย

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

สตริง bearer ที่ดูเหมือนสุ่มไม่ได้ให้สิ่งนั้น หากผู้ออกเก็บค่าไว้ข้างบันทึกลูกค้าและเกตเวย์สามารถถามหาการจับคู่นั้นได้ ปฏิสัมพันธ์ทั้งสองก็เชื่อมกันด้วยฐานข้อมูลไม่ใช่ด้วยการเข้ารหัสลับ การสร้างต้องทำให้ผู้ออกไม่สามารถตอบคำถามนั้นได้ และการติดตั้งต้องป้องกันไม่ให้ผู้ออกและเกตเวย์รวมมุมมองของกันและกัน

ตัดสินใจว่าโทเคนหนึ่งอันอนุญาตอะไร

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

Reuse ruleWhat it buysWhat it leaks
Single use per connectionStrongest unlinkability between sessionsFrequent reissuance, more purchase-to-use timing pairs
Bounded time windowFewer tokens, reconnects workActivity inside the window is linkable
Long-lived grantOperationally simpleBehaves like an account reference with extra steps

เลือกอย่างใดอย่างหนึ่งโดยเจตนาและเขียนพฤติกรรมเมื่อล้มเหลวไว้ข้าง ๆ ไคลเอนต์ที่ลองใหม่ด้วยสิทธิ์ใหม่หลังหมดเวลาจะใช้หน่วยเพิ่มอีกหนึ่งหน่วย ซึ่งทั้งเป็นความประหลาดใจด้านการเรียกเก็บเงินและเป็นสัญญาณความเป็นส่วนตัวในเวลาเดียวกัน

เขียนนโยบายการนำกลับมาใช้และการเพิกถอน

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

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

sudo grep -rIl --include='*.log' -e 'Bearer ' -e 'account_id' /var/log/vpn/

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

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

ระบุข้อกล่าวอ้าง แล้วจึงระบุสิ่งที่ยังสังเกตได้

เขียนข้อกล่าวอ้างด้านความเป็นส่วนตัวในประโยคเดียวพร้อมสมมติฐาน: ฝ่ายใดต้องไม่สามารถเชื่อมโยงบริบทใด และเกิดอะไรขึ้นหากผู้ออกและเกตเวย์นำบันทึกมาเทียบกัน การออกแบบที่ผ่านประโยคนั้นได้จึงจะตรวจสอบได้ ส่วนที่อธิบายเพียงว่า «ไม่มีความรู้» ไม่ผ่าน

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

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

บทความที่เกี่ยวข้อง