1. AudioContext ใน Browser Fingerprinting คืออะไร
AudioContext เป็นส่วนหนึ่งของ Web Audio API ที่นำเสนอกราฟการประมวลผลสัญญาณเพื่อจัดการแหล่งเสียง, ฟิลเตอร์ และปลายทางภายในเบราว์เซอร์ แม้ว่าจะไม่เด่นชัดหรือถูกอ้างถึงบ่อยเท่า Canvas หรือ WebGL fingerprints แต่ก็สามารถเป็น ตัวระบุระดับซอฟต์แวร์ที่ซ่อนอยู่แต่ทรงพลัง
ระบบตรวจจับลายนิ้วมือใช้ประโยชน์จาก ไปป์ไลน์การเรนเดอร์เสียง เช่น:
- จำนวนช่องสัญญาณและความสามารถของอุปกรณ์เอาต์พุตเสียง
- อัตราตัวอย่างและความคลาดเคลื่อนของความแม่นยำในการเล่น
- พฤติกรรมการหน่วงเวลาการประมวลผลเสียง
- ไม่ว่า ScriptProcessorNode หรือ AudioWorklet จะรองรับหรือถูกบล็อก
- คุณสมบัติการดีบักเช่น
audioContext.listener
,currentTime
, และbaseLatency
ด้วยการโต้ตอบของผู้ใช้น้อยที่สุดหรือข้อความแจ้งการอนุญาต AudioContext fingerprint นั้น ยากที่จะปฏิเสธ และ สามารถสังเคราะห์ได้โดยเงียบๆ ทำให้เป็นเป้าหมายยอดนิยมในระบบการจดจำอุปกรณ์แบบพาสซีฟ
2. แพลตฟอร์มตรวจจับ AudioContext Fingerprints ได้อย่างไร
แพลตฟอร์มที่ล้ำหน้าที่สุด (โดยเฉพาะแพลตฟอร์มที่มุ่งเป้าไปที่ การวอเตอร์มาร์กเสียง, การประมวลผลเสียงแบบ Convolution หรือ ลักษณะ DSP) สามารถใช้ AudioContext ในลักษณะที่วัดความผันแปรภายในเบราว์เซอร์และเอนจิ้นเสียง
ตัวอย่างโค้ดสำหรับตรวจจับ:
const audioCtx = new AudioContext();
const oscillator = audioCtx.createOscillator();
const listener = audioCtx.listener;
const dest = audioCtx.destination;
console.log(listener.forwardX.value, listener.forwardY.value, listener.forwardZ.value);
console.log({
sampleRate: audioCtx.sampleRate,
baseLatency: audioCtx.baseLatency,
state: audioCtx.state,
outputChannelCount: dest.maxChannelCount,
});
สิ่งที่สามารถตรวจจับลายนิ้วมือได้:
คุณสมบัติเสียง | การใช้งานในการติดตาม |
---|---|
Sample Rate | สามารถตรวจจับค่าเริ่มต้นของ OS/macOS/Windows ได้ |
Channel Count Support | การอนุมานความสามารถของอุปกรณ์ |
Audio Listener Space | รูปแบบการวางแนวสเตอริโอ/3D ที่ซ่อนอยู่ |
DSP Kernel Signatures | โดยเฉพาะในเครือข่าย Convolution |
Web Audio Scheduling | เหตุการณ์เช่น oncomplete + latencies เป็นตัวบอก |
บางแพลตฟอร์มยังเรนเดอร์รูปคลื่นสังเคราะห์, คำนวณ Fast Fourier Transforms (FFTs) ใน JavaScript หรือเข้ารหัสสิ่งประดิษฐ์เสียงที่ละเอียดอ่อน (เช่น ความคลาดเคลื่อนของการตัดสัญญาณ) เพื่อแยกความแตกต่างระหว่างเบราว์เซอร์จริงและเบราว์เซอร์จำลอง
3. FlashID ปิดบัง AudioContext Fingerprints อย่างไร
เพื่อป้องกันไม่ให้เบราว์เซอร์ถูกตรวจจับลายนิ้วมือโดยรอบผ่านเสียง FlashID รับประกัน การจำลองเสมือนและการปลอมแปลงพฤติกรรม Web Audio API อย่างสมบูรณ์ รวมถึง:
การจำลองเสมือน AudioContext Listener
- ปลอมแปลงค่าการวางแนว 3D เช่น
forwardX
,positionX
,velocity
สำหรับPannerNode
และAudioListener
- ปลอมแปลงค่าการวางแนว 3D เช่น
การปกปิด SampleRate และ Channel Count
- ปกปิด
audioContext.sampleRate
ด้วยค่าเดสก์ท็อป/มือถือที่สมจริงที่กำหนดค่าได้ (44100
,48000
ฯลฯ) - ปลอมแปลงขีดจำกัดช่องสัญญาณเอาต์พุต (
destination.maxChannelCount
) โดยไม่คำนึงถึงขีดจำกัดของอุปกรณ์จริง
- ปกปิด
การจำลองเส้นทาง DSP
- เข้ารหัสเอาต์พุตบัฟเฟอร์แบบผสมผสานแทนการใช้กราฟสัญญาณจริง
- ป้องกันไม่ให้ระบบใช้การสื่อสาร ScriptNode หรือ Worklet เพื่อหาความเฉพาะตัว
การควบคุมสถานะและการหน่วงเวลา
- แก้ไข
audioContext.state
ให้เป็นค่ารันไทม์ที่คาดไว้ (running/closed/suspended) - ปกปิด
baseLatency
เพื่อสะท้อนพฤติกรรมเริ่มต้นของเดสก์ท็อปหรือมือถือมาตรฐาน
- แก้ไข
ความสอดคล้องของบริบทตลอดเซสชัน
- ลายนิ้วมือเสียง ถูกล็อกไว้กับตัวตนต่อโปรไฟล์
- ป้องกันการเปลี่ยนแปลงระหว่างเซสชันการเรนเดอร์แบบต่อเนื่องโดยการรับประกันค่าพื้นฐานเดียวกันตลอดการรีเซ็ตเอนจิ้นหลายครั้ง
FlashID จำลองสิ่งเหล่านี้โดยใช้ พร็อกซี AudioBus ภายใน และกำหนดค่าโหนดปลอมและสายโซ่การกำหนดเส้นทางที่รักษา การตอบสนองของ Web Audio API ที่น่าเชื่อถือ โดยไม่เปิดเผยลักษณะเฉพาะของ DSP ของอุปกรณ์จริง
สิ่งนี้ช่วยให้แพลตฟอร์มไม่สามารถใช้ AudioContext แยกต่างหากหรือร่วมกับ Canvas/WebGL เพื่อสร้างความหลากหลายของอุปกรณ์ขึ้นใหม่หรือระบุสภาพแวดล้อมปลอมได้ ทั้งหมดนี้ในขณะที่ยังคงมีอินเทอร์เฟซเดียวกันกับที่โค้ดของคุณคาดหวัง
คุณอาจชอบ