超聲波攻擊關鍵技術總結spa
非線性影響orm
典型的麥克風由四個部分組成,換能器產生的電壓與聲壓成正比,以後經過放大器放大信號。以後使用低通濾波器濾除高頻成分。最後,使用模數轉換器(ADC)進行數字化和量化。因爲聲音的頻率範圍從20HZ到20kHZ,因此,通常來講,ADC的採樣率是48Khz或者44.1hkz,濾波器的截止頻率通常爲20khz。爲了得到高質量的錄音,換能器和放大器應該儘量的線性製做,然而,他們在實際中仍表現爲非線性。假設輸入的信號爲 $S_{in}$,放大器輸出的信號爲$S_{out}$ ,那麼:blog
$S_{out}=\sum_{i=1}^ {\infty}G_iS_{in}^i=G_1S_{in}+G_2S_{in}^2+G_3S_{in}^3+......$ip
$G_1S_{in}$ 是線性項而且佔輸入的主導地位,其餘的項反映了非線性對大振幅輸入的影響,一般,三階和以上的高階項相對於二階項影響較弱。非線性將諧波失真和互調失真引入輸出信號。假設輸入信號的兩個信號的頻率是$f_1$和$f_2$ ,$S_{in}=cos(2\pi f_{1}t)+cos(2\pi f_2 t)$ ,那麼輸出的二階項爲:input
$G_2 S_ {in}^2=G_2+\frac{G_2}{2}(cos(2\pi (2f_1)t)+cos(2\pi (2f_2)t))+G_2(cos(2\pi(f_1 + f_2)t)+cos(2\pi (f_1 - f_2)t)) $it
其中包含諧波$2f_1$和$2f_2$ ,以及互調頻率$ f_1\pm f_2$。io
咱們的攻擊使用互調頻率來從超聲波頻率中獲取正常的聲音頻率,例如,有兩個超聲波頻率25Khz和30Khz,這時候,聽筒會產生30Khz-25Khz=5Khz的頻率,其餘頻率會被低通濾波器濾除。function
音頻處理方法class
假設輸入信號爲$S_{normal}$音頻
[Snormal, Fs] = audioread(inputFile);
首先,使用低通濾波器對聲音$S_{normal}$進行處理,截至頻率爲8khz,輸出信號爲$S_{filter}$
Fp = 8e3; % 8 kHz passband-edge frequency Fs = 48e3; % 48 kHz sampling frequency Rp = 0.00057565; % Corresponds to 0.01 dB peak-to-peak ripple Rst = 1e-4; % Corresponds to 80 dB stopband attenuation Fst = 9e3; % Transition Width = Fst - Fp numMinOrder = firgr('minorder',[0,Fp/(Fs/2),Fst/(Fs/2),1],[1 1 0 0],... [Rp Rst]); % useful function to determine numMinOrder lowpassFIR = dsp.FIRFilter('Numerator',numMinOrder); % Design Low pass Filter Sfilter = step(lowpassFIR,Snormal); % Apply low pass filter
對$S_{filter}$進行插值,獲得$S_{up}$
Sup = interp(Sfilter,4);
使用載波$f_c$進行調製,獲得$S_{modu}=n_1 S_{up} cos(2\pi f_c t)$,這會產生$f_c -8Khz$和$f_c + 8Khz$兩個邊帶,爲了讓人耳聽不見,$f_c$最低爲28Khz。
fc = 30e3; fs = Fs * 4; [Smodu,t_modu] = modulate(Sup,fc,fs,'am'); Smodu = n1 * Smodu;
利用上文的非線性性質,加入一個信號,使麥克風產生互調波。$S_{attack}=n2(S_{mode}+cos(2\pi f_c t))$,使用$S_{attack}$進行攻擊。
Sattack = n2 * ( Smodu + cos(2*pi*fc*t_modu) ); audiowrite(filename,Sattack,Fs_up)