Quiet.js: a library for receiving and transmitting data by ultrasound





In several episodes of the series “Mr. Robot,” the protagonist Elliot breaks into and doxes his victims, recording the collected information on an audio CD. He signs each disc with the name of the group and album. If an attacker gains access and puts the disc on play, he will hear the music, as it should be.



Apparently, Elliot used the DeepSound program to hide information in audio tracks. This is a little strange, because the program is released only under Windows, and the hacker, by definition, could not work in this operating system. In addition to DeepSound, there are similar tools for sound steganography. For example, QuickStego , AudioStegano , BitCrypt , MP3Stego , Steghide , AudioStego .



However, in our time, CDs are no longer so relevant. It is much more convenient to hide information in audio broadcasts that are transmitted and received on any audio device. For example, if someone wants to secretly transfer files from the local computer, he can quietly for the observer to transfer the document with ultrasound through the speakers - and record it on the phone.





DeepSound supports AES-256 encryption for files that are embedded in audio tracks



In principle, this is not steganography, because digital data is not hidden in sound, but converted into sound. To hide them in the soundtrack or in the music track, you need to make additional transformations (scientists have achieved a maximum bitrate of 984 bps in hard rock style music), here is only the first stage of this procedure.



The first stage is the modulation of the sound signal from the files. For this purpose, the open source library quiet is designed, which gives the output of a binary file for playback with a sound card or a .wav file. On the receiver side, it performs the inverse transformation, restoring the original files.



The library has a special ultrasonic-



mode for transmitting data with a very low bitrate at frequencies of about 19 kHz, which is on the border of human perception. Some people may hear some strange sounds at ultra high frequency, while others will not hear anything. Obviously, to broadcast a sound such a sound “through the air”, very high-quality sound equipment is required, that is, very good speakers and a microphone.



The Quiet.js convenient javascript wrapper is developed on the basis of the quiet library. It encodes and decodes arbitrary files for transferring through a sound card in the same way, but at the same time it supports the Web Audio interface. Thus, sending data is possible from the browsers Chrome, Firefox, Safari and Edge. Data Acceptance is supported in Chrome, Edge and, in part, in Firefox.



Firefox doesn’t receive sound at ultra high frequencies, and Safari doesn’t work at all.



See Quiet.js examples on the demo page . You can run the transmitter and receiver on different devices, for example, on two smartphones. The developers recommend setting the sound volume on the transmitting device below 50%.



The templates on the demo page are configured to transmit text ...







... and pictures.







The transfer of images requires more serious compression and decompression, therefore it is carried out only via an audio cable (for example, an audio jack 3.5 mm on a smartphone), and the receiver can only be run on a computer.



Here's what the profile for text transmission looks like:



 { "audible": { "checksum_scheme": "crc32", "inner_fec_scheme": "v27", "outer_fec_scheme": "none", "mod_scheme": "gmsk", "frame_length": 25, "modulation": { "center_frequency": 4200, "gain": 0.15 }, "interpolation": { "samples_per_symbol": 10, "symbol_delay": 4, "excess_bandwidth": 0.35 }, "encoder_filters": { "dc_filter_alpha": 0.01 }, "resampler": { "delay": 13, "bandwidth": 0.45, "attenuation": 60, "filter_bank_size": 64 } } }
      
      





As you can see, the profile is recorded in JSON format, so it’s very convenient to change the settings at your discretion. For example, a gmsk



modulation gmsk



and a fundamental frequency of 4200 Hz are used to transmit text.



By the way, on some LCD monitors you can generate sound even when the speakers are turned off.






All Articles