Разработка алгоритма и программного обеспечения маскирования данных, исследование вопросов стойкости к частотному анализу

Структура подсистемы защиты информации в системе глобальной спутниковой связи. Защита от прослушивания второго рода. Исследование алгоритма маскирования и вопросов стойкости к частотному анализу. Результаты тестирования в спутниковых системах связи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 01.10.2017
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

__int64 TForm1::shifr_raund_sumnX(unsigned long* y,int j,int n)

{

//реализация последнего такта шифрования

__int64 temp_x2=0;

int cin = 0;

for(int i = n-1-j;i<n-1;i++){

temp_x2 += y[cin]^c[j][i];

cin++;

}

return temp_x2;

}

//---------------------------------------------------------------------------

__int64 TForm1::shifr_raund_sumX(unsigned long *x,unsigned long *y,int j,int n)

{

__int64 temp_x,temp_x1=0,temp_x2=0;

for (int i=0;i<n-j-1;i++){

temp_x1 += x[i+j+1]*c[j][i];

}

int cin = 0;

for(int i = n-1-j;i<n-1;i++){

temp_x2 += y[cin]^c[j][i];

cin++;

}

//нужна функция выборки 32 бит

temp_x = temp_x1 + temp_x2;

return temp_x;

}

//---------------------------------------------------------------------------

//Функция генерации секретного ключа

void TForm1::get_rand_matr(int n)

{

//реализация простого рандома

for (int i=0;i<n;i++){

for(int j=0;j<(n-1);j++){

a[i][j] = random(429496729);

}

b[i] = random(429496729);

}

}

//---------------------------------------------------------------------------

void TForm1::get_c(int n)

{

//реализация расширенной матрицы

for (int i=0;i<n;i++){

for(int j=0;j<(n-1);j++){

c[i][j] = a[i][j];

}

c[i][n-1] = b[i];

}

}

//---------------------------------------------------------------------------

//функция реализующая загрузку данных для маскирования/демаскирования

void __fastcall TForm1::N4Click(TObject *Sender)

{

MyFName = "";

OpenDialog1->Title = "Загрузить файл";

if (OpenDialog1->Execute()){

MyFName = OpenDialog1->Files->Text;

StatusBar1->Panels->Items[0]->Text = "Данные для маскирования успешно загружены:";

}else{

StatusBar1->Panels->Items[0]->Text = "Загрузите данные для маскирования:";

}

}

//---------------------------------------------------------------------------

% Проверка ключа на случайность по критерию k-распределенности (Кнут).

X=[1 0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 0 1 0 1 0 0 1];

%--------1-распределение ---------

num_zero=0;

num_ones=0;

for i=1:256,

if X(i)==0,

num_zero=num_zero+1;

else

num_ones=num_ones+1;

end

end

if abs(num_zero/256-0.5)<=0.0625 & abs(num_ones/256-0.5)<=0.0625,

'1-raspredelenie=yes'

else

'1-raspredelenie=no'

end

%--------2-распределение ---------

num(1:4)=0;

for i=1:256,

num(polyval([X(i),X(mod(i,256)+1)],2)+1)=num(polyval([X(i),X(mod(i,256)+1)],2)+1)+1;

end

if abs(num(1)/256-0.25)<=0.0625 & abs(num(2)/256-0.25)<=0.0625 & abs(num(3)/256-0.25)<=0.0625 & abs(num(4)/256-0.25)<=0.0625,

'2-raspredelenie=yes'

else

'2-raspredelenie=no'

end

%--------3-распределение ---------

num(1:8)=0;

for i=1:256,

num(polyval([X(i) X(mod(i,256)+1) X(mod(i+1,256)+1)],2)+1)=num(polyval([X(i) X(mod(i,256)+1) X(mod(i,255)+1)],2)+1)+1;

end

if abs(num(1)/256-0.125)<=0.0625 & abs(num(2)/256-0.125)<=0.0625 & abs(num(3)/256-0.125)<=0.0625 & abs(num(4)/256-0.125)<=0.0625 & abs(num(5)/256-0.125)<=0.0625 & abs(num(6)/256-0.125)<=0.0625 & abs(num(7)/256-0.125)<=0.0625 & abs(num(8)/256-0.125)<=0.0625,

'3-raspredelenie=yes'

else

'3-raspredelenie=no'

end

%--------4-распределение ---------

num(1:16)=0;

for i=1:256,

num(polyval([X(i) X(mod(i,256)+1) X(mod(i+1,256)+1) X(mod(i+2,256)+1)],2)+1)=num(polyval([X(i) X(mod(i,256)+1) X(mod(i+1,256)+1) X(mod(i+2,256)+1)],2)+1)+1;

end

if abs(num(1)/256-0.0625)<=0.0625 & abs(num(2)/256-0.0625)<=0.0625 & abs(num(3)/256-0.0625)<=0.0625 & abs(num(4)/256-0.0625)<=0.0625 & abs(num(5)/256-0.0625)<=0.0625 & abs(num(6)/256-0.0625)<=0.0625 & abs(num(7)/256-0.0625)<=0.0625 & abs(num(8)/256-0.0625)<=0.0625 & abs(num(9)/256-0.0625)<=0.0625 & abs(num(10)/256-0.0625)<=0.0625 & abs(num(11)/256-0.0625)<=0.0625 & abs(num(12)/256-0.0625)<=0.0625 & abs(num(13)/256-0.0625)<=0.0625 & abs(num(14)/256-0.0625)<=0.0625 & abs(num(15)/256-0.0625)<=0.0625 & abs(num(16)/256-0.0625)<=0.0625,

'4-raspredelenie=yes'

else

'4-raspredelenie=no'

end

%--------------------------------

% Частотный тест.

fid=fopen('inputseq.txt');

S = fscanf(fid,'%d ',inf);

fclose(fid);

siz=size(S);

n=siz(1);

X=2*S-1;

Sn=sum(X);

Sobs=abs(Sn)/sqrt(n);

Pvalue=erfc(Sobs/sqrt(2));

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Тест на самую длинную серию единиц в блоке

fid=fopen('inputseq.txt');

S = fscanf(fid,'%d ',inf);

fclose(fid);

n=6272;

K=5;

M=128;

N=49;

for i=1:N,

for j=1:M,

B(i,j)=S(j+M*(i-1));

end

end

for i=1:N,

count=0;

run=0;

for j=1:M,

if B(i,j)==0,

count=0;

else

count=count+1;

end

if count>run,

run=count;

end

end

runs(i)=run;

end

for i=1:6,

v(i)=0;

end

for i=1:N,

if runs(i)<=4,

v(1)=v(1)+1;

end

if runs(i)==5,

v(2)=v(2)+1;

end

if runs(i)==6,

v(3)=v(3)+1;

end

if runs(i)==7,

v(4)==v(4)+1;

end

if runs(i)==8,

v(5)=v(5)+1;

end

if runs(i)>=9,

v(6)=v(6)+1;

end

end

p(1)=0.1174;

p(2)=0.2430;

p(3)=0.2493;

p(4)=0.1752;

p(5)=0.1027;

p(6)=0.1124;

XiSquare=0;

for i=1:(K+1),

XiSquare=XiSquare+((v(i)-N*p(i))^2)/(N*p(i));

end

Pvalue=1-gammainc(XiSquare/2,K/2)

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Тест ранга двоичных матриц

fid=fopen('inputseq.txt');

S = fscanf(fid,'%d ',inf);

fclose(fid);

n=99328;

M=32;

Q=32;

N=97;

for i=1:N*M,

for j=1:Q,

B(i,j)=S(j+Q*(i-1));

end

end

for i=1:N,

r(i)=rank(B((1+(i-1)*M):(M+(i-1)*M),1:Q));

end

MAXR=M;

for i=1:3,

F(i)=0;

end

for i=1:N,

if r(i)==MAXR,

F(1)=F(1)+1;

elseif r(i)==MAXR-1,

F(2)=F(2)+1;

else

F(3)=F(3)+1;

end

end

p(1)=0.2888;

p(2)=0.5776;

p(3)=0.1336;

XiSquare=0;

for i=1:3,

XiSquare=XiSquare+((F(i)-N*p(i))^2)/(N*p(i));

end

%Pvalue=1-gammainc(XiSquare/2,1)

Pvalue=exp(-XiSquare/2);

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Спектральный тест

fid=fopen('inputseq.txt');

e = fscanf(fid,'%u ',inf);

fclose(fid);

num=size(e); n=num(1);

for i=1:n,

x(i)=2*e(i)-1;

end

s=fft(x);

M=abs(s(1:n/2));

plot(M);grid

T=sqrt(3*n);

N0=0.95*n/2

N1=0;

for i=1:n/2,

if M(i)<T,

N1=N1+1;

end

end

N1

d=(N1-N0)/(sqrt(n*0.95*0.05/2))

Pvalue=erfc(abs(d)/sqrt(2))

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Универсальный статистический тест Маурэра.

fid=fopen('inputseq.txt');

S = fscanf(fid,'%d ',inf);

fclose(fid);

n=470016;

L=6;

Q=640;

K=77696;

for i=1:(Q+K),

for j=1:L,

QK(i,j)=S(j+L*(i-1));

end

end

for i=1:2^L,

T(i)=0;

end

for i=1:Q,

j=polyval(QK(i,:),2);

T(j+1)=i;

end

sum=0;

for i=(Q+1):(Q+K),

j=polyval(QK(i,:),2);

sum=sum+log2(i-T(j+1));

T(j+1)=i;

end

fn=sum/K;

c=0.7-(0.8/L)+((4+32/L)*(K^(-3/L))/15);

sigma=c*sqrt(2.954/K);

Pvalue=erfc(abs(fn-5.2177052)/(sqrt(2)*sigma));

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Сжатие при помощи алгоритма Лемпела-Зива.

fid=fopen('inputseq.txt');

s = fscanf(fid,'%d ',inf);

fclose(fid);

sizeofS=size(s);

%n=sizeofS(1);

n=100000;

slovar=num2str(s(1));

i=2;

while i<=n,

str=num2str(s(i));

r=1;

k=0;

while r==1,

r=0;

siz=size(slovar);

sizeofstr=size(str);

for j=1:siz(1),

if sizeofstr==size(deblank(slovar(j,:))),

if str==deblank(slovar(j,:)),

r=1;

end

end

end

if r==1,

str=strcat(str,num2str(s(i+k+1)));

k=k+1;

else

slovar=strvcat(slovar,str);

end

end

i=i+k+1;

end

W=size(slovar);

Wobs=W(1);

Pvalue=0.5*erfc(abs(69586.25-Wobs)/sqrt(2*70.448718))

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Тест линейной сложности.

fid=fopen('output.txt');

L = fscanf(fid,'%u ',inf);

fclose(fid);

n=1000000;

M=1000;

N=1000;

K=6;

miuTeor=M/2+(9+(-1)^(M+1))/36-(M/3+2/9)/2^M;

for i=1:N,

T(i)=((-1)^M)*(L(i)-miuTeor)+2/9;

end

for i=1:7,

v(i)=0;

end

for i=1:N,

if (T(i)<=-2.5),

v(1)=v(1)+1;

end

if (T(i)>-2.5)&(T(i)<=-1.5),

v(2)=v(2)+1;

end

if (T(i)>-1.5)&(T(i)<=-0.5),

v(3)=v(3)+1;

end

if (T(i)>-0.5)&(T(i)<=0.5),

v(4)=v(4)+1;

end

if (T(i)>0.5)&(T(i)<=1.5),

v(5)=v(5)+1;

end

if (T(i)>1.5)&(T(i)<=2.5),

v(6)=v(6)+1;

end

if (T(i)>2.5),

v(7)=v(7)+1;

end

end

p(1)=0.01047;

p(2)=0.03125;

p(3)=0.12500;

p(4)=0.50000;

p(5)=0.25000;

p(6)=0.06250;

p(7)=0.020833;

XiSquare=0;

for i=1:(K+1),

XiSquare=XiSquare+((v(i)-N*p(i))^2)/(N*p(i));

end

Pvalue=1-gammainc(XiSquare/2,K/2)

if Pvalue>0.01,

result='test +'

else

result='test -'

end

% Вычисление линейной сложности с помощью алгоритма “Берлекампа-Месси”.

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

long BerlekampMassey(char *s, long n, long *C)

{

long L = 0, N = 0, d, e, i, m = - 1, n1 = n + 1, sum;

long dB = 0, dC = 0, dT;

long *B = malloc(n1 * sizeof(long));

long *D = malloc(n1 * sizeof(long));

long *T = malloc(n1 * sizeof(long));

for (i = 1; i < n1; i++) B[i] = C[i] = T[i] = 0;

T[0] = 0;

C[0] = B[0] = 1;

while (N < n) {

sum = 0;

for (i = 1; i <= L; i++) sum += C[i] * s[N - i];

d = (s[N] + sum) & 1l;

if (d == 1) {

dT = dC;

for (i = 0; i <= dT; i++) T[i] = C[i];

e = N - m;

for (i = 0; i < e; i++) D[i] = 0;

for (i = 0; i <= dB; i++) D[i + e] = B[i];

D[e] = 1;

for (i = 0; i <= dB + e; i++)

C[i] = (C[i] + D[i]) & 1l;

if (dB + e > dC) dC = dB + e;

if (L <= N / 2) {

dB = dT;

for (i = 0; i <= dB; i++) B[i] = T[i];

L = N + 1 - L, m = N;

}

}

N++;

}

free(B);

free(D);

free(T);

return L;

}

void main(void)

{

char sb[1000], s[1000000];

long i, j, n = 1000000, M = 1000, N = 1000, C[1000], L[1000];

FILE *stream1;

stream1 = fopen("inputseq.txt", "r");

for (i = 0; i < n; i++) fscanf(stream1, "%d", &s[i]);

fclose(stream1);

FILE *stream2;

stream2 = fopen("output.txt", "w+");

for (i = 0; i < N; i++)

{

for (j = 0; j < M; j++) sb[j] = s[j+M*i];

L[i] = BerlekampMassey(sb, M, C);

}

for (i = 0; i < N; i++) fprintf(stream2, "%d ", L[i]);

fclose(stream2);

}

% Построение профиля линейной сложности.

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

long BerlekampMassey(char *s, long n, long *C)

{

long L = 0, N = 0, d, e, i, m = - 1, n1 = n + 1, sum;

long dB = 0, dC = 0, dT;

long *B = malloc(n1 * sizeof(long));

long *D = malloc(n1 * sizeof(long));

long *T = malloc(n1 * sizeof(long));

for (i = 1; i < n1; i++) B[i] = C[i] = T[i] = 0;

T[0] = 0;

C[0] = B[0] = 1;

while (N < n) {

sum = 0;

for (i = 1; i <= L; i++) sum += C[i] * s[N - i];

d = (s[N] + sum) & 1l;

if (d == 1) {

dT = dC;

for (i = 0; i <= dT; i++) T[i] = C[i];

e = N - m;

for (i = 0; i < e; i++) D[i] = 0;

for (i = 0; i <= dB; i++) D[i + e] = B[i];

D[e] = 1;

for (i = 0; i <= dB + e; i++)

C[i] = (C[i] + D[i]) & 1l;

if (dB + e > dC) dC = dB + e;

if (L <= N / 2) {

dB = dT;

for (i = 0; i <= dB; i++) B[i] = T[i];

L = N + 1 - L, m = N;

}

}

N++;

}

free(B);

free(D);

free(T);

return L;

}

void main(void)

{

char s[10000];

long i, j, n = 10000, L[10000], n1=n+1;

long *sb = malloc(n1 * sizeof(long));

long *C = malloc(n1 * sizeof(long));

FILE *stream1;

stream1 = fopen("inputseq.txt", "r");

for (i = 0; i < n; i++) fscanf(stream1, "%d", &s[i]);

fclose(stream1);

FILE *stream2;

stream2 = fopen("outputprofil.txt", "w+");

for (i = 0; i < n; i++)

{

for (j = 0; j < i+1; j++) sb[j] = s[j];

L[i] = BerlekampMassey(sb, (i+1), C);

}

for (i = 0; i < n; i++) fprintf(stream2, "%d ", L[i]);

fclose(stream2);

}

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.