超声波攻击关键技术总结
非线性影响
典型的麦克风由四个部分组成,换能器产生的电压与声压成正比,之后通过放大器放大信号。之后使用低通滤波器滤除高频成分。最后,使用模数转换器(ADC)进行数字化和量化。由于声音的频率范围从20HZ到20kHZ,所以,一般来说,ADC的采样率是48Khz或者44.1hkz,滤波器的截止频率一般为20khz。为了获得高质量的录音,换能器和放大器应该尽可能的线性制作,然而,他们在实际中仍表现为非线性。假设输入的信号为 $S_{in}$,放大器输出的信号为$S_{out}$ ,那么:
$S_{out}=sum_{i=1}^ {infty}G_iS_{in}^i=G_1S_{in}+G_2S_{in}^2+G_3S_{in}^3+......$
$G_1S_{in}$ 是线性项并且占输入的主导地位,其他的项反映了非线性对大振幅输入的影响,通常,三阶和以上的高阶项相对于二阶项影响较弱。非线性将谐波失真和互调失真引入输出信号。假设输入信号的两个信号的频率是$f_1$和$f_2$ ,$S_{in}=cos(2pi f_{1}t)+cos(2pi f_2 t)$ ,那么输出的二阶项为:
$G_2 S_ {in}^2=G_2+frac{G_2}{2}(cos(2pi (2f_1)t)+cos(2pi (2f_2)t))+G_2(cos(2pi(f_1 + f_2)t)+cos(2pi (f_1 - f_2)t)) $
其中包含谐波$2f_1$和$2f_2$ ,以及互调频率$ f_1pm f_2$。
我们的攻击使用互调频率来从超声波频率中获取正常的声音频率,例如,有两个超声波频率25Khz和30Khz,这时候,听筒会产生30Khz-25Khz=5Khz的频率,其他频率会被低通滤波器滤除。
音频处理方法
假设输入信号为$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(2pi 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(2pi f_c t))$,使用$S_{attack}$进行攻击。
Sattack = n2 * ( Smodu + cos(2*pi*fc*t_modu) ); audiowrite(filename,Sattack,Fs_up)