बिना माइक्रोफ़ोन के ऑडियो फ़िंगरप्रिंटिंग

“ऑडियो फ़िंगरप्रिंट” सुनने में ऐसा लगता है जैसे माइक्रोफ़ोन से रिकॉर्ड किया गया हो। ऐसा नहीं है। यह एक संख्या है जो इस बात से निकलती है कि आपकी मशीन एक कृत्रिम ध्वनि को कैसे प्रोसेस करती है जो कभी बजाई नहीं जाती, कभी कैप्चर नहीं होती और कभी टैब से बाहर नहीं जाती।
यह कैसे बनता है
स्क्रिप्ट एक OfflineAudioContext बनाती है, जो ऑडियो को स्पीकर के बजाय मेमोरी के बफ़र में रेंडर करता है। वह एक ऑसिलेटर, आम तौर पर तय आवृत्ति की ट्रायंगल वेव, को डायनामिक्स कंप्रेसर से होते हुए डेस्टिनेशन तक जोड़ती है, और रेंडरिंग शुरू करती है। जब बफ़र तैयार होता है, वह सैंपल का एक टुकड़ा पढ़ती है, अक्सर कुछ सौ मान, और उन्हें हैश करती है। नतीजा एक छोटी स्ट्रिंग होता है जैसे d4f50eb9।
पूरी प्रक्रिया में कुछ दर्जन मिलीसेकंड लगते हैं और किसी अनुमति की ज़रूरत नहीं होती, क्योंकि कुछ कैप्चर नहीं होता। स्क्रिप्ट का काम पूरा होने पर OfflineAudioContext बंद हो जाता है।
यह मशीनों के बीच अलग क्यों होता है
कंप्रेसर और ऑसिलेटर ब्राउज़र के ऑडियो इंजन के भीतर फ़्लोटिंग-पॉइंट अंकगणित में लागू होते हैं, और ठीक आउटपुट इंजन के संस्करण, ऑपरेटिंग सिस्टम की मैथ लाइब्रेरी, CPU के फ़्लोटिंग-पॉइंट व्यवहार, और कुछ कॉन्फ़िगरेशन में ऑडियो हार्डवेयर के सैंपल रेट पर निर्भर करता है। अंतर बहुत छोटे होते हैं, दशमलव के आख़िरी स्थानों में कुछ बिट, पर हैशिंग छोटे अंतरों को पूरी तरह अलग स्ट्रिंग में बदल देती है। canvas हैश की तरह, यह एक मशीन पर स्थिर रहता है और मशीनों के बीच बदलता है।
इसकी विविधता canvas से कम है: एक ही ब्राउज़र बिल्ड और ऑपरेटिंग सिस्टम वाली कई मशीनें वही ऑडियो हैश देती हैं। यह मुख्यतः पुष्टि करने वाले संकेत के रूप में और अपना आउटपुट रैंडम करने वाले ब्राउज़र पहचानने के तरीक़े के रूप में उपयोगी है।
ब्राउज़र क्या करते हैं
Brave ऑडियो रीडबैक में उसी तरह नॉइज़ जोड़ता है जैसे canvas के लिए। resist-fingerprinting वाला Firefox Web Audio API के कुछ हिस्से बंद कर देता है या स्थिर मान लौटाता है। Chromium आउटपुट नहीं बदलता। जो ब्राउज़र हैश को रैंडम करता है वह हर रीलोड पर अलग मान पैदा करता है, जिसे डायग्नोस्टिक बस आपको रीलोड करके तुलना करने देकर दिखा देता है।
प्राइवेसी, सटीक रूप में
कोई ध्वनि रिकॉर्ड नहीं होती। कोई माइक्रोफ़ोन नहीं खुलता। बफ़र गणना की अवधि भर मेमोरी में रहता है और फिर हटा दिया जाता है। जो कुछ टैब से बाहर जा सकता है वह केवल हैश है, और तभी जब पेज उसे भेजना चुने। जो डायग्नोस्टिक हैश को लोकल रूप से निकालकर आपको दिखाता है, वह ठीक वही पढ़ रहा है जो कोई ट्रैकर पढ़ता, और फिर उसके साथ कुछ नहीं करता।
मान को पढ़ना
दो बातें जाँचने लायक़ हैं। पहली, कि हैश है भी या नहीं: “Unavailable” का मतलब API ब्लॉक है, जिसे कुछ साइटें अपने आप में एक संकेत मानती हैं। दूसरी, कि वह स्थिर है: रीलोड करें और मान नहीं बदलना चाहिए। जो हैश लोड-दर-लोड बदलता है वह बताता है कि ब्राउज़र नॉइज़ इंजेक्ट कर रहा है, जो साइटों के पार ट्रैकिंग से बचाता है पर ब्राउज़र को ऐसा करने वाले के रूप में चिह्नित भी करता है।


