《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)

章魚哥的豎笛發表於2020-12-21

傳送門


相關m檔案程式碼

效能分析m檔案中使用到的函式m檔案:

  1. tent_mapping_once.m
  2. henon_mapping_once.m
  3. henon_mappinginv_once.m
  4. cmbr_encryption.m
  5. cmbr_decryption.m

以上m檔案的獲取可前往博文???, 或到博主的資源裡下載( 資源名字為???, 需1積分 ). 另在本文附兩個額外需要的m檔案程式碼.

計算相關係數的函式m檔案 (r_xy_near.m)

function [ r_xy, X, Y ] = r_xy_near( I, n, direction )
% 引數說明
% I -- 輸入的影像灰度矩陣
% n -- 在I中按照一定要求隨機抽取的畫素點的個數
% direction -- 將direction指定方向的畫素作為相鄰畫素
%              Left: 水平向左的畫素
%              Right: 水平向右的畫素
%              Down: 垂直向下的畫素
%              Up; 垂直向上的畫素
%              Left_Up: 對角線左上角的畫素
%              Left_Down: 對角線左下角的畫素
%              Right_Up: 對角線右上角的畫素
%              Right_Down: 對角線右下角的畫素
% r_xy -- 最終計算得到的兩個長度為n的向量X和Y之間的相關係數
% X -- 隨機抽取的畫素點的灰度值(向量)
% Y -- 隨機抽取的畫素點的相鄰點的灰度值(向量)

I = double(I);
[H, W] = size(I);

% 根據direction引數確定隨機取樣點的橫縱座標範圍
switch direction
    case 'Left'
        R = floor( unifrnd(1, H, [1, n]) );
        C = floor( unifrnd(2, W, [1, n]) );
        delta_r = 0; delta_c = -1;
    case 'Right'
        R = floor( unifrnd(1, H, [1, n]) );
        C = floor( unifrnd(1, W-1, [1, n]) );
        delta_r = 0; delta_c = 1;
    case 'Up'
        R = floor( unifrnd(2, H, [1, n]) );
        C = floor( unifrnd(1, W, [1, n]) );
        delta_r = -1; delta_c = 0;
    case 'Down'
        R = floor( unifrnd(1, H-1, [1, n]) );
        C = floor( unifrnd(1, W, [1, n]) );
        delta_r = 1; delta_c = 0;
    case 'Left_Up'
        R = floor( unifrnd(2, H, [1, n]) );
        C = floor( unifrnd(2, W, [1, n]) );
        delta_r = -1; delta_c = -1;
    case 'Left_Down'
        R = floor( unifrnd(1, H-1, [1, n]) );
        C = floor( unifrnd(2, W, [1, n]) );
        delta_r = 1; delta_c = -1;
    case 'Right_Up'
        R = floor( unifrnd(2, H, [1, n]) );
        C = floor( unifrnd(1, W-1, [1, n]) );
        delta_r = -1; delta_c = 1;
    case 'Right_Down'
        R = floor( unifrnd(1, H-1, [1, n]) );
        C = floor( unifrnd(1, W-1, [1, n]) );
        delta_r = 1; delta_c = 1;
end

X = []; Y = [];  % 初始化隨機取樣點處的灰度值向量
for i = 1 : n
    X(i) = I( R(i), C(i) );
    Y(i) = I( R(i) + delta_r, C(i) + delta_c );
end

% 計算向量X與向量Y的相關係數
mx = mean(X); my = mean(Y);
cov_xy = mean( (X - mx) .* (Y - my) );
cov_x = mean( (X - mx) .* (X - mx) );
cov_y = mean( (Y - my) .* (Y - my) );
r_xy = cov_xy / sqrt( cov_x * cov_y );

end

效能分析的指令碼m檔案 (performance_analysis_2.m)

%%  m檔案說明
%   對《混沌對映與位元重組的影像加密》一文的影像加密演算法和解密演算法的效能分析
%   以下的每個分析都需要呼叫到獨立的自定義函式檔案cmbr_encryption.m, cmbr_decryption.m

%%  相鄰畫素的相關性分析
%   需要額外呼叫函式檔案 r_xy_near.m

clear;  clc;  close all;
I = imread('fruit.png');  I = I(:, 1 : 323);
x0 = 0.234;  S = 1280;  n = 20000;
% direction = 'Left';
% direction = 'Right';
% direction = 'Up';
% direction = 'Down';
% direction = 'Left_Up';
% direction = 'Left_Down';
% direction = 'Right_Up';
direction = 'Right_Down';

[ r_xy_I, X_I, Y_I ] = r_xy_near( I, n, direction );
[ C, ~, ~ ] = cmbr_encryption( I, x0, S );
[ r_xy_C, X_C, Y_C ] = r_xy_near( C, n, direction );

figure,  scatter( X_I, Y_I );  title(['明文影像', num2str(n), '對相鄰畫素的灰度值分佈']);
xlabel('(x,y)的畫素值');  ylabel('(x,y)的相鄰畫素值');
disp(['明文影像隨機取', num2str(n), '對相鄰畫素計算得相關係數: ', num2str(r_xy_I)]);
figure,  scatter( X_C, Y_C );  title(['密文影像', num2str(n), '對相鄰畫素的灰度值分佈']);
xlabel('(x,y)的畫素值');  ylabel('(x,y)的相鄰畫素值');
disp(['密文影像隨機取', num2str(n), '對相鄰畫素計算得相關係數: ', num2str(r_xy_C)]);

%%  資訊熵分析
%   對於一幅密文影像, 它的理想的資訊熵的值是8.
%   呼叫Matlab自帶函式entropy( )計算資訊熵

clear;  clc;  close all;
I = imread('fruit.png');  I = I(:, 1 : 323);
x0 = 0.234;  S = 1280;
[C, ~, ~] = cmbr_encryption( I, x0, S );
disp(['密文影像的資訊熵為: ', num2str( entropy(C) )]);

%%  加解密時間隨著尺寸的變化

clear;  clc;  close all;
x0 = 0.234;  S = 1280;
size_sequence = 50 : 50 : 1000;
time_en = [];  time_de = [];
for k = size_sequence
    I = floor( rand(k, k) * 255 );
    
    tic
    [ C, ~, s ] = cmbr_encryption( I, x0, S );
    toc
    time_en = [time_en, toc];
    
    tic
    [ ~, ~ ] = cmbr_decryption( C, x0, s, S );
    toc
    time_de = [time_de, toc];
    
    disp(['影像大小為: ', num2str(k), ' * ', num2str(k), '的加解密已完成']);
end

figure,  plot(size_sequence, time_en, 'r');
title('加密演算法用時與明文影像大小的關係曲線');
xlabel('明文影像大小');  ylabel('加密演算法用時');

figure,  plot(size_sequence, time_de, 'b');
title('解密演算法用時與密文影像大小的關係曲線');
xlabel('密文影像大小');  ylabel('解密演算法用時');

相鄰畫素相關性分析

評估指標
相鄰畫素的相關係數 r r r, 計算公式為
r x y = C o v ( x , y ) C o v ( x , x ) ⋅ C o v ( y , y ) , C o v ( x , y ) = 1 n ∑ i = 1 n ( x i − E ( x ) ) ( y i − E ( y ) ) , E ( x ) = 1 n ∑ i = 1 n x i . \begin{aligned} & {{r}_{xy}}=\frac{Cov\left( x,y \right)}{Cov\left( x,x \right)\centerdot Cov\left( y,y \right)}, \\ & Cov\left( x,y \right)=\frac{1}{n}\sum\limits_{i=1}^{n}{\left( {{x}_{i}}-E\left( x \right) \right)\left( {{y}_{i}}-E\left( y \right) \right)}, \\ & E\left( x \right)=\frac{1}{n}\sum\limits_{i=1}^{n}{{{x}_{i}}}. \\ \end{aligned} rxy=Cov(x,x)Cov(y,y)Cov(x,y),Cov(x,y)=n1i=1n(xiE(x))(yiE(y)),E(x)=n1i=1nxi.
其中 C o v ( x , y ) Cov\left( x,y \right) Cov(x,y)是向量 x x x與向量 y y y的協方差係數, x i , y i {{x}_{i}},{{y}_{i}} xi,yi是向量 x , y x,y x,y的每個分量, n n n是向量 x , y x,y x,y的長度, E ( x ) , E ( y ) E\left( x \right),E\left( y \right) E(x),E(y)就是向量 x , y x,y x,y各自的所有分量的均值. r x y {{r}_{xy}} rxy的值介於 − 1 -1 1 1 1 1之間, 其絕對值 ∣ r x y ∣ \left| {{r}_{xy}} \right| rxy越接近 1 1 1, 表示向量 x , y x,y x,y的相關程度越大.

已知一般的明文影像畫素在水平, 垂直, 或對角方向上高度相關, 在密文影像中, 相鄰畫素之間的相關性應該顯著降低.

分析方法
使用以下的 323 × 323 323 \times 323 323×323的圖片素材作為明文影像.

《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)

① 將上面的明文影像 I I I進行加密得到密文影像 C C C;
② 規定好相鄰畫素位於原畫素的什麼方向 (左方, 右方, 上方, 下方, 左上方, 左下方, 右上方, 右下方);
③ 隨機在 I I I中抽取 n n n對相鄰畫素形成兩個長度均為 n n n的向量 X 1 ,   Y 1 X_1,\text{ }Y_1 X1, Y1, 計算其相關係數 r 1 r_1 r1;
④ 對應地, 隨機在 C C C中抽取 n n n對相鄰畫素形成兩個長度均為 n n n的向量 X 2 ,   Y 2 X_2,\text{ }Y_2 X2, Y2, 計算其相關係數 r 2 r_2 r2, 然後與 r 1 r_1 r1進行對比.
以下令 n = 20000 n = 20000 n=20000.

實驗結果

《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向左的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向左的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向右的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向右的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向上的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向上的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向下的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取向下的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取左上角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取左上角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取左下角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取左下角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取右上角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取右上角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取右下角的畫素為相鄰畫素
《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
取右下角的畫素為相鄰畫素
'Left'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.97101
密文影像隨機取20000對相鄰畫素計算得相關係數: 0.0045093

'Right'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.97189
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0059508

'Up'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.96464
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0044817

'Down'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.96428
密文影像隨機取20000對相鄰畫素計算得相關係數: 0.012069

'Left_Up'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94745
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0022895

'Left_Down'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94837
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0056973

'Right_Up'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94772
密文影像隨機取20000對相鄰畫素計算得相關係數: 0.014249

'Right_Down'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94375
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0023908

實驗結果表明無論規定相鄰畫素位於原畫素的哪個方向, 明文影像的相鄰畫素與原畫素灰度值的二維分佈呈現近似線性關係, 相關係數接近1; 而密文影像的相鄰畫素與原畫素灰度值的二維分佈非常均勻, 佈滿平面, 相關係數接近0. 因此加密演算法滿足零相關, 加密效果較好, 密文影像具有更低的畫素相關性.

安全性強度

評估指標
資訊熵, 一種用來檢測加密系統安全性強度的引數, 計算公式為
H ( m ) = ∑ i = 0 2 N − 1 p ( m i ) log ⁡ 2 1 p ( m i ) . H\left( m \right)=\sum\limits_{i=0}^{2N-1}{p\left( {{m}_{i}} \right){{\log }_{2}}\frac{1}{p\left( {{m}_{i}} \right)}}. H(m)=i=02N1p(mi)log2p(mi)1.
式中, m i {{m}_{i}} mi表示第 i i i位灰度級, m i = 0 , 1 , ⋯   , 255 {{m}_{i}}=0,1,\cdots ,255 mi=0,1,,255, p ( m i ) p\left( {{m}_{i}} \right) p(mi)表示畫素值為 m i {{m}_{i}} mi的概率(一般當影像畫素個數足夠多時, 可用頻率替代), N N N表示在密文影像中所有畫素的個數.
對於一幅密文影像, 它的理想的資訊熵的值為8, 在這種情況下, 密文影像就不會向那些試圖獲得沒有授權訪問的任何人洩露任何有用的資訊.

分析方法
使用以下的 323 × 323 323 \times 323 323×323的圖片素材作為明文影像, 對其進行加密得到密文影像, 計算密文影像的資訊熵.

《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)

實驗結果

密文影像的資訊熵為: 7.9982

密文影像的資訊熵非常接近8, 表明加密演算法在進行對影像加密的過程中可以避免發生資訊洩露, 影像加密演算法具有良好的抗熵值分析攻擊.

影像大小與計算用時曲線

拋開對加密演算法進行理論上的複雜度分析(複雜度分析可以參考原論文), 我們想簡單研究在同一臺計算機上, 保持金鑰和其他條件不變, 加密演算法用時與輸入的明文影像大小的關係. 為了方便, 我們規定輸入的明文影像的大小是 N × N N \times N N×N的. 令 N = 50 ,   100 ,   150 ,   ⋯   ,   1000 N=50,\text{ }100,\text{ }150,\text{ }\cdots ,\text{ }1000 N=50, 100, 150, , 1000, 計算加密演算法用時得到的結果如下.

《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
歷時 0.549801 秒。
歷時 0.547340 秒。
影像大小為: 50 * 50的加解密已完成
歷時 1.837155 秒。
歷時 1.809797 秒。
影像大小為: 100 * 100的加解密已完成
歷時 4.154024 秒。
歷時 4.064169 秒。
影像大小為: 150 * 150的加解密已完成
歷時 7.362790 秒。
歷時 7.058512 秒。
影像大小為: 200 * 200的加解密已完成
歷時 11.549046 秒。
歷時 11.026304 秒。
影像大小為: 250 * 250的加解密已完成
歷時 17.058409 秒。
歷時 15.857187 秒。
影像大小為: 300 * 300的加解密已完成
歷時 22.856086 秒。
歷時 21.770861 秒。
影像大小為: 350 * 350的加解密已完成
歷時 30.244508 秒。
歷時 28.422448 秒。
影像大小為: 400 * 400的加解密已完成
歷時 38.321001 秒。
歷時 36.493705 秒。
影像大小為: 450 * 450的加解密已完成
歷時 47.782701 秒。
歷時 44.477456 秒。
影像大小為: 500 * 500的加解密已完成
歷時 58.232867 秒。
歷時 54.052163 秒。
影像大小為: 550 * 550的加解密已完成
歷時 69.501967 秒。
歷時 64.052201 秒。
影像大小為: 600 * 600的加解密已完成
歷時 81.940872 秒。
歷時 75.634364 秒。
影像大小為: 650 * 650的加解密已完成
歷時 95.774720 秒。
歷時 87.555124 秒。
影像大小為: 700 * 700的加解密已完成
歷時 111.549318 秒。
歷時 101.265168 秒。
影像大小為: 750 * 750的加解密已完成
歷時 126.735671 秒。
歷時 114.441286 秒。
影像大小為: 800 * 800的加解密已完成
歷時 144.922362 秒。
歷時 129.592058 秒。
影像大小為: 850 * 850的加解密已完成
歷時 163.219478 秒。
歷時 144.857971 秒。
影像大小為: 900 * 900的加解密已完成
歷時 182.688934 秒。
歷時 160.887248 秒。
影像大小為: 950 * 950的加解密已完成
歷時 201.769145 秒。
歷時 179.507409 秒。
影像大小為: 1000 * 1000的加解密已完成

用時-尺寸曲線與原文分析得到的複雜度
O ( 8 × N 2 + ( 8 × N ) 2 + N 2 + 8 × N 2 ) = O ( 81 N 2 ) = O ( N 2 ) . O\left( 8\times {{N}^{2}}+{{\left( 8\times N \right)}^{2}}+{{N}^{2}}+8\times {{N}^{2}} \right)=O\left( 81{{N}^{2}} \right)=O\left( {{N}^{2}} \right). O(8×N2+(8×N)2+N2+8×N2)=O(81N2)=O(N2).
是很吻合的.

相關文章