1.ソフトウェアバージョン
quartusii 12.1
2.このアルゴリズムの理論的知識
このシステムの基本構造は、ご提供いただいた構造に従います。全体のブロック図は次のとおりです。
各セクションの機能は次のとおりです。
- 暗号化アルゴリズムモジュールは、ソースによってエンコードされた2進数シーケンスと暗号シーケンスの間でXOR演算を実行して、暗号文シーケンスを生成するXOR演算を採用しています。暗号化が完了すると、データの整合性を保証できるように、ドライブシステムに再度反復するように通知されます。
- ドライブシステムシーケンス暗号生成モジュールの主な機能は、暗号化用の暗号シーケンスを生成することです。これは、秘密シーケンスの生成(送信者での平文の暗号化)を含む、デジタル暗号化システムの暗号化の信頼性の中核部分です。自己同期システムであるため、暗号化されたカオスシーケンスは反復としても使用されます。駆動システムの価値。
- 復号化アルゴリズムモジュールもXOR演算を使用します。受信側では、暗号文シーケンスと暗号文シーケンスがXORされて、バイナリ平文シーケンスが復元されます。
- パスワード同期検出モジュールは、主にパスワード同期信号を生成して、応答システムのパスワードジェネレータモジュールを駆動し、受信者のパスワードジェネレータの状態を更新します。その動作原理は、チャネルを介して送信される暗号文が変化するかどうかを判断することであり、変化すると、駆動信号が生成されます。一方では、応答システムを駆動して次の反復を実行し、他方では、駆動します。復号化する復号化アルゴリズムモジュール。
- 応答システムシーケンスジェネレータモジュールの主な機能は、暗号化用のパスワードシーケンスを生成することです。パスワード同期検出モジュールによって生成されたパスワード同期駆動信号を受信すると、応答システムは1回反復します。
3.コアコード
//`timescale 1 ns/ 100 ps
module Encryption_complete_system(
i_clk,
i_rst,
i_enable,//the enable of signal
i_voice, //the signal
o_enable,//the enable of p2s
o_serial_dout,//the serial data of signal
o_serial_frame,
o_T_signal//the data of Encryption
);
input i_clk;
input i_rst;
input i_enable;
input[15:0] i_voice;
output o_enable;
output o_serial_dout;
output o_serial_frame;
output signed[31:0]o_T_signal;
//change the parallel data to serial data
p2s p2s_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_enable (i_enable),
.i_voice (i_voice),
.o_enable (o_enable),
.o_serial_dout(o_serial_dout)
);
add_frame add_frame_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_din (o_serial_dout),
.i_enable (o_enable),
.o_dout (o_serial_frame),
.o_enable ()
);
wire signed[31:0]xn;
wire signed[31:0]yn;
wire signed[31:0]zn;
Lorenz Lorenz_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_yn (o_T_signal),
.o_xn (xn),
.o_yn (yn),
.o_zn (zn)
);
Encryption Encryption_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_din (o_serial_frame),
.i_yn (yn),
.o_signal (o_T_signal)
);
endmodule
//`timescale 1 ns/ 100 ps
module Decryption_complete_system(
i_clk,
i_rst,
i_rec_signal,
o_dout,
o_dout_sign,
o_peak,
o_peak_enable,
o_peak_dout,
o_enable2,
o_voice_dout
);
input i_clk;
input i_rst;
input signed[31:0] i_rec_signal;
output signed[31:0]o_dout;
output o_dout_sign;
output[6:0] o_peak;
output o_peak_dout;
output o_peak_enable;
output o_enable2;
output[15:0] o_voice_dout;
wire signed[31:0]xn;
wire signed[31:0]yn;
wire signed[31:0]zn;
Lorenz2 Lorenz2_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_yn (i_rec_signal),
.o_xn (xn),
.o_yn (yn),
.o_zn (zn)
);
Decryption Decryption_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_din (i_rec_signal),
.i_yn (yn),
.o_signal(o_dout)
);
reg o_dout_sign;
always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
o_dout_sign <= 1'b0;
end
else begin
if(o_dout < 32'h0000_00ff)
o_dout_sign <= 1'b0;
else
o_dout_sign <= 1'b1;
end
end
find_frame find_frame_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_din (o_dout_sign),
.o_peak (o_peak),
.o_dout (o_peak_dout),
.o_enable(o_peak_enable)
);
s2p s2p_u(
.i_clk (i_clk),
.i_rst (i_rst),
.i_enable (o_peak_enable),
.i_serial_din (o_peak_dout),
.o_enable (o_enable2),
.o_voice_dout (o_voice_dout)
);
endmodule
clc;
clear;
close all;
N = 50000;
x = zeros(N,1);
y = zeros(N,1);
z = zeros(N,1);
x(1) = 0.001;
y(1) = 0.002;
z(1) = 0.02;
S1 = double(rand(N,1)>=0.5);
%简化后的发送
for n = 1:N-1
n
%反馈
if n == 1
S1_T(n)= S1(n) + y(n);
y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*y(n);
x(n+1) = 0.99*x(n) + 0.01*y(n);
z(n+1) = 0.001*x(n)*y(n) + 0.9973333*z(n);
else
S1_T(n)= S1(n) + y(n);
y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*S1_T(n);
x(n+1) = 0.99*x(n) + 0.01*S1_T(n);
z(n+1) = 0.001*x(n)*S1_T(n) + 0.9973333*z(n);
end
end
%简化后的接收
for n = 1:N-1
n
%反馈
S1_R(n)= S1_T(n) - y(n);
y(n+1) = 0.028*x(n) - 0.001*x(n)*z(n) + 0.999*S1_T(n);
x(n+1) = 0.99*x(n) + 0.01*S1_T(n);
z(n+1) = 0.001*x(n)*S1_T(n) + 0.9973333*z(n);
end
figure;
subplot(311);
plot(S1);
title('原信号');
axis([1,N,-1,2]);
subplot(312);
plot(S1_T);
title('加密后的信号');
subplot(313);
plot(S1_R);
title('解密后的信号');
axis([1,N,-2,2]);
4.操作手順とシミュレーションの結論
まず、MATLABを使用したアルゴリズムのシミュレーションを実装します。得られるシミュレーション結果は次のとおりです。
MATLABプログラムを実行します。
これはカオスモデルの基本的なシミュレーションであり、式の正確さと初期値の選択を示しています。
MATLABプログラムを実行します。
このプログラムは、カオス暗号化変調および復調システムのMATLAB浮動小数点シミュレーション結果グラフであり、上記の結果が正しいことを示しています。
MATLABプログラムを実行します。
上記のシミュレーション結果から、固定小数点シミュレーションを実行した場合、量子化幅が特定の要件を満たしている限り、システムの精度にまったく影響を与えないことがわかります。
上記の紹介によると、次のプログラムを書くことができます。
上から下へ、順番に:
システムトップレベルファイル
-暗号化変調モジュール
-暗号化サブモジュール、ローレンツカオスシーケンス生成モジュール、フレーミングモジュール、パラレルシリアルモジュール。
-復号化および復調モジュール
-復号化サブモジュール、Lorenzカオスシーケンス生成モジュール、フレーム検索モジュール、シリアルパラレルモジュール。
シミュレーション結果は次のとおりです。
トップレベルファイルのピンは次のとおりです。
1 |
i_clk |
システムクロックは、ハードウェアボードに接続されている水晶発振器の位置です。 |
2 |
i_rst |
システムリセット、ボードのキー番号ボタンに接続するだけです。 |
3 |
o_signal_enable |
ボードを接続せずに、並列信号の生成イネーブル信号をテストします。 |
4 |
o_signal |
並列信号をテストします。この信号は、検証のためにsignaltapIIに接続できます。 |
5 |
o_enable |
暗号化モジュールのイネーブル信号、ボードを接続する必要はありません |
6 |
o_serial_dout |
シリアル出力、ボードまたはsignaltapIIのテストピンに接続します |
7 |
o_serial_frame |
ボードまたはsignaltapIIのテストピンに接続されたシリアル信号フレーミング出力 |
8 |
o_T_signal |
暗号化された出力、検証用のこの信号、signaltapIIに接続できます |
9 |
o_dout |
復号化された出力はsignaltapIIに接続できます |
10 |
o_dout_sign |
出力信号のシンボル判定を復号化し、ボードまたはsignaltapIIのテストピンに接続します |
11 |
o_peak |
フレームサーチモジュールの相関ピーク出力、ボードを接続する必要はありません |
12 |
o_peak_enable、 |
フレーム検索モジュールの出力を有効にします。ボードを接続する必要はありません。 |
13 |
o_peak_dout |
フレームサーチモジュールのデータ出力は、ボードまたはsignaltapIIのテストピンに接続されます。 |
14 |
o_enable2 |
最後のシリアルからパラレルへの変換が有効になり、ボードを接続する必要がありません |
15 |
o_voice_dout |
最終的な直並列変換のデータ出力は、ボードまたはsignaltapIIのテストピンに接続されます。 |
5.参考文献
[1] Ma Zaiguang、Wu Chunying、QiuShuisheng。カオス同期とカオスコミュニケーション研究の新しい進歩と新しい試み[J]。JournalofRadio Wave Science、2002、17(3):8。
A01-53
6.完全なソースコードを入手する方法
方法1:WeChatまたはQQを介してブロガーに連絡する
方法2:MATLAB / FPGAチュートリアルを購読し、チュートリアルケースと2つの完全なソースコードを無料で入手します