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

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Фрагмент текста работы

обозначим через (Lk , f(k)(x)) регистр сдвига минимальной длины, генерирующий a1,…, ak. Примем за предположение индукции, что

                                                      Lk=max[Lk-1, k-Lk-1], k=1,…,r-1 ,

каждый раз, когда f(k) (x) ≠f(k-1)(x). Это, очевидно, верно для k=0, если a1 отличен от нуля, поскольку L0=0 и L1 =1. В более общем случае, если аi-первый ненулевой элемент в заданной последовательности, то Li-1=0 и Li =i . Тогда предположение индукции относится к индукции k=i. Значение k в последней итерации, приведшей к изменению длины, будем обозначать через m. Последнее означает, что при завершении (r-1)-й итерации m является целым числом, таким, что

                                                                      Lr-1=Lm>Lm-1.

Теперь имеет место следующее равенство:

                                  a1+ (r-1)aj-i=(r-1)aj-i=

Если =0, то регистр (Lr-1,f(-1)(x)) также генерирует первые r символов, и  таким образом,

Lr=Lr-1 и f(r)(x) = f(r-1)(x).

Если ≠0, то необходимо построить новый регистр сдвига. Поскольку изменение длины регистра сдвига произошло при k=m. Следовательно,

ai+i(m-1)aj-i=

и по предложению индукции

Lr-1=Lm=max [Lm-1,m-Lm-1]=m-Lm-1,

поскольку Lm>Lm-1. Новый многочлен :

f(r) (x)=f(r-1)(x)--1xr-mf(m-1)(x)

и пусть Lr=deg f(r)(x). В этом случае поскольку deg f(r-1)(x)≤Lr-1 и deg[xr-mf(m-1)(x)]≤r-m+Lm-1, то

Lr≤max [Lr-1,r-m+Lm-1] ≤max[Lr-1,r-Lr-1].

Из теоремы 1 при условии, что (Lr,f(r)(x)) генерирует a1,…,ar, следует, что Lr=max [Lr-1, r-Lr-1]. Осталось только доказать, что регистр сдвига (Lr,f(r)(x)) генерирует требуемую последовательность. Доказывается это непосредственным вычислением разности между aj и сигналом на выходе обратной связи регистра сдвига:

aj-(-i(r)aj-i)=ai+i(r-1)aj-i--1[ai-r+m+i(m-1)ai-r+m-i]=

Регистр (Lr, f(n)(x)) генерирует a1,…,ar. В частности, (Ln, f(n)(x)) генерирует a1,…,an и теорема доказана.

Теорема 3. (Алгоритм Берлекэмпа-Месси)

Пусть заданы a1,…,an из некоторого поля,  и пусть при начальных условиях  f(0)(x)=1,  t(0)(x) =1 и L0=0 выполняются следующие рекуррентные равенства, используемые для вычисления f(n)(x):

=i(r-1)ar-1 ,

Lr=бr(r-Lr-1)+(1- бr)Lr,

,

r =1,…, 2n, где бr =1, если одновременно ≠0 и 2Lr-1≤r-1, и бr=0 в противном случае. Тогда f(2r)(x) является многочленом наименьшей степени, коэффициенты которого удовлетворяют равенствам f0(2r)=1 и ar+i(2r)ar-1 =0, r=L2r+1,…, 2r. Доказательство следует из теоремы 2.

В этой теореме  может обращаться в нуль, но только в том случае, когда бr=0. Положим тогда по определению -1 бr  =0. Блок-схема алгоритма Берлекэмпа-Месси приведена на рисунке 4. На r-м шаге указанный алгоритм содержит число умножений, равное примерно удвоенной степени многочлена f(r)(x). Степень многочлена f(r)(x) равна примерно r/2, и всего имеется 2n итераций, так что всего алгоритм содержит примерно 2n2= умножений и примерно такое же число сложений. Можно сказать, что порядок числа умножений в алгоритме Берлекэмпа-Месси равен n2, или формально , O(n2).

Задание на лабораторную работу

Реализовать  алгоритм Берлекэмпа –Месси на произвольных значениях.

Пример лабораторной работы

            Лабораторная работа выполнена на Mapple 13.

> Berlekamp(x^31-1,x)mod 2;

> alias(a=RootOf(x^5+x^4+x^3+x^2+1)mod 2);

> for i from 0 to 30 do y[i]:= Rem(x^i,x^5+x^4+x^3+x^2+1,x) mod 2 od;

>

> n:=31;#длина кода

> k:=21;d:=11;#число информационных символов и расстояние Хемминга

>

> #генераторный полином

> g1:=(x-a)*(x-a^2)*(x-a^3)*(x-a^4)*(x-a^5)*(x-a^6)*(x-a^7)*(x-a^8)*(x-a^9)*(x-a^10);

> g2:= expand(g1)mod 2;#умножение

> g3:= collect (g2,x)mod 2;#вычисление коэффициентов при x

> g4:= simplify (g3)mod 2;#раскрытие скобок

> g5:= collect (g4,x)mod 2;#вычисление коэффициентов

> g:=collect(simplify (g5),x)mod 2;

>

>

>

>

> m:=m0+x*m1+x^2*m2+x^3*m3+x^4*m4+x^5*m5;#общий вид сообщения

> m0:=a^3;m1:=a^2;m2:=a;m3:=a^4;m4:=a^2;m5:=a;#произвольные коэффициенты

> m;

> c:=m*g5;#получение кодового слова

> c1:= expand (c)mod 2;

> c2:= simplify (c1)mod 2;

> c3:= collect (c2,x) mod 2;

>

>

> sort (c3);

> for i from 0 to 30 do v[i]:=(x-a^(i)) od;

> for i from 0 to 30 do R[i]:=Quo(x^31-1,v[i],x)mod 2;r[i]:=Rem(R[i],v[i],x)mod 2 od;#строим вспомогательные полиномы для базиса

> #Базис для преобразования Фурье.

> for i from 0 to 30 do B[i]:=Quo(R[i],r[i],x)mod 2 od;

> #Преобразование Фурье от принятого кодового слова.

> for i from 0 to 30 do f[i]:=Rem (c,v[i],x)mod 2 od;

> #Обратное преобразование Фурье.С-кодовое слово

> C:=(f[0]*B[0]+f[1]*B[1]+f[2]*B[2]+f[3]*B[3]+f[4]*B[4]+f[5]*B[5]+f[6]*B[6]+f[7]*B[7]+f[8]*B[8]+f[9]*B[9]+f[10]*B[10]+f[11]*B[11]+f[12]*B[12]+f[13]*B[13]+f[14]*B[14]+f[15]*B[15]+f[16]*B[16]+f[17]*B[17]+f[18]*B[18]+f[19]*B[19]+f[20]*B[20]+f[21]*B[21]+f[22]*B[22]+f[23]*B[23]+f[24]*B[24]+f[25]*B[25]+f[26]*B[26]+f[27]*B[27]+f[28]*B[28]+f[29]*B[29]+f[30]*B[30])mod 2;

> C1:=simplify (C)mod 2;

> C2:=collect (C1,x)mod 2;

> C3:=(C2-c)mod 2;

> simplify (C3)mod 2;

> c;

> c3;

> E:=(a^4*x^2+a^5*x^5+a^6*x^6+a^2*x^7+a^3*x^9);#набор ошибок

> b:=(c3+E)mod 2;#принятая последоватнльность

> #Преобразование Фурье в принятой последовательности.

> for i from 0 to 30 do f[i]:=Rem (b,v[i],x)mod 2 od;

> #синдром(полином, с коэффициентами относящимися к корням генераторного полинома

> S:=(f[1]+f[2]*x+f[3]*x^2+f[4]*x^3+f[5]*x^4+f[6]*x^5+f[7]*x^6+f[8]*x^7+f[9]*x^8+f[10]*x^9);

> T:=(x^10);#количество подряд идущих нулей

>

>

> #Алгоритм Евклида.частное от деления Quo,остаток от деления Rem

> q[1]:= Quo (S,T,x)mod 2;p[1]:=Rem(S,T,x)mod 2;

> q[2]:= Quo (T,p[1],x)mod 2;p[2]:=Rem(T,p[1],x)mod 2;

> for i from 1 to 4 do q[i+2]:= Quo (p[i],p[i+1],x)mod 2; p[i+2]:=Rem(p[i],p[i+1],x)mod 2 od;

>

> Q[0]:=0;Q[1]:=(1);for i from 0 to 4 do Q[i+2]:=collect(simplify((q[i+2]*Q[i+1]+Q[i])),x) od;

> coeff (Q[6],x,5);#коэффициенты при x^5

> #Ошибки.

>

> Qn:=Quo (Q[6],coeff (Q[6],x,5),x)mod 2;

> Berlekamp (Qn,x,a)mod 2;

> i:=Rem ((S)*Qn,T,x)mod 2;

> u:=Quo (i*(x^31-1),Qn,x) mod 2;

> H1:=sort(collect (u,x)mod 2);

>

> for i from 0 to 30 do f[i]:=Rem (E,v[i],x)mod 2 od;

>

> H12:=simplify((coeff(H1,x,0)*B[1]+coeff(H1,x,1)*B[2]+coeff(H1,x,2)*B[3]+coeff(H1,x,3)*B[4]+coeff(H1,x,4)*B[5]+coeff(H1,x,5)*B[6]+coeff(H1,x,6)*B[7]+coeff(H1,x,7)*B[8]+coeff(H1,x,8)*B[9]+coeff(H1,x,9)*B[10]+coeff(H1,x,10)*B[11]+coeff(H1,x,11)*B[12]+coeff(H1,x,12)*B[13]+coeff(H1,x,13)*B[14]+coeff(H1,x,14)*B[15]+coeff(H1,x,15)*B[16]+coeff(H1,x,16)*B[17]+coeff(H1,x,17)*B[18]+coeff(H1,x,18)*B[19]+coeff(H1,x,19)*B[20]+coeff(H1,x,20)*B[21]+coeff(H1,x,21)*B[22]+coeff(H1,x,22)*B[23]+coeff(H1,x,23)*B[24]+coeff(H1,x,24)*B[25]+coeff(H1,x,25)*B[26]+coeff(H1,x,26)*B[27]+coeff(H1,x,27)*B[28]+coeff(H1,x,28)*B[29]+coeff(H1,x,29)*B[30]+coeff(H1,x,30)*B[0])mod 2);

> H13:=simplify (H12)mod 2;

> c123:=b-H13;

> A:=simplify (c123)mod 2;

> A1:=sort(collect(A,x)mod 2);

> c3;


Заключение

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

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.