【カオス暗号化・復号化変調・復調】FPGAベースのカオス自己同期カオスデジタルセキュア通信システム

1.ソフトウェアバージョン

quartusii 12.1

2.このアルゴリズムの理論的知識

    このシステムの基本構造は、ご提供いただいた構造に従います。全体のブロック図は次のとおりです。

 各セクションの機能は次のとおりです。

  1. 暗号化アルゴリズムモジュールは、ソースによってエンコードされた2進数シーケンスと暗号シーケンスの間でXOR演算を実行して、暗号文シーケンスを生成するXOR演算を採用しています。暗号化が完了すると、データの整合性を保証できるように、ドライブシステムに再度反復するように通知されます。
  2. ドライブシステムシーケンス暗号生成モジュールの主な機能は、暗号化用の暗号シーケンスを生成することです。これは、秘密シーケンスの生成(送信者での平文の暗号化)を含む、デジタル暗号化システムの暗号化の信頼性の中核部分です。自己同期システムであるため、暗号化されたカオスシーケンスは反復としても使用されます。駆動システムの価値。
  3. 復号化アルゴリズムモジュールもXOR演算を使用します。受信側では、暗号文シーケンスと暗号文シーケンスがXORされて、バイナリ平文シーケンスが復元されます。
  4. パスワード同期検出モジュールは、主にパスワード同期信号を生成して、応答システムのパスワードジェネレータモジュールを駆動し、受信者のパスワードジェネレータの状態を更新します。その動作原理は、チャネルを介して送信される暗号文が変化するかどうかを判断することであり、変化すると、駆動信号が生成されます。一方では、応答システムを駆動して次の反復を実行し、他方では、駆動します。復号化する復号化アルゴリズムモジュール。
  5. 応答システムシーケンスジェネレータモジュールの主な機能は、暗号化用のパスワードシーケンスを生成することです。パスワード同期検出モジュールによって生成されたパスワード同期駆動信号を受信すると、応答システムは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つの完全なソースコードを無料で入手します

おすすめ

転載: blog.csdn.net/ccsss22/article/details/123943996