UNIVERSITATEA DE STAT DIN MOLDOVA
FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ
CATEDRA INFORMATICĂ ŞI OPTIMIZARE DISCRETĂ
Cu titlu de manuscris
C.Z.U: 004.056.55
ZGUREANU AURELIU
SECURITATEA INFORMAŢIONALĂ ŞI METODE DE CRIPTARE
BAZATE PE MULŢIMI DE RELAŢII MULTI-ARE
01.01.09 – CIBERNETICĂ MATEMATICĂ ŞI CERCETĂRI
OPERAŢIONALE
Teză de doctor în ştiinţe fizico-matematice
Conducător ştiinţific: CATARANCIUC Sergiu,
doctor în ştiinţe fizico-matematice
Consultant ştiinţific: BULAT Mihai,
doctor în tehnică
Autor:
CHIŞINĂU, 2011
2
© Zgureanu Aureliu, 2011
3
CUPRINS
ADNOTARE .............................................................................................................................4 ABSTRACT ..............................................................................................................................5 АННОТАЦИЯ .........................................................................................................................6 INTRODUCERE ......................................................................................................................7 1. ANALIZA SITUAŢIEI ÎN DOMENIUL CRIPTOGRAFIEI...........................................16
1.1. Problema securităţii informaţiei ......................................................................................16 1.2. Elemente fundamentale din Criptografie.........................................................................24 1.3. Bazele matematice ale criptografiei moderne.................................................................27
1.3.1. Teoria informaţiei ....................................................................................................27 1.3.2. Teoria complexităţii.................................................................................................32
1.4. Algoritmi simetrici de tip bloc ........................................................................................34 1.5. Algoritmi simetrici de tip şir...........................................................................................39 1.6. Algoritmi cu chei publice ...............................................................................................42 1.7. Criptarea cuantică...........................................................................................................47 1.8. Concluzii la Capitolul 1 ..................................................................................................50
2. MULŢIMI DE RELAŢII MULTI-ARE. MATRICE MULTIDIMENSIONALE ...........51 2.1. Relaţii pe mulţimi. Mulţimi de relaţii..............................................................................51 2.2. Reprezentarea funcţiilor booleene prin submulţimi de coloană. ......................................59
2.2.1. Submulţimi de coloană. Proprietăţi. Tabelul submulţimilor de coloană ale funcţiilor booleene............................................................................................................................59 2.2.2. Determinarea submulţimilor de coloană ale funcţiilor booleene reprezentate în formă algebrică............................................................................................................................71 2.2.3. Submulţimi de coloană ale derivatelor funcţiilor booleene. Polinomul Zhegalkin. Seria Taylor.......................................................................................................................75
2.3. Reprezentarea funcţiilor q-valente prin submulţimi de coloană ......................................85 2.4. Generarea numerelor prime. ...........................................................................................88 2.5. Concluzii la capitolul 2...................................................................................................95
3. SISTEME DE CRIPTARE BAZATE PE MULŢIMI DE RELAŢII MULTI-ARE ........96 3.1. Sistem de criptare cu set de chei bazat pe numere prime .................................................96 3.2. Sistem simetric de criptare bazat pe dezvoltarea polinomială a numerelor.....................102 3.3. Sistem de criptare bazat pe funcţii booleene .................................................................111 3.4. Sistem de criptare bazat pe funcţii de logica q-valentă ..................................................122 3.5. Concluzii la capitolul 3.................................................................................................124
CONCLUZII GENERALE ŞI RECOMANDĂRI ...............................................................125 BIBLIOGRAFIE...................................................................................................................127 ANEXA 1. Diagrame. Reflectarea timpului de criptare-decriptare ...................................135 ANEXA 2. Listingul softului.................................................................................................149 DECLARAŢIA PRIVIND ASUMAREA RĂSPUNDERII .................................................162 CV AL AUTORULUI ...........................................................................................................163
4
ADNOTARE
Zgureanu Aureliu, Securitatea informaţională şi metode de criptare bazate pe mulţimi de relaţii multi-are, teză de doctor în ştiinţe fizico-matematice la specialitatea 01.01.09 – Cibernetică Matematică şi Cercetări Operaţionale, Chişinău, 2011.
Teza cuprinde introducerea, trei capitole, concluzii cu recomandări, bibliografia din 130 titluri şi 2 anexe. Ea este perfectată pe 164 pagini, dintre care 125 pagini constituie partea de bază, conţine 62 figuri şi 24 tabele. Rezultatele obţinute sunt publicate în 13 lucrări ştiinţifice.
Cuvinte-cheie: sistem de criptare, matrice multidimensională, număr prim, funcţie booleană, funcţie q-valentă, derivată parţială, mulţimi de relaţii multi-are.
Domeniul de studiu al tezei constă în cercetarea şi elaborarea unor noi algoritmi de criptare a informaţiei. Baza teoretică a acestor algoritmi include numerele prime mari, matricele multidimensionale, ecuaţiile polinomiale cu coeficienţi nedeterminaţi, funcţiile booleene şi cele din logica q-valentă.
Ca obiective principale ale tezei pot fi menţionate: elaborarea unui algoritm determinist de generare a numerelor prime mari, cercetarea relaţiilor multi-are reprezentate cu ajutorul matricelor multidimensionale şi aplicarea acestora la elaborarea algoritmilor de criptare, studierea funcţiilor booleene şi implementarea lor în elaborarea unor algoritmii noi de criptare, descrierea aspectelor teoretice a algoritmilor propuşi, elaborarea softului şi prezentarea unor rezultate evaluative şi comparative.
Noutatea şi originalitatea ştiinţifică constă în: elaborarea unor metode noi de protecţie a datelor prin criptare. În teză sunt expuse patru metode noi de criptare. Pentru una dintre aceste metode este elaborat un algoritm determinist de generare a numerelor prime mari, ceea ce ne permite să o plasăm printre metodele de criptare cu o securitate înaltă. O particularitate importantă a metodelor prezentate în teză constă în aplicarea matricelor multidimensionale (în sensul generalizării directe a matricelor bidimensionale obişnuite) la elaborarea a trei dintre aceşti algoritmi. O altă particularitate o constituie aplicarea funcţiilor booleene şi a funcţiilor din logica q-valentă. Aceste funcţii sunt definite prin submulţimi de coloană pentru a putea efectua mai simplu unele operaţii asupra lor, una dintre operaţiile de bază fiind calculul derivatelor parţiale ale acestor funcţii.
Problema ştiinţifică importantă soluţionată. Sunt propuse metode eficiente de criptare a informaţiei care depăşesc metodele actuale după un şir de parametri (timpul de criptare, volumul memoriei, securitatea algoritmului etc). Este dezvoltată baza teoretică pentru aceste metode care constă în proprietăţi noi ale funcţiilor booleene, funcţiilor q-valente şi matricelor multidimensionale.
Semnificaţia teoretică: la elaborarea metodelor de criptare, expuse în teză, au fost obţinute rezultate teoretice noi ce ţin de studierea teoriei relaţiilor multi-are, a proprietăţilor matricelor multidimensionale, precum şi a funcţiilor booleene. Prezintă interes rezultatele ce ţin de implementarea funcţiilor din logica q-valentă. Metodele de criptare obţinute asigură un grad înalt de securitate şi o fiabilitate majoră a sistemului de criptare a informaţiei.
Valoarea aplicativă a lucrării: pentru fiecare metodă de criptare a fost implementată câte o aplicaţie care o realizează. Softul elaborat este simplu, eficient şi nu necesită resurse de calcul mari.
5
ABSTRACT
of the thesis “Information security and encryption methods based on sets of multi-ary relations” submitted by Aureliu Zgureanu, to the Moldova State University in partial fulfillment of the requirements for the degree of Doctor in Physics and Mathematics, speciality 01.01.09 – Mathematical Cybernetics and Operational Research, Chisinau, 2011.
The thesis contains the introduction, three chapters, conclusions and recommendations, the bibliography (130 titles) and 2 annexes. It consists of 164 pages, from which 125 pages of the main part, including 62 figures and 24 tables. Obtained results are published in 13 scientific papers.
Keywords: encryption system, multidimensional matrix, prime number, Boolean function, q-valent function, partial derivative, sets of multi-ary relations.
The area of study refers to the research and elaboration of new information encryption algorithms. Theoretical basis of these algorithms include large prime numbers, multidimensional matrixes, polynomial equations with undetermined coefficients, Boolean and q-valent functions.
The aim of this work consists in following: elaboration of a deterministic algorithm for generating of large prime numbers, researching of multidimensional matrices for use their in cryptography, study of Boolean functions and their implementation in elaboration of encryption algorithms with reduced resources, description of the theoretical aspects of the proposed algorithms, software development and presentation of evaluative and comparative results.
The scientific novelty and originality of obtained results consist in elaboration of new methods of data protection using encryption. In this thesis are presented four new methods of encryption. For one of these methods is developed a deterministic algorithm for generate large prime numbers, which allows us to place it among methods of encryption with high security. An important feature of the presented methods in the thesis is to apply multidimensional matrices (meaning direct generalization of the usual two-dimensional matrices) in the development of three of these algorithms. Another feature is the application of Boolean functions and functions of q-valent logic. These functions are defined by subsets of the column to perform some simple operations on them, one of the basic operations is calculation of partial derivatives of these functions.
Important scientific problem solved. In this thesis are proposed new effective methods of encryption, that exceed current methods by a number of parameters (time of encryption, volume memory, security algorithm etc). Is developed the theoretical basis for these methods based on new properties of the Boolean functions, functions of q-valent logic and of multidimensional matrices.
The theoretical signification consists in: in the development of the methods of encryption, exposed in the thesis were obtained new theoretical results related to the study of multi-ary relations theory, properties of multidimensional matrices and Boolean functions. The results related to the implementation of the functions of q-valued logic represents interest. Obtained encryption methods ensure a high degree of security and reliability of the system of information encryption.
The practical value of the work: for every proposed method has been developed a program. Elaborated software is simple, efficient and does not require considerable computing resources.
6
АННОТАЦИЯ
Згуряну Аурелиу, Информационная безопасность и методы шифрования, основанные на множествах мульти-арных отношений, диссертация на соискание ученой степени кандидата физико-математических наук по специальности 01.01.09 – Математическая Кибернетика и Исследование Операций, Кишинев, 2011.
Диссертация состоит из введения, трех глав, выводов c рекомендациями, библиографии из 130 наименований и 2-х приложений. Она оформлена на 164 страницах, из которых 125 страница составляют основную часть, содержит 62 фигуры и 24 таблицы. Полученные результаты опубликованы в 13 научных работах.
Ключевые слова: система шифрования, многомерная матрица, простое число, булева функция, q-значная функция, частная производная, множества мульти-арных отношений.
Область исследования относится к изучению и разработке новых алгоритмов шифрования информации. Теоретические основы этих алгоритмов включают большие простые числа, многомерные матрицы, полиномиальные уравнения с неопределенными коэффициентами, булевы функции и функции из q-значной логики.
Цель работы состоит в следующем: разработка детерминистского алгоритма для генерации больших простых чисел, исследование мульти-арных отношений представленные с помощью многомерных матриц и их применение в разработке алгоритмов шифрования, изучение булевых функций и внедрение этих функций в разработке алгоритмов шифрования работающих с уменьшенными ресурсами, описание теоретических аспектов предложенных алгоритмов, разработка софта и представление оценочных и сравнительных результатов.
Научная новизна и оригинальность полученных результатов: разработка новых методов защиты данных путем шифрования. В диссертации предлагаются четыре новых алгоритма шифрования. Для одного из этих методов разработан детерминистский алгоритм генерации больших простых чисел, что позволяет ставить его в один ряд с методами шифрования с повышенной безопасностью. Важной особенностью представленных методов является применение многомерных матриц (как прямое обобщение обычных двумерных матриц) в разработке трёх из этих алгоритмов. Другая особенность состоит в применении булевых функций и функций q-значной логики. Эти функции определены с помощью столбцевых подмножеств, что даёт возможность более простого выполнения некоторых операции над ними, одна из основных операций является вычисление частных производных этих функций.
Решенная научная проблема. Предложены эффективные методы шифрования, которые превышают нынешние методы по ряду параметров (время шифрования, объем памяти, криптостойкость алгоритма и др.). Разработана научная основа этих методов состоящая из новых доказанных свойств булевых функций, q-значных функций, а также свойств многомерных матриц.
Теоретическая значимость: при разработке представленных в диссертации методов шифрования были получены новые теоретические результаты, которые относятся к исследованию теории мульти-арных отношений, свойствам многомерных матриц и булевых функций. Представляют интерес результаты относящиеся к применению функций q-значной логики. Полученные методы шифрования обеспечивают высокую степень защиты и надёжности системы шифрования.
Практическая ценность работы: для каждого метода реализована программа. Разработанное программное обеспечение эффективно и не требует значительных затрат и ресурсов для работы.
7
INTRODUCERE
Actualitatea şi importanţa problemei abordate.
Una dintre caracteristicile societăţii moderne o reprezintă Informatizarea. Tehnologii
informaţionale noi sunt permanent implementate în diverse domenii ale activităţii umane. Prin
utilizarea calculatoarelor şi a software-ului respectiv sunt dirijate procese complexe din cele mai
diverse domenii de activitate. Calculatoarele stau la baza mulţimilor de sisteme de prelucrare a
informaţiei, care înfăptuiesc păstrarea, prelucrarea informaţiei, distribuirea ei către utilizator,
realizând astfel tehnologii informaţionale moderne.
Odată cu dezvoltarea mecanismelor, metodelor şi formelor de automatizare a proceselor
de prelucrare a informaţiei creşte şi dependenţa societăţii de gradul de securitate a a proceselor
de gestionare a informaţiei, realizat prin intermediul diverselor tehnologii informaţionale
aplicate, de care depinde bunăstarea, sau uneori şi viaţa multor oameni.
Relevanţa şi importanţa problemei de securitate a informaţiei şi a tehnologiilor
informaţionale rezultă din următoarele:
sporirea bruscă a potenţialului de calcul al calculatoarelor moderne şi simplificarea
exploatării lor;
creşterea rapidă a volumului de informaţie cu care operează societatea prin intermediul
calculatorului şi a altor mijloace tehnice;
concentrarea în baze de date unice a diverselor tipuri de informaţie (după scop şi
apartenenţă);
sporirea impresionantă a numărului de calculatoare personale utilizate în diverse domenii de
activitate;
lărgirea considerabilă a cercului de utilizatori care au acces direct la resursele de calcul şi la
blocurile de date;
dezvoltarea rapidă a instrumentelor software care nu îndeplinesc norme minime de siguranţă;
implementarea pe scară largă a tehnologiilor de reţele şi conectarea reţelelor locale la cele
globale;
dezvoltarea Internetului, care practic nu împiedică încălcările referitoare la securitatea
sistemelor de prelucrare a informaţiei din întreaga lume.
Soluţionarea problemelor legate de securitatea informaţiei constituie obiectul de studiu al
Criptografiei [94], care este o ramură a matematicii moderne, ce se ocupă de elaborarea
metodelor matematice capabile să asigure confidenţialitatea, autentificarea şi non-repudierea
mesajelor, precum şi integritatea datelor vehiculate. Criptografia este un set de standarde şi
8
protocoale pentru codificarea datelor şi mesajelor, astfel încât acestea să poată fi stocate şi
transmise mai sigur. Ea stă la baza multor servicii şi mecanisme de securitate, folosind metode
matematice pentru transformarea datelor, în intenţia de a ascunde conţinutul lor sau de a le
proteja împotriva modificării. Criptografia ne ajută să avem comunicaţii mai sigure, chiar şi
atunci când mediul de transmitere (de exemplu, Internetul) nu este de încredere. Ea poate fi
utilizată pentru a contribui la asigurarea integrităţii datelor, precum şi la menţinerea lor în calitate
de date secrete, ne permite să verificăm originea datelor şi a mesajelor prin utilizarea
semnăturilor digitale şi a certificatelor.
Unul dintre instrumentele principale ale criptografiei este sistemul de criptare, la baza
căruia se află algoritmul de criptare. Unul dintre cei mai timpurii algoritmi de criptare este
considerat cifrul lui Cezar [52], [60], care înlocuia fiecare literă a mesajului cu a treia literă după
ea din alfabet. La timpul său acest algoritm de criptare a fost destul de eficient, cu toate că este
foarte simplu să restabileşti textul original avându-l pe cel criptat. Odată cu trecerea timpului au
fost îmbunătăţite şi sistemele de criptare, fiind elaborate sisteme cu cheie privată [74], [96], [98],
[112], [121]), precum şi sisteme cu cheie publică [38], [43], [45],[90], [93].
Sistemele de criptare cu cheie privată sau sistemele simetrice de criptare sunt sistemele în
care cheia de criptare coincide cu cheia de decriptare. Sistemele simetrice sunt folosite pentru
protecţia datelor memorate în fişiere, baze de date sau a informaţiilor transmise în reţele.
Dintre sistemele cu cheie privată putem menţiona următoarele:
Algoritmul Lucifer [102] – un proiect al companiei IBM iniţiat în anul 1970. Acest
algoritm prezintă o reţea de permutări şi substituţii.
Algoritmul DES (Data Encryption Standard) [49] a fost elaborat de către firma IBM şi în
1977 a fost aprobat ca standard oficial în SUA. DES are blocuri de 64 de biţi şi o
structură Feistel de 16 cicluri, folosind o cheie de 56 de biţi şi o combinare de
transformări liniare şi neliniare la criptare.
Cifrul RC4 [74] – un cifru şir cu cheie de lungime variabilă, dezvoltat în 1987 de către
Ron Rivest pentru compania RSA Data Security. Criptograma se obţine sumând modulo
2 textul clar cu cheia, care este generată în mod pseudoaleator.
RC5 [91] – un cifru pe blocuri, notabil pentru simplitatea sa. A fost elaborat de căte Ron
Rivest pentru RSA Data Security în anul 1994. El are un număr variabil de blocuri şi
runde precum şi o lungime variabilă a cheii. Spre deosebire de predecesorii săi foloseşte
operaţia de strămutare cu un număr variabil de biţi.
Algoritmul AES (Advanced Encryption Standard) [48], sau Rijndael este un algoritm pe
blocuri (lungimea blocului este de 128 biţi, lungimea cheii este de 128, 192 sau 256 biţi),
aprobat în calitate de standard de criptare în SUA în 2002.
9
Sistemele de criptare în locul unei singure chei secrete, folosesc două chei diferite: una
pentru cifrare, alta pentru descifrare. Deoarece este imposibilă deducerea unei chei din cealaltă,
una din chei este făcută publică, fiind pusă la îndemâna oricui doreşte să transmită un mesaj
cifrat. În practica aplicaţiilor Internet, cifrurile cu chei publice sunt folosite în general pentru
semnătura digitală asociată mesajelor, pentru autentificarea conţinutului şi a emiţătorului, dar şi
pentru cifrarea şi distribuţia cheilor simetrice, folosite în secretizarea mesajelor, operaţie numită
anvelopare a cheii.
Printre sistemele cu cheie publică se numără:
Algoritmul Merkle-Hellman [74], [121], publicat în 1978 de către Ralph Merkle şi
Martin Hellman. Algoritmul bazat pe problema rucsacului, o problemă NP-completă.
Algoritmul RSA [90] – a fost publicat în 1978 de Ron Rivest, Adi Shamir și Leonard
Adleman la Massachusetts Institute of Technology. Puterea sa criptografică se bazează pe
dificultatea problemei factorizării numerelor întregi, problemă la care se reduce
criptanaliza RSA și pentru care toți algoritmii de rezolvare cunoscuți au complexitate
exponențială.
Algoritmul ElGamal [43] este elaborat de Taher Elgamal în 1984 şi publicat in 1985. La
baza algoritmului se află problema calculării logaritmului discret într-un câmp finit.
În paralel cu perfectarea sistemelor de criptare şi elaborarea noilor sisteme, se depun
eforturi considerabile în scopul determinării metodelor de criptanaliză a acestor sisteme, iar
dezvoltaea tehnicii de calcul înlesneşte aceste eforturi. Ca urmare unele sisteme de criptare devin
impracticabile iar altele necesită o perfecţionare serioasă. Aceste considerente, precum şi faptul
că serviciile de spionaj de diferite nivele şi din diferite domenii ating performanţe noi în
interceptarea informaţiei şi mai ales în restabilirea informaţiei criptate, impun cercetarea şi
inventarea de noi sisteme de criptare mai performante, mai eficiente, mai sigure. Aceasta
reprezintă o problema actuală de importanţă majoră în societatea modernă. Astfel, într-o
societate informatizată, Criptografiei îi revine un rol important în asigurarea funcţionalităţii
acesteia, deoarece orice domeniu de activitate este bazat pe un volum tot mai mare de informaţie,
folosit în diverse procese manageriale.
10
Scopul şi obiectivele tezei
Ţinând cont de faptul că sistemele actuale de criptare sunt vulnerabile şi în cazul unor
volume mari de informaţie necesită un volum destul de mare de memorie şi au viteză redusă de
lucru, rămâne actuală problema elaborării unor metode (sisteme) mai performante. În această
teză autorul propune câteva idei noi elaborarea unor astfel de metode, bazate pe rezultate
teoretice recente obţinute la studierea mulţimilor de relaţii multi-are [22], [24], [117], [108],
precum şi a aplicaţiilor acestora în studierea funcţiilor booleene [15], [25], [109].
În zilele noastre este inadmisibilă operarea cu date secrete fără asigurare de utilizarea lor
de către răuvoitori în caz de interceptare. Orice ţară are un algoritm standardizat pentru criptarea
datelor, orice companie care se respectă foloseşte unul dintre sistemele de criptare pentru
operarea cu date confidenţiale şi majoritatea aplicaţiilor care operează cu date mai mult sau mai
puţin confidenţiale au incorporate şi sisteme de criptare.
La baza oricărui sistem de criptare se află o teorie bine fundamentată, ce utilizează
rezultate din diverse ramuri ale matematicii moderne: teoria numerelor, teoria probabilităţilor,
statistica matematică, teoria informaţiei, teoria complexităţii algoritmilor, structurile algebrice
etc.
Acest lucru îl vedem la Claude Elwood Shannon – unul dintre cei care a pus bazele
ştiinţifice ale criptografiei moderne publicând în anul 1949 articolul „Teoria comunicaţiilor în
sistemele cu secretizare” („Communication Theory of Secrecy Systems” [98]), în care autorul a
demonstrat imposibilitatea spargerii cifrului aleator Vernam [105] şi a stabilit hotare clare pentru
mărimea cheii secrete. Totodată această lucrare a pus bazele sistemelor simetrice de criptare
[74], [94].
În anul 1976 Whitfield Diffie şi Martin E. Hellman au publicat articolul „New Directions
in Cryptography” [38], în care au arătat că comunicaţia secretă poate fi făcută fără transmiterea
cheii secrete, inventând astfel criptografia cu chei publice [74], [94]. Aici a fost aplicată
problema logaritmului discret [43], iar un an mai târziu a fost inventat celebrul algoritm RSA
[90], la baza căruia stă problema complicată a factorizării numerelor mari de forma qpn
[122] unde p şi q sunt numere prime mari.
Scopul tezei constă în cercetarea relaţiilor pe mulţimi, a mulţimilor de relaţii multi-are,
a matricelor multidimensionale (în sensul generalizat al matricelor dreptunghiulare obişnuite), a
algoritmilor de generare a numerelor prime mari, a proprietăţilor funcţiilor booleene şi aplicarea
acestor proprietăţi în crearea algoritmilor care pot sta la baza unor sisteme de criptare fiabile.
Dezvoltând în continuare ideile legatre de elaborarea metodelor moderne de criptare
expuse de către diferiţi cercetători, în lucrare se propun metode noi de criptare bazate pe două
principii de elaborare:
11
a) aplicarea numerelor prime;
b) utilizarea proprietăţilor funcţiilor booleene.
În aceste sisteme un rol important îl au matricele multidimensionale, prin intermediul
cărora se reprezintă mulţimile de relaţii multi-are.
Aplicarea matricelor multidimensionale reprezintă un interes deosebit nu numai în plan
teoretic, dar în special aplicativ, mai ales din punct de vedere al eficienţei algoritmilor
elaboraţi faţă de cei existenţi.
Printre obiectivele principale ale tezei pot fi menţionate:
1. elaborarea unui algoritm determinist de generare a numerelor prime;
2. cercetarea matricelor multidimensionale şi utilizarea proprietăţilor acestora la elaborarea
unor algoritmi noi de criptare;
3. studierea unor proprietăţi speciale ale funcţiilor booleene, necesare pentru elaborarea
algoritmilor simetrici noi de criptare cu resurse de lucru reduse;
4. descrierea aspectelor teoretice a algoritmilor propuşi;
5. analiza comparativă a algoritmilor elaboraţi şi a celor existenţi;
6. elaborarea softului şi prezentarea unor rezultate evaluative.
Noutatea ştiinţifică a rezultatelor obţinute
În prezent există multe sisteme de criptare bazate pe diverşi algoritmi. Fiecare algoritm
sau sistem îşi are specificul său şi s-ar părea că descoperirea unui nou algoritm de criptare fiabil
este dificil de realizat. Ba mai mult, chiar dacă se creează un astfel de algoritm nou, se pune
întrebarea pe cât de eficient este el, de ce este mai acceptabil decât celelalte? Se cere o
argumentare în care cazuri şi situaţii acest algoritm este preferabil faţă de celelalte.
Teza conţine fundamentarea teoretică şi descrierea algoritmilor respectivi pentru patru
metode noi de criptare bazate pe utilizarea numerelor prime mari (Cripto 1 şi Cripto 2) şi a
funcţiilor booleene (Cripto 3 şi Cripto 4).
Cripto 1 este o variaţie a sistemului RSA şi spre deosebire de acesta foloseşte un cortegiu
de chei pentru criptarea (decriptarea) informaţiei. Acest element inovativ al algoritmului Cripto 1
ne permite să evităm necesitatea măririi cheii odată cu creşterea performanţelor tehnicii de
calcul. Securitatea înaltă a algoritmului Cripto 1 este asigurată de un generator de numere prime,
expus în lucrare, care poate fi utilizat cu succes şi în alte scopuri.
Ceilalţi algoritmi sunt bazaţi pe aplicarea matricelor multidimensionale prin repartizarea
codurilor caracterelor textului clar în celulele acestor matrice. Matricele multidimensionale sunt
proiectate în matrice bidimensionale obişnuite cu numărul de linii şi coloane dependent de unii
parametri ai algoritmilor.
12
Ca și în cazul lui Cripto 1, algoritmul Cripto 2 utilizează, în afară de matricele multidimensionale, acelaşi generator de numere prime, care reprezintă în acest caz cheia privată a sistemului simetric. Utilizând cheia dată, algoritmul calculează, utilizând liniile matricei bidimensionale obţinute, nişte numere într-un sistem de numeraţie, baza căruia este cheia privată. Procesul de decriptare se produce în ordine inversă. La baza securităţii acestui algoritm de criptare se află problema rezolvării unui sistem de ecuaţii liniare cu mai multe variabile şi cu coeficienţii nedeterminaţi.
Al treilea şi al patrulea algoritm de criptare sunt construiţi în baza unor proprietăţi ale funcţiilor booleene, demonstrate în teză. Cheia sistemului, la fel ca şi textul plan, generează câte o matrice multidimensională de aceleaşi dimensiuni. Cu ajutorul acestor matrice se efectuează operaţii logice. În rezultat se obţine o a treia matrice, liniile căreia reprezintă textul cifrat. Cheia de criptare poate fi schimbată de la un mesaj la altul, dar şi pe parcursul criptării unuia şi aceluiaşi mesaj. Algoritmul Cripto 3 utilizează funcţiile booleene, iar algoritmul Cripto 4 – funcţiile din logica q-valentă.
Numărul de chei din spaţiul cheilor pentru algoritmii Cripto 3 şi Cripto 4, este suficient de mare pentru a face inutile atacurile cu forţa brută, iar alte tipuri de atac cunoscute nu prezintă pericol la momentul actual.
Importanţa teoretică şi valoarea aplicativă a lucrării Lucrarea de faţă propune metode noi de criptare a informaţiei. Aceste metode stau la baza
elaborării algoritmilor respectivi de criptare prin aplicarea matricelor multidimensionale, care generalizează noţiunea de matrice clasică, concomitent cu alte aspecte din domeniul matematicilor aplicate.
Metodele de criptare descrise conţin o argumentare teoretică riguroasă. Lucrarea dată conține o serie de teoreme, în care sunt demonstrate proprietăţi ale funcţiilor booleene, sunt studiate mulțimile de relații multi-are reprezentate prin matrice multidimensionale, necesare la elaborarea sistemelor.
În acelaşi timp a fost elaborat un algoritm determinist de generare a numerelor prime mari care sunt întrebuinţate la elaborarea unor sisteme de criptare moderne, iar în această teză la primii doi algoritmi.
Pentru fiecare algoritm descris în teză a fost elaborat câte un program care îl realizează în mediul de calcul Mathematica. Softul elaborat este simplu, lucrează eficient şi nu necesită resurse de calcul considerabile (în special al treilea şi al patrulea algoritm).
Problema ştiinţifică importantă soluţionată. Sunt propuse metode eficiente de criptare a informaţiei care depăşesc metodele actuale după un şir de parametri (timpul de criptare, volumul memoriei, securitatea algoritmului etc). Este dezvoltată baza teoretică pentru aceste metode care se bazează pe proprietăţi noi ale funcţiilor booleene, funcţiilor q-valente şi matricelor multidimensionale.
13
Aprobarea rezultatelor
Rezultatele de bază ale tezei au fost relatate la următoarele conferinţe şi seminare:
1. The XIVth Conference on Applied and Industrial Mathematics, Satellite Conference of the
ICM, Chisinau 2006.
2. International Algebraic Conference dedicated to the 100th anniversary of D. K. Faddeev. St
Petersburg, Russia, 2007.
3. ASADE Moldova, August 21, 2007.
4. Conferinţa ştiinţifică internaţională „Modelare matematică, optimizare şi tehnologii
informaţionale”. Chişinau, 19-21 martie, 2008. ATIC.
5. Системы управления, контроля и измерений (УКИ-08), Российская Конференция с
международным участием, Москва ИПУ РАН, 2008.
6. Conferinţa Internaţională ICT+ “TEHNOLOGII INFORMAŢIONALE ŞI DE
COMUNICAŢII - 2009”. 19 – 20 MAI 2009, or. CHIŞINĂU.
7. Conferinţa „Managementul întreprinderii în mediul economic contemporan”. 24-25
septembrie, 2009. Chişinău.
8. Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare şi tehnologii
informaţionale. Chişinau, 26-28 martie, 2010
9. „Tiberiu Popoviciu seminar”, Cluj-Napoca 6-7 september, 2010.
10. International Student Conference on Pure and Applied Mathematics (ISCOPAM), Iaşi, July
12-16, 2010.
11. MITRE-2011, International Conference dedicated to the 65th anniversary of Moldova State
University, Chişinău, 2011.
Printre publicaţii cu tematica abordată în teză se consideră:
1. Bulat, M., Leon,D., Bivol, L., Ciobanu I., Zgureanu,A..(2006) ”Generadores de numeros
primos y factorizadores de numeros compuestos” Revista de Matematica: Teoria y
Aplicaciones, 2006 ,13(1) CIMPA-UCR-CCSS: pp. 1-15.
2. Bulat, M.; Zgureanu, A.; Ciobanu, I.; Bivol, L. (2006) “A method for obtaining arbitrary
form prime numbers”, Satellite Conference of the ICM 2006. The XIVth Conference on
Applied and Industrial Mathematics, Chisinau: pp. 70–73.
3. Bulat M., Zgureanu A., Ciobanu I., Bivol L. Generating of prime numbers based on the
multidimensional matrices. International Algebraic Conference dedicated to the 100th
anniversary of D. K. Faddeev. St Petersburg, Russia, 2007, pp. 98-99.
4. Bulat M., Zgureanu A., Ciobanu I., Bivol L. The inverse transformations of multidimensional
matrices. ASADE Moldova, August 21, 2007, pag. 34-34.
14
5. Bulat M., Zgureanu A., Ciobanu I., Bivol L. Sisteme de criptare cu chei vectoriale.
Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare şi tehnologii
informaţionale. Chişinau, 19-21 martie, 2008. ATIC, pp. 281 – 285.
6. Булат М.С., Згуряну А.Ф., Чобану Я.И., Бивол Л.Г. Крипто-системы на базе n-арных
отношений. Системы управления, контроля и измерений (УКИ-08), Российская
Конференция с международным участием, Москва ИПУ РАН, 2008: pp. 66-67.
7. Aureliu Zgureanu, Mihai Bulat. Sisteme de criptare bazate pe funcţii booleene. Conferinţa
Internaţională ICT+ “TEHNOLOGII INFORMAŢIONALE ŞI DE COMUNICAŢII- 2009”.
19 – 20 MAI 2009, or. CHIŞINĂU.
8. Zgureanu Aureliu, Sisteme de criptare cu chei variabile. Analele ATIC-2007-2008, vol. I
(XII). pp. 92-98, Chişinău. Evrica. 2009.
9. Zgureanu A., Bulat M., Protecţia informaţiei şi managementul întreprinderii. Materialele
conferinţei „Managementul întreprinderii în mediul economic contemporan”. 24-25
septembrie, 2009. Chişinău. Evrica. 2009. pp. 312-314.
10. Mihai Bulat, Aureliu Zgureanu, Iacob Ciobanu, Vladimir Izbaş. Sistem de criptare bazat pe
derivarea funcţiilor booleene. Conferinţa ştiinţifică internaţională. Modelare matematică,
optimizare şi tehnologii informaţionale. Chişinau, 26-28 martie, 2010. pp. 132-141.
11. Aureliu Zgureanu, Sergiu Cataranciuc. Encryption systems based on multidimensional
matrixes. „Tiberiu Popoviciu seminar”, Cluj-Napoca 6-7 september, 2010, 11 pagini.
12. Zgureanu Aureliu, Information encryption systems based on Boolean functions. The
Computer Science Journal of Moldova, vol.18, no.3(54), 2010, pp. 319-335.
13. Mihai Bulat, Sergiu Cataranciuc, Aureliu Zgureanu. A method for calculating the Zhegalkin
polynomial coefficients. MITRE-2011, International Conference dedicated to the 65th
anniversary of Moldova State University, Chişinău, 2011, pp. 19-20.
Sumarul compartimentelor tezei
Teza de faţă conţine introducere, trei capitole, concluzii cu recomandări, lista
bibliografică şi 2 anexe.
În Capitolul I se face o sinteză a lucrărilor din domeniu, a rezultatelor cunoscute până în
prezent. Se accentuează rolul lui Claude Elwood Shannon care a pus bazele teoretice ale
sistemelor cu secretizare [98], precum şi al matematicienilor Whitfield Diffie şi Martin E.
Hellman, care în anul 1976 prin publicarea articolului „New Directions in Cryptography” [38] au
arătat că comunicaţia secretă poate fi făcută fără transmiterea cheii secrete, inventând astfel
criptografia cu chei publice [74], [94]. În teză sunt descrise diverse tipuri de sisteme de criptare
aplicate în trecut şi prezent, cu trecerea în revistă a celor mai frecvent întâlnite în practică. Sunt
15
evidenţiate părţile slabe şi cele puternice ale acestor sisteme şi domeniile de aplicabilitate ale
unora dintre ele. Este abordată problema criptării cuantice, una foarte polemizată în prezent.
Capitolul este finalizat cu enumerarea avantajelor şi dezavantajelor tipurilor sistemelor de
criptare, cu justificarea necesităţii modernizării continue a sistemelor de criptare şi sunt propuse
unele probleme care se vor încerca a rezolva în următoarele capitole ale tezei. Aspectul teoretic
abordat a servit drept temelie pentru cercetările şi rezultatele din capitolele doi şi trei.
Capitolul doi conţine rezultatul cercetărilor relaţiilor între mulţimi şi a mulţimilor de
relaţii multi-are [24] reprezentate prin intermediul matricelor multidimensionale. Este analizată
transformarea )(RAR
[24] care pune în corespondenţă unei mulţimii de relaţii R
un cortegiu
),...,( ...1...11 1 nmmaaA
pe proprietăţile căreia sunt bazate rezultate teoretice importante din teză,
printre care se numără şi algoritmul de generare a numerelor prime mari [20], [22]. Sunt
demonstrate câteva teoreme referitoare la repartizarea numerelor prime în liniile matricelor
obţinute la proiectarea matricelor multidimensionale pe matrice dreptunghiulare obişnuite. În
acest capitol sunt expuse şi demonstrate un şir de proprietăţi ale funcţiilor booleene, fiind
aplicată reprezentarea acestor funcţii prin intermediul submulţimilor de coloană [25], [109]. Este
abordată problema dezvoltării funcţiei booleene în serie Taylor, şi determinării coeficienţilor
polinomului Zhegalkin [15] aplicând submulţimile de coloană ale funcţiei booleene. O bună
parte dintre aceste teoreme (proprietăţi) este generalizată [109] şi pentru funcţii din logica q-
valentă.
Capitolul trei însumează rezultatele teoretice noi obţinute pentru elaborarea algoritmilor
de criptare expuşi în teză. Astfel, sunt prezentaţi doi algoritmi de criptare care funcţionează în
baza numerelor mari prime (Cripto 1 [23] şi Cripto 2 [117], [108]), precum şi doi algoritmi
(Cripto 3 [108], [109] şi Cripto 4 [109]) care funcţionează în baza funcţiilor booleene bivalente
şi q-valente respectiv, în combinare cu aplicarea matricelor multidimensionale. Sunt prezentate
date statistice comparative referitoare la timpul de lucru al algoritmilor în funcţie de mărimea
mesajului pentru criptare.
La teză se anexează listingul softului elaborat. Pentru fiecare metodă elaborată a fost
implementat un program aparte care, luate împreună, formează un pachet de aplicaţii. Aplicaţiile
au fost elaborate în mediul de calcul Mathematica.
16
1. ANALIZA SITUAŢIEI ÎN DOMENIUL CRIPTOGRAFIEI
Pe întreg parcursul dezvoltării societăţii umane – din antichitate până în prezent –
informaţia confidenţială era păstrată în secret în diferite moduri. A rămas celebru modul în care
Cezar făcea schimb de informaţii cu generalii săi, aplicând cifrul care îi poartă numele. Timpul
s-a scurs, noi ne-am dezvoltat încontinuu, dar problema păstrării în secret a informaţiei
confidenţiale, problema comunicaţiilor secretizate a rămas actuală şi începând cu anii 40 ai
secolului XX s-a desfăşurat o intensă cercetare ([38], [43], [90], [91], [96], [97], [98], [99],
[128]) în domeniul comunicaţiilor secretizate, obiectul de studiu al cărora este Criptografia.
1.1. Problema securităţii informaţiei
Soluţionarea problemei de securitate informaţională nu poate fi realizată ffără a lua în
consideraţie doi factori importanţi, ce influenţează nemijlocit atingerea scopului final:
a) dezvoltarea mijloacelor de comunicaţii informaţionale;
b) dezvoltarea sistemelor performante de criptare.
Aceste două domenii de activitate se completează reciproc şi permit obţinerea unor
rezultate importante în asigurarea securităţii de manipulare cu masive mari de informaţie.
a) etapele dezvoltării mijloacelor de comunicaţii informaţionale.
În ziua de azi în toate domeniile activităţii umane sunt implementate noi tehnologii
informaţionale. Apariţia reţelelor locale şi globale de transmitere a datelor le-a permis
utilizatorilor calculatoarelor să folosească metode noi în schimbul de informaţii. Apariţia
Internetului a dus la utilizarea reţelelor globale, în scopul transmiterii datelor, practic de către
fiecare om. Pe măsură ce se dezvoltă şi se complică mijloacele, metodele şi formele de
automatizare a proceselor de prelucrare a informaţiei se măreşte şi dependenţa societăţii de
gradul de securitate a tehnologiilor informaţionale utilizate.
Metodele contemporane de prelucrare, transmitere şi stocare a informaţiei au contribuit la
apariţia riscurilor legate de posibilitatea pierderii, denaturării, destăinuirii datelor care sunt
adresate sau care aparţin utilizatorilor finali. De aceea asigurarea securităţii informaţiei este una
dintre direcţiile cele mai importante în dezvoltarea tehnologiilor informaţionale.
Protecţia informaţiei este activitatea îndreptată spre prevenirea scurgerii informaţiei
protejate, spre prevenirea acţiunilor nesancţionate sau neintenţionate asupra acestor informaţii
[55]. Securitatea informaţională reprezintă protejarea informaţiei de familiarizarea ilegală cu ea,
transformarea sau lichidarea ei, dar şi ocrotirea resurselor informaţionale de influenţele
îndreptate spre dereglarea capacităţii lor de lucru [67]. Aceste influenţări pot fi de natură diferită:
17
tentative de pătrunderi a răuvoitorilor, erorile personalului, ieşirea din funcţie a mijloacelor
tehnice sau a softului, dar şi calamităţile naturale (cutremur, uragan, incendiu) etc.
În mod obiectiv noţiunea de securitate informaţională a apărut odată cu inventarea
mijloacelor de comunicaţii informaţionale între oameni [60], dar şi odată cu înţelegerea de către
om a faptului că alţi oameni sau comunităţi au interese, cărora li se pot cauza daune prin
intervenţia asupra mijloacelor de comunicaţii informaţionale, existenţa şi dezvoltarea cărora
asigură schimbul de informaţii între toate elementele societăţii umane.
Dacă luăm în consideraţie influenţa transformărilor de idei în securitatea informaţională,
putem evidenţia câteva etape ale dezvoltării mijloacelor de comunicaţii informaţionale [129]:
Etapa I – până la anul 1816 – este caracterizată de mijloacele de comunicaţii
informaţionale apărute pe cale firească. În această perioadă problema de bază a securităţii
informaţionale consta în protecţia datelor referitoare la evenimente, fapte, avere, amplasament şi
a altor date care au pentru om personal sau pentru societate o importanţă vitală.
Etapa II – începând cu anul 1816 – este corelată cu începutul aplicării mijloacelor tehnice
artificiale ale comunicaţiilor electrice şi radio. Pentru asigurarea secretizării şi protecţiei de
perturbaţii ale comunicaţiilor radio era necesar de utilizat experienţa acumulată pe parcursul
primei etape ale securităţii informaţionale la un nivel tehnologic mai înalt şi anume aplicarea
unei codificări a mesajului (semnalului) rezistente la perturbaţii cu decodificarea ulterioară a
mesajului (semnalului) primit.
Etapa III – începând cu 1935 – este în legătură directă cu inventarea mijloacelor de radar
şi sonar. Metoda de bază în asigurarea securităţii informaţionale în această perioadă era o
combinare de măsuri tehnice şi organizatorice direcţionate spre mărirea securităţii.
Principala modalitate de a asigura securitatea informaţiilor, în această perioadă a fost o
combinaţie de măsuri organizatorice şi tehnice care vizează îmbunătăţirea protecţiei mijloacelor
radar de la efectele asupra receptorilor lor generate de bruiajul electronic activ de mascare şi cel
pasiv de simulare.
Etapa IV – începe cu anul 1946 – şi este condiţionată de inventarea şi implementarea în
activitatea practică a maşinilor electronice de calcul – calculatoarelor. Problemele securităţii
informaţionale erau rezolvate prin metode de control a accesul fizic la hardware-ul mijloacelor
de colectare, prelucrare şi transmitere a informaţiilor.
Etapa V – începe din 1965 – şi este în corelaţie cu crearea şi dezvoltarea reţelelor de
comunicaţii informaţionale. Problema securităţii informaţiei era rezolvată, în principiu, la fel
prin metode şi procedee de protecţie fizică a mijloacelor de dobândire, prelucrare şi transmitere a
informaţiei, unite în reţeaua locală. Acest lucru se făcea pe calea administrării şi dirijării
accesului la resursele din reţea.
18
Etapa VI – începe cu anul 1973 – este legată de utilizarea dispozitivelor ultra mobile de
comunicaţie cu o gamă largă de sarcini. Ameninţările la adresa securităţii informaţionale au
devenit mai periculoase. Pentru asigurarea protecţiei informaţiei în sistemele de calculatoare cu
reţelele fără fir de transmitere a datelor a fost necesar de stabilit noi criterii de securitate. S-au
format comunităţi de oameni – hackerii – ce aveau drept scop prejudicierea securităţii
informaţionale a utilizatorilor individuali, a companiilor dar şi a unor state întregi. Resursele
informaţionale au devenit cele mai importante resurse ale statului iar asigurarea protecţiei lor a
devenit o componentă obligatorie şi cea mai importantă pentru securitatea naţională. În această
perioadă se naşte şi o nouă ramură a sistemului juridic legată de protecţia informaţiilor.
Etapa VII – începe în 1985 – este legată de crearea şi dezvoltarea reţelelor de comunicaţii
informaţionale cu implementarea mijloacelor de asigurare spaţiale.
Astăzi suntem într-o nouă etapă de dezvoltare a securităţii informaţionale. Acum se aplică
pe scară largă mijloacele ultra-mobile de comunicaţii cu o gamă largă de sarcini şi acoperire
globală în spaţiu şi timp, şi cu asigurarea sistemelor spaţiale de comunicaţii. Pentru rezolvarea
problemelor securităţii informaţionale la această etapă este necesar de creat macrosisteme ale
securităţii informaţionale a umanităţii sub egida forumurilor internaţionale de frunte.
Securitatea informaţională este un domeniu mult prea vast, cu prea multe domenii
conexe, pentru a fi detaliat complet undeva.
Din aceste considerente în această teză sunt analizate şi propuse noi metode criptografice
de protecţie a datelor. Aceste metode sunt cele mai eficiente pentru protecţia datelor în sistemele
automatizate, iar în procesul de transmitere a datelor prin intermediul liniilor de comunicare
extinse ele sunt unicele mijloace reale de prevenire a accesului nesancţionat.
b) Etapa iniţială în dezvoltarea criptografiei
Cifrul Cezar menţionat mai sus nu este primul cifru din istorie utilizat de om. Încă din
cele mai vechi timpuri oamenii făceau schimb de informaţii, scriind unul altuia scrisori, care
deseori trebuiau să fie păstrate în secret. Date exacte şi dovezi incontestabile despre apariţia
scrierii secrete în antichitate nu sunt. Se cunoaşte că în Grecia antică pentru transmiterea unui
mesaj a fost folosit un rob căruia i s-a ras capul, după care pe cap a fost scris mesajul. După ce
părul a crescut robul a fost trimis spre adresat cu mesajul „Rade-i capul” [60].
Însă şi mai demult, circa 4000 de ani în urmă, în oraşul Menet Khufu de pe malul Nilului
un scrib cu experienţă a desenat ieroglife care relatau viaţa stăpânului său, devenind astfel cel
care a pus bazele istoriei criptografiei [60]. Sistemul său nu este un sistem al scrierii secrete în
sens contemporan. Pentru aceasta el nu a folosit un cifru complet. Această înscriere, făcută circa
în 1900 î.Hr. pe mormântul lui Khnumphotep, numai alocuri consta din simboluri ieroglifice
19
neobişnuite în locul unora uzuale la acel moment. Marea lor parte se întâlneşte în ultimele
douăzeci de coloane în care sunt enumerate monumentele create de către Khnumphotep în timpul
serviciului său la faraonul Amenemhet II. Aceste înscrieri au fost făcute mai degrabă pentru a da
o importanţă textului şi nu pentru a împiedica citirea lui. Astfel scribul nu a aplicat scrierea
secretă dar, fără îndoială, a aplicat unul dintre elementele de bază ale criptării – transformarea
deliberată a celor scrise.
Astfel, adăugarea la textele de acest fel a elementelor de secret a dat naştere criptografiei.
Este adevărat, acest fapt semăna mai mult cu un joc, deoarece avea scopul de a amâna dezlegarea
ghicitorii pentru un interval de timp scurt. Deci şi criptanaliza lui consta numai în rezolvarea
problemei. Aşadar putem afirma că criptanaliza Egiptului antic, spre deosebire de cea
contemporană, foarte serioasă, era numai o quasi-ştiinţă. Însă orice lucru măreţ are un început
modest. Hieroglifele Egiptului antic conţineau, într-o formă departe de cea impecabilă, două
dintre elementele de bază ale criptografiei – secretul şi transformarea textului. Astfel s-a născut
criptologia.
În primii 3000 de ani dezvoltarea ei nu a fost una continuă. În unele locuri criptologia se
năştea şi murea odată cu civilizaţia ce i-a dat naştere. În altele ea a rezistat pătrunzând în
literatură pentru ca generaţiile următoare să poată urca spre nivele mai înalte ale criptologiei.
Înaintarea spre aceste nivele era lentă şi anevoioasă. Mai multe erau pierdute decât păstrate.
Cunoştinţele acumulate au căpătat amploare numai la începutul Renaşterii europene.
Unul dintre primele tipuri de cifruri cunoscute este cifrul cu deplasare [60], [67], [74].
Procesul de cifrare constă în înlocuirea unei litere cu alta care se află cu un număr fix de poziţii
mai departe în alfabet în funcţie de valoarea cheii. Astfel, dacă cheia este k =3, atunci litera „a” a
textului clar se transformă în litera „d” din textul cifrat, litera „z” – în „c”. pentru textul clar „ac”
textul cifrat va fi „df ”. Pentru acest caz (în care cheia k = 3), acest cifru se numeşte cifrul lui
Cezar, deoarece anume Cezar a folosit acest cifru cu această cheie pentru a comunica cu
generalii săi.
Dacă considerăm alfabetul latin cu 26 de litere, putem opera matematic foarte simplu pe
un inel finit: Z26 . Vom avea P = C = K = Z26 . Pentru un k K ales arbitrar,
ek(m)=m+k (mod 26) şi dk(ek(α)) = α – k (mod 26).
Cifrul Cezar poate fi spart uşor chiar şi având la dispoziţie numai criptograma [51], [52].
Deoarece numărul de deplasări posibile e limitat (spre exemplu 31 in română), fiecare din ele
poate fi testata printr-un atac prin forţa brută. O alta abordare a atacului prin forţă brută este
identificarea literelor conform distribuţiei lor în limba în care a fost scris textul. Prin crearea
graficului frecvenţelor literelor din textul criptat şi prin cunoaşterea distribuţiei obişnuite, un om
poate descoperi valoarea deplasării prin observarea decalajului dintre anumite caracteristici ale
20
graficului. Aceasta este cunoscută ca analiza frecvenţei. Şi computerele pot determina acest
lucru prin măsurarea echivalentei dintre distribuţia curenta şi distribuţia aşteptată; de exemplu,
poate fi utilizată testul „chi–pătrat”.
Neajunsul de bază al acestui cifru este existenţa unui număr foarte mic de chei –
cantitatea literelor din alfabetul limbii în care se face criptarea.
În scopul eliminării acestui neajuns a fost inventat cifrul de substituţie [60], [101].
Pentru a obţine textul cifrat fiecare literă a textului clar este înlocuită cu o altă literă în
conformitate cu o anumită substituţie a ordinei literelor din alfabetul dat. Astfel de substituţii
sunt n! pentru un alfabet cu n litere (pentru alfabetul latin avem 25! substituţii). Aceasta face
dificil atacul prin forţă brută asupra cheii. Dar, ca şi în cazul cifrului cu deplasare, analiza
frecvenţei permite spargerea a astfel de cifruri.
Sistemele cu deplasare sunt sisteme monoalfabetice, adică sisteme care substituie fiecare
caracter cu alt caracter – totdeauna acelaşi, indiferent de poziţie. Punctul slab al sistemelor de
criptare monoalfabetice constă în frecvenţa de apariţie a caracterelor în text [51], [52]. Dacă un
text criptat este suficient de lung şi se cunoaşte limba în care este scris textul clar, sistemul poate
fi spart printr-un atac bazat pe frecvenţa apariţiei literelor într-o limbă. Sunt construite diverse
structuri de ordine relative la frecvenţa apariţiei literelor în fiecare limbă europeană. De obicei,
cu cât un text criptat este mai lung, cu atât frecvenţa literelor folosite se apropie de această
ordonare generală. O comparare între cele două relaţii de ordine (cea a caracterelor din textul
criptat şi cea a literelor din alfabetul limbii curente) conduce la realizarea câtorva corespondenţe
(literă text clar – literă text criptat), ceea ce stabileşte în mod univoc cheia de criptare.
Pentru limba română, un tabel al literelor cele mai frecvent întâlnite este Tabelul 1.1 [93] (restul
caracterelor au în mod normal o frecvenţă de apariţie sub 1 %).
Tabelul 1.1 Cele mai frecvent întâlnite litere în limba română
Litera A I E R T N U S C L O D M P F V
Procent
13,0
4 %
12,8
9 %
11,7
5 %
7,39
%
6,62
%
6,44
%
6,44
%
5,50
%
5,47
%
4,58
%
3,85
%
3,68
%
3,33
%
2,91
%
1,50
%
1,26
%
Acelaşi lucru este valabil şi pentru sistemul cu substituţie.
Una dinte căile de rezolvare a problemei date este de utiliza mai multe seturi de simboluri
în loc de alfabetul standard, şi de a cifra literele textului clar alegând simbolurile corespunzătoare
din diferite seturi în consecutivităţi determinate. Astfel de cifruri se numesc cifruri
polialfabetice.
21
În calitate de exemplu putem considera corespunderea reprezentată în Tabelul 1.2, în care
prima linie reprezintă alfabetul englez iar liniile a doua şi a treia – primul şi respectiv al doilea
alfabet al textului cifrat.
Tabelul 1.2. Exemplu de corespundere pentru un cifru polialfabetic
a b c d e f g h i j k l m n o p q r s t u v w x y z
D C B A H G F E M L K J I Z Y X W V U T S R Q P O N
T M K G O Y D S I P E L U A V C R J W X Z N H B Q F
În această situaţie literele textului clar care se află pe poziţii impare se înlocuiesc cu
literele din primul alfabet (linia 2), iar cele de pe poziţii pare – cu literele din alfabetul al doilea
(linia 3). Astfel, cuvântul iniţial „happy” va fi criptat în „ETXCN” şi litera p care apare de două
ori în textul clar este criptată cu diferite simboluri. Acest fapt împiedică esenţial atacul asupra
cifrului prin aplicarea analizei statistice a limbii.
În exemplul dat se cifrează de fapt două litere la un singur pas, adică de fapt lucrăm cu
blocuri de litere de lungimea doi. În practică se pot utiliza până la cinci alfabete diferite ale
textului cifrat, multiplicând astfel spaţiul cheilor. Dacă e să aplicăm 5 alfabete diferite atunci
numărul cheilor posibile este egal cu 26!5 ≈ 2441. Utilizatorul cifrului trebuie însă să ţină cont de
faptul că cheia este o consecutivitate de 26·5=130 litere. Fireşte, pentru a complica situaţia Evei
(persoanei care încearcă să spargă cifrul), este necesar de a ascunde cantitatea de alfabete,
considerând acesta ca o componentă a cheii [51], [53]. Însă pentru un utilizator de mijloc din
secolul XIX acest sistem de criptare părea prea voluminos, deoarece cheia era prea mare pentru a
o memoriza. Cu toate acestea cele mai cunoscute cifruri ale secolului XIX se bazau anume pe
acest principiu.
Cifrul Vigenere [60] era o variaţie a cifrului polialfabetic şi concomitent avea o cheie
uşor de memorizat. Definim P = C = Z26, K = .26Z O cheie kK a este un cuvânt având
codificarea numerică k0 k1 ... kp−1.
Fie m = m0 m1 ... mn – codificarea textului clar care trebuie transmis. Textul criptat va fi
ek(m)= c = c0 c1 ... cn, unde ci = mi + ki (mod p) (mod 26)
Sistemul Vigenere a fost utilizat secole de-a rândul, fiind considerat la timpul său ca unul
din cele mai sigure sisteme de criptare. În 1917 de exemplu, prestigioasa revistă ”Scientific
American” îl considera imposibil de atacat. Numai că acest sistem a fost spart de Kasiski [52]
încă din 1863 (şi independent de Babbage în 1854) [120].
22
Criptanaliza sistemului Vigenere constă în următoarele: fie c = c0 c1 ... cn-1 textul criptat
cu cheia k = k0 k1 ... kp−1; putem aranja acest text sub forma unei matrice cu p linii şi pn /
coloane [51], [53], astfel
0c pc pc2 …
1c 1pc 12 pc …
1pc 12 pc 13 pc …
Elementele de pe prima linie au fost criptate după formula
0),26(mod0 kkac prpr
adică cu un sistem Cezar ( 0k fiind o valoare fixată din Z26). În mod similar şi celelalte linii.
Deci, dacă s-ar cunoaşte lungimea p a cheii, problema s-ar reduce la criptanaliza a p texte
criptate cu Cezar – sistem de criptare monoalfabetic. Sunt cunoscute două metode pentru aflarea
lungimii cheii: testul lui Kasiski [60] şi indexul de coincidenţă.
Prima metodă constă în studiul textului criptat şi aflarea de perechi de segmente de cel
puţin 3 caractere (această lungime este propusă de Kasiski) identice. Pentru fiecare astfel de
pereche, se determină distanta dintre segmente. După ce s-au găsit mai multe astfel de distanţe,
valoarea lui p va fi cel mai mare divizor comun al lor (sau – eventual un divizor al acestuia).
A doua metodă de aflare a lungimii cheii de criptare într-un sistem Vigenere se bazează
pe un concept definit în 1920 de Wolfe Friedman: indexul de coincidenţă [52].
Definiţia 1.8. Dacă ncccc ...21 este o secvenţă de n caractere alfabetice, se numeşte ”index de
coincidenţă” )(xIc al lui c probabilitatea ca două caractere din c, alese aleator, să fie identice.
O altă categorie mare de cifruri o alcătuiesc cifrurile cu transpoziţie [60]. Cifrul care
modifică numai ordinea simbolurilor fără a modifica simbolurile însuşi se numeşte cifru de
transpoziţie.
Să examinăm transformarea din cifrul de transpoziţie pentru o consecutivitate de n
simboluri. Putem reprezenta aceasta cu ajutorul substituţiei
,......21
21
niiin
unde i1 este numărul locului textului cifrat unde nimereşte prima literă a textului clar în rezultatul
transformării alese, i1 – numărul locului pentru litera a doua etc. În linia de sus a tabelului sunt
înscrise în ordine crescătoare numerele naturale de la 1 la n, iar în linia de jos – aceleaşi numere
în ordine aleatoare. Adică acest tabel este o permutare de ordinul n. ştiind permutarea ce
generează transformarea putem efectua criptarea şi decriptarea textului.
23
Un exemplu de astfel de cifru destinat pentru cifrarea mesajelor de lungime n este cifrul
la care spaţiul cheilor este mulţimea tuturor permutărilor de ordinul n, iar transformarea textului
se face cum s-a arătat mai sus. Numărul de chei al acestui cifru este n!. Pentru aplicarea în
practică acest cifru nu este comod, deoarece pentru valori suficient de mari ale lui n suntem
nevoiţi să lucrăm cu tabele foarte lungi.
O aplicare largă au avut cifrurile de transpoziţie care folosesc o figură geometrică.
Transformările în astfel de cifru constau în faptul că în figură textul clar se înscrie pe o „cale” iar
apoi pe altă „cale” se copie de acolo obţinând textul cifrat. Spre exemplu, putem înscrie textul
clar într-un tabel dreptunghiular pe orizontală, începând cu colţul stâng de sus mergând
consecutiv de la stânga spre dreapta şi de la dreapta spre stânga. Copiem apoi mesajul care va fi
textul criptat mergând pe o altă cale: pe verticală, începând cu colţul de dreapta de sus mergând
consecutiv de sus în jos şi de jos în sus.
Aceste cifruri, precum şi multe altele care în fond sunt modificări ale lor, sunt
principalele tipuri de cifruri care fac parte din era „preştiinţifică” a criptografiei.
De menţionat că în această perioadă de dezvoltare a criptografiei, anume în sec. XIX,
olandezul Kerkhoff [60], a formulat cerinţa de bază a unui sistem criptografic, valabilă şi în
zilele noastre: secretul cifrului trebuie să se bazeze pe secretul cheii şi nu a algoritmului.
În sfârşit, ultimul cuvânt în era „preştiinţifică” a criptografiei au fost sistemele de
criptare cu rotor. Ele au asigurat o securitate şi mai înaltă şi au permis automatizarea
(mecanizarea) procesului de cifrare şi decifrare. Una dintre primele sisteme de acest fel a fost
maşina mecanică inventată în anul 1790 de către Thomas Jefferson, viitorul preşedinte al SUA
[60], [61]. Substituţia polialfabetică în maşina cu rotor se realizează prin variaţia poziţiei
rotoarelor care se rotesc, fiecare dintre ele efectuând o anumită substituţie înscrisă pe el.
Aplicarea practică a acestor maşini a început numai la începutul secolului XX. Una dintre
primele maşini cu rotor a fost maşina germană „Enigma”, elaborată în anul 1917 de către Eduard
Hebern şi perfectată mai târziu de mai multe ori.
O maşină rotor (rotor machine) [36], [37] are o tastatură şi o serie de rotoare ce permit
implementarea unei versiuni a cifrului Vigénère. Fiecare rotor face o permutare arbitrară a
alfabetului, are 26 de poziţii şi realizează o simplă substituţie. Deoarece rotoarele se mişcă cu
viteze de rotaţie diferite, perioada unei maşini cu n rotoare este n·26!.
Cel mai celebru cifru bazat pe o maşină rotor este Enigma, utilizată de germani în cel de-
al doilea război mondial. El a fost inventat de Arthur Scherbius şi Arvid Gerhard Damm în
Europa şi a fost patentat în SUA. Germanii au îmbunătăţit considerabil proiectul inventatorilor
săi, dar a fost spart de criptanaliştii polonezi care au explicat atacul englezilor.
24
Maşinile cu rotor au fost folosite activ pe parcursul războiului II mondial [59]. Pe lângă
maşina germană Enigma au fost folosite şi Sigaba (SUA), Typex (Marea Britanie), Red, Orange,
Purple (Japonia) [76]. Maşinile cu rotor au fost vârful criptografiei formale deoarece relativ
simplu realizau cifruri suficient de rezistente.
Atacurile încununate de succes asupra maşinilor cu rotor au fost posibile numai la
începutul anilor 40 odată cu apariţia maşinilor electronice de calcul [37]. Tot în această perioadă
criptografia devine ştiinţific ramură aparte a matematicii odată cu publicarea (anul 1949)
articolului lui Claude Elwood Shannon „Communication Theory of Secrecy Systems” [98].
1.2. Elemente fundamentale din Criptografie
Criptografia reprezintă o ramură a matematicii care se ocupă cu securizarea informaţiei,
precum şi cu autentificarea şi restricţionarea accesului într-un sistem informatic. În realizarea
acestora se utilizează în mare parte metode matematice, profitând de unele probleme cu
complexitate de rezolvare suficient de înaltă. Termenul „criptografie” este compus din cuvintele
de origine greacă κρυπτός kryptós (ascuns) şi γράφειν gráfein (a scrie). Criptografia urmăreşte
următoarele obiective [5] :
1. Confidenţialitatea (privacy) – proprietatea de a păstra secretul informaţiei, pentru ca
aceasta să fie folosită numai de persoanele autorizate.
2. Integritatea datelor – proprietatea de a evita orice modificare (inserare, ştergere,
substituţie) neautorizată a informaţiei.
3. Autentificare – proprietatea de a identifica o entitate conform anumitor standarde. Este
compusă din:
a) autentificarea unei entităţi;
b) autentificarea sursei informaţiei;
4. Non–repudierea – proprietatea care previne negarea unor evenimente anterioare.
Celelalte obiective legate de securitatea informaţiei (autentificarea mesajelor, semnături,
autorizare, validare, controlul accesului, certificare, timestamping, confirmarea recepţiei,
anonimitate, revocare) pot fi derivate din aceste patru.
Împreună cu Criptografia se dezvoltă Criptanaliza – (din greacă, kryptós, „ascuns”, şi
analýein, „a dezlega”) este studiul metodelor de obţinere a înţelesului informaţiilor criptate, fără
a avea acces la informaţia secretă necesară în mod normal pentru aceasta. De regulă, aceasta
implică găsirea unei chei secrete [48, 89].
Criptografia şi Criptanaliza împreună constituie Criptologia (din greacă, kryptós,
„ascuns”, şi λόγος, „cuvânt”) – ştiinţa care se ocupă cu metodele de criptare şi decriptare.
25
Definiţia 1.1. O mulţime nevidă T se numeşte alfabet. Elementele alfabetului T se numesc litere.
O consecutivitate finită de elemente din alfabetul T se numeşte cuvânt.
Una şi aceeaşi literă poate intra într-un cuvânt de mai multe ori. Un cuvânt ce nu conţine
nici o literă se numeşte cuvânt nul. Lungimea cuvântului, notată cu w, este numărul de litere în
acest cuvânt, unde fiecare literă se consideră de câte ori se întâlneşte în el.
Notam cu T* mulţimea tuturor cuvintelor alfabetului T.
Definiţia 1.2. Submulţimile mulţimii T* le vom numi limbaje (formale) peste T.
Definiţia 1.3. Un mesaj în forma sa originară se numeşte text clar (uneori text în clar, în engleză
plaintext). Text criptat (în engleză ciphertext) se numeşte textul obţinut în rezultatul operaţiei de
criptare a textului plan.
Definiţia 1.4. Rescrierea textului clar, folosind o metodă cunoscută numai de expeditor (eventual
şi de destinatar), se numeşte criptare (sau cifrare) a mesajului. Procesul retransformării
criptogramei în textul original este numit decriptare.
Definiţia 1.5. Criptograma este un text ilizibil rezultant din criptarea “textului clar”.
Definiţia 1.6. Un canal este o cale pentru fluxul de informaţii.
Destinatarul primeşte printr-un canal textul cifrat şi îl decriptează, ştiind metoda folosită
pentru criptare, şi obţine mesajul iniţial. În literatura de specialitate expeditorul de obicei este
numit Alice iar destinatarul este numit Bob. Deci, Alice şi Bob trebuie să stabilească în prealabil
detaliile modalităţii de criptare şi de decriptare. Aşadar, metoda de camuflare a “textului clar” în
aşa fel încât substanţa să nu sufere modificări semantice, este denumita criptare [60].
Criptarea se foloseşte pentru a fi siguri că informaţia este inaccesibilă oricărei persoane
care nu deţine instrumentul necesar decriptării, chiar dacă oricine poate vedea datele în formă
criptografică. Oricum nu va înţelege nimic, care să conducă spre descifrarea textului original.
Persoana care interceptează criptograma şi încearcă să obţină textul clar aplicând diverse
metode, însă fără a avea cheia de decriptare, este numită criptanalist.
Siatemul care realizează operaţiile de criptare şi decriptare se numeşte sistem de criptare
(sau sistem criptografic, sau criptosistem).
Definiţia 1.7. În criptografia modernă un sistem de criptare este definit ca o structură cu cinci
componente (P, C, K, E, D), [8]:
P={pt/ ptT*} – spaţiul textelor în clar, scrise pentru un alfabet nevid T (în mod obişnuit
T={0,1});
K – spaţiul cheilor de criptare kK;
Familia funcţiilor de criptare dependentă de chei şi de un algoritm de criptare E
Ek : P C , Ek = {ek / ek(pt)=ct şi ek este injectivă};
Familia funcţiilor de decriptare dependentă de chei şi de un algoritm de decriptare D
26
Dk : C P , Dk = { dk / dk(ek(pt))= t tP}
C spaţiul mesajelor cu text criptat unde:
C={ct / k K, aP, ct = Ek (a)}.
Schema aplicării unui sistem de criptare este prezentată în Figura 1.1.
Fig. 1.1. Schema aplicării unui sistem de criptare
Pentru ca un sistem de criptare să fie considerat bun, el trebuie să îndeplinească trei
criterii (enunţate de Francis Bacon în sec. XVII) [2]:
1. Fiind date ek şi aP să fie uşor de calculat ek(a).
2. Fiind date dk şi wC să fie uşor de determinat dk (w).
3. Să fie imposibil de determinat t din w, fără a cunoaşte dk.
Criteriile 1 şi 2 implică că pentru utilizatorii legali sistemul de criptare nu trebuie să fie
prea complicat (se presupune că utilizatorii au un timp acceptabil pentru calcule). În criteriul 3
„imposibilitatea” e înlocuită în prezent cu „dificultatea de a calcula”. Se presupune că un
interceptor de asemenea are acces la tehnica de calcul. Ultimul criteriu defineşte – sub o formă
vagă – ideea de ”securitate” a sistemului. La aceste criterii, Bacon adăuga şi o a patra regulă:
4. Textul criptat trebuie să fie un text banal, fără suspiciuni.
Această condiţie nu mai poate fi considerată importantă [60] şi este utiliză astăzi doar de
un subdomeniu strict al criptografiei, numit steganografie – ştiinţa despre transmiterea secretă a
informaţiei prin păstrarea secretului a însuşi faptului transmiterii acestei informaţii.
Printre metodele moderne de criptare deosebim două direcţii principale [60]: sistemele cu
cheie secretă (sau sisteme simetrice) – sistemele în care ek este bijectivă şi sisteme cu chei
publice (sau sisteme asimetrice) – sistemele în care ek nu este bijectivă.
Există două tipuri de sisteme simetrice [60], [62], [67]: sisteme care se bazează pe
algoritmi de tip bloc şi sisteme care se bazează algoritmi de tip şir. Algoritmii de tip bloc
acţionează asupra blocurilor de text clar şi text cifrat. Algoritmii de tip şir se aplică şirurilor de
text clar şi text cifrat, la nivel de bit sau octet. Tipurile de cifruri sunt prezentate în Figura 1.2.
ek(pt)=ct
dk(ct)=pt Expe-
ditorul Desti-
natarul
Criptanalistul
27
Fig. 1.2. Tipurile de cifruri
În paragraful ce urmează este descrisă perioada de până la 1949 – perioada
„preştiinţifică” a criptografiei, adică perioada de la primii săi paşi şi până la apariţia unor articole
în care se pun bazele matematice ale sistemelor criptografice.
1.3. Bazele matematice ale criptografiei moderne
Criptografia modernă este bazată pe rezultate fundamentale în aşa domenii ale
matematicii ca teoria informaţiei, complexitatea algoritmilor, teoria numerelor etc. În prezent
este imposibil de imaginat un algoritm funcţionabil de criptare fără o asigurare matematică.
1.3.1. Teoria informaţiei Teoria contemporană a informaţiei a fost publicată pentru prima dată în anul 1948 de
către Claude Elmwood Shannon [97], [98]. Ideile de fundamentale ale acestor articole sunt:
entropia şi incertitudinea, norma limbii, securitatea sistemului de criptare, distanţa de unicitate,
confuzia şi difuzia.
În teoria informaţiei, entropia Shannon sau entropia informaţională măsoară
incertitudinea asociată cu o variabilă aleatoare . Această măsură indică şi cantitatea de informaţie
conţinută într-un mesaj, exprimată de obicei în biţi sau în biţi pe simbol. Când este exprimată în
biţi, ea reprezintă lungimea minimă pe care trebuie să o aibă un mesaj pentru a comunica
informaţia, considerând toate mesajele cu lungime egală. Spre exemplu, pentru un câmp al bazei
de date ce reprezintă ziua săptămânii este suficient să utilizăm trei biţi de informaţie, deoarece
toată informaţia poate fi codificată în trei biţi: LUNI – 000, MARŢI – 001, MIERCURI – 010,
JOI – 011, VINERI – 100, SÂMBĂTĂ – 101, DUMINICĂ – 110.
Cifruri
Clasice Moderne Maşini cu rotor
Cu substituţie Cu transpoziţie Cu cheie privată Cu cheie publică
Cifruri bloc Cifruri şir
28
Dacă vom reprezenta informaţia aceasta prin intermediul simbolurilor codului ASCII, ea
ar fi ocupat mai mult spaţiu în memorie fără a conţine însă mai multă informaţie. În mod
analogic, câmpul „sexul” al unei bazei da date conţine numai un singur bit de informaţie, pe când
aceeaşi informaţie poate fi păstrată ca unul dintre cele două cuvinte de 6 biţi ai codului ASCII:
„bărbat” sau „femeie”.
În mod formal, cantitatea de informaţie în mesajul M este măsurată cu entropia mesajului
care se notează cu H(M). Entropia mesajului ce determină sexul este egală cu 1 bit iar entropia
mesajului ce exprimă ziua săptămânii este puţin mai mică de 3 biţi. În acest caz entropia
mesajului, exprimată în biţi, este egală cu n2log , unde n este cantitatea de valori posibile,
considerând că toate valorile sunt echiprobabile.
Entropia unui mesaj este de asemenea şi măsura incertitudinii mesajului. Aceasta este
cantitatea de biţi ai textului clar care trebuie demascat pentru a obţine textul în întregime. Spre
exemplu, dacă blocul textului cifrat „AH*S5 ” înseamnă numai „BÎRBAT” sau „FEMEIE”,
atunci incertitudinea mesajului este 1. Criptanalistului îi este suficient să afle numai un singur bit
corect pentru a decripta mesajul.
Pentru o limbă dată norma limbii este egală cu
NMHr )(
unde N este lungimea mesajului. Pentru valori mari ale lui N norma limbii engleze ia valori
cuprinse între 1,0 bit/literă şi 1,5 bit/literă. C. Shannon a spus [99] că entropia este o funcţie de
lungimea textului. El arătat că pentru blocurile de 8 litere norma este egală cu 2,3 bit/literă, iar
valoarea ei nimereşte între 1,3 şi 1,5 pentru blocurile de 16 litere. Thomas Cover a utilizat o
metodă a teoriei jocurilor pentru evaluare şi a determinat că entropia este egală cu 1,3 bit/simbol
[31]. Norma absolută a limbii este egală cu cantitatea maximă de biţi care pateu fi transmisă cu
fiecare simbol cu condiţia că toate şirurile de simboluri sunt echiprobabile. Dacă în limbă sunt L
simboluri atunci norma absolută este egală cu .log2 LR Aceasta este maximul entropiei
simbolurilor luate aparte.
Pentru limba engleză cu 26 de litere norma absolută este egală cu 26log2 sau
aproximativ 4,7 bit/literă [31]. Norma reală a limbii engleze este, deci, mult mai mică, limbile
fireşti au o redundanţă mare. Redundanţa limbii se notează cu D şi se defineşte ca .rRD
Considerând norma limbii engleze egală cu 1,3 obţinem o redundanţă egală cu 3,4
bit/literă. Aceasta înseamnă că fiecare literă a limbii engleze conţine 3,4 biţi de informaţie
excedentară.
Mesajele ASCII care constau numai din litere engleze cantitatea de informaţie la fiecare
octet este de 1,3 biţi. Deci, în fiecare octet se conţin 6,7 biţi de informaţie excedentară, ce
29
implică o redundanţă de 0,84 biţi de informaţie la un bit de text ASCII şi o entropie de 0,16 biţi
de informaţie la un bit de text ASCII. Acelaşi mesaj scris cu codul Baudot, cu 5 biţi/simbol, are
redundanţa 0,74 biţi pe un bit şi entropia de 0,26 biţi pe un bit. Spaţiile, semnele de punctuaţie şi
formatarea textului modifică rezultatele date.
Shannon a definit exact modelul matematic pentru Securitatea sistemului de criptare
[98]. Sensul lucrului criptanalistului constă în determinarea cheii k, a textului clar pt sau a
ambelor concomitent. Pe de altă parte el poate fi satisfăcut şi de o informaţie probabilistică a lui
pt, cum ar fi: este oare acest text clar un sunet digitalizat, text scris în limba germană, date ale
unor tabele electronice sau altceva concret.
În criptanaliza reală există o informaţie probabilistică despre pt încă până la începutul
lucrului. Criptanalistul cel mai probabil ştie deja limba textului clar. Această limbă conţine o
redundanţă corelată cu ea. Dacă mesajul este pentru Bob, este probabil că el începe cu „Dragă
Bob”. Evident, „Dragă Bob” este mai probabil decât „J4)*%?kj5”. Scopul criptanalistului este
modificările probabilităţilor dependente de fiecare text clar eventual. În final din infinitatea de
texte în clar va fi ales unul concret (sau în cel mai rău caz unul foarte probabil).
Există sisteme de criptare ce ating o securitate perfectă. Acestea sunt sistemele în care
textul cifrat nu dă nici o informaţie despre textul clar (posibil cu excepţia lungimii lui). Shannon
a demonstrat în mod practic că acest lucru este posibil numai în cazul în care numărul de chei
posibile este la fel de mare ca şi numărul de mesaje posibile. Altfel spus, cheia nu trebuie să fie
mai mică decât mesajul şi nu poate fi folosit repetat. Acesta înseamnă că unicul sistem care
atinge securitatea perfectă este sistemul numit „one-time pad”, inventat în 1917 de către major
Jeseph Mauborgne şi Glbert Vernam [105] din AT&T [60]. Sistemul „one-time pad” este un şir
mare de simboluri ale cheii, simboluri care nu se repetă, sunt repartizate aleator, scrise pe
bucăţele de hârtie şi încleiate într-un carnet. Fiecare literă a cheii se utilizează numai pentru
criptarea unui singur simbol al textului clar. Cifrarea reprezintă suma după modului 26 a
simbolurilor textului clar şi a cheii din carnetul de o singură folosinţă. Fiecare simbol al cheii se
foloseşte numai o dată şi pentru un singur mesaj. După cifrare foile utilizate ale carnetului sunt
distruse. La fel procedează şi adresantul, care are acelaşi carnet.
Cu excepţia sistemelor cu securitate perfectă textul cifrat inevitabil conţine o cantitate
anumită de informaţie despre textul clar respectiv. Un algoritm criptografic bun păstrează
minimul de astfel de informaţie iar un criptanalist bun foloseşte această informaţie pentru un text
clar anumit.
Criptanaliştii folosesc redundanţa firească a limbii pentru minimizarea numărului de texte
în clar. Cu cât limba are o redundanţă mai mare cu atât se supune mai uşor criptanalizei. Din
aceste motive multe implementări criptografice realizate efectuează comprimarea textului până
30
la cifrare. Comprimarea micşorează redundanţa concomitent cu volumul de lucru necesar pentru
cifrare şi decifrare.
Entropia sistemului de criptare este o unitate de măsură a spaţiului cheilor K. Ea este
egală aproximativ cu logaritmul în baza 2 de la numărul de chei [99]: .log)( 2 KKH
Entropia sistemului de criptare cu cheia de 64 biţi este de 64 de biţi, entropia sistemului
cu cheie de 56 de biţi este de 56 de biţi. În caz general, cu cât entropia este mai mare, cu atât mai
dificilă este spargerea sistemului.
Pentru un mesaj de lungime n cantitatea de chei diferite care descifrează textul cifrat într-
un text clar cu sens în limba textului original se determină de formula 12 )( nDKH [31], [99].
Shannon a definit [98] distanţa de unicitate, U, care se mai numeşte punct de unicitate, o
cantitate aproximativă de text cifrat pentru care suma entropiei textului clar respectiv şi entropiei
cheii de criptare este egală cu cantitatea de biţi ai textului cifrat. De asemenea Shannon a arătat
că are sens să considerăm că textele cifrate care sunt mai lungi decât distanţa de unicitate pot fi
descifrate cu sens numai într-un singur mod. Textele cifrate care sunt vizibil mai scurte ca
distanţa de unicitate pot fi descifrate cu sens, cel mai probabil în mai multe moduri, fiecare dintre
ele având posibilitatea de a fi corect, asigurând astfel securitatea, punând inamicul în faţa alegerii
textului clar corect.
Pentru majoritatea sistemelor simetrice distanţa de unicitate se defineşte ca raportul
entropiei sistemului împărţită la redundanţa limbii:
DKHU )(
Distanţa de unicitate nu este o mărime exactă ci una probabilistică. Ea permite să
evaluăm cantitatea minimă de text cifrat pentru spargerea căruia prin forţă brută există, probabil,
numai o singură metodă raţională de descifrare. De obicei cu cât e mai mare distanţa de unicitate,
cu atât e mai bun sistemul de criptare. Pentru sistemul DES cu o cheie de 56 de biţi şi un mesaj
scris în limba engleză cu coduri ASCII, distanţa de unicitate este aproximativ egală cu 8,2
simboluri ASCII sau 66 biţi. În [35] sunt date distanţele de unicitate pentru diverse lungimi ale
cheii. Distanţele de unicitate pentru unele sisteme de criptare clasice sunt prezentate în [35].
Distanţa de unicitate nu este o măsură a textului cifrat necesar pentru criptanaliza ci
cantitatea de text cifrat necesar pentru unicitatea rezultatului criptanalizei. Un sistem de criptare
poate fi invulnerabilă chiar dacă teoretic ea poate fi spartă, folosind o cantitate mică de text
cifrat. Distanţa de unicitate este proporţională redundanţei. Dacă redundanţa tinde spre zero chiar
şi un cifru trivial pateu să nu fie spart folosind numai textul cifrat.
Shannon a definit sistemul de criptare cu o distanţă infinită de unicitate ca unul ce are un
secret ideal. Trebuie de menţionat însă că un sistem ideal nu este neapărat perfect pe când un
31
sistem perfect este şi ideal. Dacă sistemul are un secret ideal atunci chiar şi după o criptanaliză
reuşită rămâne o urmă de nedeterminare despre coincidenţa textului clar restabilit şi a textului
clar original.
Utilizarea practică a teoriei informaţiei are o importanţă teoretică foarte mare. Cu toate
acestea criptanaliza reală foloseşte foarte rar cele spuse mai sus. Distanţa de unicitate garantează
siguranţa sistemului dacă este foarte mică, pe când valoarea mare a ei nu garantează securitatea.
Câţiva algoritmi practici nu pot fi supuşi analizei absolut deloc, comportamentul parametrilor
teoriei informaţiei ar putea contribui la spargerea unor mesaje cifrate. Însă unele considerente ale
teorie informaţiei uneori sunt utile, spre exemplu pentru determinarea intervalului recomandat de
modificare a cheilor într-un algoritm concret. Criptanaliştii mai folosesc o serie de teste bazate
pe statistică şi teoria informaţiei pentru a alege direcţia mai cu perspectivă a analizei textului
cifrat. În acest context trebuie de spus că în mare parte literatura referitoare la aplicarea teoriei
informaţiei în criptanaliză este secretă, inclusiv şi lucrarea de bază a lui Alan Turing, scrisă în
1940.
Două dintre metodele de bază de frustrare a analizei statistice (altele decât recurgerea la
sistemele ideale) sunt confuzia şi difuzia [98]. Ele sunt două concepte suplimentare care se leagă
de cantitatea de muncă necesară unei criptări. Un algoritm de criptare trebuie să ia informaţia din
textul clar şi să o transforme astfel încât interceptorul să nu poată recunoaşte mesajul.
Interceptorul nu trebuie să poată prezice efectul schimbării unei litere în textul clar asupra
textului cifrat. Aceasta caracteristica se numeşte confuzie. Un algoritm care prezintă un grad
ridicat de confuzie va prezenta o relaţie funcţională complexă între perechea text clar/cheie şi
textul cifrat. De exemplu, cifrul Cezar nu are un grad suficient de ridicat de confuzie, deoarece
din descoperirea transformării a câteva litere, se poate prezice transformarea celorlalte litere, fără
informaţie suplimentară. Cea mai simplă modalitate de a produce confuzia este substituţia.
Cifrurile cu substituţie contemporane sunt mai complicate decât cele clasice: blocurile lungi ale
textului clar sunt înlocuite cu blocuri ale textului cifrat şi modalitatea de înlocuire se modifică cu
fiecare bit al textului sau a cheii. Aşa fel de substituţie este însă insuficient – algoritmul
complicat al maşinii germane Enigma a fost spart în timpul celui de-al Doilea Război Mondial.
Cifrul trebuie să distribuie informaţia din textul clar în întreg textul cifrat. Schimbările
din textul clar trebuie să afecteze cât mai multe porţiuni din textul cifrat. Acest principiu se
numeşte difuzie, caracteristica distribuirii informaţiei de la literele textului clar la textul cifrat în
totalitatea sa. O difuzie bună înseamnă că interceptorul are nevoie de o cantitate importanta de
text cifrat pentru a descoperi algoritmul. Cea mai simplă modalitate de a produce confuzia este
transpoziţia (permutarea). Cifrurile de substituţie şi transpoziţii nu prezintă o buna difuzie,
deoarece un caracter din textul clar determină doar un singur caracter din text cifrat. Cifrurile
32
contemporane de asemenea utilizează transpoziţia, dar se folosesc şi aşa forme ale difuziei care
permit împrăştierea părţilor mesajului prin întreg mesajul.
Cifrurile cu flux de caractere folosesc numai confuzie, cu toate că o serie de scheme cu
conexiune inversă (feedback) adaugă difuziune. Algoritmii de tip bloc aplică atât difuzia cât şi
confuzia. De regulă, este simplu de spart difuzia ca atare cu toate că cifrurile cu transpoziţie
dublă sunt mai rezistente decât alte sisteme necomputerizate.
1.3.2. Teoria complexităţii Teoria complexităţii asigură metodologia analizei complexităţii de calcul a diverşilor
algoritmi de criptare. Ea compară metodele şi algoritmii de criptare şi determină securitatea lor.
Teoria informaţiei ne informează că orice sistem de criptare (cu excepţia one-time pad) pot fi
sparte. De asemenea teoria informaţiei ne informează dacă sistemele pot fi sparte până la
moartea universului
Complexitatea algoritmului este determinată de puterea de calcul necesară pentru
executarea lui. Complexitatea computaţională a algoritmului deseori este apreciată prin doi
parametri: T (complexitatea temporală) şi S (complexitatea spaţială sau cerinţele memoriei).
Ambii parametri sunt prezentaţi ca funcţii de variabila n, unde n este mărimea datelor de intrare.
Există de asemenea şi alte modalităţi de măsurare a complexităţii cum ar fi cantitatea de biţi
aleatori, lăţimea bandei de comunicaţie, volumul de date etc.
De obicei algoritmii se clasifică în conformitate cu complexitatea lor temporală sau
spaţială. Un algoritm se numeşte constant dacă complexitatea lui nu este în funcţie de n: ).1(O
Algoritmul este liniar, dacă complexitatea temporală a lui este ).(nO Algoritmii pot fii pătratici,
cubici etc. Toţi aceşti algoritmi sunt polinomiali, complexitatea lor fiind ),( mnO unde m –
constantă. Algoritmii cu o complexitate temporală polinomială se numesc algoritmi cu timp
polinomial.
Algoritmii cu complexitatea ),( )(nftO unde t – constantă mai mare ca 1 iar f(n) – o
funcţie polinomială de variabilă n, se numesc algoritmi exponenţiali. Submulţimea logaritmilor
exponenţiali care au complexitatea ),( )(nfcO unde c este constantă iar f(n) creşte mai repede ca
constanta şi mai lent ca funcţia liniară, se numesc algoritmi suprapolinomiali. În caz ideal
criptograful ar dori să afirme că cel mai bun algoritm de spargere a algoritmului de cifrare
proiectat, are un timp exponenţial. În practică, la nivelul actual de dezvoltare a teoriei
complexităţii, în cel mai bun caz putem spune: „toţi algoritmii de spargere cunoscuţi pentru
sistemul de criptare dat au o complexitate de timp suprapolinomială”. Adică toţi algoritmii de
spargere cunoscuţi au complexitatea de timp suprapolinomială, însă încă nu este posibil de
demonstrat că nu se poate descoperi un algoritm de spargere cu complexitate polinomială. Este
33
posibil ca dezvoltarea teoriei informaţiei să permită crearea unui algoritm de criptare pentru care
existenţa algoritmilor cu timp polinomial de spargere poate fi exclusă cu exactitate matematică.
Odată cu creşterea lui n complexitatea temporală a algoritmilor poate deveni atât de mare,
încât va influenţa realizarea practică a algoritmului. Dacă considerăm microsecunda ca unitate de
timp, calculatorul poate executa algoritmul constant într-o microsecundă, pe cel liniar – într-o
secundă iar pe cel pătratic – în 11,6 zile iar cel cubic are nevoie de 32000 de ani şi , în principiu
se poate realiza către următoarea eră glaciară. Realizarea algoritmului exponenţial este zădarnică
indiferent de extrapolarea creşterii puterii calculatoarelor, calculului paralel etc.
Complexitatea temporală a problemei spargerii algoritmului cu forţă brută este
proporţională cu cantitatea de chei posibile, care depinde exponenţial de lungimea cheii. Dacă n
este lungimea cheii, atunci complexitatea spargerii cu forţă brută este ).2( nO
Teoria complexităţii clasifică nu numai complexitatea algoritmilor concreţi pentru
rezolvarea problemei ci şi complexitatea problemelor ca atare. Teoria studiază timpul minim şi
volumul memoriei necesar pentru rezolvarea celui mai complicat caz al problemei pe un
calculator teoretic, cunoscut ca maşina Turing, ce reprezintă un automat finit cu o bandă de
memorie infinită pentru citire-scriere şi este un model real de calcul.
Dintre clasele cele mai importante de complexitate ale problemelor – P, NP, NP-
complete, PSAPCE, PSPACE-complete, EXPTIE – cea mai importantă pentru criptografie este
clasa NP. Importanţa aceste clase constă în următoarele: mulţi algoritmi clasici şi algoritmi cu
chei publice se pot sparge într-un timp polinomial nedeterminat. Pentru un text cifrat c,
criptanalistul pur şi simplu ghiceşte textul clar x şi cheia k şi într-un timp polinomial execută
algoritmul de cifrare cu datele de intrare x şi k şi verifică dacă rezultatul este egal cu c. Aceasta
are o mare importanţă teoretică deoarece se determină limitata de sus a complexităţii
criptanalizei acestor algoritmi. În practică desigur, acesta este un algoritm determinist căutat de
criptanalist, algoritm executabil într-un timp polinomial. Mai mult decât atât, acest argument nu
poate fi aplicat la toate clasele de cifruri, mai concret, pentru one-time pad – oricare ar fi c, există
o mulţime de perechi x, k din care rezultă c la executarea algoritmului de cifrare, însă majoritatea
acestor x sunt texte fără sens, texte în clar inadmisibile.
Trebuie de menţionat că o importanţă practică foarte mare în criptografie o au noţiunile:
clasele de resturi, numerele prime, calculele în câmpul Galois, descompunerea în factori,
logaritmii discreţi într-un câmp finit etc.
În practica modernă se aplică pe larg rezultatele matematice din domeniile menţionate
(dar şi din altele) la elaborarea algoritmilor de criptare cu cheie publică [90] sau privată, de tip
bloc sau şir de caractere [57], [121].
34
În continuare sunt prezentaţi cei mai frecvent utilizaţi algoritmi incluzând o varietate cât
mai mare posibil de tipuri ale lor. Practica modernă aplică în diverse scopuri anumiţi algoritmi
de criptare pornind de la gardul de securitate, timpul de lucru, viteza de schimb a datelor,
resursele necesare pentru funcţionare, de durata necesară păstrării datelor etc.
De exemplu sistemele de criptare cu chei publice sunt mai lente decât cele ci cheie
privată. Multe tranzacţii financiare durează o perioadă de timp foarte scurtă. De aceea atacul
poate interveni numai pe durata acestui interval de timp şi numai atât cât activează cheia pentru
această şedinţă. Datele personale, cum ar fi informaţia despre conturile bancare, despre codurile
asigurării sociale etc. pot fi păstrate ani în şir. În acest caz atacatorul va avea acest timp pentru
tentative de intervenţii. Deci, în dependenţă de necesitate se aplică un tip de sistem de criptare
sau altul.
1.4. Algoritmi simetrici de tip bloc
Algoritmii de tip bloc criptează mesajul în blocuri de 64 sau 128 de biţi. Pentru acesta se
aplică o funcţie matematică între un bloc de biţi ai mesajului în clar şi cheie (care poate varia ca
mărime), rezultând acelaşi număr de biţi pentru mesajul criptat. Funcţia de criptare este realizată
astfel încât să îndeplinească următoarele cerinţe [80]:
ştiind un bloc de biţi ai textului în clar şi cheia de criptare, sistemul să poată genera rapid
un bloc al textului criptat;
ştiind un bloc de biţi ai textului criptat şi cheia de criptare/decriptare, sistemul să poată
genera rapid un bloc al textului în clar;
ştiind blocurile textului în clar şi ale textului criptat, sistemului să-i fie dificil să genereze
cheia.
Acest tip de algoritmi este foarte folosit în criptografia modernă. Mai jos sunt prezentaţi
câţiva algoritmi care “au făcut carieră”, după prezentarea modurilor criptografice care stau la
baza funcţionării algoritmilor de tip bloc.
Algoritmul Lucifer [102] este un proiect al companiei IBM iniţiat în anul 1970 pentru
crearea unui cifru bloc rezistent. Rezultatele cercetărilor au contribuit la crearea a două metode
de construire a cifrurilor bloc rezistente – reţelele Feistel [44] şi reţelele SP (Substitution-
Permutation Network). Acest algoritm a pus bazele criptografiei simetrice moderne. În proiect au
participat Horst Feistel şi Don Coppersmith, care mai târziu au devenit criptografi vestiţi.
Lucifer este o reţea de permutări şi substituţii, bazate pe aşa numitele “cutiile-S” care au
intrări şi ieşiri de 4 biţi. Intrarea este o permutare a biţilor ieşirii din faza anterioară, iar intrarea
din prima fază este chiar textul în clar. Un bit cheie este folosit pentru a alege între “cutia-S”
actuală din două posibile – Lucifer implementează aceasta printr-o “cutie-T” cu 9 biţi la intrare şi
35
8 la ieşire). Lucifer are 16 faze, blocuri de 128 de biţi şi o manipulare a cheii suficient de
complicată. În Figura 1.3 este prezentată schema unei „cutii-S” iar în Figura 1.4 – a reţelei
Feistel.
În reţeaua Feistel informaţia este divizată în blocuri de lungime fixă: 64, 128 biţi. Fiecare
bloc este divizat în 2 sub-blocuri L0 şi R0. Asupra blocului L0 se aplică funcţia f(L0,K0) iar
rezultatul se adună modulo 2 cu R0 şi se atribuie blocului nou de stânga L1, care este jumătatea
datelor de intrare a rundei următoare. Iar blocul de stânga L0 se atribuie fără modificări blocului
nou de dreapta R1, care este a doua jumătate. Operaţia se repetă în funcţie de numărul rundelor
în algoritm iar la fiecare etapă se modifică, conform unei reguli matematice, cheile de rundă K0
cu K1.
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
S0 S1
P
S0 S1
P
S0 S1
P
S0 S1
P
S0 S1
Fig. 1.3. Schema unei „cutii-S”
Folosind criptografia diferenţială împotriva primei forme de Lucifer, criptologii Biham şi
Shamir au arătat că Lucifer cu 8 faze şi 32 de biţi poate fi spart cu 40 de texte în clar alese şi 229
paşi; acelaşi atac poate sparge Lucifer cu 8 faze şi 128 biţi cu 60 de texte în clar alese şi 253 paşi.
Analize ulterioare au arătat că peste jumătate din chei nu sunt sigure, ceea ce conduce la
posibilitatea de a sparge Lucifer cu 128 de biţi, cu orice număr de faze, cu 233 texte în clar alese,
sau cu 265 texte în clar cunoscute cu chei alese [4], [9]. În concluzie, a doua formă de Lucifer
este mai slabă.
Cu toate neajunsurile care la avea, algoritmul Lucifer a contribuit la dezvoltarea
ulterioară a cifrurilor bloc şi chiar a unora foarte importante cum ar fi DES.
Algoritmul DES (Data Encryption Standard) a fost elaborat pentru guvernul Statelor Unite şi
pentru folosinţă publică. El a fost dezvoltat plecând de la algoritmul “Lucifer”. În mai 1973,
revista Federal Register a sintetizat principiile care trebuie să stea la baza proiectării unui
algoritm criptografic standard [94]: algoritmul trebuie să asigure un înalt nivel de securitate; să
fie complet specificat şi simplu de înţeles; securitatea algoritmului trebuie să fie asigurată de
cheie şi nu trebuie să depindă de păstrarea secretă a algoritmului; algoritmul trebuie să fie
disponibil tuturor utilizatorilor; să fie adaptabil pentru diverse aplicaţii; să fie implementabil pe
Mesajul
Criptograma
36
dispozitivele electronice; să fie eficient în utilizare; să poată fi validat; algoritmul trebuie să fie
exportabil.
DES a fost oficial adoptat ca standard federal în 23 noiembrie 1976, iar în 1977
specificaţiile sale au fost făcute publice [77], [103].
Algoritmul DES este o combinaţie complexă folosind două blocuri fundamentale în
criptografie: substituţia şi permutarea (transpoziţia) [49], [71]. Acest cifru bloc acceptă un bloc
de 64 de biţi la intrare şi generează un bloc cifrat de 64 de biţi. DES este un algoritm simetric.
Acelaşi algoritm şi aceeaşi cheie sunt folosiţi atât la criptare cât şi la decriptare.
Algoritmul este constituit din 16 cicluri repetate ale blocurilor fundamentale. Textul
iniţial este descompus în blocuri de 64 de biţi. Cheia este de 64 biţi din care doar 56 sunt efectivi,
ceilalţi fiind biţi de paritate. Folosirea substituţiei provoacă confuzie prin sistematica substituire
a unor biţi cu alţii. Transpoziţiile provoacă difuzie prin reordonarea biţilor. DES foloseşte numai
operaţii clasice aritmetice şi logice cu număr de până la 64 de biţi, ceea ce face relativ uşor de
implementat atât software cât mai ales hardware: unul din scopurile declarate ale algoritmului
fiind uşoara lui implementare hardware într-un cip specializat [33], [50], [104].
Fig. 1.4. Schema reţelei Feistel
Text cifrat Text plan
Criptare Decriptare Text plan Text cifrat
37
Cu algoritmul DES se poate face atât cifrarea cât şi decifrarea unui mesaj.
Deşi DES a fost cel mai celebru algoritm al secolului XX este considerat la această oră
nesigur pentru multe aplicaţii. Pare paradoxal, dar aceasta este consecinţa măririi considerabile a
puterii de calcul de la confirmarea DES-ului ca un standard criptografic şi până in anul 2000.
Slăbiciunea pleacă de la lungimea prea mică a cheii de 56 de biţi [6], [7], [8], [29], [30], [39],
[63], [106]. Varianta algoritmului cunoscută ca triplu-DES [78] este cea care este considerată
sigură şi la această oră [70], [72].
Insecuritatea DES-ului pleacă de la premiza că un atac “în forţă” are şanse de reuşită în
condiţiile puterii de calcul disponibile astăzi (a se vedea atacurile EFF); până în 2004 cel mai
eficient atac este datorat criptanalizei liniare [70] care folosind 243 texte cunoscute generează o
complexitate temporală de 239-43 (Junod 2001); în condiţiile unui atac cu text ales complexitatea
poate fi redusă de patru ori (Knudsen şi Mathiassen, 2000).
În ianuarie 1997, NIST a organizat un concurs de criptografie deschis cercetătorilor din
întreaga lume [81], având ca subiect crearea unui nou standard, care urma să se numească AES –
Advanced Encryption Standard [79]. Regulile concursului erau: algoritmul să fie un cifru bloc
simetric; proiectul trebuia să fie public; AES trebuia să suporte chei de 128, 192 şi 256 biţi;
algoritmul trebuia să se poată implementa atât hardware cât şi software; AES trebuia să fie un
standard public sau oferit cu licenţă ne discriminatorie.
În august 1998 NIST a selectat cinci finalişti pe criterii de securitate, eficienţă,
flexibilitate şi cerinţe de memorie iar în octombrie 2000 NIST a stabilit câştigătorul. Acesta este
algoritmul Rijndael, dezvoltat de doi tineri cercetători belgieni, Joan Daemen şi Vincent Rijmen
şi care devine standard guvernamental al SUA. Se speră ca Rjindael să devină standardul
criptografic dominant în lume pentru următorii 10 ani.
Rijndael permite lungimi de chei şi mărimi de blocuri de la 128 de biţi la 256 de biţi, în
paşi de câte 32 de biţi. Lungimea cheii şi lungimea blocului pot fi alese în mod independent, dar
în practică se vor folosi două variante: bloc de 128 biţi cu cheie de 128 biţi şi bloc de 128 biţi cu
cheie de 256 biţi. O cheie de 128 biţi permite un spaţiu al cheilor de 2128 chei. La 26 mai 2002
AES a fost anunţat standard de criptare în SUA. La moment este cel mai răspândit algoritm de
criptare simetrică.
Rijndael se bazează pe teoria câmpului Galois, în sensul că anumite operaţiuni sunt
definite la nivel de octet iar octeţii reprezintă elemente în câmpul finit GF(28) [32], [47], [48].
Cum toate reprezentările câmpului finit GF(28) sunt izomorfe, se poate alege reprezentarea
clasică polinomială, cu impact pozitiv asupra complexităţii implementării. Octetul b, format din
biţii b7, b6, b5, b4, b3, b2, b1 şi b0, este considerat ca fiind un polinom de gradul 7 cu coeficienţi 0
sau 1:
38
b7 x7 + b6 x6 + b5 x5 + b4 x4 + b3 x3 + b2 x2 + b1 x + b0 .
Operaţiunea de adunare este definită ca suma a două polinoame în care coeficienţii se
adună modulo 2 şi care corespunde operării XOR a celor doi octeţi corespondenţi. Sunt
îndeplinite axiomele grupului abelian: operaţia este internă, asociativă, comutativă, există
element neutru şi element invers.
Operaţiunea de înmulţire corespunde produsului a două polinoame modulo, un polinom
ireductibil de grad 8 şi care pentru AES este
m(x) = x8 + x4 + x3 + x + 1
Înmulţirea este internă (rezultatul este un polinom de grad strict mai mic ca 8), asociativă şi
există element neutru. Elementul invers se determină cu algoritmul lui Euclid, iar
distributivitatea celor doua operaţii se verifică.
Concluzia este că mulţimea celor 256 de valori posibile ale unui octet, împreună cu cele
două operaţiuni definite mai sus formează un corp algebric finit, respectiv GF(28).
În proiectarea AES s-a ţinut cont de 3 criterii: rezistenţa împotriva tuturor atacurilor
cunoscute; viteza şi compactitatea codului pe un mare număr de platforme; simplicitatea
proiectării [82], [89], [103].
Ca şi DES, AES foloseşte substituţie şi permutări, ca şi runde multiple. Numărul de runde
depinde de mărimea cheii şi de mărimea blocului, fiind 10 în cazul 128/128 şi mărindu-se până
la 14 pentru cazul 256/128. Spre deosebire de DES, toate operaţiile sunt la nivel de octet, pentru
a permite implementări eficient hardware şi software.
La momentul implementării AES nu se cunoşteau metode de atac asupra lui. Însă
căutarea permanentă a rezultat cu succese pentru criptanalişti. Atacul cel mai realizabil împotriva
AES este îndreptat împotriva variantelor Rijndael cu număr redus de iteraţii [46]. AES are 10
iteraţii la o cheie de 128 de biţi, 12 la cheie de 192 de biţi şi 14 la cheie de 256 de biţi. La nivelul
anului 2008, cele mai cunoscute atacuri erau accesibile la 7, 8, respectiv 9 iteraţii pentru cele trei
lungimi ale cheii. Au fost găsite [10], [11], [34], [54], [69], [86], [111] metode eficiente pentru a
ataca AES cu mai puţine runde (10) şi o cheie de 256 biţi aplicând metoda cheilor înrudite. De
aceea pentru siguranţă e recomandată [94] trecerea de la 10 la 16 runde pentru AES-128, de la 12
la 20 pentru AES 192 şi de la 14 la 28 pentru AES-256 .
Din categoria de algoritmi simetrici de tip bloc se mai poate menţiona algoritmul
Blowfish [80], [94], [95], [96], [112] care este proiectat pentru a fi implementat pe procesoare
puternice, şi este optimizat pentru aplicaţii în care cheia nu trebuie să se schimbe des, cum ar fi
legături de comunicaţie sau un criptor automat pentru fişiere. Este semnificativ mai rapid decât
DES când este implementat pe procesoare de 32 de biţi dotate cu memorie cache mare, cum ar fi
39
Pentium. Blowfish nu este potrivit pentru comutarea de pachete, cu schimbări dese de cheie, ca
funcţie hash one-way sau în aplicaţii smart-card, unde memoria este insuficientă.
1.5. Algoritmi simetrici de tip şir
Cifrurile şir formează o clasă importantă de algoritmi de criptare; ele pot fi cifruri cu chei
simetrice sau cu chei publice. Ceea ce le caracterizează şi le diferenţiază faţă de cifrurile bloc
este faptul că cifrurile şir procesează textul de criptat în unităţi oricât de mici, chiar bit cu bit,
aplicând funcţia XOR între biţii cheii şi biţii de cifrat, iar funcţia de criptare se poate modifica în
cursul criptării [42], [92], [94]. Cifrurile şir sunt algoritmi cu memorie, în sensul că procesul de
criptarea nu depinde doar de cheie şi de textul în clar, ci şi de starea curentă. În cazul în care
probabilitatea erorilor de transmisie este mare, folosirea cifrurilor şir este avantajoasă deoarece
au proprietatea de a nu propaga erorile. Ele se folosesc şi în cazurile în care datele trebuie
procesate una câte una, datorită lipsei de spaţiu de memorie.
Algoritmii simetrici de tip şir se împart în două clase mari: cifruri şir sincrone şi cifruri
şir asincrone.
Un cifru şir sincron este unul care generează şirul de chei independent de textul clar şi
de textul cifrat. Criptarea în acest caz poate fi descrisă de următoarele ecuaţii:
Si+1 = f (Si , k); zi = g (Si , k); ci = h (zi, mi),
unde i=0, 1, 2, … L, iar L reprezintă lungimea mesajului.
În această formulă starea iniţială S0 se determină din cheia k, f este funcţia de stare, g este
funcţia care produce şirul de chei z, iar h este funcţia de ieşire, care combină şirul de chei cu
textul clar mi pentru obţinerea textului cifrat ci .
Printre proprietăţile cifrurilor şir sincrone sunt:
sincronizarea – atât expeditorul cât şi destinatarul trebuie să fie sincronizaţi, în sensul de a
folosi aceeaşi cheie şi a opera cu aceeaşi stare respectiv, astfel încât să fie posibilă o
decriptare corectă. Dacă sincronizarea se pierde prin inserarea sau lipsa unor biţi din textul
cifrat transmis, atunci decriptarea eşuează şi poate fi reluată doar prin tehnici suplimentare de
re-sincronizare, adică re-iniţializarea, plasarea de markeri speciali sau dacă textul în clar
conţine suficientă redundanţă şi se încearcă toate deplasările posibile ale şirului de chei.
nepropagarea erorii – un bit de text cifrat care este modificat în timpul transmisiei nu trebuie
să afecteze decriptarea celorlalţi biţi cifraţi.
atacuri active – ca o consecinţă a sincronizării, inserarea, ştergerea sau retransmisia unor biţi
de text cifrat de către un adversar activ va cauza o pierdere instantanee a sincronizării şi
creşte posibilitatea detectării atacului de către decriptor. Ca o consecinţă a nepropagării
erorii, un atacator ar putea să modifice biţi aleşi din textul cifrat şi să afle exact ce efect au
40
modificările în textul în clar. Trebuie deci, să se folosească mecanisme suplimentare de
autentificare a expeditorului şi de garantare a integrităţii datelor.
Un cifru şir asincron sau autosincronizabil este unul care generează şirul de chei ca o
funcţie de cheie şi un număr de biţi din textul cifrat anterior. Funcţia de criptare în acest caz
poate fi descrisă de următoarele ecuaţii:
Si = (ci-t, ci-t+1, …, ci-1); zi = g (Si, k); ci = h (zi, mi),
unde i=0, 1, 2, … L, iar L reprezintă lungimea mesajului.
În această formulă S0 = (c-t, c-t+1, …, c-1), este starea iniţială (nesecretă), k este cheia, g este
funcţia care produce şirul de chei z, iar h este funcţia de ieşire care combină şirul de chei cu
textul în clar mi pentru a obţine textul cifrat ci.
Cifrurilor şir asincrone posedă următoarele proprietăţi:
auto-sincronizarea – este posibilă dacă biţi din textul cifrat sunt şterse sau adăugate,
deoarece decriptarea depinde doar de un număr determinat de biţi cifraţi anterior. Astfel de
cifruri sunt capabile să-şi restabilească automat procesul de decriptare corectă după pierderea
sincronizării.
propagarea limitată a erorii – să presupunem că starea unui cifru şir asincron depinde de t
biţi cifraţi anteriori. Dacă un singur bit cifrat este modificat, şters sau inserat în timpul
transmisiei, atunci decriptarea a cel mult t biţi următori de text cifrat va fi incorectă, după
care se reia decriptarea corectă.
atacuri active – limitarea propagării erorii face ca orice modificare a textului cifrat de către
un adversar activ să aibă ca şi consecinţă decriptarea incorectă a altor biţi cifraţi, ceea ce
poate mări posibilitatea ca atacul să fie observat de către decriptor. Pe de altă parte, datorită
auto-sincronizării este mai dificil decât în cazul cifrurilor şir sincrone să se detecteze
inserarea, ştergerea sau modificarea unor biţi în textul cifrat. Trebuie deci să se folosească
mecanisme suplimentare de autentificare a expeditorului şi de garantare a integrităţii datelor.
difuzia statisticilor textului în clar – deoarece fiecare bit de text clar influenţează toţi biţii
cifraţi următori, proprietăţile statistice ale textului în clar sunt dispersate în textul cifrat. Ca o
consecinţă, cifrurile şir asincrone trebuie să fie mai rezistente decât cifrurile şir sincrone faţă
de atacurile bazate pe redundanţa textului în clar.
Majoritatea cifrurilor şir folosite în practică sunt proiectate folosind Linear Feedback
Shift Registers (LFSR) [55], [56], [62], [71], [74] care sunt simplu de implementat software sau
hardware. În structura LFSR se regăsesc următoarele elemente: de întârziere (bistabili D), de
adunare modulo 2, de multiplicare scalară modulo 2.
Problema este că aceste implementări sunt ineficiente din punct de vedere al vitezei.
Pentru a rezista atacului de corelaţie, funcţia de feedback trebuie să fie un polinom dens, ceea ce
41
presupune multe calcule, care produc la ieşire un singur bit, deci trebuie repetate des. Totuşi, cele
mai multe sisteme de criptare militare se bazează pe LFSR [13].
O metrică importantă folosită pentru a analiza generatoarele bazate pe LFSR este
complexitatea liniară, definită ca fiind lungimea n a celui mai scurt LFSR care poate produce
ieşirea generatorului. Orice şir generat de o maşină de stare finită peste un câmp finit are o
complexitate liniară finită. [93]. Complexitatea liniară este importantă deoarece un algoritm
simplu, Berlekamp-Massey, poate genera LFSR-ul de definiţie examinând doar 2n biţi din cheie,
ceea ce însemnă spargerea cifrului şir.
Concluzia este că o complexitate liniară ridicată nu înseamnă neapărat un generator sigur,
dar o complexitate liniară scăzută indică un generator fără securitate.
Criptografii încearcă să obţină o complexitate liniară ridicată prin combinarea ieşirilor
mai multor LFSR-uri într-un mod nonliniar. Pericolul este ca unul sau mai multe şiruri generate
interne – de obicei ieşiri ale LFSR-urilor individuale să fie corelate cu şirul combinat, ceea ce
permite un atac bazat pe algebra liniară numit atac de corelaţie. [70]. Thomas Siegenthaler a
arătat că imunitatea de corelare poate fi precis definită şi că există o legătură între aceasta şi
complexitatea liniară [45]. Ideea de bază a atacului de corelaţie este identificarea unor corelaţii
între ieşirea generatorului şi ieşirea uneia din componentele sale interne. Apoi, observând şirul
de ieşire, se pot obţine informaţii despre ieşirea internă. Folosind aceste informaţii şi alte
corelaţii se colectează informaţii despre celelalte ieşiri interne ale generatorului, până când acesta este
spart în totalitate.
Printre cifrurile de tip şir mai frecvent utilizate se numără cifrurile A5, RC4, RC5 [91], FISH etc.
Cifrul A5 [109 ]este un cifru şir folosit pentru a cripta fluxul de date GSM (Group
Special Mobile), reprezentând standardul non-american pentru telefonia mobilă celulară. A5
criptează linia dintre telefon şi celula de bază, restul legăturii rămânând necriptată. A5 este
format din trei LFSR-uri, care au registre de lungime 19, 22 şi respectiv 23. Toate polinoamele
de feedback sunt cu un număr redus de coeficienţi. Ieşirea este obţinută prin operarea XOR a
celor trei LFSR-uri. A5 foloseşte un clock control variabil. Fiecare registru face un clocking
bazat pe bitul central, care este operat XOR cu inversa funcţiei prag (threshold function) a biţilor
de la mijlocul celor trei registre. În mod normal, două din LFSR-uri sunt clock-ate la fiecare
iteraţie.
Există un atac trivial care necesită 240 criptări: se ghiceşte conţinutul primelor două
LFSR-uri, apoi se determină al treilea din şirul generat [45]. În ciuda acestui fapt, A5 este bine
proiectat şi este extrem de eficient. El trece cu succes toate testele statistice cunoscute şi singura
sa slăbiciune rezidă în faptul că registrele sunt scurte, ceea ce face posibilă o căutare exhaustivă.
Variantele A5 cu registre lungi şi polinoame feedback dense au un grad de siguranţă sporit.
42
Cifrul RC4 este un cifru şir cu cheie de lungime variabilă, dezvoltat în 1987 de către Ron
Rivest pentru RSA Data Security [121]. În 1994 codul sursă al algoritmului este făcut public pe
Internet. RC4 este un algoritm simplu de descris: şirul cheie este independent de textul în clar.
Funcţionează în baza “cutiilor-S”: S0, S1, ..., S255. Intrările sunt permutări ale numerelor de la 0 la
255, iar permutarea este o funcţie de o cheie de lungime variabilă. Există doi indici, i şi j,
iniţializaţi cu zero. Pentru a genera un octet aleator se procedează astfel:
i = (i + 1) mod 256; j = (j + Si) mod 256; T = Si; Si = Sj; Sj = T; t = (Si + Sj) mod 256; K = St .
Octetul K este operat XOR cu textul în clar pentru a produce text cifrat sau operat XOR
cu textul cifrat pentru a obţine textul în clar. Criptarea este aproape de 10 ori mai rapidă decât
DES-ul.
Iniţializarea “cutiilor-S” este simplă. Se iniţializează liniar: S0 = 0, S1 = 1, …, S255 = 255
şi un alt vector de 256 de octeţi cu cheia, repetând cheia, dacă este necesar, pentru a completa
vectorul cu componentele: K0, K1, …, K255.
j = 0; For i = 0 to 255: j = ( j + Si + Ki ) mod 256; se schimbă Si cu Sj între ele.
Nu există rezultate publice ale criptanalizei. Se crede ca algoritmul este imun la analiza
diferenţială şi liniară; RC4 poate fi în aproximativ 21700 stări posibile. “Cutiile-S” evoluează lent
în timpul întrebuinţării: i asigură că fiecare element se schimbă, iar j că aceste schimbări sunt
aleatoare. RC4 are un statut special de export, acesta fiind permis doar pentru chei de până la 40
de octeţi. Acest algoritm este implementat în multe produse comerciale, dintre care Lotus Notes
şi Oracle Secure SQL.
În sistemele simetrice de criptare, Alice şi Bob îşi aleg o cheie secretă k care defineşte
regulile de criptare ek şi decriptare dk. În aproape toate cazurile ek şi dk coincid sau se pot deduce
imediat una din alta. Un punct slab al sistemelor cu cheie privată este acela că necesită o
comunicare prealabilă a cheii între Alice şi Bob printr-un canal sigur, înainte de transmiterea
mesajului criptat. Practic, în condiţiile cererii tot mai mari de securizare a comunicaţiilor, acest
lucru este din ce în ce mai dificil de realizat. Astfel a apărut necesitatea de a crea sisteme care au
alt concept de transmitere a cheii.
1.6. Algoritmi cu chei publice
Conceptul de criptografie cu chei publice a fost inventat de Whitfield Diffie şi Martin
Hellman [38], [40]. Contribuţia lor constă în propunerea de a folosi un nou criptosistem în care
cheile de criptare şi decriptare sunt diferite, iar cheia de decriptare (care este secretă) nu poate fi
dedusă din cheia de criptare (care este publică). În anul 1976 conceptul a fost prezentat în
premieră la National Computer Conference SUA, iar câteva luni mai târziu lucrarea a fost
publicată [38].
43
Sistemele cu cheie publică au un mare avantaj faţă de sistemele cu chei secrete: oricine
poate transmite un mesaj secret utilizatorului (cunoscându-i cheia publică), iar mesajul rămâne
protejat faţă de interceptor. Cu un sistem cu cheie convenţională, o cheie separată secretă este
necesară pentru fiecare pereche de utilizatori.
Într-un mediu privat, canalul este protejată împotriva accesului din exterior. În general,
un sistem cu n utilizatori necesită 2
)1( nn chei, pentru ca oricare pereche de utilizatori să poată
comunica între ei şi mesajele lor să rămână secrete faţă de ceilalţi utilizatori. Numărul de chei
creşte rapid o dată cu numărul de utilizatori; generarea, distribuirea şi menţinerea securităţii
cheilor constituie o problemă datorită numărului lor mare.
Într-un sistem cu cheie publică, un utilizator deţine două chei: o cheie publică şi o cheie
privată. Utilizatorul îşi poate face cunoscută oricui cheia publică. Fie kpriv cheia privată şi kpub
cheia publică corespunzătoare. Atunci:
p=d(kpriv, e(kpub, p)).
Utilizatorul poate decripta cu cheia privată ceea ce oricine altcineva a criptat cu cheia publică
corespunzătoare.
Cu al doilea algoritm de criptare cu cheie publică
p=d(kpub, e(kpriv, p))
utilizatorul poate cripta un mesaj cu cheia privată, iar mesajul poate fi decriptat doar cu cheia
publică corespunzătoare.
Aceste două proprietăţi presupun că cele două chei, publică şi privată, pot fi aplicate în
orice ordine (sistemul RSA nu face distincţie între cheia publică şi cheia privată; orice cheie din
perechea de chei poate fi folosită fie ca cheie publică, fie ca cheie privată).
Unul dintre primii algoritmi de acest fel este Algoritmul Merkle-Hellman [74], [121].
Ralph Merkle şi Martin Hellman au dezvoltat un algoritm de criptare bazat pe problema
rucsacului, o problemă NP-completă, care a fost publicat în anul 1978 [66], [67]. Problema
rucsacului conţine o mulţime de întregi pozitivi şi o sumă ţintă, şi constă în găsirea unei
submulţimi de întregi a căror sumă coincide cu suma ţintă.
Ideea pe care se bazează schema rucsacului Merkle-Hellman este codificarea unui mesaj
binar ca o soluţie la o problemă a rucsacului, reducând mesajul în text cifrat la suma ţintă
obţinută prin adunarea termenilor corespunzători valorilor de 1 din şirul binar.
Un rucsac este reprezentat ca un vector de numere întregi în care ordinea termenilor este
foarte importantă. Există două tipuri de rucsacuri: unul simplu, pentru care există un algoritm
rapid (în timp liniar) şi unul complicat, obţinut din cel simplu prin modificarea elementelor sale.
Modificarea este astfel proiectată încât o soluţie cu elementele oricărui rucsac este de asemenea
44
soluţie pentru celălalt. Această modificare se numeşte trapă, permiţând utilizatorilor legitimi să
rezolve problema simplu. Deci, problema generală este NP-completă, dar există o versiune
restrânsă care are o soluţie foarte rapidă.
Algoritmul începe cu o mulţime de întregi în care fiecare element este mai mare decât
suma predecesorilor săi. Să presupunem că avem un şir în care fiecare element ak este mai mare
decât a1+a2+...+ak-1. Dacă o sumă este între ak şi ak+1, trebuie să-l conţină pe ak, deoarece nici o
combinaţie de termeni a1, a2, ..., ak-1 nu pot produce un total mai mare decât ak. Analog, dacă o
sumă este mai mică decât ak, evident nu îl va conţine ca termen pe ak.
Modificarea algoritmului schimbă elementele mulţimii din problema simplă a rucsacului,
prin alterarea acestei proprietăţi de ordonare crescătoare într-un fel care păstrează soluţia.
Modificarea se realizează prin înmulţire cu o constantă modulo n.
Problema rucsacului presupune un şir a1, a2, ..., an de întregi şi o sumă ţintă T. Problema
este de a găsi un vector de valori 0 şi 1 astfel încât suma întregilor asociaţi cu 1 să dea T. Deci,
dându-se S=[a1, a2, ..., an], şi T, să se găsească un vector V cu valori 0 şi 1 astfel încât:
n
iii Tva
1
.
Rezolvarea se face considerând fiecare întreg din S ca participând la T şi reducând
problema corespunzător. Când o soluţie nu produce suma ţintă, se elimină întregul ales iniţial şi
se continuă cu următorul. Acest back-traking deteriorează viteza soluţiei.
Să presupunem problema rucsacului cu o restricţie suplimentară: întregii din S formează
un şir supercrescător, adică unul în care fiecare întreg este strict mai mare decât suma
predecesorilor săi. Atunci, orice întreg ak satisface relaţia
1
1
k
jjk aa .
Soluţia rucsacului supercrescător (numit şi rucsacul simplu) este uşor de găsit. Se începe
cu T, care se compară cu cel mai mare întreg din S. Dacă acesta este mai mare decât T, nu este
termen al sumei, deci valoarea corespunzătoare din V este 0. Dacă acest cel mai mare întreg din S
este mai mic sau egal cu T, el este termen al sumei, deci valoarea corespunzătoare din V este 1.
Reluăm algoritmul pentru T din care scădem sau nu termenul analizat (conform cu valoarea din
V) şi pentru întregii rămaşi.
Tehnica de criptare Merkle-Hellman este un sistem de criptare cu cheie publică. Fiecare
utilizator are o cheie publică, care poate fi distribuită oricui şi o cheie privată, care se păstrează
secretă. Cheia publică este mulţimea întregilor din problema rucsacului (nu unul supercrescător);
cheia privată este rucsacul supercrescător corespondent. Contribuţia lui Merkle şi Hellman a fost
45
să proiecteze o tehnică de conversie a rucsacului supercrescător într-unul normal, prin
schimbarea numerelor de o manieră reversibilă.
Un alt criptosistem bazat pe o problemă dificilă este Algoritmul RSA, numit astfel după
inventatorii săi, Rivest, Shamir şi Adelman. A fost publicat în 1978 [90] şi rămâne un algoritm
foarte folosit şi astăzi, în ciuda eforturilor criptanaliştilor de a-l sparge.
Algoritmul de criptare RSA incorporează rezultate din teoria numerelor [64], combinate
cu dificultatea determinării factorilor primi pentru un număr ţintă. Ca în cazul algoritmului
Merkle-Hellman şi algoritmul RSA operează cu aritmetica modulo n. Un bloc în text clar este
tratat ca un întreg, iar pentru criptare şi decriptare se folosesc două chei, e şi d, care sunt
interschimbabile. Blocul de text clar P este criptat ca Pe mod n. Deoarece exponenţierea este
modulo n, este foarte dificil să se factorizeze Pe pentru a descoperi textul original. Pentru
aceasta, cheia de decriptare d este astfel aleasă încât (Pe)d = P mod n. Astfel P este regăsit fără a
fi necesară descompunerea în factori primi a lui Pe.
Problema pe care se bazează algoritmul de criptare este cea a factorizării numerelor mari.
Problema factorizării nu se cunoaşte a fi NP-completă; cel mai rapid algoritm cunoscut este
exponenţial în timp.
Cu algoritmul RSA, mesajul în text clar p este criptat în, mesajul în text cifrat c prin
intermediul cheii de criptare e:
c = pe mod n.
Mesajul în text clar este regăsit cu ajutorul cheii de decriptare d:
p = cd mod n.
Din cauza simetriei din aritmetica modulară, criptarea şi decriptarea sunt mutual inverse
şi comutative:
p = cd mod n = (pe)d mod n = (pd)e mod n.
Cheia de criptare constă în perechea de întregi (e, n), iar cheia de decriptare este (d, n).
Punctul de plecare în găsirea cheilor pentru acest algoritm este selectarea unei valori pentru n.
Valoarea lui n trebuie să fie suficient de mare, dată de un produs a două numere prime p şi q.
Atât p cât şi q trebuie să fie ele însele suficient de mari. În mod obişnuit, p şi q au aproximativ
100 de cifre fiecare, astfel încât n are aproximativ 200 de cifre. Această lungime inhibă
încercarea de a factoriza pe n, pentru a afla pe p şi pe q [122].
În continuare, se alege un întreg e relativ mare, astfel încât e este relativ prim cu
(p–1) · (q–1). Satisfacerea acestei condiţii se face alegându-l pe e ca un număr prim mai mare
decât p–1 şi q–1. În final, se alege d astfel încât:
e · d 1 mod (p–1) · (q–1).
46
Funcţia lui Euler (n) este numărul întregilor pozitivi mai mici decât n care sunt relativ
primi cu n. Dacă p este prim, atunci:
(p) = p–1
Dacă n = p · q, unde p şi q sunt ambele prime,
(n) = (p) · (q) = (p–1) · (q–1)
Identitatea Euler-Fermat afirmă că :
x (n) 1 mod n
pentru orice întreg x, dacă n şi x sunt reciproc prime.
Să presupunem că mesajul în text clar p este criptat cu algoritmul RSA, astfel încât
e(p)=pe. Trebuie să fim siguri că putem decripta mesajul. Valoarea e este astfel aleasă încât
inversa sa d să poată fi găsită uşor. Deoarece e şi d sunt inverse modulo (n),
e · d 1 mod (n) sau e · d = k · (n) + 1
pentru anumiţi întregi k.
La implementarea practică a algoritmului, utilizatorul algoritmului RSA alege numerele
prime p şi q, din care se obţine n=p·q. Apoi alege e, relativ prim la (p–1)·(q–1), de obicei un
număr prim mai mare decât p–1 şi decât q–1. În final, d se calculează ca inversul lui e mod (n).
Utilizatorul distribuie e şi n, şi păstrează cheia d secretă; p, q şi (n) pot fi ignorate, dar
nu făcute publice. Chiar dacă se ştie că n este produsul a două numere prime [64], [66], [67],
[113], datorită mărimii sale – peste 200 de cifre, nu va fi posibil să se determine factorii p şi q, şi
nici cheia privată, d din e. De asemenea, verificarea că p şi q sunt prime, presupune luarea în
considerare a 1050 factori.
La momentul actual în RSA se utilizează numere prime găsite prin intermediul
algoritmilor probabilistici [123], cel mai performant fiind testul Miller-Rabin. El este considerat
suficient de bun pentru generarea numerelor prime aplicate în criptografie, însă există o foarte
mică probabilitate ca acest test să genereze un număr compus, ceea ce implică urmări
imprevizibile pentru utilizatorii algoritmului RSA.
Teoretic sunt trei posibilităţi de abordare a unui atac în cazul algoritmului RSA: atacul în
forţă, atacul bazat pe metode matematice (încercarea factorizării produsului a două numere prime
mari) şi atacul temporal. Analiza acestor atacuri duce la concluzia că nici unul nu are sorţi de
izbândă. În pofida unor intense cercetări, au fost identificate doar probleme minore în comparaţie
cu cele din cazul algoritmului rucsacului a lui Merkle şi Hellman.
Aceştia sunt algoritmii de bază utilizaţi în criptografia modernă şi care au un fundament
pur matematic. Însă în ultima perioadă sunt efectuate încercări, şi unele dintre ele cu succes, de a
implementa în algoritmii de criptare şi performanţele fizicii moderne, în deosebi cele din fizica
cuantică.
47
1.7. Criptarea cuantică
Criptarea cuantică este o abordare bazată pe fizica cuantică pentru a realiza comunicaţii
securizate. Spre deosebire metodele de criptografie tradiţionale, care folosesc diverse metode
matematice pentru a împiedica interceptarea şi decodificarea mesajului, criptarea cuantică se
bazează pe legile fizicii în ceea ce priveşte transmiterea informaţiei. Interceptarea poate fi văzută
ca o măsurare a unui obiect fizic – în acest caz purtătorul de informaţie. Folosind fenomene
cuantice cum ar fi suprapunerea cuantică sau legătura cuantică, se poate proiecta şi implementa
un sistem de comunicaţie care să evite întotdeauna interceptarea. Aceasta este din cauză că
măsurările efectuate asupra unui purtător cuantic îi modifică proprietăţile şi astfel rămân „urme”
ale interceptării [5].
Dispozitivele care folosesc criptarea cuantică utilizează fotoni individuali, şi se bazează
fie pe principiul lui Heisenberg sau pe principiul legăturii cuantice.
Actul de a măsura este o parte integrantă a mecanicii cuantice, nu doar un proces extern şi
pasiv, ca în cazul fizicii clasice. Este deci posibil să se codeze informaţia în anumite proprietăţi
ale fotonului, astfel încât orice efort de a le monitoriza le modifică într-un mod uşor de detectat.
Acest efect apare din cauză că în teoria cuantică, anumite perechi de proprietăţi fizice sunt
complementare, în sensul că măsurarea uneia dintre aceste proprietăţi o modifică pe cealaltă.
Acest fenomen este cunoscut ca principiul incertitudinii al lui Heisenberg. Cele două proprietăţi
complementare care sunt des folosite în criptarea cuantică sunt cele două tipuri de polarizare a
fotonului, de exemplu liniară (vertical/orizontal) sau diagonală (la 45 si 135 de grade).
Legătura este o stare a două sau mai multe particule cuantice (de exemplu fotoni) în care
multe din proprietăţile lor fizice sunt puternic corelate. Particulele legate nu pot fi descrise
specificând stările individuale ale particulelor, deoarece acestea pot să conţină informaţie într-un
mod care nu poate fi accesat prin experimente făcute asupra vreuneia dintre ele în particular.
Acest fenomen se produce indiferent de distanţa dintre particule.
Pe baza acestor două proprietăţi neintuitive ale mecanicii cuantice (incertitudinea şi
legătura), au fost inventate două tipuri de protocoale de criptare cuantică. Primul foloseşte
polarizarea fotonilor pentru a codifica biţii de informaţie şi se bazează pe natura aleatoare a
fizicii cuantice pentru a evita interceptarea mesajului. Al doilea foloseşte fotoni legaţi pentru a
codifica biţi, şi se bazează pe faptul că informaţia apare doar după măsurători făcute de părţile ce
comunică.
Protocoalele de criptare cuantică au proprietăţi la care nu se poate ajunge prin metodele
tradiţionale de criptare. Cei doi agenţi care comunică pot genera şi interschimba chei aleatorii
care sunt foarte similare - în condiţii ideale ar trebui sa fie identice, dar în realitate va exista o
48
anumită rată a erorii. De asemenea aceste protocoale permit estimarea nivelului de interceptare a
comunicaţiei, şi se poate deduce cât din cheile lor aleatorii este cunoscut de o terţa parte. Aceste
rezultate sunt interesante, dar nu suficiente pentru a rezolva problema interschimbării cheilor.
Interceptarea chiar a unei mici părţi din chei poate avea efecte semnificative: o terţă parte poate
sa citească o bucată (poate critică) a mesajului secret. Din cauza faptului că erorile şi zgomotul
de fond nu pot fi evitate în totalitate, nu se poate garanta ca nici o cheie nu a fost interceptată -
erorile de comunicaţie şi încercările de interceptare nu pot fi deosebite, aşa că se poate presupune
că în cazul cel mai defavorabil, toate erorile se datorează interceptării mesajului.
În criptarea cuantică, atacul tradiţional cu „intermediar” este imposibil din cauza
principiului incertitudinii [65]. Orice interceptare a fotonilor duce inevitabil la modificarea
proprietăţilor lor, dacă se foloseşte un detector incorect. De asemenea nu se pot reemite
electronii, deoarece asta ar duce la erori inacceptabile. În cazul folosirii metodei de criptare cu
electroni legaţi, ei sunt aproape imposibil de interceptat, deoarece crearea a trei electroni legaţi ar
slăbi „legătura” atât de mult încât acest lucru s-ar detecta imediat. Atacul cu „intermediar” nu
poate fi folosit pentru ca ar fi nevoie de măsurarea unui electron legat, ceea ce l-ar modifica şi pe
celalalt, urmată de reemiterea ambilor fotoni, lucru imposibil după legile mecanicii cuantice. Din
cauza faptului că o linie de fibră optică e necesară între cei doi agenţi care folosesc criptarea
cuantică, întreruperea comunicaţiei poate fi făcută foarte uşor tăind linia sau, mai discret,
încercând interceptarea informaţiei transmise. Dacă se poate interveni în echipamentul folosit,
s-ar putea modifica astfel încât cheile generate să nu mai fie sigure, ajungându-se astfel la un
atac cu generator de numere aleatoare. Atacul cu „intermediar” (în engleză man-in-the-middle
attack) poate fi totuşi folosit în cazul criptării cuantice, dacă intermediarul se „prezintă” fiecărei
părţi autorizate ca fiind cealaltă; după aceea, tot ce trebuie să facă este să respecte protocolul de
transmisie a datelor, făcând schimb de chei cu cei doi agenţi autorizaţi. Acest fel de atac poate fi
evitat prin folosirea unei metode de autentificare prin care cele doua parţi se pot recunoaşte.
Criptarea cuantică a fost propusă pentru prima oară de Stephen Wiesenr, pe atunci la
Universitatea „Columbia” din New York, când, la începutul anilor 70, a introdus un concept de
codare cu conjugată cuantică. Lucrarea sa intitulată ”Conjugate Coding” a fost respinsă de
Comisia de Teoria Informaţiei a IEEE, dar a fost in cele din urmă publicată în 1983 în SIGACT
News. El arată cum se poate reţine sau transmite două mesaje codate in două „observabile
conjugate”, cum ar fi polarizarea liniară sau circulară a luminii, astfel încât oricare dintre ele, dar
nu amândouă, pot fi recepţionate şi decodificate. El şi-a ilustrat ideea cu un proiect de bancnote
care nu pot fi falsificate. Un deceniu mai târziu, pe baza acestei lucrări, Charles H. Bennett, de la
Centrul de Cercetare „Thomas J. Watson” al IBM, şi Gilles Brassard, de la Universitatea din
Montréal, au propus o metodă de comunicaţie securizată bazată pe observabilele conjugate ale
49
lui Wiesener. În 1990, în mod independent şi fără să fie la curent cu lucrările precedente, Artur
Ekert, pe atunci doctorand la Universitatea din Oxford, a folosit o abordare diferită bazată pe
proprietatea de „Entanglement cuantic”.
Stările legate sunt rareori destul de stabile pentru a putea fi folosite în aplicaţii
comerciale, care sunt astfel limitate (cel puţin deocamdată) la aproximativ 100 de kilometri. Se
studiază totuşi folosirea sateliţilor pentru transmiterea stărilor legate, pentru că în afara
atmosferei perturbaţiile ar fi mult reduse.
Dispozitive comerciale bazate pe criptarea cuantică au apărut, şi pot înlocui cu succes
protocoale cum ar fi schimbul de chei Diffie-Hellman în aplicaţiile care au nevoie de maximum
de securitate posibil. Dezavantaje ale acestei tehnologii, care fac ca ea să nu fie larg răspândită,
sunt costul echipamentelor şi al liniei de fibră optică dedicată, ca şi necesitatea de a avea
încredere în firma producătoare, ceea ce nu este cazul dacă se folosesc tehnologiile curente,
bazate pe software liber şi calculatoare standard, ca şi lipsa vreunei vulnerabilităţi majore a
acestor tehnologii. Existenţa unor mijloace de stocare a datelor de mare capacitate şi relativ
ieftine face ca transmiterea unor cantităţi mari de date sensibile să poată fi făcută prin curier;
aceste date pot să reprezinte chei folosite în cadrul unui algoritm cum ar fi AES.
Bruce Schneier, expert în domeniul criptologiei, este de părerea că implementarea
reţelelor înzestrate cu tehnologia criptării cuantice este „practic lipsită de sens” fiind aplicată în
practică. În octombrie 2008 în Austria a fost pusă în funcţie prima reţea cuantică, despre care
Schneier a scris în revista Wireed că implementarea acestor tipuri de reţea nu va schimba nimic
din punct de vedere al securităţii informaţionale. „Ideea de bază, în teorie, este la fel de tare pe
cât de lipsită de sens în viaţa reală”. „Chiar şi cifrarea cuantică nu va rezolva toate problemele
criptografice. Cheia se transmite cu fotoni, însă în baza procesului de cifrare rămâne acelaşi
algoritm matematic”. Schneier a remarcat că veriga cea mai slabă a oricărei reţele sunt punctele
finale ale reţelei şi nu momentul de transmitere a datelor. Criptarea cuantică nu propune soluţii
pentru izvorul tuturor problemelor. „Asta e acelaşi lucru ca şi cum te-ai apăra de atacatori cu un
stâlp bătut în pământ. E inutil de discutat despre înălţimea lui necesară – 15 sau 30 de metri,
deoarece atacatorul pur şi simplu îl vor ocoli”.
50
1.8. Concluzii la Capitolul 1
Criptografia modernă utilizează două tipuri de sisteme de criptare: sistemele cu cheie
privată şi sisteme cu chei publice. La baza oricărui tip de sistem de cripatre se află o teorie
matematică bine fundamentată, în funcţie de care sistemul poate fi utilizat într-un scop sau altul.
Astfel, la elaborarea sistemelor de criptare, sunt aplicate cele mai noi rezultate ştiinţifice
din teoria nnumerelor, teoria informaţiei, teoria complexităţii, teoria probabilităţilor şi statistica
mateamtică, matematica disretă, teoria grupurilor etc.
Totodată este în continuă dezvoltare şi Criptanaliza, care le fel utilizează cele mai
performante rezultate ştiinţifice pentru a găsi părţile slabe ale algoritmilor de criptare elaboraţi de
criptologi. Dezvoltarea vertiginoasă a tehnicii de calcul accelerează ambele aceste procese.
Deoarece unicul cifru perfect este cifrul aleator Vernam [105] (iar implementarea lui practică nu
este posibilă la momentula actual), concurenţa între aceste două ramuri ale Criptoliogiei va da
naştere la noi algoritmi de cripatre şi va necesita perfecţionarea continuă a sistemelor utilizate.
Luând în consideraţie necesitatea asigurării unui grad înalt de securitate a informaţiei,
nivelul actual de dezvoltare a sistemelor de criptare şi problemele legate de utilizarea acestora,
precum şi încercările multiple ale „răuvoitorilor” de a sparge aceste sisteme, cercetătorii în
domeniu continuă investigaţiile în privinţa perfecţionării şi elaborării de algoritmi noi de
criptare. În viitor se va lucra tot mai mult în scopul creării sistemelor de criptare cu următoarele
particularităţi:
a) utilizarea cheilor variabile fără mărirea lungimii lor;
b) substituirea operaţiilor cu numerele mari prin operaţii asupra sistemelor de funcţii logice;
O cale de atingere a acestui scop ar fi aplicarea proprietăţilor mulţimilor de relaţii multi-
are şi a matricelor multidimensionale.
51
2. MULŢIMI DE RELAŢII MULTI-ARE. MATRICE
MULTIDIMENSIONALE
În acest capitol este prezentată baza teoretică a algoritmilor de criptare elaboraţi în teză.
Sunt demonstrate o serie de teoreme referitoare la mulţimi de relaţii multi-are şi la aplicaţii ale
lor, în special cele refiritoare la distribuirea numerelor prime în mulţimea numerelor naturale şi
cele ce se referă la unele proprietăţi ale funcţiilor booleene care permit efectuarea mai eficientă a
operaţiilor cu aceste funcţii. Rezulattele obţinute de autor şi descrise în capitolul 2 se bazează pe
unele lucrări ale dlui M. Bulat, [14], [16], [17], [18], [21], [115], [118], şi ale dlui S. Cataranciuc
[26], [27], [28]. Pornind de la lucrările dlui M. Bulat şi ale dlui S. Cataranciuc, autorul a obţinut
mai multe rezultate importante, care au stat la baza fundamentării teoretice ale metodelor de
criptare elaborate. Printre rezultatele de bază ale acestui capitol, obţinute de către autor, se
numără teoremele 2.6–2.10 şi 2.14 – 2.16, precum şi algoritmul determinist de generare a
numerelor prime.
2.1. Relaţii pe mulţimi. Mulţimi de relaţii.
Fie date două mulţimi finite },...,,{ 21 mxxxX si },...,,{ 21 nyyyY .
Definiţia 2.1. O relaţie binară de la X la Y (se notează XYR sau YX ) se numeşte o
submulţime a produsului cartezian )}.,(...,),,(),,{( 2111 nm yxyxyxYX
Relaţia poate fi reprezentată printr-o matrice bidimensională
mnmjm
iniji
nj
nmij
aaa
aaa
aaanj
m
iaA
1
1
1111
11
)( , unde
.),(dacă,0,),(dacă,1
XYji
XYjiij Ryx
Ryxa
Liniilor şi coloanelor li se asociază numai indicii elementelor, adesea – însăşi elementele.
Această matrice poate fi scrisă şi în o altă formă:
XY ija
A=
mn
ij
11
mn
ij
a
a
a
11
52
În funcţie de problema care se rezolvă vom folosi una dintre aceste forme de reprezentare a
matricelor date.
Făcând analogie cu definiţia matricelor bidimensionale obişnuite şi în conformitate cu
[124] definim matricea multidimensională în felul următor:
Definiţia 2.2. Un sistem A de pA nnnnN ...321 elemente piiiia ...321 ( ;,...,3,2,1 ni
p,...,3,2,1 ) ce aparţin mulţimii , plasate în punctele spaţiului p-dimensional şi determinate
de coordonatele ,...,,, 21 piii se numeşte matrice multidimensională peste mulţimea . Numărul
p arată numărul de indici în notarea elementelor matricei şi se numeşte dimensiunea matricei.
Mărimea AN arată numărul total de elemente în matricea dată. Mărimea n a indicelui i arată
câte valori (de la 1 la n ) parcurge acest indice.
Aşadar, în lucrarea de faţă, matricea multidimensională este o generalizare directă a
matricei obişnuite bidimensionale.
Prin analogie cu relaţia binară definim relaţia n-ară între n mulţimi },...,,{1112111 mxxxX ,
},...,,{2222212 mxxxX , ..., },...,,{ 21 nnmnnn xxxX ca o submulţime a produsului cartezian
,...21 nXXX notată prin nXXXR ...21[108], [109],. Deci ,...21...21 nXXX XXXR
n iar
elementele lui nXXXR ...21 reprezintă nişte cortegii de lungime n ),,...,,(
21 njjj xxx unde
.,1, niXx iji Matricea acestei relaţii este o matrice n-dimensională care are urătoarea formă:
nXXX 21 njjja ...21
nn mmjjjaA ...... 121)(
n
n
mmm
jjj
21
21
111
,
...
...
1...11
21
21
n
n
mmm
jjj
a
a
a
unde ,),...,,(ădac,0),...,,(ădac,1
...
......
2121
2121
21
nn
nn
nXXXjjj
XXXjjjjjj Rxxx
Rxxxa }.,...,1{},...,,...,1{ 11 nn mjmj
Aceasta matrice poate fi scrisa sub formă de matrice bidimensională [20] în felul următor
n
n
n
mmmmm
mm
mm
aaa
aaaaaa
A
...2...11...1
...22...211...21
...12...111...11
2111
2
2
....
.
53
În caz general elementele matricei A pot fi de origine arbitrară. Fie },..,{ 1 m
mulţimea elementelor acestei matrice. Matricele tridimensionale pot fi reprezentate geometric în
spaţiul R3. O matrice tridimensională este reprezentată în Figura 2.1.
Fig. 2.1. Exemplu de matrice tridimensională
Această matrice reprezintă relaţia 321 XXXR între mulţimile },,,{ 1312111 xxxX
},{ 23,22212 xxxX şi },,{ 3332313 xxxX cu elementele din mulţimea }.,,{ TMO Ea
corespunde matricei din Tabelul 2.1 Într-o formă mai compactă matricea este reprezentată în
Tabelul 2.2.
Cu ajutorul matricelor multidimensionale putem reprezenta şi mulţimile de relaţii [17],
[24], [108], [109]. Fie o familie de mulţimi },...,{ 1 nXXX şi mulţimea },...,{ 1 m cu
elemente arbitrare. Pe această familie sunt definite k relaţii ,....1 jdjj XXj RR ,,1,2 kjnd j
}....,,2,1{...,,, 21 njjj d Elementele matricelor acestor relaţii aparţin mulţimii . Notăm prin R
M
T
O X1
X2
X3
1 2 3 4
1
2
1
2
3
M
M
T
O
O T
O
O M M O
O T T O
T
O
T
M
T O
M 3
54
vectorul cu componentele jR , adică )...,,...,,( 1 kj RRRR
Acestui vector îi punem în
corespondenţă o matrice n-dimensională [108], [109], [110], [117]
)(RAR
, ( 2.1)
conform unei reguli indicate in Figura 2.2.
Tabelul 2.1. Mod de reprezentare
a matricei tridimensionale
Tabelul 2.2. Mod de reprezentare
a matricei tridimensionale
A
1X 2X 3X 321 jjja
444444333333222222111111
222111222111222111222111
321321321321321321321321
OTMMOTTOMOTMTMOMTOOMTMOT
3X
21 XX 321
A
2414231322122111
OTMMOTTOMOTMTMOMTOOTMMOT
În Figura 2.2 jRA este matricea unei relaţii
acb XXXj RR din mulţimea de relaţii, iar
acb iiiij rr – un element al acestei matrice. În aşa mod elementele matricei n-dimensionale care
55
reprezintă mulţimea de relaţii sunt vectorii ),,...,,...,( 1 ikijii rrrr ui ,1 componentele cărora
sunt elemente ale matricelor relaţiilor între mulţimile familiei X. În acelaşi timp componentele
vectorilor sunt şi elemente ale mulţimii },...,{ 1 m . Notăm elementele acestei mulţimi în
conformitate cu substituţia
110
21
mm
. În rezultatul acestei substituţii vectorului ir
i
se pune în corespondenţă un număr niia ...1 în baza m. Trecându-l în baza 10 obţinem
niia ...1=
k
j
jkij mr
1
, ui ,1 (2.2)
Astfel, transformarea )(RAR
pune în corespondenţă mulţimii de relaţii R
un cortegiu
),...,( ...1...11 1 nmmaaA
[108], [109], [110], adică
)(RA
(2.3)
ncba
ncba
ncba
R
uuuuuu
iiiiii
XXXXX
A
1
1
1
.......
.......111111
ukuju
ikiji
kj
rrr
rrr
rrrkj
1
1
1111
1
n
n
n
uu
ii
ii
a
a
aa
...
...
1...1
...
1
1
1
Figura 2.2. Regula de corespiondenţă )(RAR
Reprezentarea mulţimilor de relaţii prin intermediul matricelor multidimensionale ne
permite să abordăm nu numai problema comprimării informaţiei, dar şi să efectuăm cu eficienţă
operaţii cu sisteme de mari dimensiuni [18]. În funcţie de elementele matricelor acestor relaţii
[24] şi ale mulţimii obţinem diferite cortegii A
. Transformarea inversa )(1 AR
nu este
univocă. Din această cauză cunoscând cortegiul A
nu este simplu de aflat cortegiul R
. Există
cazuri particulare în care problema dată se rezolvă şi aceasta implică unele aplicaţii practice [21].
Să analizăm unul dintre aceste cazuri. Se ştie [114] că „În orice şir de numere naturale,
care reprezintă o progresie aritmetică, în care raţia este reciproc primă cu primul termen, se
jRA
56
conţine o mulţime infinită de numere prime” (teorema lui Legendre, care a fost demonstrată de
Dirichlet). Fie că componentele vectorului A
formează o partiţie din m progresii aritmetice cu
raţia m, cu primii termeni 0,1, ..., m–1 respectiv şi cu un număr de termeni egal cu 1nm . Adică
})1,...,12,1,1{...,},2,...,22,2,2{
},1,...,12,1,1{},0,...,02,0,0({
n
n
n
n
mmmmmmmmmm
mmmmmmmmA
Notăm mulţimile partiţiei prin 110 ,...,, nKKK şi construim o matrice bidimensională cu
liniile 1,0, miKi :
11211
222221121100200
1
2
1
0
n
n
n
n
m mmmmmm
mmmmmmmmmmmm
K
KKK
A
(2.4)
În acest caz matricea n–dimensională (2.3) se reprezintă prin matricea bidimensionala
(2.4), în care, conform teoremei lui Legendre, numerele prime sunt distribuite numai pe unele
dintre liniile acestei matrice. Acest fapt ne permite să construim numere prime cu anumite
proprietăţi, care sunt utile pentru elaborarea unor sisteme de criptare a informaţiei [16], [22].
Teorema 2.1. Numărul natural N aparţine liniei iK dacă şi numai dacă )(modmiN .
Demonstraţie. Fie .iKN Atunci există un aşa număr natural k încât .mkiN Aceasta
implică ,km
iN
ceea ce înseamnă că )(modmiN .
Reciproc, fie ).(modmiN Atunci există aşa număr natural k încât .km
iN
În acest caz
mkiN ceea ce implică iKN .
Teorema este demonstrată.
Teorema 2.2. Daca numărul natural 1N aparţine liniei iK iar numărul natural 2N aparţine liniei
jK atunci suma acestor numere 21 NN aparţimie liniei ))(mod( mjiK , iar produsul lor 21 NN –
liniei .))(mod( mjiK
Demonstraţie. Fie 1N aparţine liniei iK iar 2N aparţine liniei jK . În acest caz există două
numere naturale 1k şi 2k astfel încât mkiN 11 şi mkjN 22 , de unde rezultă că
57
mkkjiNN )()( 2121 . Notăm 21 kkk . Atunci kmjiNN )(21 . Aceasta
înseamnă că ).)(mod(21 mjiNN Conform teoremei precedente avem:
.))(mod(21 mjiKNN
Produsul acest două numere mkjkijiNN )( 1221 . Notăm 12 jkikk . Atunci
kmjiNN 21 , de unde rezultă că ))(mod(21mjiNN , adică ))(mod(21 mjiKNN , ceia ce
trebuia de demonstrat.
Fie numărul m reprezentat în formă canonică ca produs de factori primi
kkpppm ...21
21 , unde ip sunt numere prime, ki ,1 , iar i – multiplicitatea respectivă a
factorului .ip Vom calcula raportul procentual al numărului de linii ale matricei A care conţin un
număr infinit de numere prime faţă de numărul total de linii. Conform teoremei lui Legendre
linia iK conţine un număr infinit de numere prime, dacă 1),( im , adică în cazul în care m şi i
sunt reciproc prime. Numărul acestor linii este egal cu funcţia lui Euler )(m . În cazul
investigat, conform [114], avem:
).11()...11()11()1()...1()1()...(2
21
11
21
211
121212121
kkkkk p
pp
pp
pppppppppp kkk
Atunci
....
)...(...
)1)...(1)(1(...
)11()...11()11()(
21
21
21
21
21
22
11
21
21
k
k
k
k
k
kk
pppppp
pppppp
pppp
pp
pp
p
mm
k
k
Vom nota cu raportul procentual căutat. Atunci
%100...
)1)...(1)(1(%100)(21
21
k
k
pppppp
mm (2.5)
În [114] această mărime este numită constanta structurală, care determina divizarea structurala a
mulţimii numerelor naturale în mulţimea de numere prime şi compuse. Din (2.5) se observă că
nu este în funcţie de i sau de numărul n de mulţimi pe care este definită matricea
n-dimensională. Acest raport procentual este în funcţie numai de divizorii simpli ip ai lui m.
Dacă m reprezintă un singur număr prim p, atunci numerele prime sunt repartizate pe toate liniile
matricei A. Linia 0K conţine un singur număr prim - numărul p. Pentru fiecare divizor ip al lui
m linia ipK conţine un singur număr prim – numărul ip .
58
Aşadar, este adevărată următoarea teoremă:
Teorema 2.3. Dacă numărul natural m are următoarea formă canonică de produs de factori primi
kkpppm ...21
21 , atunci constanta structurală
%100...
)1)...(1)(1(
21
21
k
k
pppppp
În [114] este investigată (nu prin intermediul matricelor multidimensionale) repartizarea
numerelor prime în şirul natural de numere pentru 53290 2 m . În acest caz %6,26 .
Conform teoremei 2.1.3 aceeaşi valoare se obţine pentru .53230 m Odată cu creşterea
numărului de factori în m descreşte , iar cantitatea de numere pe fiecare linie creşte. Pentru
m = 2· 3 · 5 · 7 · 11 · 13 · 17 · 19 · 23 · 29 · 31 · 37 · 41 · 43 · 47 · 53 · 59 · 61 · 67 · 71 · 73 ·
79 · 83 · 89 se obţine %16,12 . Pentru m =6, n =3 obţinem matricea
21595897765352149488827670645852464034282216104213938781756963575145393327211592129286807468625650443832262014821191855549251210908478726660544842363024181260
5
4
3
2
1
0
837159534741292317115
32
7973676143373119137
KKKKKK
A
Pentru această matrice .326 m Numerele 1 şi 5 sunt reciproc prime cu 6. Prin
urmare liniile 1K şi 5K conţin un număr infinit de numere prime (pentru n ). 2K conţine un
singur număr prim – numărul 2, deoarece 2 este divizor al lui 6. Din aceeaşi cauză 3K conţine
numărul prim 3. Numerele prime sunt scrise cu cifre aldine. Pentru 53230 m doar pe 8
linii din 30 sunt distribuite numerele prime. Numerele prime sunt neuniform distribuite în şirul
de numere naturale. Adesea ne întâlnim cu problema determinării intervalelor cu o „densitate”
mai sporita a numerelor prime. Modificând vectorul R
putem modifica conţinutul liniilor fără a
schimba numărul de elemente a acestora. Pentru soluţionarea acestei probleme vom analiza
noţiunea de funcţie booleană în contextul noţiunii de relaţii între mulţimi.
59
2.2. Reprezentarea funcţiilor booleene prin submulţimi de coloană.
2.2.1. Submulţimi de coloană. Proprietăţi. Tabelul submulţimilor de coloană ale funcţiilor
booleene
Considerăm funcţia ),...,,...,( 1 nxxxF căreia îi este caracteristic faptul că atât variabilele
nxxx ,...,,...,1 cât şi funcţia F nu pot lua decât doua valori distincte, 0 sau 1 [14], [107], [109],
[115], [116], [130]. Astfel de funcţie se numeşte funcţie booleană. Această funcţie este o relaţie
n-ară ,nXR unde }1,0{X şi poate fi reprezentată prin tabelul veridicităţii (Tabelul 2.3),
12,,1},1,0{ ni uui
Tabelul 2.3. Tabelul veridicităţii unei funcţii booleene
nxxx 1 ),...,( 1 nxxF
u
i
0
111
000
1
n
u
i
0
În cazul în care numărul de variabile este mare reprezentarea funcţiilor booleene cu
ajutorul tabelului veridicităţii este foarte dificilă. În acest caz se propune o altă formă de
reprezentare a funcţiei booleene, care simplifică operaţiile cu aceste funcţii.
Vom examina o altă reprezentare a funcţiei booleene. Conform [14], [115], [116], [118]
pe mulţimea },...,{ 1 nxxX construim partiţia }}.,...,{},,...,{{}~,~{ 1121 nxxxxXX Construim
două mulţimi: },..,,{1210
yyyY (formată din stările binare ce corespund variabilelor din 1~X )
şi Z },...,,{1210 nzzz (formată din stările binare, care corespund variabilelor din 2
~X ). Atunci
funcţia booleana ),...,(1 nxxF poate fi considerată o relaţie binară YZR între mulţimile Y şi Z cu
matricea
60
mpmjm
ipiji
pj
m
i
pj
YZ
aaa
aaa
aaa
y
y
yzzz
R
0
0
00000
0
, 12 m , 12 np ,
ji,
.0),(ădac,0,1),(ădac,1
ji
jiij zyF
zyFa
Definiţia 2.3. Submulţimea jzF
S a mulţimii Y
}}1,0{,),(,:{ jiiizF
zyFYyyS j
se numeşte submulţime de coloană a funcţiei ),...,(1 nxxF pentru coloana jz .
Funcţia booleană poate fi reprezentata şi cu ajutorul tabelului submulţimilor de coloană
(Tabelul 2.4):
Tabelul 2.4. Tabelul submulţimilor de coloană ale unei funcţii booleene
0z … jz … pz
1F 01
zFS … jz
FS 1 … pz
FS 1
Este evident că jj zF
zF
SYS 10 \ . Din această consideraţie submulţimile jz
FS 0 nu sunt indicate
în Tabelul 2.4. Construim pe mulţimea Y partiţiile
xx ,...,1
[116]. De exemplu, în cazul în care
n=5 iar 3 obţinem:
},,,{~3211 xxxX },{~
542 xxX
},111,110,101,100,011,010,001,000{},,,,,,,{ 76543210 yyyyyyyyY
},,,{ 3210 zzzzZ }.11,10,01,00{
Construim partiţiile:
},,,;,,,{1
17654
0
132101yyyyyyyyx ,
},,,;,,,{1
27632
0
254102yyyyyyyyx ,
},,,;,,,{1
37531
0
364203yyyyyyyyx .
61
Pentru simplitate în submulţimile de coloană şi în partiţii scriem în loc de elementele iy
numai indicii respectivi i. Conform [115], [116] notăm cu kji
m kji
(unde
},,...,2,1{,...,,..., nkji }1,0{,..., ki cu condiţiile )0(1i dacă ),...( 01iii mmx ) un bloc al
produsului partiţiilor .,...,ki xx De exemplu, pentru partiţiile de mai sus avem
}7,6;5,4;3,2;1,0{1,12,1
0,12,1
1,02,1
0,02,121
xx .
Aflăm toate produsele posibile (de 2, 3, ..., τ factori) ale partiţiilor .,...,1
xx Din fiecare
produs excludem blocurile care se întâlnesc în produse de un număr mai mic de partiţii.
Blocurile rămase împreună cu mulţimea }12,...,1,0{ alcătuiesc mulţimea de blocuri B [116].
Definiţia 2.4. Blocul kji
m kji
se numeşte bloc maximal al submulţimii
jzF
S dacă:
1) jzF
kji Skji
m
,
2) pentru orice Bdc
m dc
, astfel încât
kjim
dcm kjidc
,
are loc dc
m dc
jz
FS .
Conform [116] pentru argumentul ix introducem notaţia
.0dacă,
,1dacă,
ii
iii x
xx i
Din definiţia conjuncţiei variabilelor rezultă că
kx
ix ki
... =
.:},...,{dacă,0,:},...,{dacă,1
jj
jj
xkijxkij
(2.6)
Notăm cu },...,{ 11
kM şi },...,{ 10
mM mulţimile de stări binare ale variabilelor
funcţiei ),...,(1 nxxF pentru care 1~ F şi 0~
F respectiv.
Definiţia 2.5. Conjuncţia kjikji xxxU ...... care respectă condiţiile a) – c)
a) 1M pentru care 1)( U ,
b) pentru 0M are loc 0)( U ,
62
c) pentru U~ care se obţine din U prin excluderea unei variabile arbitrare 0~ M
pentru care 1)~(~U ,
se numeşte termen minimal al funcţiei ),...,(1 nxxF :
Conform [115], [116], dacă kji
m kji
este bloc maximal al submulţimii
jzF
S atunci
kjikji xxxU ...... (2.7)
este termen minimal al funcţiei ),...,(1 nxxF , unde este un termen minimal al funcţiei
),...,( 1 nxxf pentru care jf zM 1 iar 0fM conţine stările binare tz pentru care se respectă
condiţia
tzF
kji Skji
m 1
. (2.8)
Dacă blocul maximal este compus din toate elementele mulţimii Y, adică are forma
12,...,2,1,0 (acest bloc nu conţine indici) atunci U . Prin urmare, U nu depinde de
variabilele xx ,...,1 .
Dacă condiţia tzF
kji Skji
m 1
se îndeplineşte pentru orice tz atunci 1 iar
kjikji xxxU ...... ,
adică U nu depinde de variabilele nxx ,...,1 .
Definiţia 2.6. Disjuncţia sUUV ...1min , unde siU i ,1, sunt termeni minimali ai
funcţiei ),,...,( 1 nxxF care respectă condiţiile 1) – 3)
1) pentru 1M 1)(min V ,
2) pentru 0M 0)(min V ,
3) pentru V~ care se obţine din minV prin excluderea unui termen minimal arbitrar
1M pentru care 0)(~V ,
se numeşte formă minimală normală disjunctivă a acestei funcţii.
63
Menţionăm că forma minimală minV nu este unică.
Să revenim la problema de mai sus – determinarea componentelor jR ale vectorului R
având componentele vectorului A
. Reprezentăm în baza 2 fiecare componentă a lui A
. În acest
caz obţinem elementele ijr din Figura 2.2, iar RA reprezintă un sistem de k funcţii booleene
).,...,( 1 nj xxF Să analizăm funcţia ),...,( 1 nj xxF care corespunde relaţiei .....1 jdjj XXj RR Fie că se
cunoaşte o formă minimală sUUV ...1min a funcţiei ).,...,( 1 nj xxF Notăm cu iN mulţimea de
variabile jx din care este compus termenul minimal ,iU si ,1 . Fie N – reuniunea acestor
mulţimi: sNNN ...1 .
Teorema 2.4. Fie relaţiei jdjj XXj RR ....1
îi corespunde funcţia booleana ),...,( 1 nj xxF cu o formă
minimală sUUV ...1min , atunci
NNNd sj ...1 (2.9)
Demonstraţie. Notăm cu jdjj ,...,
1valorile respective ale variabilelor ,,...,
1 jdjj xx adică
.,...,11 jdjd jjjj xx Atunci conjuncţia .1...1
1 jdj
jd
jjj xxU Fie că starea binara din
1M conţine valorile indicate. Atunci 1)( F . Daca nd j atunci există o altă stare binară β
care conţine valorile variabilelor indicate mai sus. Această stare în mod obligator trebuie să
aparţină mulţimii 1M . Aceasta înseamnă că orice variabilă din conjuncţia U trebuie să aparţină
cel puţin unui termen minimal al funcţiei ),...,( 1 nj xxF . Prin urmare Nxxjdjj },...,{
1, adică
.Nd j Pe de altă parte, dacă la termenul minimal adăugam noi variabile, atunci condiţiile a) şi
b) sunt verificate, ceea ce este suficient pentru formarea relaţiei care corespunde funcţiei
booleene ).,...,( 1 nj xxF Prin urmare Nd j .
Teorema este demonstrată.
Această teoremă permite să determinăm nu numai mulţimile pe care este definită relaţia,
dar şi dimensiunea jd a matricei care reprezintă această relaţie. Alegând o succesiune a
elementelor mulţimii N aflăm elementele matricei .jR În aşa mod putem determina
componentele vectorului R
având componentele vectorului A
.
Să analizăm acum care sunt condiţiile pentru vectorul R
încât prin transformarea (2.3) să
se obţină matricea (2.4). Din condiţiile expuse mai sus rezultă că nmu iar mnk . Vom
examina cazul în care },1,0{ ,4n }1,0{4321 XXXX iar ).,,,( 4321 RRRRR
În
64
acest caz vectorul 15,13,11,9,7,5,3,1,14,12,10,8,6,4,2,0A
conţine doua progresii aritmetice
cu raţia egală cu 2. Să determinăm componentele vectorului R
. Pentru aceasta reprezentăm
fiecare element în formă binară şi construim matricea RA (Figura 2.3) în care matricea
bidimensională cu coloanele iX reprezintă produsul cartezian al mulţimilor
},1,0{ },1,0{ },1,0{ }1,0{ iar matricea bidimensională cu coloanele jR este compusă din
elementele matricelor relaţiilor jR conform regulii expuse în Figura 2.2.
Să determinăm matricele relaţiilor jR . Din Figura 2.3 se vede că acestor relaţii le
corespund patru funcţii booleene 4321 ,,, xxxxf j , .4,1j Fie 42,....1 dRR
jdjj XXj iar N –
mulţimea de variabile },,,{ 4321 xxxxxi din care sunt formaţi toţi termenii minimali ai unei
forme minimale normale disjunctive a funcţiei 4321 ,,, xxxxf j .
15131197531
14121086420
1111101111011001111010101100100001110011010100010110001001000000
1111011110110011110101011001000111100110101000101100010010000000
16151413121110987654321
433143214321
jjjjaRRRRXXXX
Figura 2.3. Reprezentarea matricei RA
Pentru determinarea termenilor minimali ai funcţiilor în acest caz nu este necesar să
construim submulţimile de coloană. Cazul este extrem de simplu şi termenii minimali se
determina nemijlocit din Figura 2.3. Funcţia ),,,( 43211 xxxxF are un singur termen minimal
21 xU . Prin urmare }.{ 2xN Conform ipotezei 42 d . Din cele demonstrate anterior
65
rezultă că putem adăuga o variabilă arbitrară, spre exemplu 1x . În aşa mod funcţiei
2411 ),...,( xxxF îi corespunde relaţia .211 XXRR În mod analog avem ,
322 XXRR ,433 XXRR
iar .144 XXRR Să determinăm elementele acestor matrice. Din Figura 2.3 se observă că fiecare
matrice conţine acelaşi număr de zerouri şi de unităţi. Adică ele au forma:
1100
,
0011
,
1010
,
0101
,
1001
,
0110
. (2.10)
Să examinăm relaţia .211 XXRR Matricea este compusă din elementele mulţimii }.1,0{
Liniile şi coloanele le notăm cu elementele lui }.1,0{ Aşadar, obţinem o matrice de forma
.****
10
10
Din Figura 2.3 (conform regulii din Figura 2.2) aflam: ,000 r ,101 r ,010 r
.111 r Adică
.1010
10
10
211
XXRR
Am obţinut prima matrice. Prin analogie găsim:
,1010
10
10
322
XXRR
,1010
10
10
433
XXRR
.1010
10
10
144
XXRR
Ultimele două matrice nu corespund nici uneia dintre relaţiile posibile. În aşa mod se obţine
.1010
10
10
144332214321
XXXXXXXX RRRRRRRR (2.11)
Egalităţile (2.11) au loc pentru orice n deoarece mulţimile jN rămân neschimbate pentru
orice n. Adică
1010
10
10......
11433221121 XXXXXXXXXXnn nnnRRRRRRRRR , (2.12)
pentru }.1,0{...21 nXXX
66
Prin analogie pentru cazul când }1,...,2,1,0{...21 mXXX n se obţin funcţii
din logica m-valentă cu aceleaşi submulţimi jN însă cu matricele
110
110110
1
10
110
m
mm
m
m
R j
pentru orice j. Aşadar, din cele, expuse este adevărată
Teorema 2.5. Dacă pentru vectorul )..,,...,,( 1 kj RRRR
sunt satisfăcute condiţiile
,2, dnk (2.13)
},1,...,2,1,0{...21 mXXX n (2.14)
),,,...,,(113221 XXXXXXXX nnn
RRRRR
(2.15)
110
110110
1
10
110
...113221
m
mm
m
m
RRRRR jXXXXXXXX nnn
, (2.16)
atunci aplicând transformarea (2.3) se obţine matricea (2.4) în care liniile reprezintă progresii
aritmetice cu raţia m iar primii termeni sunt elementele din scrise în ordine crescătoare.
Teorema 2.6. Dacă kin FFFxxxxF ......,...,,,..., 111 , atunci
}12,...,0{,1
11
nk
i
zF
zF jSS j
i
j (2.17)
Demonstraţie. Fie că cunoaştem jz
FS 1 şi kiS j
i
zF ,1,1 . Conform definiţiilor submulţimii de
coloană şi a disjuncţiei funcţiilor booleene avem:
k
i
zF
zFjiij
zF
j
i
j
i
j SSzFFzFS1
111 )1),(:()1),((
, (2.18)
jj
i
j
i
zFjji
zF
k
ii
zF SzFzFSFS 111 )1),(()1),(():(
1
. (2.19)
Din (2.18) şi (2.19) rezultă }12,...,0{,1
11
nk
i
zF
zF jSS j
i
j , ceia ce trebuia de demonstrat.
67
Teorema 2.7. Dacă kin FFFxxxxF ......),...,,,...,( 111 , atunci
}12,...,0{,1
11
nk
i
zF
zF jSS j
i
j
Demonstraţie. Fie că cunoaştem jzF
S 1 şi kiS j
i
zF ,1,1 . Conform definiţiilor submulţimii de coloană
şi a conjuncţiei funcţiilor avem:
k
i
zF
zFjij
zF
j
i
j
i
j SSkizFkizFS1
111 :),1()1),(:,1()1),((
,
jj
i
j
i
zFjji
zF
k
i
zF SzFzFkiSkiS 111 )1),(()1),(:),1)(:),1(
1
Din ultimele două relaţii rezultă că }12,...,0{,1
11
nk
i
zF
zF jSS j
i
j , ceia ce trebuia de
demonstrat.
Teorema 2.8. Dacă kin FFFxxxxF ......),...,,,...,( 111 , atunci
jzF
S 1
1
i
kj
i
zF
S 1 , }12,...,0{ nj ,
unde este diferenţa simetrică a submulţimilor de coloană. Demonstraţie. Fie că cunoaştem kiS j
i
zF
,1,1 . Să aflam jzF
S 1 . Conform definiţiilor submulţimii de
coloană, a sumei după modulul 2 şi a diferenţei simetrice avem:
impar)1),((1 qzFS jzF
j astfel încât }.,1{,,1,0),(
,1,1),(ki
kqpzFqpzF
pji
ji
p
p
kqpS
qpSj
pi
j
pi
zF
zF
,1,
,1,
1
1
1
i
kj
i
zFS 1 .
1
i
k
kqpzFqpzF
kikqpS
qpSimparqS
ji
jipz
F
zFz
Fp
p
j
p
j
pij
i ,1,0),(,1,1),(
},1{,,1,
,1,:
11
1
1
jzFj SzF 11),( .
Din ultimele relaţii rezultă că jzF
S 1
1
i
kj
i
zFS 1 , }12,...,0{ nj
68
Teorema 2.9. Fie 2111 ),...,,,...,( FFxxxxF n ,
atunci jjj z
FzF
zF SSS 1
20
11
Demonstraţie. Conform definiţiei funcţiei “Implicaţia” şi proprietăţilor “Conjuncţiei”,
”Disjuncţiei” şi “Negaţiei” avem:
21212121 FFFFFFFFF .
Deoarece jj zF
zF
SS 01
11 , atunci jjj z
FzF
zF SSS 1
20
11 .
Teorema este demonstrată.
În Exemplul 2.1 sunt aplicate teoremele de mai sus.
Exemplul 2.1. De aflat submulţimile de coloană ale funcţiilor ,21 FF ,21 FF 21 FF şi
21 FF definite prin intermediul tabelului submulţimilor de coloană (în partea de sus a
Tabelului 2.5).
Tabelul 2.5. Determinarea submulţimilor de coloană pentru ,21 FF ,21 FF 21 FF , 21 FF
54 xx
00 01 10 11
0z 1z 2z 3z
11F 0,1,2,3,4,5,6,7 0,3,5 1,2,7 12F 6,7 0,6,7 1,3,5,6 0,1,2,3,4,5,6,7
121 )( FF 0,1,2,3,4,5,6,7 0,6,7 0,1,3,5,6 0,1,2,3,4,5,6,7
121 )( FF 6,7 3,5 1,2,7
121 )( FF 0,1,2,3,4,5 0,6,7 0,1,6 0,3,4,5,6
121 )( FF 6,7 0,1,2,3,4,5,6,7 1,2,3,4,5,6,7 0,1,2,3,4,5,6,7
Soluţie. În conformitate cu teoremele 2.6, 2.7, 2.8 şi 2.9 obţinem ultimele patru linii ale
Tabelului 2.5 care reprezintă submulţimile de coloană ale funcţiilor date.
În soluţionarea multor probleme, relaţionate cu funcţii booleene, de multe ori ne întâlnim
cu noţiunea de “stări binare vecine”.
Definiţia 2.7. Doua stări binare jz şi kz care diferă numai prin valoarea variabilei ix se numesc
stări binare vecine [130] după variabila ix .
69
Teorema 2.10. Dacă pentru stările binare jz şi kz ( }12,...,1,0{, nkj ) se verifică condiţia
impareste2
dacă,2
pareste2
dacă,2
inin
inin
jj
jjk , (2.20)
atunci aceste stări sunt vecine după variabila },...,,{ 21 ni xxxx
Demonstraţie. Pe mulţimea }12,...,1,0{ n construim partiţiile };{ 2,1, rrr mm ( 12,1 ir ) cu proprietăţile:
1) primul element al blocului 1,1m este egal cu zero;
2) fiecare bloc reprezintă o mulţime alcătuită din in2 elemente care formează o
progresie aritmetica cu raţia 1;
3) pentru orice }2,...,2,1{ 1 ir primul element al blocului 2,rm diferă de ultimul
element al blocului 1,rm printr-o unitate. Aceeaşi condiţie o avem şi pentru primul
element al blocului 1,1rm şi ultimul element al blocului 2,rm .
Din blocurile obţinute construim matricea
2,22,12,2,12,22,1
1,21,11,1,11,21,1
1
1
i
i
mmmmmmmmmmmm
Arrr
rrr
Sunt posibile următoarele cazuri:
a)
inj
2este un număr par .
În acest caz, conform condiţiilor 1) – 3) pentru orice r este adevărată apartenenţa
1,rmj , adică j se află în unul dintre blocurile din prima linie a matricei A. Dacă la elementul j
adunăm numărul in2 obţinem un element injk 2 , care aparţine blocului 2,rm . Fie că
numărului j îi corespunde starea binara niiijz ...... 111 . Pentru 0j obţinem 0...00 z
şi 1,10 mz . Pentru o astfel de stare binara 0i . Dacă la numărul 0 adunăm un număr par de
numere egale cu in2 , atunci valoarea lui i rămâne neschimbată, adică în jz , care corespunde
lui 1,rmj , valoarea lui ix este egala cu 0. Prin analogie se obţine că valoarea lui ix din kz ,
care corespunde lui 2,rmk , este egală cu 1.
70
Aşadar, pentru orice }2,...,2,1{ 1 ir elementele blocurilor 1,rm şi 2,rm formează în
matricea A coloane, elementele cărora corespund la două stări care pot fi vecine după variabila
ix . Odată cu îndeplinirea condiţiilor 1) – 3) se obţine că pentru niiijz ...... 111 şi
niiikz ...... 111 are loc
.,...,,,..., 111111 nniiii
Acesta înseamnă că jz şi kz sunt vecine după variabila ix .
b)
inj
2este un număr impar .
Prin analogie, examinam cazul în care
inj
2 este un număr impar, obţinem injk 2 .
Teorema este demonstrată.
Teorema dată ne permite sa găsim simplu perechi de stări vecine pentru funcţii de un
număr mare de variabile.
Consecinţă. Valoarea lui ix din starea binara jz poate fi determinata din relaţia
imparăeste2
jdacă,1
parăeste2
dacă,0
in
in
i
j
x . (2.21)
Exemplu 2.2 Pentru funcţia de n variabile de aflat starea kz vecina cu starea jz după variabila
ix , dacă ,100n j= 17297 j şi .98i
Soluţie.
98100
97
2172 39614081257132168796771975172. Acest număr este par. Prin urmare
.2172 297 k
Verificare. Scriem numerele în baza 2:
17297j 001000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000010001
k=001000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000010101
Deci stările sunt vecine după variabila 98x .
71
2.2.2. Determinarea submulţimilor de coloană ale funcţiilor booleene reprezentate în formă
algebrică
Fie ca funcţia booleană ),...,( 1 nxxF este reprezentată în formă normală disjunctivă
kin UUUxxF ......),...,( 11
unde
qj
q
jsi
s
ijjiii xxxxU ...... 1
1
1
1,
,0dacă,1dacă,
aa
aaa x
xx a
},...,,,...,{ 11 qs jjiia , 1
~,...,1
Xxxsii , 2
~,...,1
Xxxqjj .
Considerăm fiecare conjuncţie iU ca o funcţie booleana cu un singur termen minimal iU . În
acest caz, conform Teoremei 2.6 obţinem jzFS 1 =
k
i
zu
j
iS
11
. În baza acestei relaţii construim Tabelul
2.6.
Tabelul 2.6. Tabelul submulţimilor de coloană ale funcţiei booleene reprezentate în formă
normală disjunctivă
0z … jz … pz
11u 0
11
zuS … jz
uS 11
… pzuS 1
1
12u 0
12
zu
S … jzuS 1
2 … pz
uS 12
1ku 0
1zuk
S ... j
k
zu
S 1 … p
k
zu
S 1
01
zFS =
k
i
zui
S1
01
... jzF
S 1 =k
i
zu
j
iS
11
… pzF
S 1 =k
i
zu
p
iS
11
Cunoscând submulţimile de coloană ale fiecărei conjuncţii putem afla jz
FS 1 , }12,...,0{ nj .
Sunt posibile trei cazuri elucidate în următoarele trei teoreme :
72
Teorema 2.11. Fie
qj
q
jjji xxU ...1
1, 2
~,...,1
Xxxqjj .
Atunci
aa
aaj
ijj
jjzU xqa
xqaS
:},...,1{dacă,:},...,1{dacă},12,...,0{
1
Demonstraţie. Conform (2.6) avem
aa
aaqj
q
j
jj
jjjji xqa
xqaxxU
:},...,1{dacă,0:},...,1{dacă,1
...1
1 (2.22)
În acest caz iU nu sunt în funcţie de variabilele xx ,...,1 . Prin urmare, acestei conjuncţii îi
corespunde blocul maximal compus din mulţimea }12,...,0{ . Conform definiţiei submulţimii
de coloană, submulţimea j
i
zuS 1 conţine orice element al mulţimii }12,...,0{ când 1iU şi nu
conţine nici un element al acestei mulţimi când 0iU . Aşadar,
aa
aaj
ijj
jjzU xqa
xqaS
:},...,1{dacă,:},...,1{dacă},12,,...0{
1 .
Teorema este demonstrată.
Valorile lui ajx din starea binara jz pot fi determinate din relaţia (2.21)
Teorema 2.12. Fie
si
s
iiii xxU ...1
1, 1
~,...,1
Xxxsii .
Atunci
s
iizu ii
mS sj
i
1
11 , }12,...,1,0{ nj (2.23)
Demonstraţie.
În acest caz iU nu sunt în funcţie de variabilele nxx ,...,1 şi, prin urmare, submulţimile de
coloană sunt egale între ele pentru orice jz , şi sunt formate din elementele blocului
s
ii
iim s
1
1 [115], [116]. Prin urmare s
iizu ii
mS sj
i
1
11 , }12,...,1,0{ nj , ce se cerea
de demonstrat.
73
Teorema 2.13. Fie
qj
q
jci
c
ijjiii xxxxU ...... 1
1
1
1,
unde
},...,{,..., 11 xxxxcii , },...,{,..., 11 njj xxxx
q .
Atunci
aa
c
aaj
i jjc
ii
jjz
U xqaii
m
xqaS
:},...,1{dacă,
:},...,1{dacă,
1
11
.
Demonstraţie. În acest caz avem o combinaţie a situaţiilor din ultimele doua teoreme. Facem
următoarele notaţii:
qj
q
jjji xxU ...1
11, , ci
c
iiii xxU ...1
12, .
Atunci
2,1, iii UUU
Dacă j
i
zUS 1
1,, atunci j
i
zU
S 1 . Dacă }12,...,1,0{11,
j
i
zUS , iar
s
iizu ii
mS sj
i
1
11
2, , atunci
}12,...,0{1j
i
zUS
s
ii
iim s
1
1 =s
ii
iim s
1
1 .
Prin urmare
.:},...,1{dacă,
:},...,1{dacă,
1
11
aa
c
aaj
i jjc
ii
jjz
U xqaii
m
xqaS
Teorema este demonstrată.
Teoremele 2.6, 2.7, 2.8, 2.10, 2.11, 2.12, 2.13 permit determinarea submulţimilor de
coloană ale funcţiei booleene reprezentată în formă normală disjunctivă.
Exemplul 2.3. De aflat submulţimile de coloană ale funcţiei ),...,( 51 xxF , dacă
)()(),...,( 41324215451 xxxxxxxxxxxF .
Soluţie. Facem următoarele notaţii:
421541 xxxxxF , 41322 xxxxF , 541 xxU , 4212 xxxU , ,323 xxU .414 xxU
Atunci ,211 UUF ,432 UUF 21 FFF .
74
Considerăm 3 . În aşa caz },,{~3211 xxxX , },{~
542 xxX , )7,6,5,4,3,2,1,0(Y , }3,2,1,0{Z
(sunt indicaţi numai indicii). Conform [116], [117] construim partiţiile
}7,6,5,4;3,2,1,0{11
011
x , }7,6,3,2;45,1,0{11
012
x , }7,5,3,1;6,4,2,0{11
013
x .
Aflam produsele partiţiilor
}7,6;5,4;3,2;1,0{1,12,1
0,12,1
1,02,1
0,02,12,1 ,
}7,5;6,4;3,1;2,0{1,13,1
0,13,1
1,03,1
0,03,13,1 ,
}7,3;6,2;5,1;4,0{1,13,2
0,13,2
1,03,2
0,03,23,2 ,
}7;6;5;4;3;2;1;0{ 1,1,13,2,1
0,1,13,2,1
1,0,13,2,1
0,0,13,2,1
1,1,03,2,1
0,1,03,2,1
1,0,03,2,1
0,0,03,2,13,2,1 .
Aplicam teoremele respective si construim Tabelul 2.7
Pentru 541 xxU aplicăm Teorema 2.11, deoarece 254~, Xxx . Din conjuncţie avem
04 şi 05 . Condiţiile 44 x şi 55 x se verifică numai pentru 0z . De aceea
}7,6,5,4,3,2,1,0{011z
US şi 3
11
211
111
zU
ZU
zU
SSS .
Pentru 4212 xxxU aplicăm Teorema 2.13, deoarece 121~, Xxx , iar 24
~Xx . Din
conjuncţie avem .0,1,1 421 În produsul 2,1 alegem blocul cu indicii superiori 1,1.
Acesta este blocul 1,12,17,6 . Condiţia 044 x este verificată de 0z si 1z . Prin urmare
}7,6{112
012
ZU
zU SS şi 3
12
212
ZU
zU SS .
Tabelul 2.7. Tabelul submulţimilor de coloană ale funcţiei ),...,( 51 xxF din Exemplul 2.3.
54xx
00 01 10 11
0z 1z 2z 3z
11U 0,1,2,3,4,5,6,7
12U 6,7 6,7
11F 0,1,2,3,4,5 6,7
13U 1,5 1,5 1,5 1,5
14U 4,5,6,7 4,5,6,7
12F 1,4,5,6,7 1,4,5,6,7 1,5 1,5 1F 1,4,5,6,7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7
75
Pentru 323 xxU aplicăm Teorema 2.12, deoarece 132~, Xxx . Din conjuncţie avem
1,0 32 . Căutăm în produsul 3,2 blocul cu indicii superiori 0,1. Acesta este blocul 1,03,25,1 .
Prin urmare }5,1{13jz
US pentru }3,2,1,0{j .
Pentru 414 xxU aplicam Teorema 2.13, deoarece 11~Xx , iar 24
~Xx . Din conjuncţie
avem .0,1 41 În partiţia 1 căutăm blocul cu indicele superior egal cu 1. Acesta este
blocul 117,6,5,4 . Condiţia 044 x se îndeplineşte pentru 0z si 1z . Prin urmare
}7,6,5,4{114
014
ZU
zU
SS şi 314
214
ZU
zU
SS .
Pentru determinarea submulţimilor jjj zF
zF
zF SSS 11
21
1,, aplicăm Teoremele 2.8, 2.6 şi 2.9
respectiv. Rezultatul final se obţine în ultima linie a Tabelului 2.7.
În Mediul de Calcul Mathematica este elaborat un program care asigură un calcul rapid al
submulţimilor de coloană ale funcţiilor de zeci, sute şi chiar mii de variabile, reprezentate în
formă analitică (Anexa 2).
Nu orice funcţie booleană poate fi cu succes utilizată în soluţionarea problemelor
criptografice. Funcţiile respective trebuie să satisfacă unor condiţii. Pentru examinarea acestor
condiţii vom examina o operaţie cu aceste funcţii, şi anume – operaţia de derivare lor.
2.2.3. Submulţimi de coloană ale derivatelor funcţiilor booleene. Polinomul Zhegalkin.
Seria Taylor.
În conformitate cu [12] avem următoarea definiţie:
Definiţia 2.8. Derivata parţială a funcţiei ),...,,,,...,( 111 niii xxxxxF după variabila ix se
numeşte expresia
niiniii
xxxxFxxxxFxF ,...,,0,,...,,...,,1,,..., 111111 , (2.24)
Conform [12] unele proprietăţi ale derivatelor parţiale ale funcţiilor booleene sunt:
iiiii xF
xF
xFF
xFF
xFF
211
22
121 )( (2.25)
iiiii xF
xF
xFF
xFF
xFF
211
22
121 )( (2.26)
76
iii xF
xF
xFF
2121 )( (2.27)
Calculul derivatelor parţiale în conformitate cu formulele (2.24)-(2.27) este suficient de
anevoios. Acest calcul poate fi simplificat esenţial dacă utilizăm în scopul dat reprezentarea
funcţiei booleene cu ajutorul submulţimilor de coloană.
În conformitate cu [118], dacă 2~Xxi , iar jz şi kz sunt stări binare vecine după
variabila ix , atunci
j
i
z
xF
S 1kjk
i
zF
zF
z
xF
SSS 111
, (2.28)
unde este diferenţa simetrică a mulţimilor.
Derivatele parţiale de ordin superior le putem calcula conform relaţiei
111 ......
1
sss ii
s
iii
s
xxF
xxxF (2.29)
calculând consecutiv siii
s
iii xxxF
xxF
xF
.......,,,
21211
2. Rezultatul derivării nu depinde de ordinea
variabilelor după care se face derivarea [12]. Aceste calcule se pot reduce dacă aplicăm
următoarea teoremă:
Teorema 2.14. Fie
2~,..,.
1Xxx
sii , }12,...,1,0{ nj .
Atunci.
kj
siii
s
jF
jF
jF
z
xxxF
SSSS 121
111
21
...
...
, (2.30)
unde:
1) este diferenţa simetrică a submulţimilor de coloană,
2) sk 2 , }12,...,2,1,0{,...,1 nkjj , },...,{ 1 kjjj ,
3) pentru orice kazaj
,1, există s stări binare vecine după variabilele sii xx ,...,
1.
77
Demonstraţie. Din definiţia derivatei funcţiei rezultă că derivata siii
s
xxxF
....
21
este o funcţie
booleană care nu depinde de variabilele sii xx ,..,.
1. Acesta înseamnă [115], [116] că există o
submulţime de numere naturale },...,,{ 21 kjjj , sk 2 , }12,...,2,1,0{,...,1 nkjj astfel
încât
11
21 ...
j
siii
s
z
xxxF
S …= kj
siii
s
z
xxxF
S 1
21 ...
.
Prin urmare, pentru determinarea submulţimii j
siii
s
z
xxxF
S 1
21 ...
, unde },...,,{ 21 kjjjj şi sk 2 ,
este suficient să găsim numai 11
21 ...
j
siii
s
z
xxxF
S
. Să arătăm cum aflam această submulţime de
coloană. Stările binare kjj zz ,...,
1 formează un cub unitar s-dimensional. În acest cub fiecare stare
binară are s stări vecine. În conformitate cu Teorema 2.10 alcătuim 12 s perechi de stări vecine
după variabila 1i
x cu condiţia 1jj zz (în aceste perechi scriem numai indicii):
:1ix ),,( 21 jj ),,( 43 jj ),,( 65 jj ),,( 87 jj … ),,( 67 kk jj ),,( 45 kk jj ),,( 23 kk jj ).,( 1 kk jj
În conformitate cu (2.28) avem:
21
11
11
1
jjj
i
z
F
z
F
z
xF
SSS
şi 41
31
31
1
jjj
i
z
F
z
F
z
xF
SSS
. (2.31)
Teorema 2.10 ne permite să aflăm starea binară vecină cu starea binara 1jz după variabila
2ix .
Fie că această stare este 3jz . Atunci din Teorema 2.10 rezultă că
2jz şi 4jz sunt vecine după
variabila 2ix . Prin urmare stările
321,, jjj zzz şi
4jz formează un cub unitar bidimensional după
variabilele 1ix şi
2ix . În conformitate cu relaţiile (2.28) şi ( 2.29) avem
1221
2
iiii xF
xxxF şi 3
1
1
11
1
11
21
2
j
i
j
i
j
ii
z
xF
z
xF
z
xxF
SSS
. (2.32)
Conform (2.28) se obţine )( 41
31
21
11
11
21
2
jjjjj
ii
z
F
z
F
z
F
z
F
z
xxF
SSSSS
sau (aplicând proprietatea
asociativă)
78
41
31
21
11
11
21
2
jjjjj
ii
zF
zF
zF
zF
z
xxF
SSSSS
(2.33)
Efectuând aceleaşi calcule pentru perechile ),( 65 jj şi ),( 87 jj vom obţine
81
41
31
21
11
11
321
3... jjjjjj
iii
z
F
z
F
z
F
z
F
z
F
z
xxxF
SSSSSS
(2.34)
Procesul de calcul se termină cu ultimele două perechi ),( 23 kk jj şi ).,( 1 kk jj În rezultat
obţinem relaţia (2.30).
Teorema este demonstrată.
Formula (2.30) ne permite să calculăm derivata de ordinul s fără a calcula derivatele de
ordin inferior. Pentru aceasta este necesar să calculăm elementele mulţimii },...,,,{ 321 kjjjjJ ,
unde sk 2 , iar jj 1 . Cunoscând j putem afla toate celelalte elemente. Acest lucru îl putem
face în felul următor [25]:
în conformitate cu Teorema 2.10 aflam 2j , vecin (în sistemul binar) cu 1j după
variabila sx , şi construim mulţimea },{ 21 jj ;
aplicăm aceeaşi teoremă şi aflam 3j şi 4j vecine respectiv cu 1j şi 2j după variabila
1six şi construim mulţimea },,,{ 4321 jjjj ;
repetăm calculele de mai sus şi aflăm 765 ,, jjj şi 8j , vecine respectiv cu 321 ,, jjj şi
4j după variabila 2six ;
continuăm procesul până la determinarea lui kj şi construirea mulţimii
},...,,,{ 321 kjjjjJ . Pentru determinarea acestei mulţimi este elaborat un program în
mediul de calcul Mathematica (Anexa 2).
Teorema 2.15. Fie
1~Xxi şi },...,,{ 211 k
z
FjS .
Atunci
},{},{},{ 22111 kkz
xF
j
i
S
, (2.35)
unde k ,...,, 21 sunt vecine respectiv cu k ,...,, 21 după variabila ix .
79
Demonstraţie. Fie ...... 11211 iii ( }1,0{,,1 ii ). Atunci starea vecină cu 1
după variabila ix este starea 1 ...... 1121 iii . Fie jzFS 01 , unde nj ...1 . În aşa
caz 1),( 1 jF , iar 0,1 jF . În conformitate cu definiţia derivatei parţiale a funcţiei
booleene obţinem j
i
z
xF
S 111,
. Admitem că jzFS 11 , atunci 1,1 jF şi, prin urmare,
j
i
z
xF
S 111,
. Aşadar
j
i
z
xF
S 111,
, dacă jz
FS 11 (2.36)
j
i
z
xF
S 111,
, dacă jz
FS 11 (2.37)
Aceste condiţii se obţin şi pentru alte elemente ale submulţimii de coloană },...,,{ 211 kz
FjS .
Presupunem că am aflat toate perechile kccc ,1},,{ (efectuăm acest lucru aplicând
Teorema 2.10 ). Sunt posibile următoarele cazuri:
a) toate perechile sunt diferite.
În acest caz avem
},{},{},{ 22111 kkz
xF
j
i
S
(2.38)
Deoarece toate elementele sunt diferite atunci reuniunea poate fi substituita cu diferenţa
simetrică . În rezultat se obţine (2.35).
b) Exista perechi egale.
Aceasta se întâmplă atunci când pentru c şi c se îndeplineşte jz
Fc S 1 . În aşa caz din
reuniunea tuturor perechilor trebuie să scădem reuniunea tuturor perechilor egale. Ţinând cont că
},{},{ cccc , rezultatul scăderii se poate obţine din (2.38) prin înlocuirea reuniunii
cu diferenţa simetrică adică vom obţine (2.35) Aşadar, în ambele cazuri submulţimea de
coloană a derivatei o aflam în baza relaţiei (2.35)
Teorema este demonstrată.
80
Consecinţă. Daca }12,...,2,1,0{1 jz
FS sau jz
FS 1 este o mulţime vidă, atunci
},...,1{,1
iS j
i
z
xF
.
În baza acestor teoreme sunt elaborate programe de calcul ale derivatelor pentru funcţii
reprezentate prin submulţimi de coloană sau în forma analitică (forma normala disjunctiva).
Exemplul 2.4. De aflat derivatele parţiale 3x
F ,
6xF şi
654
3
xxxF
ale funcţiei
),,,,,( 654321 xxxxxxF reprezentata prin tabelul submulţimilor de coloană Tabelul 2.8 (partea
superioară).
Soluţie. În acest caz },,{~3211 xxxX , },,{~
6542 xxxX . Să calculăm, de exemplu, 31
3
Z
xF
S
.
Deoarece 13~Xx , aplicăm Teorema 2.15. Conform relaţiei (2.35) găsim perechile de stări
vecine după variabila 3x , aplicând Teorema 2.10. Aceste perechi sunt: }7,6{},4,5{ şi }6,7{ . În
acest caz
31
3
Z
xF
S }5,4{}6,7{}7,6{}4,5{ . În mod analog calculăm celelalte submulţimi de
coloană.
Tabelul 2.8. Tabelul submulţimilor de coloană din Exemplul 2.4
654 xxx
0z 1z 2z 3z 4z 5z 6z 7z
000 001 010 011 100 101 110 111 1F 0,4,5 0,4,5 5,6,7 1 0,3,5,7 1, 4,7 1,3,5,6,7
1
3
xF 0,1 0,1 4,5 0,1 0,1,2,3,4,5,6,7 4,5,6,7 0,1,2,3,4,5
1
6
xF 5,6,7 5,6,7 0,1,3,5,7 0,1,3,5,7 3,4,5,6 3,4,5,6
1
654
3
xxx
F 0,1,4,5 0,1,4,5 0,1,4,5 0,1,4,5 0,1,4,5 0,1,4,5 0,1,4,5 0,1,4,5
81
Trecem la calculul derivatei 6x
F . Vom calcula 0
1
6
Z
xF
S
. Deoarece 26~Xx , iar 0z este vecin cu
1z după variabila 6x , atunci, conform (2.28 ) obţinem 01
6
Z
xF
S
=
1
1
6
Z
xF
S . În mod analog
calculăm celelalte submulţimi de coloană.
Trecem la calculul derivatei 654
3
xxxF
. În acest caz 2654~,, Xxxx , ,3s ,823
},,,,,,,{ 76543210 jjjjjjjjJ şi aplicând (2.30) obţinem pentru orice 7.0, izi :
iZ
xxxF
S 1
654
3{0,4,5}Δ{0,4,5} Δ{ }{5,6,7} Δ{1} {0,3,5,7} Δ{1,4,7} Δ{1,3,5,6,7}={0,1,4,5}.
Toate submulţimile calculate le includem în Tabelul 2.8 (partea inferioară). Având
completat acest tabel şi aplicând metoda blocurilor maximale [115], [116] putem afla simplu
formele minimale normale disjunctive ale derivatelor. De exemplu, pentru ultima derivata avem
un singur bloc maximal 025,4,1,0 , care generează termenul minimal 2x . Prin urmare
2654
3
xxxx
F
. În cazul în care funcţia este definită în formă analitică, o transformăm în formă
de submulţimi de coloană şi după aceasta aflăm derivatele parţiale necesare.
Sa analizăm unele aplicaţii ale acestor derivate parţiale.
Un rol decisiv în elaborarea sistemelor de criptare îi revine procedurii de generare a
cheilor de criptare-decriptare a informaţiei. La generarea acestor chei putem aplica coeficienţii
polinomului Zhegalkin [15] a unei funcţii booleene ),...,,( 21 nxxxF , luate în mod arbitrar . Fie
......),...,,( 212,12211021 xxCxCxCxCCxxxF nnn
nnnnnn xxxxCxxxCxxC ...... 321,...,3,2,13213,2,11,1 , (2.39)
– polinomul Zhegalkin pentru funcţia ),...,,( 21 nxxxF . În lucrările [12] , [119] s-a demonstrat că
k
kiii
k
iii xxxFC
...
)0(
21
21 ,...,, , },...,1{,...,1 nii k . (2.40)
Aşadar, coeficienţii pot fi calculaţi cu ajutorul derivatelor parţiale ale funcţiei date. Fie funcţia
este definită prin submulţimi de coloană. În baza derivatelor parţiale construim Tabelul 2.9
82
Tabelul 2.9. Tabelul submulţimilor de colană ale derivatelor parţiale ale funcţiei booleene F
nxx ...1
0z … jz … pz 1F 0
1zFS … jz
FS 1 … pzFS 1
1
1
xF
01
1
z
xF
S
…
jz
xF
S 1
1
… pz
xF
S 1
1
1
nxF
01
z
xF
n
S
…
j
n
z
xF
S 1
…
p
n
z
xF
S 1
1
21
2
xx
F 0
1
21
2
z
xxF
S
…
jz
xxF
S 1
21
2
…
pz
xxF
S 1
21
2
1
21 ...
n
n
xxxF
01
21 ...
z
xxxF
n
nS
…
j
n
n
z
xxxF
S 1
21 ...
…
p
n
n
z
xxxF
S 1
21 ...
Coeficienţii aparţin mulţimii {0,1}. Din (2.40) şi Tabelul 2.9 rezultă că coeficientul
kiiiC ,...,, 21
este egal cu 1 în cazul în care elementul „0” aparţine submulţimii de coloană a derivatei parţiale
determinate de indicii coeficientului, şi este egal cu zero în catul în care „0” nu aparţine
submulţimii menţionate. Cu alte cuvinte, este adevărată
Teorema 2.16. În polinomul Zhegalkin pentru funcţia booleana ),...,,,...( 11 nxxxxF coeficienţii
satisfac condiţiile
)0,...,0(0 FC ,
},...,1{,...,,0ădac,1
0ădac,0
1
...
...,...,, 0
1
21
01
21
21nii
S
S
C kz
xxxF
z
xxxF
iii
kiii
k
kiii
k
k
(2.41)
Demonstraţie. Din (2.39) rezultă că )0...,,0(0 FC pentru 0...21 nxxx . În
conformitate cu (2.40) şi cu definiţia submulţimii de coloană avem:
11...
)0...0(1...
),0(0 ...0
...
21
2121
01
21
k
kkkiii
k iiiiii
k
iii
kZ
xxxF
Cxxx
Fxxx
zFS ,
83
00...
)0...0(0...
),0(0 ...0
...
21
2121
01
21
k
kkkiii
k iiiiii
k
iii
kZ
xxxF
Cxxx
Fxxx
zFS .
Teorema este demonstrată.
Polinomul (2.39) cu coeficienţii din (2.40) se numeşte seria Taylor în vecinătatea punctului
00...0 pentru funcţia ),...,,,...( 11 nxxxxF [12]. În vecinătatea unui punct arbitrar
}1,0{,...21 in această serie are forma
)(...)(...
)(...)()()(),...,( 111
111
1 nnn
n
n xxxx
xx
FFxxF
(2.42)
Pentru construirea polinomului (2.39) cu coeficienţii (2.40) este suficient să calculăm
numai derivatele parţiale din coloana 0z . Aceste derivate le putem calcula, aplicând Teoremele
2.14 şi 2.15, numai în baza submulţimilor de coloană din linia 1F . Aceste derivate parţiale se
aplică şi la construirea seriei Taylor (2.39) în vecinătatea punctelor ),( 0zyi , }12,...,2,1{ i .
Exemplul 2.5. De dezvoltat în seria Taylor funcţia booleană
.543532421531431321 xxxxxxxxxxxxxxxxxxF
Soluţie. Considerăm 3 . Avem o funcţie de 5 variabile. Mulţimile YXX ,~,~21 şi Z precum şi
partiţiile respective sunt construite în Exemplul 2.3.
Ca şi în exemplul indicat calculăm submulţimile de coloană jZ
FS 1 şi construim tabelul acestor
submulţimi (partea superioară a Tabelului 2.10). Aşa cum este arătat în Exemplul 2.4 aflăm
submulţimile de coloană ale derivatelor parţiale şi construim Tabelul 2.10. În prima coloană sunt
indicaţi indicii variabilelor după care se calculează derivatele parţiale. Pentru 00000 avem
0000 y , iar 000 z . Prin urmare, seria se obţine conform coloanei 0z . Elementul 0 aparţine
submulţimilor din liniile
4; 5; 1,3; 1,4; 3,4; 4,5; 1,2,4; 1,3,4; 1,3,5; 2,3,5; 3,4,5; 1,2,3,4; 1,2,3,4,5.
Seria Taylor respectivă are forma
543532531431421544341315451 ),...,( xxxxxxxxxxxxxxxxxxxxxxxxxxxF
543214321 xxxxxxxxx .
84
Tabelul 2.10. Tabelul pentru soluţionarea Exemplului 2.5
54xx 00 01 10 11
0z 1z 2z 3z 1F
5,7 0,1,2,4,5,6 0,2,5,6,7 0,1,2,5,6,7 1 1,3,5,7 0,1,3,4,5,7 0,3,4,7 2 1,3,5,7 4,6 1,3,4,6 3 4,5,6,7 2,3,6,7 0,1,2,3,4,5 2,3,4,5 4 0,2,6 4,7 0,2,6 4,7 5 0,1,2,4,6,7 0,1,2,4,6,7 1 1
1,2 0,2,4,6 0,1,2,3,4,5,6,7 1,3 0,1,2,3,4,5,6,7 2,3,6,7 0,1,2,3,4,5,6,7 1,4 0,4 0,3,4,7 0,4 0,3,4,7 1,5 1,3,5,7 1,3,5,7 1,5 1,5 2,3 0,1,2,3,4,5,6,7 4,5,6,7 0,1,2,3,4,5,6,7 2,4 4,6 4,5,6,7 4,6 4,5,6,7 2,5 1,3,5,7 1,3,5,7 1,3 1,3 3,4 0,1,2,3,6,7 4,5,6,7 0,1,2,3,6,7 4,5,6,7 3,5 2,3,4,5 2,3,4,5 0,1 0,1 4,5 0,2,4,6,7 0,2,4,6,7 0,2,4,6,7 0,2,4,6,7
1,2,3 0,1,2,3,4,5,6,7 1,2,4 0,2,4,6 0,1,2,3,4,5,6,7 0,2,4,6 0,1,2,3,4,5,6,7 1,2,5 1,3,5,7 1,3,5,7 1,3,4 0,1,4,5 0,1,2,3,4,5,6,7 0,1,4,5 0,1,2,3,4,5,6,7 1,3,5 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 0,1,4,5 0,1,4,5 1,4,5 3,7 3,7 3,7 3,7 2,3,4 4,5,6,7 4,5,6,7 2,3,5 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 0,1,2,3 0,1,2,3 2,4,5 5,7 5,7 5,7 5,7 3,4,5 0,1,2,3,4,5 0,1,2,3,4,5 0,1,2,3,4,5 0,1,2,3,4,5
1,2,3,4 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 1,2,3,5 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 1,2,4,5 1,3,5,7 1,3,5,7 1,3,5,7 1,3,5,7 1,3,4,5 2,3,6,7 2,3,6,7 2,3,6,7 2,3,6,7 2,3,4,5 4,5,6,7 4,5,6,7 4,5,6,7 4,5,6,7
1,2,3,4,5 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7
Fie că trebuie să aflăm reprezentarea funcţiei în seria Taylor în vecinătatea punctului
01110. Din reprezentarea funcţiei prin submulţimi de coloană rezultă că 0113 y , iar
102 z . Aceasta înseamnă că pentru aflarea coeficienţilor din seria Taylor trebuie să folosim
coloana 2z şi să aflăm în care dintre submulţimile de coloană se află elementul 3. Acest lucru se
verifica pentru submulţimile din liniile cu indicii
85
1; 3; 1,3; 2,5; 3,4; 1,2,3; 1,2,5; 1,4,5; 2,3,5; 3,4,5; 1,2,3,4; 1,2,3,5; 1,2,4,5; 1,3,4,5; 1,2,3,4,5.
În conformitate cu (2.42) obţinem:
)1)(1)(0)(1()1)(0()1()0(),,,,( 4352313154321 xxxxxxxxxxxxxF
)0)(1)(0()0)(1)(0()1)(1)(0( 541521321 xxxxxxxxx
)1)(1)(1)(0()0)(1)(1()0)(1)(1( 4321543532 xxxxxxxxxx
)0)(1)(1)(0()0)(1)(1)(0( 54215321 xxxxxxxx
)0)(1)(1)(1)(0()0)(1)(1)(0( 543215431 xxxxxxxxx =
= 54353254152132143523131 xxxxxxxxxxxxxxxxxxxxxxx
.543215431542153214321 xxxxxxxxxxxxxxxxxxxxx
Dacă pentru orice 2k se are loc 0,...,, 21
kiiiC , atunci funcţia se numeşte liniară. În criptografie
se accepta funcţii cât mai diferite de funcţiile liniare (funcţii neliniare [73]). În baza Teoremelor
2.6, 2.7, 2.8, 2.10, 2.11, 2.12, 2.13 putem construi după dorinţă diverse funcţii neliniare. În
Anexa 2 este prezentată o programă în mediul de calcul Mathematica, care construieşte
momentan astfel de funcţii. Funcţia booleană reprezentată în Tabelul 2.11 conţine în polinomul
Zhegalkin toate conjuncţiile posibile.
Tabelul 2.11. Exemplu de funcţie booleană cu toate conjuncţiile posibile în polinomul Zhegalkin
54xx
00 01 10 11
0z 1z 2z 3z 1F
3,5,6 1,2,4,7 1,2,4,7 0,3,5,6
2.3. Reprezentarea funcţiilor q-valente prin submulţimi de coloană
Să analizăm funcţia ),...,( 1 nxxF care are în calitate de caracteristică faptul că atât
variabilele ei cât şi însăşi funcţia dată admit valori din mulţimea }1,...,1,0{ q . O astfel de
funcţie se numeşte funcţie din logica q-valentă [130]. Ea poate fi definita ca o aplicaţie
nXXX ...21 pentru nXXX ...21 = }1,...,,1,0{ q şi reprezentată cu ajutorul
Tabelului 2.12
86
Tabelul 2.12. Reprezentarea funcţiei din logica q-valentă.
nq
n
qqq
Fxxx
111
100000
2
1
1
unde nu quq ,1},1,...1,0{ . Funcţia poate fi privita şi ca o relaţie n-ara nX
R în matricea
căreia elementele sunt din mulţimea . Ca şi pentru funcţiile booleene obişnuite construim
mulţimile },..,,{110
qyyyY şi },...,,{110 nqzzzZ cu ajutorul cărora definim submulţimea de
coloană:
}),(,:{ jiiiZF
zyFYyyS j , }1,...,1,0{ q (2.43)
Funcţia o putem reprezenta cu ajutorul tabelului submulţimilor de coloana (Tabelul 2.13).
Menţionăm că YSq
Z
Fj
1
0 pentru orice j. Multe dintre teoremele anterioare valabile pentru
funcţiile booleene pot fi generalizate şi pentru funcţii q-valente. În Capitolul 3 este elaborat un
sistem de criptare care funcţionează în baza acestor funcţii.
Tabelul 2.13. Tabelului submulţimilor de coloană ale unei funcţii q-valente
0z ... jz ... pz
0F 00
ZFS ... Zj
FS 0 ... pZFS 0
... ...
F 0ZFS ... jZ
FS ... pZ
FS
...
1qF 01
ZF qS ... j
qZF
S 1 ... ZpF qS 1
87
Exemplul 2.6. De reprezentat prin tabelul submulţimilor de coloană funcţia ),,( 321 xxxF din
logica 3-valentă, definită prin intermediul Tabelului 2.14
Tabelul 2.14. Funcţia 3-valentă ),,( 321 xxxF din Exemplul 2.3
1x 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2
2x 0 0 0 1 1 1 2 2 2 0 0 0 1 1 1 2 2 2 0 0 0 1 1 1 2 2 2
3x 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2
),,( 321 xxxF 1 2 2 1 0 0 1 2 1 0 0 0 1 1 2 2 2 0 0 1 2 0 1 1 0 2 1
Soluţie. În acest caz }2,1,0{ . Considerăm 2 . Atunci },{~211 xxX , iar }{~
32 xX .
Mulţimile de stări ternare sunt
},,,,,,,,{ 876543210 yyyyyyyyyY ={00, 01, 02, 10, 11, 12, 20, 21, 22}
şi
Z= },,{ 210 zzz ={0,1,2,}.
Tabelul 2.15. Reprezentarea matricei 3-dimensionale referitoare la Exemplu 2.6
iz
iy 1x 2x 0 1 2
0
1
2
3
4
5
6
7
8
0
0
0
1
1
1
2
2
2
0
1
2
0
1
2
0
1
2
1
1
1
0
1
2
0
0
0
2
0
2
0
1
2
1
1
2
2
0
1
0
2
0
2
1
1
În conformitate cu Tabelul 2.14 construim matricea 3-dimensională reprezentată în
Tabelul 2.15. În baza acestei matrice şi în conformitate cu definiţia submulţimii de coloană
construim tabelul submulţimilor de coloană (Tabelul 2.16). În coloanele pentru respective ale lui
iy şi j
z din Tabelul 2.16 sunt indicaţi numai indicii elementelor.
88
Tabelul 2.16. Tabelul submulţimilor de coloană ale funcţii ),,( 321 xxxF din Exemplul 2.6
0z 1z 2z
0F 3,6,7,8 1,3 1,3,5 1F 0,1,2,4 4,6,7 2,7,8 2F 5 0,2,5,8 0,4,6
2.4. Generarea numerelor prime.
În scopuri criptogarfice se utlizează numerele prime mari care sunt găsite cu ajutorul
testelor probabilistice de primalitate.
Unul dintre astfel de teste este testul Fermat [64], [68], [85] care are la bază mica teoremă
Femat: pentru n >1 se alege a >1 şi se calculează 1na mod n, dacă rezultatul este diferit de 1,
atunci numărul n este compus, în caz contrar n este considerat număr pseudoprim. Acest test însă
poate considera un număr compus ca fiind prim (în special numerele Carmichael, care sunt
compuse iar testul Fermat le consideră prime indiferent de numărul de iteraţii). Probabilitatea
erorii în testul Fermat este de ,t unde t reprezintă numărul de iteraţii ale testului, nn)( ,
unde (n) este funcţia Euler. Se recomandă de efectuat circa 50 de iteraţii în realizarea acestui
test. În prezent testul Fermat în forma sa originală nu se mai foloseşte nicăieri, el nu are un
control al erorii şi nu se foloseşte în practică deoarece există alte teste mai bune, dar poate fi
utilizat în fazele incipiente la verificarea primalităţii unor numere foarte mari.
Testul Solovay–Strassen [68], [85], [100] este un alt test de primalitate şi se bazează pe
diferenţa dintre simbolurile Jacoby şi Legendre, aceste simboluri pentru numerele prime n fiind
identice. Probabilitatea erorii în testul Fermat este de ,t unde t reprezintă numărul de iteraţii ale
testului, .21
2)(
nn
În scopul utilizării acestui test în criptografie este necesar de a lua o
valoare suficient de mare a lui t, aproape de 100. În acest caz şansa de a obţine un număr compus
este atât de mică încât putem aplica aceste numere în scopuri criptografice. De menţionat că
acest algoritm numerele Carmichael le determină ca compuse.
Un test mai performant este testul Miller-Rabin [68], [75], [85], [87], [88] cel mai utilizat
test de generare a numerelor pseudoprime pentru algoritmii de criptare. De obicei pentru
verificarea unui număr prim testul Miller-Rabin este necesară o singură iteraţie, dar numărul
recomandabil de iteraţii este 5. Probabilitatea erorii în testul Miller-Rabin este considerabil mai
89
mică decât în primele două teste şi la o iteraţie ea este .41
4)(
nn
Adică limita de sus a erorii
la singură iteraţie este de 2 ori mai mică decât la testul Solovay–Strassen şi de 4 ori mai mică
decât la testul Fermat. Astfel testul Miller-Rabin este mai eficient decât celelalte astfel de teste.
Cu toate că testul Miller-Rabin este considerat suficient de bun pentru generarea
numerelor prime aplicate în criptografie, există o foarte mică probabilitate ca acest test să
genereze un număr compus. Testele deterministe însă generează în mod obligatoriu numere
prime.
Revenind la Teorema 2.5, trebuie de menţionat că condiţiile din această teoremă sunt
doar suficiente. Am putea modifica unele dintre aceste condiţii pentru a transforma matricea
(2.4). Fie că condiţia (2.13) nu se îndeplineşte, dar are loc condiţia nk [33]. Consideram un
vector ))(),...,(,,...,,( 11,3,22,1*
cn sRsRRRRR
unde ji XXji RRji ,,, şi )( isR este o matrice care
se obţine din matricea (2.12) prin substituţia fiecărui element cu }1,...,1,0{ msi , adică
ii
ii
i
ss
sssR
)( . (2.44)
Teorema 2.17. Fie
)(RA
şi ** RA
iar njja ...1, *
...1 njja – două elemente arbitrare ale matricelor respective. Atunci
smaa cjjjj nn
...*
... 11, unde (2.45)
ccc smsmss ...2
21
1 (2.46)
Demonstraţie. Elementele matricelor A şi *A sunt numere întregi nenegative reprezentate în
baza m. Fie că njj na ...21...1
, unde }.1,...,2,1,0{ mi Atunci
nnn
jj mman
...22
11...1
şi
c
cccn
cncnjj smsmsmmman
...... 22
11
22
11
*...1
smasmsmsmmm cjjc
ccn
nncn
...
22
11
22
11 1
...)...( ,
unde ccc smsmss ...2
21
1 .
Teorema este demonstrată.
Consecinţa 1. Coloanele şi liniile matricei *A sunt progresii aritmetice cu raţiile respectiv egale
cu cm şi .1cm
90
Într-adevăr, conform structurii matricei date, pentru coloane avem
c
jjjjjjcc
jjjc
jjj maamsmasmannnn )()()( ......1......)1( 21212121
.
Pentru linii se obţine:
.)()()( 1...1......1...
*...
*1... 21212121221
cc
jjjjjjcc
jjjc
jjjjjjjjj mmmaamsmasmaaannnnnn
Consecinţa 2. Dacă iKs din matricea A în condiţiile (2.9) – (2.12) atunci toate elementele
*...1 njja din matricea *A aparţin liniei iK a matricei (n+c)-dimensionale în aceleaşi condiţii (2.9) –
(2.12) şi în care n este substitut prin n +c.
Într-adevăr, se ştie [16] că dacă ji KK , , atunci mjiK mod)()( iar
mjiK mod)( . Fie s – un element al matricei A şi iKs . Deoarece 0Km , atunci
ic
jj Ksman
)( ...1 pentru orice
nJja ...1. Prin urmare ijj Ka
n*
...1.
Din această consecinţă rezultă că dacă s aparţine unei linii care nu conţine numere prime
atunci matricea *A este compusă numai din numere compuse. Matricea *A poate să conţină
numere prime numai în cazul în care iKs şi (i,m)=1. Constatăm de asemenea că dacă iKs
atunci ic
jj Ksman
)( ...1 pentru orice c. Prin urmare, pentru obţinerea intervalelor de numere
cu anumite proprietăţi de la linia iK putem admite pentru c valori arbitrare. Modificând valorile
parametrilor c si s putem modifica şi elementele matricelor .*A Să revenim la matricea (2.5)
pentru care m=6 iar n=3. Această matrice conţine 47 de numere prime din cele 216. Dacă
considerăm s=13 şi k =2 atunci matricea *A conţine 85 de numere prime din acelaşi număr total
de 216. În mediul de calcul Mathematica a fost elaborat un program care construieşte matricele
A şi *A , determină numerele prime în aceste matrice şi numărul de cifre în fiecare dinte aceste
numere. În Anexa 2 este prezentat acest program cu un exemplu pentru cazul m = 6, n = 2 şi
c = 507. Programul a lucrat 0,2 sec. şi a depistat în matricea *A trei numere prime: unul de 2
cifre şi altele două a câte 392 de cifre.
Teorema 2.18. Fie
),,...,,( 1,3,22,1 nRRRR
),...,,,),(),...,(( 1,3,22,11*
nc RRRsRsRR
)(RA
şi ).( ** RA
Atunci n
jjjJ msaann
...*
... 11, (2.47)
unde
....22
11 c
cc smsmss
91
Demonstraţie. Fie njj na ...21...1
, unde }1,...,2,1,0{ mi . Atunci, în conformitate cu
transformarea avem:
...)...(............ 11
11
11
112121
*...1
nc
cnn
nnc
ncncjj msmsmmmsmssssa
n
,...1
njjn msan
ce implică ....22
11 c
cc smsmss
Consecinţa 1. Coloanele şi liniile matricei *A sunt progresii aritmetice cu raţiile 1 şi m respectiv.
Consecinţa 2. Dacă ijj Kan...1
atunci ijj Kan*
...1.
Într-adevăr, dacă 0Km atunci 0Kms n . Deoarece ijj Kan...1
obţinem
in
jj Kmsan
...1, adică ijj Ka
n*
...1.
Una dintre problemele de ordin superior din secolul informaticii este problema protecţiei
informaţiei, lupta contra spărgătorilor sistemelor de criptare. Un rol important în soluţionarea
acestei probleme o au numerele prime mari care stau la baza elaborării unor sisteme de criptare
[64]. Problema descifrării mesajelor devine foarte complicată în cazul în care numerele indicate
sunt mari (conţin sute sau mii de cifre zecimale), deoarece ea este relaţionată cu problema
factorizării numerelor mari. Cu cat mai mari sunt aceste numere cu atât mai dificilă devine
problema spargerii cifrului bazat pe utilizarea numerelor prime. Majoritatea metodelor de
generare a numerelor mari prime sunt probabilistice [1] şi, din această cauză, nu totdeauna pot
face faţă cerinţelor utilizatorilor. Aşadar, apare problema elaborării metodelor non-probabilistice
(metode deterministe) de generare a numerelor mari prime de o formă generală.
După cum s-a menţionat mai sus, dacă (r,m)=1 (r şi m sunt reciproc prime) atunci linia Kr
conţine un număr infinit de numere prime. Aceste numere au forma
N=bm+r, b=0, 1, 2,..., mn–1. (2.48)
Elementele liniei Kr formează o progresie aritmetică cu primul termen egal cu r şi cu raţia
m. Linia K1 conţine un număr infinit de numere prime pentru orice valoare a lui m. Structura
matricei este invariantă faţă de valorile lui m şi n [20]. Pe linia K1 putem obţine numere prime
oricât de mari. Pentru r =1 din (2.48) obţinem
N–1=bm . (2.49)
Conform criteriului lui Lucas-Lehmer [64], [75] numărul N este prim daca:
)(mod1: 1 Naa N şi ),(mod1:1
Nac cN
(2.50)
unde c este divizor prim al lui N–1.
Din (2.49) si (2.50) rezultă că N–1 trebuie să fie factorizat. Fie s
spppm ...2121 , k
kqqqb ...2121 (2.51)
92
Atunci
N–1= sksk pppqqq ...... 2121
2121 (2.52)
În mediul de calcul Mathematica au fost elaborat programe, care având valorile date ale
lui iip (i=1, …, s) determină pentru care valori ale lui j
jq ( j=1, …, k) numărul N este prim. Un
program care construieşte numere prime cu un număr determinat de cifre este prezentat în Anexa
2. Este dat un exemplu de lucru în care generatorul “BUZGUCIBI PRIM 1” în 2,8 sec. a
construit 3 numere prime de 354, 353 şi de 354 cifre. Generatorul este compus din trei module.
Primul modul al programei determină numerele prime ip şi puterile lor i cu condiţia ca
p să aibă un număr dat c de cifre zecimale. Numerele ip se aleg dintr-o mulţime P de numere
prime cunoscute, iar exponenţii i sunt funcţii de argumente întregi nenegative in ( )( ii n ).
Al doilea modul determină numerele jq şi puterile lor j cu condiţia că m are forma
determinată de primul modul. Pe linia 1K a matricei A modulul caută numărul N cu valorile lui
m şi b determinate. În rezultat se obţine numărul factorizat în formă canonică
N–1= sksk ppqq ...... 11
11 ,
ce ne permite uşor să aplicăm criteriul lui Lucas-Lehmer de primalitate a numărului N, ceea ce se
îndeplineşte în modulul al treilea. Pentru determinarea numărului N este suficient să introducem
în generator un singur parametru – numărul c de cifre zecimale pe care trebuie să le conţină acest
număr.
Generatorul poate construi şi o mulţime *N de numere prime cu numărul dat de cifre
zecimale. Fiecare modul în parte poate fi folosit pentru soluţionarea problemelor pentru care este
destinat. În Anexa 2 este prezentat modulul al treilea “TESTER DE NUMERE PRIME
«BUZGUCIBI TEST»” care a testat la un număr de 3018 cifre zecimale timp de 13,6 sec. pentru
care descompunerea lui N–1 în factori conţine trei numere prime cu 1004 cifre zecimale fiecare.
Pentru 1286243 m (al 28-lea număr prim Mersenne [20]) se obţine numărul prim
N= 1)12(453132 86243 , care conţine 25966 de cifre zecimale. Investigaţiile arată că pentru
obţinerea unui număr prim cu un număr de cifre mai mare ca 10000000 am putea folosi un
număr m de forma ,)....21( 17272054 pppm unde ip este al i-lea număr prim Mersenne. Cel
mai mare număr prim construit cu acest generator este numărul
93
N = 6076·(797512048017273358771·793207819539153918901·790748260408799953261·
·787673811495857496211·787058921713269004801·775990905626676159421·
·765537779322671805451·760618661061963874171·758773991714198399941·
·755699542801255942891·754469763236078960071·736637959541012709181)130+1,
care conţine 32589 cifre zecimale.
Matricele multidimensionale pot fi aplicate de asemenea la factorizarea numerelor de
forma 1ia . Pentru a = 2 şi i – număr prim avem aşa numitele numere Mersenne [20] . Ele pot
fi atât prime cât şi compuse. Cel mai mare număr prim Mersenne cunoscut în prezent este
numărul 1243112609 care conţine 12978189 cifre zecimale. A fost descoperit la 23.08.2008 în
cadrul proiectului GIMPS (Great Internet Mersenne Prime Search). În total sunt cunoscute doar
47 numere prime Mersenne. Numere compuse Mersenne sunt mult mai multe. Pentru astfel de
numere apare problema factorizării lor. Aceste numere le putem căuta pe linia 1K . Este elaborată
o programa în mediul de calcul Mathematica care construieşte numere compuse Mersenne şi în
acelaşi timp găseşte un divizor prim al acestui număr [20]. Cel mai mare număr Mersenne
compus găsit de aceasta programă este numărul 12 p , unde
p =375662093344890464881445680922948330514227905416290750436039035193113427960
02563317961928227247467514201588721186924893262288479372404158434263818462065
33709297018957433725284154692096039964739360811191607181481220358909313084517
19609498867813426976014647805530184630477159733866963269642334825861866906474
98417876722482308474728847448834198727492857350730001814074054395386577331967
42459478128659636386492058066281959601200721692299694744825286559153755776722
86548912154147055591112766026414615089316423169849566512856572461922842660864
53530055308127171898542626967064306829748306299659537928642062378119553961547
18392291715372804009352110292082457271811311597136633337146896762908153186751
92145889526838878199852726233520193989760157276653077739577411643650600839089
31250128185602087151549765139791238422988511958507121831373840715454168939282
50434822872548348979502943763622511181338463862168552261151839528701458852800
80373253203512894219098076914576581640321158512789744937640515640969096392544
78507218537346290382647945537653532393918686640643071936605435920613489508262
5943166067763036796988950518528130951459622923007,
iar un divizor prim al acestui număr este
94
d = 01059349351824743810313089476717328822764648666065200697662456308981484736
04101308739085163595948022722541953899079829219661566995846653494822109539304
53934875230331893960454647507353663943582977297906571490369952574254900935227
51375198188501483161623436488848295408763455574187141231427735721378987050359
97468602755971693559566155918134717963988571761168002902518487032618523731147
87935165005855418218387292906051135361921154707679511591720458494646009242756
58478259446635288945780425642263384142906277071759306420570515939076548257383
25648088493003475037668203147302890927597290079455260685827299804991286338475
49427666744596486414963376467331931634898098555418613339435034820653045098803
07433423242942205119764361973632310383616251642644924383323858629840961342542
90000205096963339442479624223665981476781619133611394930198145144726670302852
00695716596077358367204710021796017890141542179469683617842943245922334164481
28597205125620630750556923063322530624513853620463591900224825025550554228071
65611549659754064612236712860245651830269898625028915098568697472981583213220
15090657084208588751823208296450095223353966768113,
care conţine 1126 cifre zecimale.
Menţionăm că până în prezent nu se cunoaşte nici un divizor al numerelor compuse
Mersenne 12,12,12,12 1061997809751 .
95
2.5. Concluzii la capitolul 2
Capitolul curent conţine partea teoretică necesară pentru elaborarea algoritmilor de
criptare, descrişi în Capitolul.
Teoremele din 2.4 permit sa investigam repartizarea numerelor prime pe diferite intervale
ale liniilor matricei multidimensionale.
Faptul, că generatoarele elaborate construiesc rapid numere mari prime cu proprietăţi
concrete, permite sa perfecţionăm sistemele existente de criptare bazate pe numere prime. Două
sisteme de acest fel sunt propuse in capitolul următor. Un sistem este bazat pe numere mari
prime, iar altul – pe numere prime şi complexitatea problemei determinării rădăcinilor
polinoamelor de grad superior.
Odată cu creşterea lungimilor cheilor brusc descreşte viteza prelucrării informaţiei.
Problema poate fi soluţionată prin substituirea operaţiilor aritmetice cu numere mari prin operaţii
logice asupra mulţimilor de funcţii booleene reprezentate prin matrice multidimensionale.
Teoremele cuprinse în 2.2 constituie baza teoretica a sistemelor de criptare bazate pe funcţii
booleene. Una din aceste sisteme este prezentata in capitolul următor.
Investigaţiile în domeniul aplicaţiilor funcţiilor din logica q-valentă în sisteme de criptare
a informaţiei se afla la început de cale. Considerăm că aceste funcţii au un viitor promiţător în
aplicarea lor la sistemele de criptare, deoarece anume ele permit reprezentarea sistemelor de mari
dimensiuni prin mulţimi de relaţii [18] cu care ne întâlnim tot mai des în soluţionarea
problemelor care necesită o prelucrare rapidă a informaţiei. În următorul capitol este prezentată
un sistem de criptare care utilizează aceste funcţii.
Rezultatele investigaţiilor făcute în 2.3 pot servi ca bază teoretică pentru elaborarea
sistemelor de criptare cu chei publice variabile care uşor pot fi transmise împreună cu mesajul
criptat. Rezistenţa spargerii sistemului este asigurată de complexitatea mare a problemei
determinării funcţiei după unele fragmente ale derivatelor parţiale ale ei [23]. Rezultatele
indicate pot fi aplicate şi la soluţionarea altor probleme, cum ar fi problema izomorfismului
grafurilor şi a sistemelor de grafuri [17], [19], problema colorării vârfurilor grafului, problema
minimizării funcţiilor booleene şi altele. Reprezentarea funcţiilor prin submulţimi de coloană
face posibil calculul fragmentelor derivatelor funcţiilor de zeci, sute, ba chiar si mii de variabile.
96
3. SISTEME DE CRIPTARE BAZATE PE MULŢIMI DE RELAŢII MULTI-ARE
În zilele noastre este inadmisibilă operarea cu date secrete fără asigurare de utilizarea lor
de către răuvoitori în caz de interceptare. Orice ţară are un algoritm standardizat pentru criptarea
datelor, orice companie care se respectă foloseşte unul dintre sistemele de criptare pentru
operarea cu date confidenţiale, majoritatea aplicaţiilor care operează cu date mai mult sau mai
puţin confidenţiale au incorporate şi sisteme de criptare.
Problemele legate de sistemele de criptare au fost cercetate în literatura de specialitate şi
monografii, în particular în ([38], [43], [90], [91], [96], [97], [98], [99], [128]).
În acest capitolul, ţinând cont de sursele bibliografice studiate şi având la bază cercetările
efectuate în capitolul 2, au fost obţinute rezultate de bază, care includ elaborarea, descrierea şi
analiza a patru algoritmi de cripatre noi: Cripto 1 [23], Cripto 2 [108], [117], Cripto 3 [107],
[109] şi Cripto 4 [109].
3.1. Sistem de criptare cu set de chei bazat pe numere prime
Pe numerele prime sunt bazate unele sisteme de criptare, în particular – sistemul RSA
[90]. Acest sistem reprezintă un algoritm criptografic cu chei publice, primul algoritm utilizat
atât pentru criptare, cât şi pentru semnătura electronică. Rezistenţa sa criptografică se bazează pe
dificultatea problemei factorizării numerelor întregi mari. Acest algoritm funcţionează în baza
unei perechi de chei legate matematic între ele: o cheie publică, cunoscută de toată lumea, şi una
secretă (cheia privată), cunoscută numai de către deţinătorul acesteia. Generarea cheilor se face
în felul următor:
1. se generează două numere prime, de preferinţă mari, p şi q;
2. se calculează produsul acestor numere qpn ;
3. se calculează funcţia lui Euler [64], [75], [100] )1()1()( qpn .
4. se alege un întreg aleator e, e1 astfel încât e si să fie reciproc prime, adică
.1),( e Pentru sporirea vitezei de calcul, numărul e se alege astfel încât reprezentarea
lui binară să conţină cât mai puţine unităţi. Perechea (n, e) este cheia publică.
5. se calculează un număr întreg d cu proprietatea
)(mod1 ned (3.1)
Pentru calcularea lui d poate fi aplicat algoritmul Euclid extins [75]. Perechea (n, d ) este
cheia secretă.
Notam cu m mesajul clar, iar cu c – mesajul cifrat şi calculam
)(modnmc e (3.2)
97
Mesajul clar este restabilit prin formula
)(modncm d (3.3)
Cheile de criptare RSA sigure în prezent au lungimi de peste 2048 de biţi.
Menţionăm că rezistenţa criptografică a sistemului dat poate fi mărită numai prin
creşterea numerelor p si q, deci şi a cheii publice n. Ca rezultat descreşte viteza de prelucrare a
informaţiei.
Pentru generarea numerelor prime mari p si q sunt aplicate diverse teste de primalitate:
Fermat [64], [68], [85], Solovay–Strassen [68], [85], [100], Miller-Rabin [68], [75], [85], [87],
[88] – cel mai utilizat test. Toate aceste teste sunt probabilistice, adică generează numere prime
cu o probabilitate diferită de 1, dar foarte aproape de unitate.
Cu toate că testul Miller-Rabin este considerat suficient de bun pentru generarea numerelor
prime aplicate în criptografie, există o foarte mică probabilitate ca acest test să genereze un număr
compus, ceea ce implică urmări imprevizibile pentru utilizatorii algoritmului RSA.
În baza generatorului de numere prime descris în Capitolul 2 am perfecţionat sistemul
RSA în scopul sporirii rezistenţei sale criptografice şi a stopării descreşterii vitezei de
funcţionare a acestui algoritm prin înlocuirea unei singuri perechi de chei cu un cortegiu de
perechi de chei de lungime necesară [23]. Fiecare simbol al mesajului (până la simbolul ce are
numărul de ordine r) este cifrat cu cheie diferită, apoi se revine la începutul cortegiului de chei şi
se reia criptarea în continuare repetând procesul.
Astfel este realizat un algoritm de criptare, numit Cripto1 care conţine:
a) Generatorul de chei, care construieşte trei cortegii de numere
),...,,( 21 reeee , (3.4)
),...,,( 21 rdddd , (3.5)
şi
),...,,( 21 rnnnn , (3.6)
unde iii qpn , ii qp , şi care verifică condiţia
,...2,1,)1)(1(1,1
ke
qpkdrii
iii (3.7)
Perechile de numere prime i
p şi iq se construiesc cu condiţia că descompunerile numerelor
1ip si 1iq în produs de factori primi să conţină numere mari prime. Aceasta asigură o
rezistenţa criptografica mare [84]. Numerele ie se construiesc cu condiţia că reprezentarea lor
binara să conţină un număr minim de unităţi. Aceasta asigură o viteză mai mare de calcul la
98
criptarea informaţiei. Generatorul de chei „BUZGUCIBI CRIPTO GEN RSA” timp de 1,6 sec. a
generat 5 chei este prezentat în Anexa 2;
b) Codificatorul, care având cortegiul de numere ),...,,( 21 tmmmm , ce reprezintă
codificarea numerică a mesajului într-un sistem oarecare de codificare a caracterelor (de exemplu
ASCII), construieşte, cu ajutorul cheilor publice ),( ii en un alt cortegiu de numere
),...,,( 21 tcccc ,
aplicând formula
)(mod ieii nmc i , .,1 ti (3.8)
Codificatorul „BUZGUCIBI CRIPTO COD RSA” care construieşte cortegiul c al
mesajului este prezentat în Anexa 2.
c) Decodificatorul, care având cortegiile c , d
şi n construieşte cortegiul
),...,,( 21 tmmmm ,
prin aplicarea formulei
)(mod idii ncm i (3.9)
Decodificatorul numit ”BUZGUCIBI CRIPTO DEC RSA”, care decodifică criptograma
primită este prezentat în Anexa 2.
Timpul de decriptare este mult mai mare ca cel de criptare (acelaşi lucru se întâmplă şi
la RSA). Aceasta se datorează faptului că componentele id ale cortegiului d sunt mult mai mari
decât componentele ie ale cortegiului e . Odată cu creşterea lungimii cheilor diferenţa observată
este considerabila, însă aceasta este valabil şi pentru algoritmul RSA obişnuit. Luând în
consideraţie principiul de funcţionare al algoritmului Cripto 1, timpul de lucru al său este acelaşi
ca şi al algoritmului RSA, însă rezistenţa criptografică a algoritmului propus este de cel puţin r
ori mai mare decât rezistenţa algoritmului RSA, deoarece pentru spargerea lui trebuie să aflăm r
chei în loc de o singură cheie.
Astfel, avantajul algoritmului Cripto 1 faţă de algoritmul RSA constă în următoarele:
având chei de aceeaşi lungime ca la algoritmul RSA rezistenţa este sporită iar
timpul de lucru este acelaşi;
având chei de lungime mai mică decât la RSA dar în cantitate mai mare se măreşte
viteza de lucru al algoritmului, rezistenţa fiind nu mai mică ca la RSA.
Metodele de spargere pentru Cripto 1 sunt aceleaşi ca şi pentru RSA. La momentul actual se cunoaşte o singură metodă de spargere – factorizarea cheii publice n care având o mărime de 2048 de biţi este considerată sigură. Cu toate acestea pentru siguranţa documentelor secrete cheia publică în RSA trebuie să aibă o mărime de 4096 de biţi şi deja timpul de criptare şi mai ales cel
99
de decriptare creşte considerabil. În acest context algoritmul de criptare Cripto 1 poate fi o soluţie pentru evitarea creşterii ineluctabile a timpului de execuţie a RSA odată cu mărirea lungimii cheii.
În Tabelul 3.1 şi în Figurile 3.1 – 3.4 sunt prezentate date comparative între algoritmul RSA şi algoritmul Cripto1 cu o mărime a cheii de 2048 biţi (în Anexa 1 este expus un set mai complet de diagrame). Testările au fost efectuate pentru un set de 5 chei ale algoritmului Cripto 1 la un calculator cu procesor AMD Phenom-II cu 3 nuclee, 2.8 GHz, 2 GB RAM. Algoritmii incluşi în tabel au fost testaţi pe aceleaşi texte, ele având lungimile specificate în tabele. Adică algoritmii au fost testaţi pe texte reale de lungimile menţionate. Acelaşi principiu este aplicat şi la testările efectuate în compartimentele ce urmează. Pentru estimarea algoritmului RSA este utilizat algoritmul Cripto 1 cu o singură cheie.
Tabelul 3.1. Date statistice de lucru pentru algoritmii de criptare RSA şi Cripto1
Sistemul de criptare Numărul de simboluri
în mesaj Timpul pentru
criptare Timpul pentru
decriptare RSA 0,008 3,74
Cripto 1 100
0,03 3,76 RSA 0,01 7,47
Cripto 1 200
0,03 7,52 RSA 0,013 11,22
Cripto 1 300
0,03 11,25 RSA 0,016 14,96
Cripto 1 400
0,03 14,97 RSA 0,021 18,69
Cripto 1 500
0,05 18,80 RSA 0,03 37,36
Cripto 1 1 000
0,06 37,53 RSA 0,11 74,68
Cripto 1 2 000
0,12 75,08 RSA 0,16 112,05
Cripto 1 3 000
0,20 112,76 RSA 0,36 186,90
Cripto 1 5 000
0,39 187,71 RSA 1,15 373,93
Cripto 1 10 000
1,18 376,21 RSA 29,20 1901,36
Cripto 1 50 000
29,87, 1907,32 RSA
Cripto 1 100 000
100
Criptare 1000 - 10 000
0
0,2
0,4
0,6
0,8
1
1,2
1,4
1000 2000 3000 5000 10000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. 3.1. Diagrama comparativă RSA–Cripto 1 pentru mesaje de 1000-10000 simboluri
Decriptare 1000 - 10 000
050
100150200250300350400
1000 2000 3000 5000 10000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. 3.2. Diagrama comparativă RSA–Cripto 1 pentru mesaje de 1000-10000 simboluri
Criptare 1000 - 50 000
0
5
10
15
20
25
30
35
1000 2000 3000 5000 10000 50000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
101
Fig. 3.3. Diagrama comparativă RSA–Cripto 1 pentru mesaje de 1000-50000 simboluri
Decriptare 1000 - 50 000
0
500
1000
1500
2000
2500
1000 2000 3000 5000 10000 50000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. 3.4. Diagrama comparativă RSA–Cripto 1 pentru mesaje de 1000-50000 simboluri
Pentru mesajele cu un număr de simboluri de până la 1000 criptarea este mai rapidă la
RSA deoarece în Cripto1 se memorizează un set din 5 perechi de chei şi în rezultat obţinem o
diferenţă de 0,01-0,02 sec. Aceasta este şi diferenţa de timp la criptarea şi decriptarea mesajelor
de lungime mai mare, însă în raport cu timpul total de criptare şi decriptare al acestor mesaje
diferenţa dată este neglijabilă.
Cu algoritmul Cripto 1 au mai fost efectuate multiple testări cu aceleaşi texte, însă cu
seturi de un număr variat de chei, mărimea lor rămânând aceeaşi (2048 biţi). Aceste testări au
confirmat că numărul de chei în set practic nu influenţează viteza de lucru al algoritmului,
diferenţa de timp la seturi de lungime diferită fiind de ordinul sutimilor de secundă. Această
diferenţă este cauzată numai de operarea cu locuri diferite ale memoriei calculatorului şi poate fi
neglijată, mai ales pentru procesul de deciptare, unde timpul este esenţial mai mare ca la cripatre.
Numerele prime mari aplicate la elaborarea sistemelor de criptare cu cheie publică
implică un timp suficient de mare pentru criptare şi decriptare, iar în cazul RSA decriptarea are
loc între-un interval de timp şi mai mare decât criptarea.
În acest context este actuală întrebarea: cât de eficienţi sunt algoritmii simetrici de
criptare care funcţionează în baza numerelor prime mari? În această direcţie se propune de
elaborat un sistem de criptare în care să fie utilizate numerele prime mari în combinare cu
matricele multidimensionale
102
3.2. Sistem simetric de criptare bazat pe dezvoltarea polinomială a numerelor
În paragraful dat este elaborat un sistem simetric de criptare Cripto 2 însă care la fel ca
RSA şi Cripto 1 funcţionează în baza numerelor prime mari, a matricelor multidimensionale care
reprezintă mulţimile de relaţii multi-are şi a dezvoltării polinomiale a numerelor.
Să examinăm un caz particular al relaţiilor pe mulţimi analizate în Capitolul 2. Fie o
familie de mulţimi }...,,,{ 21 nXXXX unde }...,,,{ 21 iiiii xxxX , ni ,1 şi o mulţime
},...,{ 1 r cu elemente arbitrare (în cazul nostru – numere întregi). Pe această familie sunt
definite k relaţii
jdjj XXj RR ....1
,,1,2( kjnd j }),...,,2,1{,...,, 21 njjjjd
ca submulţimi ale produselor carteziene jdjjj XXX ...
21. Matricele acestor relaţii sunt
matrice jd - dimensionale cu elemente din mulţimea . Notăm cu R cortegiul cu componentele
jR , adică ).,...,...,,( 1 kj RRRR Acestui cortegiu îi punem în corespondenţă o matrice
n-dimensională
)(RAR , (3.10)
elementele căreia sunt notate cu nsssa ......1 . Să explicăm obţinerea acestor elemente. Construim
produsul cartezian
},...,{...},...,{... 111121 1 nnnn xxxxXXX ,
care, evident conţine nu ...1 elemente. Cu aceste elemente compunem o matrice
bidimensională cu u linii şi n coloane care corespunde familiei de mulţimi X (Figura 3.5, partea
stângă).
RA
u
i
1
n
n
n
nsss
n
n
xxx
xxx
rxxXXX
1
1
1
1
1111
1
ukuju
ikiji
kj
kj
rrr
rrr
rrrRRR
1
1
1111
1
Fig. 3.5. Reprezentarea matricei n-dimensionale care corespunde cortegiului R
Compunem o altă matrice bidimensională |||| ijr cu u linii şi k coloane care corespunde
relaţiilor din R (Figura 3.5, partea dreaptă), unde djj ssij rr ...1
cu elementele djj ss ...,,
1 selectate
103
în linia i pe locurile djj ...,,1 . Aceste locuri indică mulţimile djj XX ...,,
1 pe care este definită
relaţia jR .
Pentru simplitate substituim elementele s
x cu indicele respectiv s aşa cum e arătat în
Figura 3.6. Liniile matricei din partea stângă în Figura 3.6 reprezintă indicii elementelor matricei
RA . Liniile matricei din partea dreaptă formează elementele matricei RA :
),,...,,...,( 1......1 ikijisss rrran
(3.11)
Cortegiului (3.11) i se asociază un număr ic în baza y care verifică condiţia ,max hy
rh ,1 :
ikjk
ijk
ii ryryrc ......11 =
k
j
jkij yr
1 , ui ,1 . (3.12)
Astfel obţinem cortegiul
),...,,...,( 1 ui cccc . (3.13)
RA
u
i
1
n
n
n
sss
XXX
1
1
1
111
ukuju
ikiji
kj
kj
rrr
rrr
rrrRRR
1
1
1111
1
u
i
c
c
cc
1
Fig. 3.6. Reprezentarea simplificată a matricei n-dimensionale ce corespunde cortegiului R
Astfel, prin transformarea (3.10), cortegiul c (3.12), (3.13) este pus în corespondenţă
cortegiului R . Transformarea inversă
)(1 cR (3.14)
în general este mult mai complicată [21], [23], [24], [110].
În unele cazuri particulare putem găsi coordonatele vectorului cortegiului R după
coordonatele cortegiului c (acest lucru a fost realizat la investigarea distribuţiei numerelor prime
în mulţimea numerelor naturale, în rezultat fiind elaborat un algoritm de generare a numerelor
prime).
Dacă transformarea (3.14) este dificilă, putem folosi acest lucru la elaborarea sistemelor
de criptare a informaţiei.
Fie că trebuie să cifrăm coordonatele cortegiului ),...,,( 21 tmmmm , care reprezintă
codificarea numerică a textului clar dat, în unul din sistemele de codificare dorite (fie ASCII).
Considerăm coordonatele acestui cortegiu ca fiind elemente ale mulţimii . În aşa caz aceste
104
coordonate trebuie sa fie elemente ale matricelor .jR Dacă coordonatele vectorului nu se repetă
conform unei legi determinate atunci toate matricele jRA trebuie să fie de ordinul n [110]. Fie că
bat (3.15)
Atunci matricea RA poate avea forma din Figura 3.7, unde an 2log , bk iar
coordonatele cortegiului c se calculează după formula
.,1,max,,1,1
)1( thyaiymc hijb
i
b
jjbii
(3.16)
Scrisă în formă desfăşurată această formulă are forma:
,
...
......
...
22)1(
11)1(
32
3221
3123
22
221
212
212
1111
abb
abab
abaa
bb
bb
b
bb
bb
b
bbb
mymymc
mymymcmymymc
mymymc
(3.17)
unde ayyy ,...,, 21 sunt chei private. În particular, se poate lucra şi cu o singură cheie privată y.
1R ... jR ... bR
a
i
1
ng
ng
ng
sss
xxx
1
1
1
111
abjbaba
ibjbibi
bj
bj
mmm
mmm
mmmRRR
)1(1)1(
)1(1)1(
1
1
a
i
c
c
cc
1
Fig. 3.7. O formă de reprezentare a matricei RA
Să analizăm egalităţile din (3.17). Spre exemplu, prima egalitate poate fi considerată ca o
ecuaţie liniară în raport cu necunoscutele bmm ,...,1 , cu coeficienţii nedeterminaţi
12
11
1 ,...,, yyy bb
şi termenul liber necunoscut 1cmb . Soluţiile în numere întregi ale acestei ecuaţii, pentru 1y
cunoscut şi care satisfac condiţiilor (3.17), se află uşor prin reprezentarea numărului 1c in baza
1y . Însă în cazul în care 1y este necunoscut soluţionarea este foarte dificilă.
105
Pe de alta parte, această egalitate poate fi considerată ca o ecuaţie algebrică de gradul b–1
în raport cu necunoscuta 1y şi cu coeficienţi nedeterminaţi, pentru care 1y este soluţie. Aceasta
înseamnă ca 1y poate fi căutat printre divizorii termenului liber bmc 1 , unde bm . Dând
valori lui bm şi factorizând termenul liber putem încerca să aflăm cheia 1y . Pentru ca această
încercare să aibă mai puţini sorţi de izbândă este necesar ca 1y să fie un număr mare prim.
Fie t este un număr compus de forma
r
rt ...2121 (3.18)
Ţinând cont de cele expuse mai sus alegem un factor (sau un produs de câţiva factori) i
i şi considerăm i
ib . Numărul a este egal cu produsul factorilor rămaşi. Dacă ,1r adică
11t şi 11 atunci reprezentăm 111 şi considerăm 1
1a , 2
1b . În cazul în care
11 , adică, atunci când numărul t este prim, adăugăm una sau câteva componente fictive ale
cortegiului m şi obţinem un alt număr t compus. Componentele fictive nu se descifrează de
decodificator. În mod analog aplicăm acest procedeu asupra tuturor egalităţilor din sistemul
(3.17).
În baza celor expuse a fost elaborat un sistem de criptare, numit Cripto 2, care este
alcătuit din:
generatorul de chei, care construieşte numerele mari prime ayy ,...,1 (cheile private) cu
ajutorul generatorului elaborat în teză, mărimea lor fiind în funcţie de cerinţele concrete
(securitatea sporită necesită chei mai mari, viteza mai mare de prelucrare a informaţiei cere chei
mai mici, volumul de informaţie la fel necesită diferite lungimi de chei, modul de funcţionare a
sistemului – dacă se utilizează a chei ele pot fi mai mici, dacă mai puţine sau una singură –
trebuie să fie mai mari etc., toate aceste cerinţe fiind interdependente);
codificatorul, care construieşte cortegiul c în baza coordonatelor cortegiului m , a
parametrilor a, b, t şi cheilor private ayy ,...,1 care la fel se criptează aplicând unul din sisteme
sigure de criptare;
decodificatorul, care construieşte cortegiul m în bază cortegiilor ),...,,...,( 1 ui cccc şi
),...,( 1 ayyy , decodifică cortegiul m şi imprimă textul decodificat, restabilind-ul după codurile
ASCII obţinute în m .
106
Descrierea algortimului Cripto2. Fie T un text arbitrar, ce conţine N caractere (inclusiv
spaţiul liber). Numărul N se numeşte lungime a textului T. Vom considera că Textul T este
reprezentat în codurile ASCII. Prin urmare, textul T poate fi privit ca un cortegiu numeric de
lungime N:
).,...,,...,( 1 Ni mmmT
Fie acest text trebuie criptat cu ajutorul unu set de chei Y. În aceste condiţii criptarea
textului T poate fi efectuată în confofrmitate cu următorul algoritm:
Pasul 1. Reprezentăm numărul N ca un produs de două numere N=a·b. În acest scope e suficient
de luat în calitate de a primul divizor mai mare decât unu al numărului N.
Pasul 2. Formăm matricea RA cu numărul de linii a şi numărul de coloane b. Elementele
matricei RA se calculează după formula:
.),( )1( jbiR mjiA
Această matrice conţine N elemente (N=a·b).
Pasul 3. Calculăm setul de chei
),,...,,( 21 lyyyY unde .al
Pentru acesta folosim generatorul de numere prime “BUZGUCIBI PRIM 1”.
Pasul 4. Pentru fiecare linie i a matricei A se calculează un număr ic în conformitate cu formula
(3.16).
Pasul 5. Stop. Cortegiul ),...,,...,( 1 ai cccC conţine textul iniţial T în varianta criptată.
Remarcă. Dacă numărul N este prim atunci la textul iniţial T adăugăm un simbol oarecale pentru
a obţine text de lungime, care nu este număr prim.
Din descrierea algoritmului Cripto 2, observăm că numărul de linii a şi numărul de
coloane b ale matricei RA sunt estimate prin O(N).
Pentru a găsi reprezentarea numărului N ca produs a două numere a şi b (N=a·b) e
suficient să alegem în calitate de a primul divizor al lui N. Pentru aceasta sunt necesare O(N)
operaţii.
Realizarea pasului 2 se face în timp constant O(1), şi nu poate depinde de lungimea N a
textului T. calcularea matricei RA , evident necesită O(N) operaţii (se calculează a·b elemente ale
matricei). Generarea unei chei se face prin intermediul algoritmului “BUZGUCIBI PRIM 1”,
complexitatea căruia nu depinjde de lungimea textului T. deci generarea unei chei se face în timp
constant O(1). Pentru criptarea textului, algoritmul Cripto 2 foloseşte un set de chei
),,...,,( 21 lyyyY ).(NOal Prin urmare, generarea celor l chei se face în timp O(N).
107
Menţionăm, că deoarece ,2a setul Y ar putea fi limitat la un număr fixat de chei, de
exemplu l = 2 (sau l = 3), ceea ce ar însemna că timpul necesar pentru generarea setului de chei
nu deăinde de N.
Pentru a obţine textul criptat, la pasul 5 se calculează cortegiul de numere
),...,,...,( 1 ai cccC , pentru care se folosesc O(N) operaţii. Astfel obţinem estimarea
complexităţii algoritmului Cripto 2.
Teorema 3.1. Algoritmul Cripto 2 rezolvă problema criptării unui text T de lungimea N în timp
O(N).
Sistemul este elaborat şi testat în mediul de calcul Mathematica. Unele date referitoare la
timpul de funcţionare a sistemului Cripto 2 în comparaţie cu sistemele RSA şi sistemul AES care
este la fel ca Cripto 2 un algoritm simetric, sunt indicate în Tabelul 3.2 şi în Figurile 3.8 – 3.11
(în Anexa 1 este prezentat un set mai larg de diagrame referitoare la aceste date). Pentru aceste
date comparative au fost aleşi algoritmii RSA şi AES, deoarece cheile sistemului Cripto 2 sunt
comparabile cu cele ale lui RSA (participă numere prime mari), iar AES este un sistem simetric
(ca şi Cripto 2) utilizat la momentul actual în calitate de standard naţional de criptare în SUA.
Pentru estimarea lui RSA a fost utilizat algoritmul Cripto 1 cu o singură cheie, iar algoritmul
AES este parte componentă a mediului Mathematica ca pachet adiţional.
Tabelul 3.2. Date statistice de lucru pentru algoritmii de criptare RSA, Cripto2 şi AES-256
Sistemul de criptare Numărul de
simboluri în mesaj Timpul pentru
criptare Timpul pentru
decriptare
RSA 0,008 3,74
Cripto 2 0,06 2,21 AES 256
100
0,03 0,03
RSA 0,01 7,47 Cripto 2 0,06 2,22
AES 256
200
0,04 0,05
RSA 0,013 11,22
Cripto 2 0,06 2,22
AES 256
300
0,08 0,08
RSA 0,016 14,96
Cripto 2 0,06 2,23
AES 256
400
0,09 0,09
108
RSA 0,021 18,69
Cripto 2 0,06 2,22
AES 256
500
0,13 0,13
RSA 0,03 37,36
Cripto 2 0,08 2,23
AES 256
1 000
0,22 0,23
RSA 0,11 74,68
Cripto 2 0,09 2,25
AES 256
2 000
0,45 0,45
RSA 0,16 112,05
Cripto 2 0,09 2,28
AES 256
3 000
0,64 0,70
RSA 0,36 186,90
Cripto 2 0,14 2,34
AES 256
5 000
1,09 1,15
RSA 1,15 373,93
Cripto 2 0,17 2,65
AES 256
10 000
2,20 2,29
RSA 29,20 1901,36
Cripto 2 0,70 11,61
AES 256
50 000
10,94 11,41
RSA
Cripto 2 1,54 39,22
AES 256
100 000
21,81 22,78
RSA
Cripto 2 4,57 169,37
AES 256
200 000
43,54 45,55
RSA
Cripto 2 9,95 440,20
AES 256
300 000
68,37 69,46
RSA
Cripto 2 10,08 1386,25
AES 256
500 000
109,01 114,02
109
Criptare 100 - 1 000
0
0,05
0,1
0,15
0,2
0,25
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. 3.8. Diagramă comparativă RSA–AES256–Cripto 2 pentru mesaje de 100-1000 simboluri
Decriptare 100 - 1 000
05
10152025303540
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. 3.9. Diagramă comparativă RSA–AES256–Cripto 2 pentru mesaje de 100-1000 simboluri
Criptare 1 000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 2
AES 256
110
Fig. 3.10. Diagramă comparativă AES256–Cripto 2 pentru mesaje de 1000-10000 simboluri
Decriptare 1000 - 10 000
0
0,5
1
1,5
2
2,5
3
1000 2000 3000 5000 10000
Lungimea mesajului (simb)
Tim
pul d
e lu
cru
(sec
.)
Cripto 2AES 256
Fig. 3.11. Diagramă comparativă AES256–Cripto 2 pentru mesaje de 1000-10000 simboluri
Testările date au fost efectuate la un calculator cu procesor AMD Phenom-II cu 3 nuclee,
2.8 GHz, 2 GB RAM.
Din tabelul 3.2 se observă că Cripto 2 în comparaţie cu RSA posedă un timp de criptare
mai bun, începând cu un anumit volum de informaţie ).200( V În cazul volumului mic de
informaţie ),2001( V cu toate că RSA este mai rapid, diferenţa de timp este nesemnificativă.
Rezultate impunătoare pentru Cipto 2 obţinem la un volum de .000100V În ce priveşte
decriptarea informaţiei, algoritmul Cripto 2 este întotdeauna mai rapid decât RSA.
Dacă să facem comparaţie cu algoritmul AES luând în consideraţie timpul total de
criptare şi decriptare, atunci pentru mesaje cu circa 5000 de caractere aceste două sisteme sunt
comparabile, iar pentru mesaje de volum ,00010000050 V Cripto 2 este mai rapid. În
celelalte cazuri AES are prioritate la viteza de execuţie. Aşadar Cripto 2 poate fi utilizat cu
succes pentru mesajele de volum ,00010000050 V întrecând la capitolul viteza de execuţie
ambii algoritmi – RSA şi AES.
Din acest tabel şi diagrame se mai observă că în general, productivitatea sistemului
Cripto 2 este mult mai mare decât la RSA (adică sistemul Cripto 2 este mai rapid şi poate opera
în mod eficient cu mesaje de volum mare de informaţie; de exemplu, sistemul RSA devine
impracticabil în cazul unor volume mari de informaţie), dar mai mică decât la AES. Aceasta se
explică prin principiile de funcţionare diferite ale acestor algoritmi, dar şi prin lungimi diferite a
cheilor. Algoritmul Cripto 2 pe care a fost efectuată testarea are a chei de lungime 192 biţi
fiecare, deci mărimea totală a cheii este de 192·a biţi. Însă numărul de chei poate varia (de la 1 la
a) iar viteza de lucru se modifică nesemnificativ (la fel ca la Cripto 1 în raport cu RSA), diferenţa
constând numai în timpul de criptare sau decriptare a acestor chei.
111
Un lucru important este că cheile în sistemul Cripto 2 se schimbă de la mesaj la mesaj,
ele fiind criptate prin intermediul algoritmului Cripto 1 (sau altui algoritm sigur – de exemplu
RSA care este adesea practicat în aceste scopuri), apoi alipite la cortegiul c şi transmise spre
adresant. Aici trebuie de menţionat că pentru criptarea cheilor se pot folosi diferite sisteme de
criptare practicate în prezent, iar rapiditatea acestor sisteme de asemena va influenţa viteza de
lucru al lui Cripto 2. La decriptare cheia criptată se selectează din cortegiul c , se decriptează şi
apoi se purcede la decriptarea criptogramei.
Pentru spargerea acestui sistem este necesar de rezolvat sistemul (3.17) în care cunoaştem
doar termenii din partea stângă a fiecărei ecuaţii cu coeficienţi nedeterminaţi. Termenul liber al
ecuaţiei polinomiale i din (3.17) nu este cunoscut, el fiind egal cu ci – mib, unde mib este codul
unui caracter din ASCII. Pentru a rezolva fiecare ecuaţie din (3.17) se poate încerca factorizarea
termenului liber pentru găsi eventualele rădăcini ale polinomului respectiv, însă datorită faptului
că coeficienţii sunt nedeterminaţi, acest lucru nu are sorţi de izbândă.
Cu toate că sistemele bazate pe numere prime mari sunt suficient de sigure ele nu pot
lucra cu un volum de informaţie la fel de mare precum alte sisteme (de exemplu AES), deoarece
necesită un timp de lucru semnificativ. În acest scop se pot folosi sisteme care funcţionează în
baza altor principii, o direcţie în acest sens fiind utilizarea funcţiilor booleene pentru care în
capitolul 2 au fost demonstrate o serie de proprietăţi utile în scopul dat.
3.3. Sistem de criptare bazat pe funcţii booleene
Funcţiile booleene şi proprietăţile lor sunt pe larg aplicate în criptografie. Operaţiile cu
funcţiile booleene sunt foarte rapide şi acest lucru permite elaborarea algoritmilor criptografici
cu viteză de lucru sporită. Un astfel de algoritm este propus în acest paragraf. Algoritmul este
bazat pe proprietăţi ale mulţimilor de relaţii multi-are, matricelor multidimensionale ca un
instrument de efectuare a operaţiilor cu funcţiile booleene şi reprezentarea funcţiilor booleene
prin submulţimi de coloană.
În Capitolul 2 au fost studiate funcţiile booleene şi demonstrate unele proprietăţi ale lor
care pot fi aplicate la elaborarea sistemelor de criptare în combinare cu matricele
multidimensionale.
Să consideram un caz particular pentru familia de mulţimi }...,,,{ 21 nXXXX ,
studiată de asemenea în capitolul 2, şi anume cazul în care
}.1,0{...21 nXXX
112
Notăm relaţiile definite pe aceste mulţimi cu
jdjj XXj MM ....1
,
unde ,,1,2( kjnd j }),...,,2,1{,...,, 21 njjjjd
obţinând astfel cortegiul
)...,,...,,( 1 kj MMMM
Acestui cortegiu îi punem în corespondenţă o matrice n-dimensională
),(MAM
cu ui ,0 , kj ,1 [107], [109] reprezentată în Figura 3.12. În această matrice
nXXj MM ....
iar
}1,0{... n
mmij .
Prin urmare, matricea dată reprezintă un sistem de k funcţii booleene de variabilele nxx ,...,1 .
Punem în corespondenţă acestei matrice un cortegiu de numere
utmmmm ti ),,...,,...,( 0 , .,0,21
timmk
j
jkiji
(3.19)
tn 2log , .maxlog2 imk (3.20)
MA
u
i
0
111
000
1
1
n
nxxx
ukuju
ikiji
kj
kj
mmm
mmm
mmmMMM
1
1
0001
1
u
i
m
m
mm
0
Fig. 3.12. Reprezentarea matricei MA
Prin analogie (Figura 3.13) construim o altă matrice DA căreia îi punem în corespondenţă
un cortegiu de numere d
utdddd ti ),,...,,...,( 0 , .,0,21
tiddk
j
jkiji
(3.21)
113
DA
u
i
0
111
000
1
1
n
nxxx
ukuju
ikiji
kj
kj
ddd
ddd
dddDDD
1
1
0001
1
u
i
d
d
dd
0
Fig. 3.13. Reprezentarea matricei DA
Cu aceste două matrice putem efectua operaţii logice cum ar fi ,DM AA ,DM AA
DM AA etc., obţinând în rezultat alte matrice de aceleaşi dimensiuni. Să analizăm, de exemplu,
operaţia (suma după modulul 2). Fie că CDM AAA . În acest caz ijijij dmc . Ţinând
cont de proprietăţile operaţii de adunare după modulul 2, obţinem:
.)()( MDDMDDM AAAAAAA
Aşadar
CDM AAA , .MDC AAA (3.22)
Din (3.22) rezultă că matricea DA poate servi în calitate de cheie privată pentru criptarea
şi decriptarea cortegiului m care reprezintă codul ASCII (sau oricare alt cod) al textului clar M
prin intermediul cortegiului c (textul cifrat):
utcccc ti ),...,,...,( 0 , ,,0,21
ticck
j
jkiji
ijijij dmc (3.23)
Să analizăm cum putem construi cheia privată. Pentru aceasta revenim la Figura 3.12
După cum am menţionat mai sus, acest tabel reprezintă un sistem de funcţii booleene
kj FFF ,...,,...,1 de variabilele nxx ,...,1 . Fie că relaţiilor kj DDD ,...,,...,1 le corespund respectiv
funcţiile kj FFF ,...,,...,1 cu valorile din coloanele respective în Figura 3.13. Presupunem că
funcţiile sunt reprezentate prin submulţimile de coloană (Tabelul 3.3), ki ,1 .
Tabelul 3.3. Reprezentarea funcţiilor jF prin submulţimi de coloană
0z … jz … sz
1iF 0
1zFi
S … j
i
z
FS 1 … s
i
zFS 1
114
Vom considera numai funcţii jF pentru care se îndeplinesc condiţiile
kjSSSS jzF
zF
zF
s
jjj,1,... 1
11
01 . (3.24)
Pentru toate valorile lui j vom obţine un cortegiu ),...,,...,( 1 kj SSSS care poate juca
rolul de cheie privată.
Fie că în indicele i al lui id , valorile primelor variabile formează starea binară
qy ...1 (Figura 3.13). Atunci, conform definiţiei submulţimii de coloană valorile lui ijd se
obţin din relaţia
jq
jqij Sy
Syd
dacă,0dacă,1
(3.25)
Aşadar, cortegiul S determina univoc matricea DA . Submulţimile jS se aleg cu condiţia
YSk
jj
1
(3.26)
Această condiţie asigură schimbarea componentelor cortegiului m prin intermediul
cortegiului d . Relaţia (3.25) asigură un calcul rapid al valorii funcţiei pe starea binara
ni ......1 .
Deoarece 2Y , atunci pentru o singură funcţie putem construi 22 submulţimi de
coloană, iar pentru k funcţii avem
22 k
chei diferite. Prin urmare securitatea sistemului, care este în funcţie şi de cantitatea de chei
private, poate fi aleasă prin parametrul şi submulţimile jS .
În baza celor expuse în mediul de calcul Mathematica 6 a fost elaborat un sistem de
criptare a informaţiei – Cripto 3 [107], [109] (codul-sursă este prezentat în Anexa 2) – format
din:
generatorul de chei, care generează cortegiul ).,...,,...,( 1 kj SSSS Componentele jS ale
cortegiului S sunt alese în mod aleator ca submulţimi ale mulţimii Y şi cu respectarea condiţiei
(3.26). Utilizând (3.25) şi (3.21) construim cortegiul );,...,( 0 tddd
115
codificatorul, care construieşte cortegiul ),...,( 0 tccc (în baza cortegiilor m şi d
utilizând (3.23), codifică cortegiul ),...,,...,( 1 kj SSSS prin intermediul sistemului Cripto 2 sau
cu oricare alt sistem sigur şi, prin concatenarea lui cu cortegiul c , construieşte cortegiul g ;
decodificatorul, care decodifică cortegiul ),...,,...,( 1 kj SSSS selectat din cortegiul g ,
construieşte cortegiul ),...,( 0 tddd utilizând formulele (3.21) şi (3.25), construieşte cortegiul
),...,,...,( 0 ti mmmm în baza cortegiilor ),...,( 0 tccc şi ),...,( 0 tddd utilizând formula (3.22)
şi imprimă textul decodificat, restabilind-ul după codurile ASCII obţinute în m .
Descrierea algoritmului Cripto 3. Fie M un mesaj arbitrar ce conţine N caractere (inclusiv spaţiile
libere). Numărul N se numeşte lungime a mesajului M. Vom considera că mesajul M este
reprezentat în codurile ASCII. Prin urmare, mesajul M poate fi privit ca un cortegiu numeric de
lungime N:
).,...,,...,( 1 Ni mmmM
Fie că acest text trebuie criptat cu ajutorul unei chei, care la fel reprezintă un cortegiu de
numere ).,...,,...,( 1 ti dddD
În acest scop vom utiliza următorul algoritm (Cripto 3):
Pasul 1. În conformitate cu formulele (3.20) calculăm
Nn 2log şi .maxlog2 imk
Pasul 2. Formăm matricea MA cu numărul de linii N şi numărul de coloane k. Elementele ijm de
pe linia i a matricei MA reprezintă cifrele lui Mmi scris în baza 2, adică }.1,0{ijm Deci
calculăm aceste elemente. Dacă numărul Mmi în baza 2 are mai puţin de k cifre el se
completează cu zerouri în faţa acestor cifre până la numărul de cifre k.
Pasul 3. Se generează aleator cheia, care este un cortegiu cu k componente. Fiecare componentă
la rândul său este un cortegiu cu lungimea aleasă aleatoriu. Deci, se generează aleatoriu k numere
,,...,, 21 k
care stabilesc aceste lungimi, toate cuprinse între 0 şi ,12 valoarea lui τ fiind 3 sau 4 în
funcţie de lungimea aleasă a cheii. Apoi, pentru fiecare componentă i a cheii se generează i
numere diferite cuprinse la fel între 0 şi ,12 completând astfel componentele acestei chei. Se
aranjează toate componentele cheii în ordine crescătoare.
Pasul 4. Alcătuim matricea cheii care participă la adunarea modulo 2 cu matricea mesajului.
Aceasta este o matrice MD cu numărul de linii 2 şi numărul de coloane k. Pentru acesta
116
parcurgem de toate numerele de la 0 la 12 şi verificăm dacă ele aparţin cortegiului
componentei respective a cheii. În cazul când aparţine în linia respectivă şi coloana respectivă a
lui MD se scrie 1, în caz contrar se scrie 0.
Pasul 5. Se operează suma modulo 2 a matricelor MA şi MD , cazul în care „nu ajung” linii în
MD ele se iau de la începutul acestei matrice. În rezultat se obţine matricea MC cu numărul de
linii N şi numărul de coloane k.
Pasul 6. Pentru fiecare linie a acestei matrice calculăm un număr în baza 10 considerând
elementele acestei linii în calitate de cifre ale unui număr în baza 2:
.,0,21
Nicck
j
jkiji
Obţinem astfel textul cifrat reprezentat prin cortegiul
)....,,...,( 1 Ni ccccC
Pasul 7. STOP. Cortegiul C conţine mesajul M în varianta criptată.
Sistemul dat este foarte rapid, decriptarea se efectuează cu o exactitate de 100% (în toate
testele efectuate nu au fost depistate abateri, ele nici nu pot să apară având în vedere principiul
matematic de funcţionare a algoritmului) şi datorită faptului că cheile se schimbă de la un mesaj
la altul, dar şi în timpul criptării mesajului, algoritmul dat este unul foarte sigur.
În Tabelul 3.4 şi în Figura 3.14–3.17 sunt prezentate unele date statistice referitoare la
funcţionarea sistemului Cripto 3 în comparaţie cu sistemul AES (în Anexa 2 sunt prezentate o
serie mai completă de figuri). Pentru algoritmul Cripto 3 testele sunt efectuate pentru cazurile
când cheia are lungimea de 186 şi respectiv 743 de biţi. Aceste lungimi sunt în funcţie de şi se
obţin pentru valorile lui τ egale cu 3 şi respectiv 4. Pentru valori mai mari ale lui τ mărimea cheii
lui Cripto 2 nu poate fi comparată cu cheia lui AES. Pentru algoritmul AES am testat toate trei
variante, adică AES-128, AES-192 şi AES-256. Testele au fost efectuate la calculatorul cu
procesor AMD Phenom-II cu 3 nuclee, 2.8 GHz, 2 GB RAM.
Tabelul 3.4. Date statistice de lucru pentru algoritmii de criptare Cripto 3 şi AES
Sistemul de criptare Numărul de
simboluri în mesaj
Timpul pentru
criptare
Timpul pentru
decriptare
Cripto 3 186 ( =3)
Cripto 3 743 ( =4)
0,01
0,014
0,005
0,014
AES 128
AES 192
AES 256
100 0,03
0,03
0,03
0,03
0,03
0,03
117
Cripto 3 186 ( =3)
Cripto 3 743 ( =4)
0,013
0,015
0,08
0,015
AES 128
AES 192
AES 256
200 0,03
0,04
0,04
0,04
0,04
0,05
Cripto 3 186 ( =3)
Cripto 3 743 ( =4)
0,016
0,016
0,012
0,016
AES 128
AES 192
AES 256
300 0,06
0,06
0,08
0,06
0,06
0,08
Cripto 3 186 ( =3)
Cripto 3 743 ( =4)
0,018
0,016
0,014
0,016
AES 128
AES 192
AES 256
400 0,06
0,08
0,09
0,07
0,08
0,09
Cripto 3 186 ( =3)
Cripto 3 743 ( =4)
0,02
0,016
0,015
0,016
AES 128
AES 192
AES 256
500 0,09
0,09
0,13
0,09
0,09
0,13
Cripto 3 186 ( =3)
Cripto 3 743 ( =4)
0,03
0,03
0,03
0,03
AES 128
AES 192
AES 256
1000 0,17
0,18
0,22
0,17
0,19
0,23
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
0,059 0,06
0,057 0,06
AES 128 AES 192 AES 256
2 000 0,39 0,42 0,45
0,40 0,41 0,45
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
0,086 0,09
0,087 0,09
AES 128 AES 192 AES 256
3 000 0,51 0,56 0,64
0,50 0,57 0,70
118
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
0,0138 0,14
0,0142 0,15
AES 128 AES 192 AES 256
5 000
0,8 0.92 1,09
0,8 0,97 1,15
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
0,277 0,28
0,286 0,31
AES 128 AES 192 AES 256
10 000 1,56 1,86 2,20
1,58 1,92 2,29
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
1,37 1,48
1,43 1,50
AES 128 AES 192 AES 256
50 000 7,84 9,21 10,94
7.85 9,61 11,41
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
2,71 2,93
2,91 3,02
AES 128 AES 192 AES 256
100 000 15,64 18,39 21,81
16,41 19,33 22,78
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
5,51 5,83
5,82 6,04
AES 128 AES 192 AES 256
200 000 31,21 36,80 43,54
32,77 38,40 45,55
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
8,30 8,74
8,84 8,97
AES 128 AES 192 AES 256
300 000 46,94 55,11 68,37
48,26 57,77 69,46
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
13,95 14,94
14,93 15,68
AES 128 AES 192 AES 256
500 000 78,98 91,99
109,01
80,82 96,40
114,02
119
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
28,59 30,82
31,52 34,02
AES 128 AES 192 AES 256
1 000 000 157,50 189,07 222,75
164,24 196,29 232,44
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
62,72 64,17
77,69 78,74
AES 128 AES 192 AES 256
2 000 000 320,05 369,98 441.88
333,04 389,01 461,48
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
99,74 102,99
134,40 136,20
AES 128 AES 192 AES 256
3 000 000 476,12 561,64 660,52
497,8 581,81 687,74
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
141,39 149,16
203,61 211,36
AES 128 AES 192 AES 256
4 000 000 638,46 762,99 889,90
675,04 791,75 924,97
Cripto 3 186 ( =3) Cripto 3 743 ( =4)
190,55 197,71
296,15 288,66
AES 128 AES 192 AES 256
5 000 000 791,42 961,85
1106,59
819,11 986,84 1149,84
Criptare 100 - 1000
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
100 200 300 400 500 1000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. 3.14. Diagramă comparativă AES–Cripto 3 pentru mesaje de 100-1000 simboluri
120
Decriptare 100 - 1000
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
100 200 300 400 500 1000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. 3.15. Diagramă comparativă AES–Cripto 3 pentru mesaje de 100-1000 simboluri
Criptare 10 000 - 1 000 000
0
100
200
300
400
500
600
700
10000 50000 100000 200000 300000 500000 1000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. 3.16. Diagramă comparativă AES–Cripto 3 pentru mesaje de 10000-1000000 simboluri
Decriptare 10 000 - 1 000 000
0
100
200
300
400
500
600
700
10000 50000 100000 200000 300000 500000 1000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. 3.17. Diagramă comparativă AES–Cripto 3 pentru mesaje de 10000-1000000 simboluri
121
Din Tabelul 3.4 şi din Figurile 3.14–3.17 observăm că criptarea şi decriptarea se
efectuează mai rapid în sistemul Cripto 3 decât în AES, indiferent de lungimea cheii şi necătând
la faptul că una dintre aceste chei – 743 este de circa 3 ori mai mare ca la AES-256. În acelaşi
timp criptarea în Cripto 3 şi decriptarea durează la fel. Pentru cheile de mărime 186 şi 743 de biţi
ale algoritmului Cripto 3 timpul de lucru practic nu diferă. Odată cu creşterea lui τ creşte şi
mărimea cheii, şi pentru valori ale lui τ >4 mărimea cheii creşte exponenţial ce implică o creştere
a timpului de lucru la criptare şi decriptare. Această diferenţă se datorează faptului că odată cu
creşterea cheii se va cheltui mai mult timp pentru criptarea şi decriptarea acestei chei, pe când
timpul net de criptare şi decriptare a mesajului nu este afectat de mărimea cheii. De aceea,
aplicând pentru criptarea şi decriptarea cheilor un algoritm de criptare mai econom se va reduce
şi timpul total de lucru al algoritmului Cripto 3.
Pentru algoritmul Cripto 3 la moment nu sunt cunoscute metode eficiente de spargere, iar
faptul că cheia este schimbată de la un mesaj la altul complică şi mai mult eventualele atacuri.
Mai mult decât atât, există posibilitatea de modifica cheia şi pe parcursul criptării aceluiaşi
mesaj.
Din cele expuse rezultă că algoritmul de criptare Cripto 3 este mai are o viteză sporită
faţă de AES pentru lungimi de chei ale lui Cripto 3 de 186 şi 743 de biţi şi pentru întreg spectrul
de chei al lui AES. Dacă mai luăm în consideraţie şi faptul criptării cheilor la Cripto 3, ele fiind
schimbte la fiecare mesaj, ceea ce face practic imposibilă spargerea lui, atunci Cripto 3 poate fi
cu succes utilizat pe scară largă în procesul de criptare a informaţiei.
Funcţiile booleene sunt un caz particular al funcţiilor din logica q-valentă şi, în acest
context, este natural să fie înaintată problema analizei funcţiilor q-valente în perspectiva
elaborării sistemelor de criptare bazate pe aceste funcţii. Astfel de proprietăţi sunt analizate în
Capitolul 2, paragraful 2.3.
122
3.4. Sistem de criptare bazat pe funcţii de logica q-valentă
Algoritmul Cripto 3 poate fi generalizat şi pentru cazul când funcţiile booleene se
înlocuiesc cu cele din logica q-valentă.
Fie funcţiile kj FFF ,...,,...,1 din logica q-valentă. În aşa caz atât variabilele nxx ,...,1 cât şi
funcţiile jF admit valori din mulţimea }.1,...,1,0{ q În Figura 3.12 ijm şi în Figura 3.13
ijd Aceste matrice reprezintă sisteme de funcţii q-valente. Formulelor (3.19), (3.20) şi (3.21)
din 3.3 le corespund respectiv formulele, (3.27).(3.28) şi (3.29):
utmmmm ti ),,...,,...,( 0 , unde .,0,
1tiqmm
k
j
jkiji
(3.27)
n =⌈log q t⌉, k =⌈log q max mi⌉ (3.28)
utdddd ti ),,...,,...,( 0 , .,0,1
tiqddk
j
jkiji
(3.29)
Compunem o matrice nouă
)(modqAAA DMC ,
Unde
qdmc ijijij mod .
Aşa cum pentru q matrice DA are loc relaţia
0)(mod... qAAAoriqde
DDD
(matricea nula),
atunci egalităţilor (3.22) şi (3.23) le corespund respectiv egalităţile (3.30) şi (3.31):
CDM AqAA )(mod , MDC AqAqA )(mod)1( ( 3.30)
utcccc ti ),...,,...,( 0 , tiqcc
k
j
jkiji ,0,
1
şi )(modqdmc ijijij ( 3.31)
Din (3.31) rezultă că dacă pentru criptarea cortegiului m aplicăm matricea DA atunci
pentru decriptarea acestui vector aplicăm matricea .)1( DAq
123
Din (3.29) rezultă că componentele hd ale cortegiului d aparţin mulţimii }1,...,1{ kq
(0 nu se include în această mulţime deoarece starea 0....0 nu schimbă componentele cortegiului
m ). Pentru compunerea acestui cortegiu luăm ultimele variabile din mulţimea
},...,,...,{ 1 nn xxx , alegem într-un mod aleator q numere din mulţimea }1,...,1{ kq şi cu aceste
numere construim cortegiul
,1),,...,,...,(10 tqdddd qh
(3.32)
care reprezintă cheia privată. Componentele hd se pot repeta de un număr arbitrar de ori. Prin
urmare, numărul de chei private diferite este
.)1(
qkq
Utilizând ( 3.31 ) construim cortegiul c . Din (3.30) rezultă că
.,0,))(mod)1((1
tiqqdqcmk
j
jkijiji
Algoritmul generalizat obţinut este numit Cripto 4. Pentru el de asemenea a fost scris
soft-ul respectiv în mediul de calcul Mathematica. Acest algoritm este cu o viteză variabilă în
funcţie de valorile lui q, t si . De exemplu, pentru 4,3,2000000 qt durata criptării şi
decriptării mesajului este mai scăzută faţă aceeaşi parametri în Cripto 3. În caz general pentru
determinarea valorilor optimale pentru parametrii q , şi t dar şi pentru şi interdependenţa dintre
aceşti parametri şi timpul de lucru al algoritmului este necesară o investigare mai profundă.
Pentru cazul în care 2q cheia privată poate fi reprezentată şi prin submulţimi de
coloană. În acest caz în cortegiul ),...,,...,( 1 kj SSSS fiecare componentă jS reprezintă mulţimi
de forma }}{},...,{},{{ 121 qjjj SSS , unde pentru orice }1,...,1{ q
jS este o submulţime a
mulţimii },1,...,1,0{ q iar pentru orice }1,...,1{, qsk are loc sj
kj SS . Însa odată cu
creşterea lui q apar şi unele dificultăţi în reprezentarea şi transmiterea cheii private. Aici la fel
sunt necesare investigaţii adiţionale.
124
3.5. Concluzii la capitolul 3
Capitolul curent conţine implementarea practică a rezultatelor teoretice realizate în Capitolul 2. Această implementare constă în elaborarea a patru algoritmi de criptare şi elaborarea softului pentru realizarea acestor algoritmi. Softul dat este elaborat în mediul de calcul de Mathematica, ceea ce este suficient pentru testare şi obţinere a datelor comparative în raport cu alţi algoritmi utilizaţi în prezent. Pentru realizarea algoritmilor de criptare în scopuri practice este necesar de a ale implementa în unul din limbajele moderne, (C++, C# etc.).
Doi algoritmi dintre cei patru au la bază numerele prime mari. Datorită algoritmului determinist de generare a numerelor prime mari elaborat în teză obţinerea acestor numere nu prezintă dificultate. Primul algoritm Cripto 1 este o modificare a renumitului algoritm RSA care se utilizează pe larg în prezent dar spre deosebire de acesta foloseşte în loc de o singură pereche de chei un set de perechi. Acest fapt măreşte rezistenţa sistemului pe de o parte dacă se folosesc chei de aceleaşi dimensiuni ca la RSA, viteza rămânând neschimbată, iar pe de altă parte sporesc viteza de lucru a sistemului dacă micşorăm dimensiunea cheilor şi mărim numărul lor.
Algoritmul Cripto 2 este un sistem simetric care foloseşte numerele prime în calitate de chei şi este realizat în baza matricelor multidimensionale care reprezintă mulţimile de relaţii multi-are. De asemenea în baza algoritmului stă dezvoltarea polinomială a numerelor foarte mari. Pentru a sparge acest algoritm este necesar de a rezolva un sistem ecuaţii polinomiale cu coeficienţi nedeterminaţi, ceea ce, începând cu un anumit grad al polinomului, este imposibil din punct de vedere practic. Viteza de lucru a acestui algoritm este mai mică decât a algoritmului RSA dar mai mare ca la algoritmul simetric AES. Algoritmul Cripto 2 poate fi aplicat pentru criptarea informaţiei cu grad sporit de confidenţialitate, dar nu poate fi implementat cu resurse reduse.
Pentru elaborarea algoritmilor cu o viteză de lucru sporită au fost aplicate matricele multidimensionale şi funcţiile booleene (algoritmul Cripto 3) sau funcţiile din logica q-valentă (algoritmul Cripto 4). În procesul de realizare a algoritmilor se efectuează operaţii logice cu aceste funcţii ceea ce determină timpul mic de lucru al acestor algoritmi, acest timp fiind mai mic decât la algoritmul AES. Acest fapt, dar şi resursele reduce necesare, permite implementarea algoritmilor daţi pe diverse carduri.
Criptanaliza algoritmului Cripto 1 se bazează pe aceleaşi principii ca la RSA, de aceea se poate afirma cu certitudine securitatea lui Cripto 1. Pentru algoritmii Cripto 2, Cripto 3, şi Cripto 4 la momentul actual nu sunt cunoscute metode de criptanaliză în afară de atacul cu forţă brută. Luând în consideraţie mulţimea de chei la fiecare dintre aceşti algoritmi acest atac nu are şanse practice de realizare. Mai mult decât atât, la aceşti trei algoritmi cheile se modifică de la mesaj la mesaj şi se transmit criptate cu unul din algoritmii siguri odată cu criptograma ceea ce asigură o securitate sporită algoritmilor.
125
CONCLUZII GENERALE ŞI RECOMANDĂRI
Teza este dedicată analizei proprietăţilor mulţimilor de relaţii multi-are reprezentate cu
ajutorul matricelor multidimensionale în scopul aplicării acestor proprietăţi la elaborarea
metodelor de criptare a informaţiei – cel mai sigur mod de protecţie a ei. În acelaşi context au
fost cercetate unele proprietăţi ale funcţiilor booleene şi a funcţiilor din logica q-valentă, aceste
funcţii fiind reprezentate cu ajutorul submulţimilor de coloană. Sunt demonstrate o serie de
teoreme care permit elaborarea unor algoritmi de criptare eficienţi din punct de vedere al
securităţii şi a vitezei de lucru.
În baza teoremelor demonstrate au fost realizate următoarele:
un algoritm non-probabilistic eficient de generare a numerelor prime mari;
un algoritm de criptare (Cripto 1) care este o modificare a algoritmului cu cheie
publică RSA şi care utilizează seturi de chei, ceea ce poate mări viteza de lucru
sau poate spori rezistenţa sistemului;
un algoritm de criptare (Cripto 2) ce utilizează în calitate de chei numerele mari
prime şi funcţionează în baza dezvoltării polinomiale a numerelor întregi şi a
matricelor multidimensionale;
doi algoritmi de criptare în baza cărora se află matricele multidimensionale şi
funcţiile booleene (Cripto 3) sau funcţiile din logica q-valentă (Cripto 4), timpul
de lucru al acestor algoritmi fiind mult mai mic decât la algoritmul simetric AES
utilizat în prezent în calitate de standard naţional în USA.
Astfel, a fost soluţionată o problema ştiinţifică importantă: au fost propuse metode
eficiente de criptare a informaţiei care depăşesc metodele actuale după un şir de parametri
(timpul de criptare, volumul memoriei, securitatea algoritmului etc). A fost dezvoltată baza
teoretică pentru aceste metode care constă în proprietăţi noi ale funcţiilor booleene, funcţiilor
q-valente şi a matricelor multidimensionale.
Toate cercetările şi rezultatele realizate în teză se bazează, în cea mai mare parte, pe
noţiunile şi teoremele fundamentale din teoria numerelor, teoria informaţiei, matematica discretă,
algebra polinoamelor şi au ca scop de a propune instrumentarii noi, simple în realizare şi
eficiente pentru criptarea/decriptarea informaţiei.
Printre direcţii de cercetare ulterioară, care să folosească metodele elaborate şi ideile
conceptuale utilizate în cadrul lor, pot servi: extinderea spectrului de probleme care pot fi
soluţionate cu ajutorul mulţimilor de relaţii, a matricelor multidimensionale. Un interes sporit îl
au funcţiile booleene cu anumite proprietăţi de neliniaritate – funcţiile bent [41], [58],[125],
[126], [127], care pot fi găsite aplicând proprietăţile funcţiilor booleene demonstrate în teză.
126
Aceste proprietăţi pot fi aplicate şi la determinarea coeficienţilor polinomului Zhegalkin, el fiind
o metodă eficientă de reprezentare a funcţiilor booleene. În scopuri criptografice o perspectivă
promiţătoare o prezintă aplicarea funcţiilor booleene cu proprietăţile examinate în teză pentru
generarea cheilor sistemelor de criptare (în deosebi aplicarea noţiunii de derivată a funcţiilor
booleene reprezentate prin submulţimi de coloană).
Teza prevede şi aspectele practice: a fost creat un pachet de programe simplu şi uşor de
folosit. Programele au fost implementate în mediul de calcul Mathematica, dar este binevenită
realizarea lor în unul dintre limbajele moderne cum ar fi C++, C# sau altele de acest fel.
127
BIBLIOGRAFIE 1. Adleman L., Pomerance C. and Rumley R., On Distinguishing Prime Numbers from
Composite Numbers, Annals of Mathematics 117 (1), 1983, pp. 173–206
2. Bacon F., De Augmentis Scientarum, Book 6, Chapter i, 1889
3. Bauer F., An error in the history of rotor encryption devices, Cryptologia 23(3), July 1999,
page 206
4. Ben-Aroya I., Biham E., Differential Cryptanalysis of Lucifer, Journal of Cryptology 9(1),
pp. 21–34, 1996
5. Bernstein D. J., Buchmann J., Dahmen E. (Editors), Post-Quantum Cryptography,
Springer, 2008
6. Biham E. and Biryukov A., An Improvement of Davies' Attack on DES, J. Cryptology
10(3): 195–206 (1997)
7. Biham E. and Shamir A., Differential Cryptanalysis of the Full 16-Round DES, Advances
in Cryptology, Proceedings of CRYPTO '92, 1992, pp. 487–496
8. Biham E., and Shamir A., Differential Cryptanalysis of the Data Encryption Standard,
Springer Verlag, 1993
9. Biham E., Shamir A., Differential Cryptanalysis of Snefru, Khafre, REDOC-II, LOKI and
Lucifer, CRYPTO 1991: pp. 156–171
10. Biryukov A., Khovratovich D., Related-key Cryptanalysis of the Full AES-192 and AES-
256, Luxemburg Univ. 2009
11. Biryukov A., Dunkelman O., Keller N., Khovratovich D., Shamir A., Key Recovery Attacks
of Practical Complexity on AES. Variants With Up To 10 Rounds, Crypto 2009 rump
session
12. Bochmann D., Posthoff C., Binare Dinamishe Sisteme, Academic-Verlag, Berlin, 1981
13. Bowers M., (pseudonym Zembie), Major F. W. Kasiski — Cryptologist, The Cryptogram,
Vol. XXXI(3) (January-February 1964) pp. 53,58-59
14. Bulat M., Bivol L., Unele transformări şi aplicaţii ale funcţiilor booleene, Analele ATIC,
Chişinău, Evrica, 2002.
15. Bulat M., Cataranciuc S., Zgureanu A., A method for calculating the polynomial
coefficients Zhegalkin. International Conference dedicated to the 80th anniversary of P.
Soltan. Chişinău, 2011
16. Bulat M., Distribuţia numerelor prime în matrice multidimensionale, Analele ATIC.
Chişinău, Evrica, 2003, pp.
17. Bulat M., Isomorfismo de conjundtos de relaciones, Revista de matematica: Teoria y
Aplicaciones, 2001, 8(1), pp. 33-46
128
18. Bulat M., Isomorfismo de grandes sistemas, Acta Academia 2001, Evrica, Chişinau, pp.
161–170
19. Bulat M., Isomorphic sistems of graphs, 3-rd European Congress of Mathematics, Section
06: Discrete Mathematics and Computer Science, Poster number 236, Barcelona
20. Bulat M., Leon D., Bivol L., Ciobanu I., Zgureanu,A., Generadores de numeros primos y
factorizadores de numeros compuestos, Revista de Matematica: Teoria y Aplicaciones,
2006, 13(1) CIMPA-UCR-CCSS: pp. 1-15
21. Bulat M., Unele aplicaţii ale matricelor multidimensionale, Analele ATIC-2002, v.I (II),
pp. 75–82
22. Bulat M., Zgureanu A., Ciobanu I., Bivol L., Generating of prime numbers based on the
multidimensional matrices, International Algebraic Conference dedicated to the 100th
anniversary of D. K. Faddeev. St Petersburg, Russia, 2007, pp. 98-99
23. Bulat M., Zgureanu A., Ciobanu I., Bivol L., Sisteme de criptare cu chei vectoriale,
Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare şi tehnologii
informaţionale. Chişinau, 19-21 martie, 2008. ATIC, pp. 281 – 285
24. Bulat M., Zgureanu A., Ciobanu I., Bivol L., The inverse transformations of
multidimensional matrices, ASADE Moldova, August 21, 2007, pp. 34-34
25. Bulat M., Zgureanu A., Ciobanu Ia., Izbaş V., Sistem de criptare bazat pe derivarea
funcţiilor booleene. Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare
şi tehnologii informaţionale. Chişinau, 26-28 martie, 2010, pp. 132-141
26. Cataranciuc S., G-complexul de relaţii multi-are. Analele ştiinţifice al Universităţii de Stat
din Moldova. Seria „Ştiinţe fizico-matematice”. Chişinău 2006, pp. 119-122
27. Cataranciuc S., Soltan P., The generalized complex of multi-ary relations and its homology.
2008, Vol. 6, Cluj-Napoca, Romania, pp. 17-144
28. Cataranciuc S., Soltan P., Abstract complexes, their homologies and applications. Buletinul
Academiei de Ştiinţe a Republicii Moldova, 2010, 24(63), pp. 31-58
29. Campbell K., Wiener M., DES is not a Group, CRYPTO 1992: pp. 512–520
30. Chaum D. and Evertse J. H. , Cryptanalysis of DES with a reduced number of
rounds, in Lecture Notes in Computer Science 218; Advances in Cryptology: Proc. Crypto
'85, H. C. Williams, Ed., Santa Barbara, CA, Aug. 18-22, 1985, pp. 192-211. Berlin:
Springer-Verlag, 1986
31. Cover T., King R., A Convergent Gambling Estimate of the Entropy of English, IEEE
Transactions of Information Theory, v. IT-24, n. 4, 1978, pp. 413-421
32. Daemen J., Rijmen V., The Design of Rijndael: AES - The Advanced Encryption Standard,
Springer-Verlag, 2002
129
33. Data Encryption Standard, National Bureau of Standards, Federal Information Standard 46,
USA; 1977
34. De Mulder Y., Wyseur B., and Preneel B., Cryptanalysis of a Perturbated White-Box AES
Implementation, Progress in Cryptology - INDOCRYPT 2010. 11th International
Conference on Cryptology in India. Hyderabad, India, December 12-15, 2010, pp. 292-310
35. Deavours C., Unicity points in Criptanalysis, Criptologia, v. 1, 1977, pp. 46-68
36. Devours C., Kahn D., Kruh L., Mellen G., Winkel B., Cryptology: Machines, history and
Methods, Artech House, 1989
37. Devours C., Kruh L., Machine Cryptography and Modern Cryptanalysis, Artech House,
1985
38. Diffie W. and Hellman M. E., New Directions in Cryptography. IEEE Transactions on
Information Theory, vol. IT-22, Nov. 1976, pp. 644–654
39. Diffie W. and Hellman M., Exhaustive Cryptanalysis of the NBS Data Encryption
Standard, IEEE Computer 10 (6), 1977, pp. 74-84
40. Diffie W. and Hellman M., Privacy and authentication: An introduction to cryptography,
Proc. IEEE, vol. 67, 1979, pp. 397–427
41. Dillon J. F., A survey of bent functions. NSA Technical Journal – unclassified 1972; pp.
191–215.
42. Ding C, Xiao G, Shan W. The stability theory of stream ciphers. LNCS, vol. 561, Berlin:
Springer; 1991
43. El Gamal T., A Public Key Cryptosystem and Signature Scheme Based on Discrete
Logarithms, IEEE Transactions in Information Theory 31 (4), 1985, pp. 469–472
44. Feistel H., Cryptography and computer privacy, Scientific American 1973; 228: pp. 15–23
45. Ferguson N. and Schneir B., Practical Cryptography, Wiley N. Y. (2003)
46. Ferguson N., Kelsey J., Lucks S., Schneier B., Stay M., Wagner D. et al. Improved
cryptanalysis of Rijndael. In: Fast software encryption–New York 2000. LNCS, vol. 1978,
Berlin: Springer, 2001, pp. 213–230
47. Ferguson N., Schroeppel R., Whiting D., A simple algebraic representation of Rijndael. In:
Selected areas crypt. 2001. LNCS, vol. 2259. Berlin: Springer; 2001, pp. 149–165
48. FIPS PUB 197, The official AES standard
49. FIPS PUB 46-3, DES, (Federal Information Processing Standards Publication). NIST,
1999.
50. Forré R., Methods and instruments for designing S-boxes, Journal of Cryptology 1990, 2,
pp. 115–130
51. Fourche H., Cryptanalysis: A Study of Ciphers and their Solution, Dover Publications, 1939
130
52. Friedman W. F., Military Cryptanalysis – Part I, Monoalphabetic Substitution Systems,
United States Government Printing Office, Washington, 1939
53. Friedman W. F., Military Cryptanalysis – Part II: Simpler Varieties of Polyalphabetic
Substitution Systems, United States Government Printing Office, Washington, 1938
54. Gorski M., Lucks S., New Related-Key Boomerang Attacks on AES (Full Version).
Information Security and Privacy: 14th Australasian Conference, Acisp 2009
55. Gustavus J. Simmons, editor, Contemporary cryptology: the science of information
integrity, IEEE Press, 1992
56. Henk C. A. van Tilborg (Editor), Encyclopedia of Cryptography and Security, Springer
Science+Business Media, Inc., 2005
57. Hoffstein J., Pipher J., Silverman J. H., An Introduction to Mathematical Cryptography,
Springer Science+Business Media, LLC, 2008
58. Hou X. D. and Langevin Ph., Results on bent functions. Journal of Combinatorial Theory
(A), 80:, 1997, pp. 232–246
59. Kahn D., Codebreaking and the Battle of the Atlantic, US Air Force Academy, Colorado
Springs, CO, 1994
60. Kahn D., The Codebreakers - The Story of Secret Writing, abridget ed. New York, NY:
Signet, 1973
61. Karl de Leeuw, The Dutch invention of the rotor machine, 1915 - 1923." Cryptologia 27(1),
January 2003, pp. 73–94
62. Katz J. & Lindell Y., Introduction to Modern Cryptography, Chapman & Hall/CRC (2008)
63. Kilian J. and Rogaway Ph, How to protect DES against exhaustive key search, Advances in
Cryptology – Crypto’96, Springer-Verlag (1996), pp. 252–267
64. Koblitz N. A., Course in Number Theory and Cryptography, Springer-Verlag 1987
65. Kollmitzer C., Pivk M. (Editors), Applied Quantum Cryptography, Springer, 2010
66. Konheim A.G., Cryptography: A Primer, John Wiley and Sons, New York, 1981
67. Konheim Alan G., Computer Security and Cryptography, John Wiley & Sons, Inc., 2007
68. Kranakis E., Primality and Cryptography, Stuttgart: Teubner, Wiley, 1986
69. Mala H., Dakhilalian M., Rijmen V. and Modarres-Hashemi M., Improved Impossible
Differential Cryptanalysis of 7-Round AES-128. Progress in Cryptology - INDOCRYPT
2010. 11th International Conference on Cryptology in India, Hyderabad, India, December
12-15, 2010, pp. 282-291
70. Matsui M., Linear cryptanalysis method for DES cipher, Advances in Cryptology –
EUROCRYPT’93, Workshop on the theory and application of cryptographic techniques
(Lofthus, Norway. May 23–27, 1993). Proc. Berlin: Springer, 1994
131
71. Matsui M., On correlation between the order of S-boxes and the strength of DES. In: Adv.
In crypt.–Eurocrypt ’94. LNCS, vol. 950. Berlin: Springer; 1995. p. 366–375
72. Matsui M., The First Experimental Cryptanalysis of the Data Encryption Standard, Lecture
Notes in Computer Science 839: 1–11. 1994.
73. Meier W., Staffelbach O., Nonlinearity criteria for cryptographic functions, In: Adv.
In crypt.–Eurocrypt ’89. LNCS, vol. 434. Berlin: Springer; 1990, pp. 549–562.
74. Menezes A., Van Oorschot P. C., Vanstone S. A., Handbook of applied cryptography,
CRC Press, 1997
75. Minuţ P., Teoria numerelor, Vol. 1, Editura Crenguţa Gâldău, Iaşi 1997
76. Mogollon M., Cryptography and Security Services: Mechanisms and Applications, New
York, Cybertech Publishing, 2008
77. National Bureau of Standards, Data Encryption Standard, FIPS PUB 46 (Jan. 1977)
78. National Bureau of Standards, DES Modes of Operation, FIPS PUB 81 (Dec. 1980)
79. National Institute of Standards and Technology, Advanced Encryption Standard (AES),
FIPS PUB 197 (Nov. 2001)
80. NIST, Modes of operations for symmetric block ciphers (available at:
http://csrc.nist.gov/CryptoToolkit/modes/)
81. NIST, Request for AES proposals, http://csrc.nist.gov/CryptoToolkit/aes/pre-
round1/aes_.9709.htm
82. Oswald E., Daemen J., Rijmen V., AES – The state of the art of Rijndael’s security,
Technical report (October 30, 2002), http://citeseerx.ist.psu.edu/viewdoc/ summary?doi=
10.1.1.3.164
83. Paar C., Pelzl J., Understanding Cryptography. A Textbook for Students and Practitioners,
Springer, 2009
84. Pollard J. M., A Monte Carlo method for factorization. BIT, 15(3): pp. 331-334, 1975
85. Pomerance C., Recent Developments in Primality Testing, The Mathematical Intelligencer,
v. 3, n. 3, 1981, pp. 97–105
86. Prouff E. and Roche T., Attack on a Higher-Order Masking of the AES Based on
Homographic Functions. Progress in Cryptology - INDOCRYPT 2010. 11th International
Conference on Cryptology in India. Hyderabad, India, December 12-15, 2010, pp. 262-281
87. Rabin M. O., Probabilistic Algorithm for Testing Primality, SIAM Journal on
Computing, v. 9, n. 2, May 1980, pp. 273-280
88. Rabin M.O., Probabilistic Algorithm for Testing Primality, Journal of Number Theory, v.
12, n. 1, Feb 1980, pp. 128–138
132
89. Rijmen V., Cryptanalysis and design of iterated block ciphers, doctoral dissertation,
October 1997
90. Rivest R. L., Shamir A., Adleman L., A method for obtaining digital signatures and public
key cryptosystems, Comm ACM 21, 1978, pp. 120–126
91. Rivest R. L., The RC5 encryption algorithm, In: Fast software encryption–Leuven 1994.
LNCS, vol. 1008. Berlin: Springer; 1995, pp. 86–96
92. Rueppel R. A., Stream ciphers, In: G. J. Simmons, Editor, Contemporary Cryptology–The
Science of Information Integrity, IEEE Press, New York, 1992, pp. 65–134
93. Salomaa A., Criptografie cu chei publice, Ed. Militară, 1994
94. Schneier B., Applied Cryptography, Second Edition. John Wiley & Sons, 1996
95. Schneier B., Description of a New Variable-Length Key, 64-bit Block Cipher (Blowfish).
Fast Software Encryption 1993: 191–204
96. Schneier B., The Blowfish Encryption Algorithm. One Year Later, Dr. Dobb's Journal,
20(9), p. 137, September 1995.
97. Shannon C. E., A Mathematical Theory of Communication, Bell System Technical Journal.
v. 27, n. 4, 1948, pp. 379-426
98. Shannon C. E., Communication Theory of Secrecy Systems, Bell System Technical Journal.
v. 28, n. 4, 1949, pp. 656-715
99. Shannon C. E., Predication and Entropy in Printed English, Bell System Technical Journal.
v. 30, n. 1, 1951, pp. 50-64
100. Shoup V., A computational introduction to number theory and algebra, Cambridge
University Press, 2005
101. Smith, Laurence D. „Substitution Ciphers”. Cryptography the Science of Secret Writing,
Dover Publications. pp. 81. 1943
102. Sorkin A., LUCIFER: a cryptographic algorithm, Cryptologia, 8(1), 22-35, 1984
103. Stinton D., Cryptography, Theory and Practice, Chapman& Hall/CRC, 2002
104. Tuchman W. L. and Meyer C., Efficacy of the Data Encryption Standard in Data
Processing, Proceedings of Compcon’78, 1978, pp. 340–347
105. Vernam G., Cipher Printing Telegraph Systems For Secret Wire and Radio Telegraphic
Communications, Journal of the IEEE, Vol 55, pp. 109-115 (1926)
106. Whitfield D. and Hellman M., Exhaustive Cryptanalysis of the NBS Data Encryption
Standard, IEEE Computer 10(6), June 1977, pp. 74–84
107. Zgureanu A., Bulat M., Sisteme de criptare bazate pe funcţii booleene. Conferinţa
Internaţională ICT+ “Tehnologii informaţionale şi de comunicaţii - 2009”, 19 – 20 mai,
Chişinău, 2009: pp.
133
108. Zgureanu A., Cataranciuc S., Encryption systems based on multidimensional matrixes,
„Tiberiu Popoviciu seminar”, Cluj-Napoca 6-7 september, 2010, pp. 99-110
109. Zgureanu A., Information encryption systems based on Boolean functions. The Computer
Science Journal of Moldova, vol.18, no.3(54), 2010, pp. 319-335
110. Zgureanu A., Sisteme de criptare cu chei variabile. Analele ATIC-2007-2008, vol. I (XII),
Chişinău, Evrica, 2009, pp. 92-98
111. Zhang Ch., Yu Q., and Wei Liu X. An Algorithm Based Concurrent Error Detection
Scheme for AES, Cryptology and Network Security. 9th International Conference, CANS
2010, Kuala Lumpur, Malaysia, December 12-14, 2010, pp. 31-43
112. Аграновский А. В., Хади Р. А., Практическая криптография, алгоритмы и их
программирование, Москва, 2009
113. Анестиади В., Олейник В., Необходимость и достаточеость при генерации ключей,
Acta Academia, Chişinău, 1999. pp. 93-101.
114. Баяндин А. В., К распределению простых чисел в натуральном ряде чисел,
Новосибирск, «НАУКА», 1999, СИФ РАН,-40
115. Булат М. С. Синтез таблиц состояний функций возбуждения внутренних элементов
автомата. Абстрактная и структурная теория релейных устройств. Издательство
"Наука".Москва, 1972, стр. 49-64
116. Булат М. С., Горюк И. В., Синтез логических структур, Кишинёвский
Политехнический Институт им. С. Лазо, 1978.
117. Булат М. С., Згуряну А. Ф., Чобану Я. И., Бивол Л. Г., Крипто-системы на базе n-
арных отношений. Системы управления, контроля и измерений (УКИ-08),
Российская Конференция с международным участием, Москва ИПУ РАН, 2008: pp.
66-67
118. Булат М., Об одном способе дифференцирования булевых функций, Analele ATIC-
2001, v.I (I), pp. 40–47
119. Горбатов В.А., Горбатов А.В., Горбатова М.В., Дискретная математика.Москва,
Астрель, 2006
120. Гутер Р.С., Полунов Ю.Л., Чарльз Бэббедж (1792-1871), Москва, Знание, 1973
121. Мао В., Современная криптография (теория и практика), М.: Вильямс, 2005
122. Олейник В., Две трудно решаемые задачи и их роль в криптографии. Acta Academia,
Chişinău, 2002. pp. 57-72
123. Олейник В., Методы получения простых чисел – текущее состояние и перспективы,
Acta Academia. Chişinău, 1999. pp. 101-127
124. Соколов Н. П., Пространственные матрицы и их приложения, Москва 1960
134
125. Токарева Н. Н., Нелинейные булевы функции: бент-функции и их обобщения,
Издательство LAP. Saarbrucken, Germany, 2011
126. Токарева Н. Н., Обобщения бент-функций. Обзор работ, Дискретный анализ и
исследование операций , Январь—февраль 2010. Том 17, № 1. pp. 33–62
127. Токарева Н. Н., Сильно нелинейные булевы функции: бент-функции и их обобщения.
Диссертация на соискание ученой степени кандидата физико-математических наук.
Новосибирск – 2008
128. Шнайер Б., Секреты и ложь. Безопасность данных в цифровом мире, Москва, 2003
129. Щербаков А.Ю. Современная компьютерная безопасность. Теоретические основы.
Практические аспекты. — М.: Книжный мир, 2009. — 352 с.
130. Яблонский С. В. Введение в дискретную математику. 2-ое изд. М.: Наука, 1986. 384с.
Глава 2.
135
ANEXA 1. Diagrame. Reflectarea timpului de criptare-decriptare
Criptare 100 - 1 000
0
0,01
0,02
0,03
0,04
0,05
0,06
0,07
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. A1.1. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 100-1000 simboluri
Decriptare 100 - 1 000
05
10152025303540
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. A1.2. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 100-1000 simboluri
Criptare 100 - 1 000
0
0,01
0,02
0,03
0,04
0,05
0,06
0,07
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. A1.3. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 100-1000 simboluri
136
Decriptare 100 - 1 000
05
10152025303540
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)RSACripto 1
Fig. A1.4. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 100-1000 simboluri
Criptare 1000 - 10 000
0
0,2
0,4
0,6
0,8
1
1,2
1,4
1000 2000 3000 5000 10000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. A1.5. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 1000-10000 simboluri
Decriptare 1000 - 10 000
050
100150200250300350400
1000 2000 3000 5000 10000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. A1.6. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 1000-10000 simboluri
137
Criptare 1000 - 10 000
0
0,2
0,4
0,6
0,8
1
1,2
1,4
1000 2000 3000 5000 10000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)RSACripto 1
Fig. A1.7. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 100-1000 simboluri
Decriptare 1000 - 10 000
050
100150200250300350400
1000 2000 3000 5000 10000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 1
Fig. A1.8. Diagramă comparativă RSA–Cripto 1 pentru mesaje de 100-1000 simboluri
Criptare 100 - 1 000
0
0,05
0,1
0,15
0,2
0,25
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. A1.9. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 100-1000 simb.
138
Deriptare 100 - 1 000
05
10152025303540
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)RSACripto 2AES 256
Fig. A1.10. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 100-1000 simb.
Criptare 100 - 1 000
0
0,05
0,1
0,15
0,2
0,25
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. A1.11. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 100-1000 simb.
Decriptare 100 - 1 000
05
10152025303540
100 200 300 400 500 1000
Lungime mesaj (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. A1.12. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 100-1000 simb.
139
Criptare 1 000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)RSA
Cripto 2
AES 256
Fig. A1.13. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
Decriptare 1000 - 10 000
050
100150200250300350400
1000 2000 3000 5000 10000
Lungimea mesajului (simb)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. A1.14. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
Criptare 1 000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
RSA
Cripto 2
AES 256
Fig. A1.15. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
140
Decriptare 1000 - 10 000
050
100150200250300350400
1000 2000 3000 5000 10000
Lungimea mesajului (simb)
Tim
pul d
e lu
cru
(sec
.)
RSACripto 2AES 256
Fig. A1.16. Diagramă comparativă RSA–Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
Criptare 1 000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 2
AES 256
Fig. A1.17. Diagramă comparativă Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
Decriptare 1000 - 10 000
0
0,5
1
1,5
2
2,5
3
1000 2000 3000 5000 10000
Lungimea mesajului (simb)
Tim
pul d
e lu
cru
(sec
.)
Cripto 2AES 256
Fig. A1.18. Diagramă comparativă Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
141
Criptare 1 000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 2
AES 256
Fig. A1.19. Diagramă comparativă Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
Decriptare 1000 - 10 000
0
0,5
1
1,5
2
2,5
3
1000 2000 3000 5000 10000
Lungimea mesajului (simb)
Tim
pul d
e lu
cru
(sec
.)
Cripto 2AES 256
Fig. A1.20. Diagramă comparativă Cripto 2–AES256 pentru mesaje de 1000-10000 simb.
Criptare 100 - 1000
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
100 200 300 400 500 1000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.21. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-1000 simb.
142
Decriptare 100 - 1000
0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
100 200 300 400 500 1000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.22. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-1000 simb.
Criptare 100 - 1000
0
0,05
0,1
0,15
0,2
0,25
100 200 300 400 500 1000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.23. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-1000 simb.
Decriptare 100 - 1000
0
0,05
0,1
0,15
0,2
0,25
100 200 300 400 500 1000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.24. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-1000 simb.
143
Criptare 1000 - 10 000
0
1
2
3
4
5
6
7
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.25. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000-10000 simb.
Decriptare 1000 - 10 000
0
1
2
3
4
5
6
7
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.26. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000-10000 simb.
Criptare 1000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.27. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000-10000 simb.
144
Decriptare 1000 - 10 000
0
0,5
1
1,5
2
2,5
1000 2000 3000 5000 10000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.28. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000-10000 simb.
Criptare 10 000 - 1 000 000
0
100
200
300
400
500
600
700
10000 50000 100000 200000 300000 500000 1000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.29. Diagramă comparativă Cripto 3–AES pentru mesaje de 10000-1000000 simb.
Decriptare 10 000 - 1 000 000
0
100
200
300
400
500
600
700
10000 50000 100000 200000 300000 500000 1000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.30. Diagramă comparativă Cripto 3–AES pentru mesaje de 10000-1000000 simb.
145
Criptare 10 000 - 1 000 000
0
50
100
150
200
250
10000 50000 100000 200000 300000 500000 1000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.31. Diagramă comparativă Cripto 3–AES pentru mesaje de 10000-1000000 simb.
Decriptare 10 000 - 1 000 000
0
50
100
150
200
250
10000 50000 100000 200000 300000 500000 1000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.32. Diagramă comparativă Cripto 3–AES pentru mesaje de 10000-1000000 simb.
Criptare 1 000 000 - 5 000 000
0
500
1000
1500
2000
2500
3000
3500
1000000 2000000 3000000 4000000 5000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256
AES 192AES 128
Cripto 3 743
Cripto 3 186
Fig. A1.33. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000000-5000000 simb.
146
Decriptare 1 000 000 - 5 000 000
0500
1000150020002500300035004000
1000000 2000000 3000000 4000000 5000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.34. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000000-5000000 simb.
Criptare 1 000 000 - 5 000 000
0
200
400
600
800
1000
1200
1000000 2000000 3000000 4000000 5000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.35. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000000-5000000 simb.
Decriptare 1 000 000 - 5 000 000
0
200
400
600
800
1000
1200
1400
1000000 2000000 3000000 4000000 5000000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.36. Diagramă comparativă Cripto 3–AES pentru mesaje de 1000000-5000000 simb.
147
Criptare
0
200
400
600
800
1000
1200
100
200
300
400
500
1000
2000
3000
5000
1000
050
000
1000
00
2000
00
3000
00
5000
00
1000
000
2000
000
3000
000
4000
000
5000
000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.37. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-5000000 simb.
Decriptare
0
200
400
600
800
1000
1200
1400
100
200
300
400
500
1000
2000
3000
5000
1000
050
000
1000
0020
0000
3000
0050
0000
1000
000
2000
000
3000
000
4000
000
5000
000
Lungimea mesalukui (simb.)
Tim
pul d
e lu
cru
(sec
.)
Cripto 3 186Cripto 3 743AES 128AES 192AES 256
Fig. A1.38. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-5000000 simb.
Criptare
0
500
1000
1500
2000
2500
3000
3500
100
200
300
400
500
1000
2000
3000
5000
1000
050
000
1000
0020
0000
3000
0050
0000
1000
000
2000
000
3000
000
4000
000
5000
000
Lungimea mesajului (simb.)
Tim
pul d
e lu
cru
(sec
.)
AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.39. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-5000000 simb.
148
Decriptare
0
500
1000
1500
2000
2500
3000
3500
4000
100
200
300
400
500
1000
2000
3000
5000
1000
050
000
1000
0020
0000
3000
0050
0000
1000
000
2000
000
3000
000
4000
000
5000
000
Lungimea mesalukui (simb.)
Tim
pul d
e lu
cru
(sec
.)AES 256AES 192AES 128Cripto 3 743Cripto 3 186
Fig. A1.40. Diagramă comparativă Cripto 3–AES pentru mesaje de 100-5000000 simb.
149
ANEXA 2. Listingul softului. Este prezentat codul-sursă al programelor elaborate ce implementează metodele şi
algoritmii descrişi. Fiecărei metode îi corespunde programul său. Ele sunt structurate în așa fel
încât formează un pachet de aplicații. Ca limbaj de programare este folosit limbajul mediului de
calcul Mathematica.
Codul sursă al programului de calcul a submulţimilor de coloane a funcţiei booleene de forma F= U1 U2… Uk (compartimentul 2.2.2). timp1=AbsoluteTime[]; tau=3;n=5; jjj=2^(n-tau)-1; sigmaa={{{1,1},{2,1},{3,1},{4,1}},{{1,1},{2,1},{3,1},{5,1}},{{1,1},{2,1},{4,1},{5,1}},{{1,1},{3,1},{4,1},{5,1}},{{2,1},{3,1},{4,1},{5,1}},{{1,1},{2,1},{3,1},{4,1},{5,1}},{{1,1},{2,1},{3,1}},{{1,1},{2,1},{4,1}},{{1,1},{2,1},{5,1}},{{1,1},{3,1},{4,1}},{{1,1},{3,1},{5,1}},{{1,1},{4,1},{5,1}},{{2,1},{3,1},{4,1}},{{2,1},{3,1},{5,1}},{{2,1},{4,1},{5,1}},{{3,1},{4,1},{5,1}},{{1,1},{2,1}},{{1,1},{3,1}},{{1,1},{4,1}},{{1,1},{5,1}},{{2,1},{3,1}},{{2,1},{4,1}},{{2,1},{5,1}},{{3,1},{4,1}},{{3,1},{5,1}},{{4,1},{5,1}}}; For[ij=0,ijjjj,ij++,j=ij; vectorjfinal={}; reuniune={};vectordif={}; For[ii=1,iiLength[sigmaa],ii++, sigma=sigmaa[[ii]]; sigma11={};sigma12={}; For[i=1,iLength[sigma],i++,If[sigma[[i,1]]<=tau,sigma11=Append[sigma11,sigma[[i]]],sigma12=Append[sigma12,sigma[[i]]]]]; x=Table[i,{i,n}]; x1=Table[i,{i,tau}]; x2=Table[i,{i,tau+1,n}]; multimetau=Table[i-1,{i,2^tau}]; sigmax={}; For[i=1,iLength[sigma],i++,sigmax=Append[sigmax,sigma[[i,1]]]]; If[Intersection[x1,sigmax]¬{}, sigma1={};sigma2={}; For[i=1,iLength[sigma],i++,sigma1=Append[sigma1,sigma[[i,2]]]]; For[i=1,iLength[sigma],i++,jaja=IntegerPart[j/(2^(n-sigma[[i,1]]))]; If[Mod[jaja,2] 0,sigma2=Append[sigma2,0],sigma2=Append[sigma2,1]]]; If[sigma1==sigma2,vectorj=multimetau,vectorj={}]; vectorcaz1=vectorj; ,If[Intersection[x2,sigmax] ¬{},j1=0;For[i=1,iLength[sigma],i++,j1=j1+sigma[[i,2]]*2^(tau-sigma[[i,1]])]; vectorj={};vectorj=Append[vectorj,j1]; If[tau==Length[sigma],vectorj={j1}, vector={};vectori1={}; For[i=1,iLength[sigma],i++,vectori1=Append[vectori1,sigma[[i,1]]]]; vectori=Complement[x1,vectori1];(*(indicii din diferenta)*) s=Length[vectori]; For[i=1,is,i++,lungimej=Length[vectorj]; For[k=1,klungimej,k++,partintr=IntegerPart[vectorj[[k]]/2^(tau-vectori[[i]])]; partintr=partintr+1; numar=vectorj[[k]]; If[Mod[partintr,2] 0,numar=numar-2^(tau-vectori[[i]]),numar=numar+2^(tau-vectori[[i]])];vectorj=Append[vectorj,numar]]]; vectorcaz2=vectorj;], sigma=sigma12; sigmax={}; For[i=1,iLength[sigma],i++,sigmax=Append[sigmax,sigma[[i,1]]]]; sigma1={};sigma2={}; For[i=1,iLength[sigma],i++,sigma1=Append[sigma1,sigma[[i,2]]]]; For[i=1,iLength[sigma],i++,jaja=IntegerPart[j/(2^(n-sigma[[i,1]]))]; If[Mod[jaja,2] 0,sigma2=Append[sigma2,0],sigma2=Append[sigma2,1]]]; If[sigma1==sigma2,vectorj=multimetau,vectorj={}]; vectorcaz1=vectorj; sigma=sigma11; sigmax={}; For[i=1,iLength[sigma],i++,sigmax=Append[sigmax,sigma[[i,1]]]]; If[Intersection[x2,sigmax]{},j1=0;For[i=1,iLength[sigma],i++,j1=j1+sigma[[i,2]]*2^(tau-sigma[[i,1]])]; vectorj={};vectorj=Append[vectorj,j1]; If[tau-Length[sigma] 0,vectorcaz2=vectorj;vectorj=Intersection[vectorcaz1,vectorcaz2];,
150
vector={};vectori1={}; For[i=1,iLength[sigma],i++,vectori1=Append[vectori1,sigma[[i,1]]]]; vectori=Complement[x1,vectori1];(*(indicii din diferenta)*) s=Length[vectori]; For[i=1,is,i++,lungimej=Length[vectorj]; For[k=1,klungimej,k++,partintr=IntegerPart[vectorj[[k]]/2^(tau-vectori[[i]])]; partintr=partintr+1; numar=vectorj[[k]]; If[Mod[partintr,2] 0,numar=numar-2^(tau-vectori[[i]]),numar=numar+2^(tau-vectori[[i]])];vectorj=Append[vectorj,numar]]]; vectorcaz2=vectorj; vectorj=Intersection[vectorcaz1,vectorcaz2] ]]]]; vectorjfinal=Union[vectorjfinal,vectorj];vectordif=Append[vectordif,vectorj]; alipire=Flatten[vectordif]; alipire=Tally[alipire]; difersimetr={}; For[i13=1,i13<=Length[alipire],i13++,If[Mod[alipire[[i13,2]],2]>0, difersimetr=Append[difersimetr,alipire[[i13,1]]]]]; ]; Print["j=",ij,"; Diferen a simetric este: ",difersimetr] ]; timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."]; Codul sursă al programului de calcul a submulţimilor de coleane a funcţiei booleene de forma F= U1 U2… Uk (compartimentul 2.2.2). timp1=AbsoluteTime[]; tau=3;n=5; jjj=2^(n-tau)-1; sigmaa={{{1,1},{2,1},{3,1},{4,1}},{{1,1},{2,1},{3,1},{5,1}},{{1,1},{2,1},{4,1},{5,1}},{{1,1},{3,1},{4,1},{5,1}},{{2,1},{3,1},{4,1},{5,1}},{{1,1},{2,1},{3,1},{4,1},{5,1}}}; For[ij=0,ijjjj,ij++,j=ij; vectorjfinal={}; For[ii=1,iiLength[sigmaa],ii++, sigma=sigmaa[[ii]]; sigma11={};sigma12={}; For[i=1,iLength[sigma],i++,If[sigma[[i,1]]<=tau,sigma11=Append[sigma11,sigma[[i]]],sigma12=Append[sigma12,sigma[[i]]]]]; x=Table[i,{i,n}]; x1=Table[i,{i,tau}]; x2=Table[i,{i,tau+1,n}]; multimetau=Table[i-1,{i,2^tau}]; sigmax={}; For[i=1,iLength[sigma],i++,sigmax=Append[sigmax,sigma[[i,1]]]]; If[Intersection[x1,sigmax]¬{}, sigma1={};sigma2={}; For[i=1,iLength[sigma],i++,sigma1=Append[sigma1,sigma[[i,2]]]]; For[i=1,iLength[sigma],i++,jaja=IntegerPart[j/(2^(n-sigma[[i,1]]))]; If[Mod[jaja,2]¬0,sigma2=Append[sigma2,0],sigma2=Append[sigma2,1]]]; If[sigma1==sigma2,vectorj=multimetau,vectorj={}]; vectorcaz1=vectorj; ,If[Intersection[x2,sigmax]¬{},j1=0;For[i=1,iLength[sigma],i++,j1=j1+sigma[[i,2]]*2^(tau-sigma[[i,1]])]; vectorj={};vectorj=Append[vectorj,j1]; If[tau==Length[sigma],vectorj={j1}, vector={};vectori1={}; For[i=1,iLength[sigma],i++,vectori1=Append[vectori1,sigma[[i,1]]]]; vectori=Complement[x1,vectori1];(*(indicii din diferenta)*) s=Length[vectori]; For[i=1,is,i++,lungimej=Length[vectorj]; For[k=1,klungimej,k++,partintr=IntegerPart[vectorj[[k]]/2^(tau-vectori[[i]])]; partintr=partintr+1; numar=vectorj[[k]]; If[Mod[partintr,2] 0,numar=numar-2^(tau-vectori[[i]]),numar=numar+2^(tau-vectori[[i]])];vectorj=Append[vectorj,numar]]]; vectorcaz2=vectorj;], sigma=sigma12; sigmax={}; For[i=1,iLength[sigma],i++,sigmax=Append[sigmax,sigma[[i,1]]]]; sigma1={};sigma2={}; For[i=1,iLength[sigma],i++,sigma1=Append[sigma1,sigma[[i,2]]]]; For[i=1,iLength[sigma],i++,jaja=IntegerPart[j/(2^(n-sigma[[i,1]]))]; If[Mod[jaja,2] 0,sigma2=Append[sigma2,0],sigma2=Append[sigma2,1]]]; If[sigma1==sigma2,vectorj=multimetau,vectorj={}]; vectorcaz1=vectorj; sigma=sigma11; sigmax={}; For[i=1,iLength[sigma],i++,sigmax=Append[sigmax,sigma[[i,1]]]];
151
If[Intersection[x2,sigmax]¬{},j1=0;For[i=1,i Length[sigma],i++,j1=j1+sigma[[i,2]]*2^(tau-sigma[[i,1]])]; vectorj={};vectorj=Append[vectorj,j1]; If[tau-Length[sigma] 0,vectorcaz2=vectorj;vectorj=Intersection[vectorcaz1,vectorcaz2];, vector={};vectori1={}; For[i=1,iLength[sigma],i++,vectori1=Append[vectori1,sigma[[i,1]]]]; vectori=Complement[x1,vectori1];(*(indicii din diferenta)*) s=Length[vectori]; For[i=1,is,i++,lungimej=Length[vectorj]; For[k=1,klungimej,k++,partintr=IntegerPart[vectorj[[k]]/2^(tau-vectori[[i]])]; partintr=partintr+1; numar=vectorj[[k]]; If[Mod[partintr,2] 0,numar=numar-2^(tau-vectori[[i]]),numar=numar+2^(tau-vectori[[i]])];vectorj=Append[vectorj,numar]]]; vectorcaz2=vectorj; vectorj=Intersection[vectorcaz1,vectorcaz2] ]]]]; vectorjfinal=Union[vectorjfinal,vectorj]; ]; Print["Vectorul J pentru J=",ij," este: ",vectorjfinal]]; timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."];
Codul sursă al programului de calculare a mulţimii J a derivatei funcţiei booleene (compartimentul 2.2.3). timp1=AbsoluteTime[]; vector={};numar=2^265-13;n=3000; vectorj={}; vectorj=Append[vectorj,numar]; vectori={1357,10,2582,1937,2987,30}; s=Length[vectori]; For[i=1,is,i++, lungimej=Length[vectorj]; For[j=1,jlungimej,j++, partintr=IntegerPart[vectorj[[j]]/2^(n-vectori[[i]])]; partintr=partintr+1; numar=vectorj[[j]]; If[Mod[partintr,2] 0,numar=numar-2^(n-vectori[[i]]),numar=numar+2^(n-vectori[[i]])];vectorj=Append[vectorj,numar]]]; vectorj timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."]; Codul sursă al programului de calculare a derivatei funcţiei booleene (compartimentul 2.2.3). tau=3; n=13;deriv={}; sf1={4,5,7}; card=2^n;card1=2^tau; variabile={3,1}; y={};For[i=1,icard1,i++,y=Append[y,i-1]]; For[k=1,kLength[variabile],k++,deriv={};sf0=Complement[y,sf1];sf=sf0; If[Length[sf1]<Length[sf0],sf=sf1]; For[j=1,j Length[sf],j++, partintr=IntegerPart[sf[[j]]/2^(tau-variabile[[k]])]+1; numar=sf[[j]]; If[Mod[partintr,2]0,vecin=numar-2^(tau-variabile[[k]]),vecin=numar+2^(tau-variabile[[k]])]; If[¬MemberQ[sf,vecin],deriv=Append[deriv,numar];deriv=Append[deriv,vecin]]; sf1=deriv]]; Sort[deriv]
152
Codul sursă al generatorului de numere prime (compartimentul 2.4) data12=Date[]; Print["Am nceput lucrul la ",Date[]]; tabelnou={};numcifretabelnou={}; numnumprime=2; contornumprom=0; While[contornumprom<numnumprime, data1=Date[]; Print["Numarul ",contornumprom+1]; nfb=9;
depozit1={3,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103}; ClearAll[i,i1,j,j1,l,t,t1,b,b1,q,q1,p,p1,s,s1]; ClearAll[exponentinitial]; diferentadecifre=0; contorrandom=1; depozit=depozit1; Array[α,nfb];Array[ni,nfb]; For[i=1,infb,i++,α[i]=i*exponentinitial+1]; cm=500; exponentinitial=0; numarcautat=1;
RandomRelist[xxxx_List]:=Block[{rand=xxxx,pppp},Do[pppp=Random[Integer,{1,iiii}];rand[[{pppp,iiii}]]=rand[[{iiii,pppp}]],{iiii,Length[xxxx]}];rand];
(Label["reluare"]; hhh=RandomRelist[Range[Length[depozit1]]]; For[j=1,jnfb,j++,depozit[[j]]=depozit1[[hhh[[j]]]]]; For[j=1,jnfb,j++,numarcautat=numarcautat*depozit[[j]]^α[j];];
While[Length[IntegerDigits[numarcautat]]<cm,cm1=Length[IntegerDigits[numarcautat]]; numarcautat=1;exponentinitial=exponentinitial+1;For[j=1,jnfb,j++, numarcautat=numarcautat*depozit[[j]]^α[j]];];
cm1=Length[IntegerDigits[numarcautat]]; For[j=1,jnfb,j++,ni[j]=exponentinitial]; For[i=1,infb,i++,α[i]=i*ni[i]+1]; For[j=1,jnfb,j++,While[Length[IntegerDigits[numarcautat]]>cm&&ni[j]>0,ni[j]=ni[j]-1;numarcautat=1; For[j1=1,j1 nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)];If[Length[IntegerDigits[numarcautat]]<cm,ni[j]=ni[j]+1]]];
numarcautat=1; For[j1=1,j1nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)];
If[Length[IntegerDigits[numarcautat]]>cm,ni[nfb]=ni[nfb]-1]; numarcautat=1;For[j1=1,j1nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)];
If[Length[IntegerDigits[numarcautat]]<cm,ni[nfb]=ni[nfb]+1]; Array[ni,nfb];numarcautat=1; For[j1=1,j1nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)]; Array[ni,nfb];cm1=Length[IntegerDigits[numarcautat]];
If[cm1-cm>diferentadecifre||cm1-cm<0,contorrandom=contorrandom+1;Goto["reluare"]]); nnm=numarcautat; baz=Table[depozit[[j1]],{j1,nfb}]; exp=Table[j1*ni[j1]+1,{j1,nfb}]; d=nfb;mmm=Table[{,},{d}]; Do[mmm[[i,1]]=baz[[i]];mmm[[i,2]]=exp[[i]],{i,d}]; mm=Sort[mmm];
Print["Nucleul oferit este mm=",mm," si are ",Length[IntegerDigits[numarcautat]]," cifre " ]; data2=Date[]; datamodul2=Date[]; data3=data2[[3]]*3600*24+data2[[4]]*3600+data2[[5]]*60+data2[[6]]; data4=data1[[3]]*3600*24+data1[[4]]*3600+data1[[5]]*60+data1[[6]]; data5=data3-data4; zile=IntegerPart[data5/(3600*24)]; ore=IntegerPart[data5/3600]; inute=IntegerPart[data5/60]-ore*60; secunde=data5-(zile*3600*24+ore*3600+minute*60); (*Simplu la maximum*)
Print["................ Programul Simplu la Maximum ....................."]; nnm=numarcautat; d=numarcautat; n=1;
For[i=n,in+100000000,i++, qwerty=0; prim=1+(2*(i-1)*(2*i-3)-(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ", Length[IntegerDigits[prim]]," cifre axa 1"," k=",FactorInteger[(prim-1)/d]]];
If[qwerty==1,break[];Goto[modulul2]]; prim=1+2*(i-1)*(2*i-3)*d;
153
If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ", Length[IntegerDigits[prim]]," cifre diagonala 1"," k=",FactorInteger[(prim-1)/d]]];
If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-3)+(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ",
Length[IntegerDigits[prim]]," cifre axa 2"," k=",FactorInteger[(prim-1)/d]]]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+4*(i-1)2*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ",
Length[IntegerDigits[prim]]," cifre diagonala 2"," k=",FactorInteger[(prim-1)/d]]]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-1)-(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ",
Length[IntegerDigits[prim]]," cifre axa 3"," k=",FactorInteger[(prim-1)/d]]]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+2*(i-1)*(2*i-1)*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ",
Length[IntegerDigits[prim]]," cifre diagonala 3"," k=",FactorInteger[(prim-1)/d]]]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-1)+(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ",
Length[IntegerDigits[prim]]," cifre axa 4"," k=",FactorInteger[(prim-1)/d]]]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(4*i*(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;Print[];k=(prim-1)/d;Print[i," ",prim," ",
Length[IntegerDigits[prim]]," cifre diagonala 4"," k=",FactorInteger[(prim-1)/d]]]; If[qwerty==1,break[];Goto[modulul2]];]; Label[modulul2]; data2=Date[]; datamodul3=Date[]; data3=data2[[3]]*3600*24+data2[[4]]*3600+data2[[5]]*60+data2[[6]];
data4=datamodul2[[3]]*3600*24+datamodul2[[4]]*3600+datamodul2[[5]]*60+datamodul2[[6]]; data5=data3-data4; zile=IntegerPart[data5/(3600*24)]; ore=IntegerPart[data5/3600]; minute=IntegerPart[data5/60]-ore*60; secunde=data5-(zile*3600*24+ore*3600+minute*60); Print["............................Testarea..................................."]; Print["k=",k,"=",FactorInteger[k]]; km=FactorInteger[k]; lmm=Length[mm]; lkm=Length[km]; j=1; Label[iute];While[j<=lkm, For[i=1,ilmm,i++, If[km[[j,1]] mm[[i,1]], mm[[i,2]]=mm[[i,2]]+km[[j,2]];j=j+1;Goto[iute]];]; mm= Append[mm,km[[j]]];j=j+1]; mp= mm;dim=Length[mp];mp=Sort[mp];mp1=mp; Print[" t-1 = k*mm= ",mp]; Do[mp[[i]]=Reverse[mp[[i]]],{i,dim}];mp=Sort[mp]; Print["t=",t]; Print["========================================"];
au={2,3,5,6,7,10,11,12,13,14,15,17,18,19,20,21,22,21,24,26,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100}; lua=Length[au];
b=1; a=au[[b]]; rest1=1; If[rest1==1, b=1; Label[repet]; a=au[[b]]; rest1=PowerMod[a,t-1,t]; If[rest1==1, For[i=1,iLength[mp1],i++, If[PowerMod[a,(t-1)/mp1[[i,1]],t]==1,
b=b+1;If[b<lua,Goto[repet]],If[(i==Length[mp1])&&(b lua),Print[]; contornumprom=contornumprom+1;tabelnou=Append[tabelnou,prim]; numcifretabelnou=Append[numcifretabelnou,Length[IntegerDigits[prim]]]]]],Print["Numarul dat nu este prim!!!"]],
Print["Numarul dat nu este prim!!!"]]; data2=Date[]; data3=data2[[3]]*3600*24+data2[[4]]*3600+data2[[5]]*60+data2[[6]];
154
data4=datamodul3[[3]]*3600*24+datamodul3[[4]]*3600+datamodul3[[5]]*60+datamodul3[[6]]; data5=data3-data4; zile=IntegerPart[data5/(3600*24)]; ore=IntegerPart[data5/3600]; minute=IntegerPart[data5/60]-ore*60; secunde=data5-(zile*3600*24+ore*3600+minute*60);
data2=Date[]; data3=data2[[3]]*3600*24+data2[[4]]*3600+data2[[5]]*60+data2[[6]]; data4=data1[[3]]*3600*24+data1[[4]]*3600+data1[[5]]*60+data1[[6]]; data5=data3-data4; zile=IntegerPart[data5/(3600*24)]; ore=IntegerPart[data5/3600]; minute=IntegerPart[data5/60]-ore*60;secunde=data5-(zile*3600*24+ore*3600+minute*60); ]
Print["Am obtinut urmatoarele ",numnumprime," numere prime:"]; Print[tabelnou]; Print["Numarul de cifre respectiv:"]; Print[numcifretabelnou]; data2=Date[]; data3=data2[[3]]*3600*24+data2[[4]]*3600+data2[[5]]*60+data2[[6]]; data4=data12[[3]]*3600*24+data12[[4]]*3600+data12[[5]]*60+data12[[6]]; data5=data3-data4;zile=IntegerPart[data5/(3600*24)]; ore=IntegerPart[data5/3600];minute=IntegerPart[data5/60]-ore*60; secunde=data5-(zile*3600*24+ore*3600+minute*60);
Print["In total au trecut ","Au trecut ",zile," zile, ",ore," ore, ",minute," minute, ",secunde," secunde."]; Codul sursă al generatorului de chei pentru algoritmul Cripto 1 (compartimentul 3.1). timp1=AbsoluteTime[]; tabelnou={};numcifretabelnou={}; numnumprime=50;numarnou=2;contornumprom=0; While[contornumprom<numnumprime, nfb=10; depozit1={3,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103}; ClearAll[i,i1,j,j1,l,t,t1,b,b1,q,q1,p,p1,s,s1]; ClearAll[exponentinitial]; diferentadecifre=0; contorrandom=1; depozit=depozit1; Array[α,nfb];Array[ni,nfb]; For[i=1,infb,i++, α[i]=i*exponentinitial+1]; cm=150; exponentinitial=0; numarcautat=1; RandomRelist[xxxx_List]:=Block[{rand=xxxx,pppp},Do[pppp=Random[Integer,{1,iiii}]; rand[[{pppp,iiii}]]=rand[[{iiii,pppp}]],{iiii,Length[xxxx]}];rand]; (Label["reluare"]; hhh=RandomRelist[Range[Length[depozit1]]]; For[j=1,jnfb,j++,depozit[[j]]=depozit1[[hhh[[j]]]]]; For[j=1,jnfb,j++,numarcautat=numarcautat*depozit[[j]]^α[j];]; numarcautat; While[Length[IntegerDigits[numarcautat]]<cm,cm1=Length[IntegerDigits[numarcautat]]; numarcautat=1;exponentinitial=exponentinitial+1; For[j=1,jnfb,j++,numarcautat=numarcautat*depozit[[j]]^α[j]];]; cm1=Length[IntegerDigits[numarcautat]]; For[j=1,jnfb,j++,ni[j]=exponentinitial]; For[i=1,infb,i++,α[i]=i*ni[i]+1]; For[j=1,jnfb,j++,While[Length[IntegerDigits[numarcautat]]>cm&&ni[j]>0,ni[j]=ni[j]-1;numarcautat=1; For[j1=1,j1nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)];If[Length[IntegerDigits[numarcautat]]<cm,ni[j]=ni[j]+1]]]; numarcautat=1; For[j1=1,j1nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)]; If[Length[IntegerDigits[numarcautat]]>cm,ni[nfb]=ni[nfb]-1]; numarcautat=1;For[j1=1,j1 nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)]; If[Length[IntegerDigits[numarcautat]]<cm,ni[nfb]=ni[nfb]+1]; Array[ni,nfb]; numarcautat=1; For[j1=1,j1nfb,j1++,numarcautat=numarcautat*depozit[[j1]]^(j1*ni[j1]+1)]; Array[ni,nfb]; cm1=Length[IntegerDigits[numarcautat]]; If[cm1-cm>diferentadecifre||cm1-cm<0,contorrandom=contorrandom+1;Goto["reluare"]]); nnm=numarcautat;
155
baz=Table[depozit[[j1]],{j1,nfb}]; exp=Table[j1*ni[j1]+1,{j1,nfb}]; d=nfb;mmm=Table[{,},{d}]; Do[mmm[[i,1]]=baz[[i]];mmm[[i,2]]=exp[[i]],{i,d}]; mm=Sort[mmm]; (*Simplu la maximum*) nnm=numarcautat; d=numarcautat; n=1; For[i=n,in+100000000,i++, qwerty=0; prim=1+(2*(i-1)*(2*i-3)-(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+2*(i-1)*(2*i-3)*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-3)+(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+4*(i-1)2*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-1)-(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+2*(i-1)*(2*i-1)*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-1)+(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(4*i*(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; ]; Label[modulul2]; km=FactorInteger[k]; lmm=Length[mm]; lkm=Length[km]; j=1; Label[iute];While[j<=lkm, For[i=1,ilmm,i++, If[km[[j,1]] mm[[i,1]], mm[[i,2]]=mm[[i,2]]+km[[j,2]];j=j+1;Goto[iute]];]; mm= Append[mm,km[[j]]];j=j+1]; mp= mm;dim=Length[mp];mp=Sort[mp];mp1=mp; Do[mp[[i]]=Reverse[mp[[i]]],{i,dim}];mp=Sort[mp]; au={2,3,5,6,7,10,11,12,13,14,15,17,18,19,20,21,22,21,24,26,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100};lua=Length[au]; b=1; a=au[[b]]; rest1=1; If[rest1==1, b=1; Label[repet]; a=au[[b]]; rest1=PowerMod[a,t-1,t]; If[rest1==1, For[i=1,iLength[mp1],i++, If[PowerMod[a,(t-1)/mp1[[i,1]],t] 1, b=b+1;If[b<lua,Goto[repet]],If[(i==Length[mp1])&&(b lua),contornumprom=contornumprom+1; tabelnou=Append[tabelnou,prim];numcifretabelnou=Append[numcifretabelnou,Length[IntegerDigits[prim]]]]]]] ]; ] (*--------------------------------Partea 2--------------------------------*) depozit1=tabelnou;listak={};hhhnou=RandomRelist[Range[Length[depozit1]]]; tabelnou={};numcifretabelnou={}; numarperechi=5; numnumprime=numarperechi*2; contornumprom=0;While[contornumprom<numnumprime, nfb=numarnou; ClearAll[i,i1,j,j1,l,t,t1,b,b1,q,q1,p,p1,s,s1]; ClearAll[exponentinitial]; diferentadecifre=0; contorrandom=1; depozit=depozit1; exponentinitial=0; numarcautat=1; RandomRelist[xxxx_List]:=Block[{rand=xxxx,pppp},Do[pppp=Random[Integer,{1,iiii}];rand[[{pppp,iiii}]]=rand[[{iiii,pppp}]],{iiii,Length[xxxx]}];rand]; hhh=RandomRelist[Range[Length[depozit1]]];
156
For[j=1,jnfb,j++,depozit[[j]]=depozit1[[hhh[[j]]]]]; For[j=1,jnfb,j++,numarcautat=numarcautat*depozit[[j]]]; cm=Length[IntegerDigits[numarcautat]]; nnm=numarcautat; baz=Table[depozit[[j1]],{j1,nfb}]; (* Exponentii sunt egali cu 1!!!*) exp=Table[1,{j1,nfb}]; d=nfb;mmm=Table[{,},{d}]; Do[mmm[[i,1]]=baz[[i]];mmm[[i,2]]=exp[[i]],{i,d}]; mm=Sort[mmm]; (*Simplu la maximum*) nnm=numarcautat; d=numarcautat; n=1; For[i=n,in+100000000,i++, qwerty=0; prim=1+(2*(i-1)*(2*i-3)-(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+2*(i-1)*(2*i-3)*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-3)+(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+4*(i-1)2*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-1)-(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+2*(i-1)*(2*i-1)*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(2*(i-1)*(2*i-1)+(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; prim=1+(4*i*(i-1))*d; If[PrimeQ[prim],t=prim;qwerty=1;k=(prim-1)/d;]; If[qwerty==1,break[];Goto[modulul2]]; ]; Label[modulul2]; km=FactorInteger[k]; contor1=0; For[i=1,iLength[tabelnou],i++,If[primtabelnou[[i]],contor1=contor1+1]]; If[contor10, lmm=Length[mm]; lkm=Length[km]; j=1; Label[iute];While[j<=lkm, For[i=1,ilmm,i++, If[km[[j,1]] mm[[i,1]], mm[[i,2]]=mm[[i,2]]+km[[j,2]];j=j+1;Goto[iute]];]; mm= Append[mm,km[[j]]];j=j+1]; For[i=1,ilkm,i++,listak= Append[listak,km[[i]]]]; mp= mm;dim=Length[mp];mp=Sort[mp];mp1=mp; Do[mp[[i]]=Reverse[mp[[i]]],{i,dim}];mp=Sort[mp]; au={2,3,5,6,7,10,11,12,13,14,15,17,18,19,20,21,22,21,24,26,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100};lua=Length[au]; b=1; a=au[[b]]; rest1=1; If[rest1==1, b=1; Label[repet]; a=au[[b]]; rest1=PowerMod[a,t-1,t]; If[rest1==1, For[i=1,iLength[mp1],i++, If[PowerMod[a,(t-1)/mp1[[i,1]],t] 1, b=b+1;If[b<lua,Goto[repet]],If[(i==Length[mp1])&&(b lua),contornumprom=contornumprom+1;tabelnou=Append[tabelnou,prim];numcifretabelnou=Append[numcifretabelnou,Length[IntegerDigits[prim]]]]]]]]]; ] pmare={};qmare={};numcifree={};einitial={}; For[i=1,i<=numnumprime/2,i++,pmare=Append[pmare,tabelnou[[i]]]]; For[i=numnumprime/2+1,i<=numnumprime,i++,qmare=Append[qmare,tabelnou[[i]]]];
157
For[i=1,i<=numnumprime/2,i++,einitial=Append[einitial,IntegerPart[Log[(pmare[[i]]*qmare[[i]])/Log[9]]]];numcifree=Append[numcifree,Length[IntegerDigits[IntegerPart[Log[(pmare[[i]]*qmare[[i]])/Log[9]]]]]]]; (*Print["Vectorul E initial este: ",einitial]; Print["Numarul de cifre al lui E ste : ",numcifree];*) listapentrue={}; For[i=1,inumarperechi,i++,copk=1;While[copk0,copk=0;einitial[[i]]=NextPrime[einitial[[i]]];For[j=1,jLength[listak],j++,If[einitial[[i]] listak[[j,1]],copk=copk+1]]; If[copk0,listapentrue=Append[listapentrue,einitial[[i]]]]]]; vectorule={};vectoruld={}; For[i=1,i<=numarperechi,i++,p=pmare[[i]];q=qmare[[i]]; f=(p-1)*(q-1); e=listapentrue[[i]]; b=e; contord=0; k=0; While[contord<1,k=k+1;a=1+k*f;If[Mod[a,b] 0,contord=contord+1;d=a/b;]]; vectorule=Append[vectorule,e];vectoruld=Append[vectoruld,d]] vectoruln={}; For[i=1,i<=numarperechi,i++,vectoruln=Append[vectoruln,pmare[[i]]*qmare[[i]]]]; biti={}; For[i=1,i<=numarperechi,i++,biti=Append[biti,Length[IntegerDigits[vectoruln[[i]],2]]]] Print["Vectorul E este: "]; Print[vectorule]; Print["Vectorul D este: "]; Print[vectoruld]; Print["Vectorul N este: "]; Print[vectoruln]; Print["Bitii vectorului N sunt: "]; Print[biti]; timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."] Codul sursă al codificarorului algoritmului Cripto 1 (compartimentul 3.1). t1=AbsoluteTime[]; submsimboluri="textul"; t=StringLength[submsimboluri]; textdinnumere=ToCharacterCode[submsimboluri]; (*Print["Textul codificat este> ",textdinnumere];*) vectorulm=textdinnumere; vectorule={-se înscriu coordonatele vectorului e-} vectoruln={-se înscriu coordonatele vectorului n-}; lungimecheie=Length[vectoruln]; vectorulc={}; numarintreg=IntegerPart[t/lungimecheie]; restul=t-lungimecheie*numarintreg; For[inou=1,inounumarintreg,inou++, For[i=1,ilungimecheie,i++,c=PowerMod[vectorulm[[lungimecheie*(inou-1)+i]],vectorule[[i]],vectoruln[[i]]];vectorulc=Append[vectorulc,c]]]; For[i=1,irestul,i++,c=PowerMod[vectorulm[[lungimecheie*(inou-1)+i]],vectorule[[i]],vectoruln[[i]]]; vectorulc=Append[vectorulc,c]]ş Print["Vectorul C este: "]; Print[vectorulc]; t2=AbsoluteTime[]; Print["In total au trecut ",t2-t1 ," secunde."]; Codul sursă al decodificarorului algoritmului Cripto 1 (compartimentul 3.1). t1=AbsoluteTime[]; vectoruld={-se înscriu coordonatele vectorului d-}; vectoruln={-se înscriu coordonatele vectorului n-}; vectorulc={-se înscriu coordonatele vectorului c-}; lungimecheie=Length[vectoruld]; t=Length[vectorulc]; vectorulm={}; numarintreg=IntegerPart[t/lungimecheie];
158
restul=t-lungimecheie*numarintreg; For[inou=1,inounumarintreg,inou++, For[i=1,ilungimecheie,i++,m=PowerMod[vectorulc[[lungimecheie*(inou-1)+i]],vectoruld[[i]],vectoruln[[i]]];vectorulm=Append[vectorulm,m]]]; For[i=1,irestul,i++,m=PowerMod[vectorulc[[lungimecheie*(inou-1)+i]],vectoruld[[i]],vectoruln[[i]]];vectorulm=Append[vectorulm,m]]; (*Print["Vectorul M este: ",vectorulm];*) text=FromCharacterCode[vectorulm]; Print["Textul decodificat este: "]; Print[text]; t2=AbsoluteTime[]; Print["In total au trecut ",t2-t1 ," secunde."]; Codul sursă al algorimului Cripto 2 (compartimentul 3.2). t1=AbsoluteTime[]; textul="-se introduce mesajul pentru criptare-"; t=StringLength[textul]; If[PrimeQ[t],t=t+1]; factori=FactorInteger[t]; factoriputeri={}; For[i=1,iLength[factori],i++,factoriputeri=Append[factoriputeri,factori[[i,1]]^factori[[i,2]]]]; a=Max[factoriputeri];b=t/a;a=Max[b,a];b=t/a; Print["a=",a]; Print["b=",b]; vectorulm=ToCharacterCode[textul]; factori=FactorInteger[Length[vectorulm]]; baza=3704967094349503434556768789807876246246452103549875251520; matrcod=Table[1,{i,1,a},{j,1,b}]; contorvectorulm=0; For[i=1,ia,i++,For[j=1,jb,j++,contorvectorulm=contorvectorulm+1; matrcod[[i,j]]=vectorulm[[contorvectorulm]]]]; MatrixForm[matrcod];vectorulg={}; For[i=1,ia,i++,gintermed=0;For[j=1,jb,j++,gintermed=gintermed+(matrcod[[i,j]])*baza^(b-j)];vectorulg=Append[vectorulg,gintermed]]; vectorulg=Append[vectorulg,a];vectorulg=Append[vectorulg,b];submsimboluri=ToString[baza]; t=StringLength[submsimboluri];textdinnumere=ToCharacterCode[submsimboluri]; (*Print["Textul codificat este> ",textdinnumere];*) vectorulm=textdinnumere; vectorule={-se introduc coordonatele vectorului e pentru criptarea cheii private-}; vectoruln={-se introduc coordonatele vectorului n pentru criptarea cheii private-}; lungimecheie=Length[vectoruln]; vectorulc={};numarintreg=IntegerPart[t/lungimecheie];restul=t-lungimecheie*numarintreg; For[inou=1,inounumarintreg,inou++, For[i=1,ilungimecheie,i++,c=PowerMod[vectorulm[[lungimecheie*(inou-1)+i]],vectorule[[i]],vectoruln[[i]]]; vectorulc=Append[vectorulc,c]]]; For[i=1,irestul,i++,c=PowerMod[vectorulm[[lungimecheie*(inou- 1)+i]],vectorule[[i]],vectoruln[[i]]]; vectorulg=Append[vectorulg,c]]; vectorulg=Append[vectorulg,Length[IntegerDigits[baza]]]; (*Print["Vectorul G este: "]; Print[vectorulg]; Print["a=",a]; Print["b=",b];*) t2=AbsoluteTime[]; Print["Criptare In total au trecut ",t2-t1 ," secunde."]; (*DECRIPTARE*) t1=AbsoluteTime[]; baza=vectorulg[[Length[vectorulg]]];a=vectorulg[[Length[vectorulg]-(baza+2)]];b=vectorulg[[Length[vectorulg]-(baza+1)]]; matrcod=Table[1,{i,1,a},{j,1,b}]; vectoruld={-se introduc coordonatele vectorului d pentru decriptarea cheii private-}; vectorulc={-se introduc coordonatele vectorului c pentru decriptarea cheii private-};
159
For[i=1,ibaza,i++,vectorulc=Prepend[vectorulc,vectorulg[[Length[vectorulg]-(i)]]]]; lungimecheie=Length[vectoruld]; t=Length[vectorulc]; vectorulm={}; numarintreg=IntegerPart[t/lungimecheie]; restul=t-lungimecheie*numarintreg; For[inou=1,inounumarintreg,inou++, For[i=1,ilungimecheie,i++,m=PowerMod[vectorulc[[lungimecheie*(inou-1)+i]],vectoruld[[i]],vectoruln[[i]]];vectorulm=Append[vectorulm,m]]]; For[i=1,irestul,i++,m=PowerMod[vectorulc[[lungimecheie*(inou-1)+i]],vectoruld[[i]],vectoruln[[i]]];vectorulm=Append[vectorulm,m]]; baza=FromCharacterCode[vectorulm]; baza=FromDigits[baza]; For[i=1,ia,i++,matrcod[[i]]=IntegerDigits[vectorulg[[i]],baza]] MatrixForm[matrcod]; contorvectorulm=0; vectorulm={}; For[i=1,ia,i++,For[j=1,jb,j++,contorvectorulm=contorvectorulm+1; vectorulm=Append[vectorulm,matrcod[[i,j]]]]]; vectorulm; text=FromCharacterCode[vectorulm]; (*Print["Textul decodificat este: "]; Print[text];*) t2=AbsoluteTime[]; Print["Decriptare In total au trecut ",t2-t1 ," secunde."]; Codul sursă al algorimului Cripto 3 (compartimentul 3.3). timp1=AbsoluteTime[]; submsimboluri="se introduce mesajul criptat"; m=ToCharacterCode[submsimboluri]; t=Length[m];n=Ceiling[Log[2,t]];k=Ceiling[Log[2,Max[m]]]; m2={}; Print["t=",t,"; n=",n,"; k=",k]; RandomRelist[xxxx_List]:=Block[{rand=xxxx,pppp},Do[pppp=Random[Integer,{1,iiii}];rand[[{pppp,iiii}]]=rand[[{iiii,pppp}]],{iiii,Length[xxxx]}];rand]; tau=3;k=k; cardtau=2^tau; Print["k=",k] Print["key[i] {0,1,2,...,",2^tau-1,"}"]; key={}; For[i=1,i k,i++,numb=RandomInteger[cardtau];subm1=RandomRelist[Range[cardtau]]-1; submkey=Drop[subm1,-(cardtau-numb)];submkey=Sort[submkey];key=Append[key,submkey]]; Print["Cheia este: "]; Print[key]; reuniunekey={}; For[i=1,ik,i++,reuniunekey=Union[reuniunekey,key[[i]]]] If[Length[reuniunekey]<cardtau,i23=RandomInteger[cardtau];key[[i23]]=Union[key[[i23]],Complement[b,reuniunekey]]]; t1=2^(n-tau); b={};For[i=1,i2tau,i++,b=Append[b,i-1]];c={};m2={}; For[i=1,it,i++,m1=IntegerDigits[m[[i]],2];If[Length[m1]<k,dif=k-Length[m1];For[j=1,jdif,j++,m1=Prepend[m1,0]]];m2={};int=IntegerPart[(i-1)/t1]; For[j=1,jk,j++,If[MemberQ[key[[j]],int],m2=Append[m2,1],m2=Append[m2,0]]];m3=Mod[m1+m2,2]; c=Append[c,FromDigits[m3,2]]]; Print["Textul codificat este: "]; Print[c]; Print["Decodificarea imediat este: "] FromCharacterCode[c] textul=ToString[key]; (* Criptare cheie *) numcifbaza=50;
160
t=StringLength[textul];t1=t; Print["Num rul de simboluri n CHEIE este t=",t]; If[PrimeQ[t],textul=textul<>"*";t=StringLength[textul];Print["Num rul nou de simboluri (avem num r prim de simboluri) este t=",t]]; factori=FactorInteger[t];factoriputeri={}; For[i=1,iLength[factori],i++,factoriputeri=Append[factoriputeri,factori[[i,1]]^factori[[i,2]]]]; a=Max[factoriputeri]; If[Length[factori]1,a=factori[[1,1]]^IntegerPart[factori[[1,2]]/3]] b=t/a;a=Max[b,a];b=t/a; baza=RandomInteger[{10numcifbaza-1+1,10numcifbaza}]; vectorulm=ToCharacterCode[textul]; factori=FactorInteger[Length[vectorulm]]; matrcod=Table[1,{i,1,a},{j,1,b}]; contorvectorulm=0; For[i=1,ia,i++,For[j=1,jb,j++,contorvectorulm=contorvectorulm+1; matrcod[[i,j]]=vectorulm[[contorvectorulm]]]]; MatrixForm[matrcod]; vectorulg={}; For[i=1,ia,i++,gintermed=0;For[j=1,jb,j++,gintermed=gintermed+(matrcod[[i,j]])*baza^(b-j)];vectorulg=Append[vectorulg,gintermed]]; vectorulg=Append[vectorulg,baza];vectorulg=Append[vectorulg,a];vectorulg=Append[vectorulg,b]; vectorulg1={};vectorulg1=Prepend[vectorulg1,vectorulg];vectorulg1=Prepend[vectorulg1,c]; Print["Vectorul G este: "]; Print[vectorulg1]; factori; timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."] (* Decriptarea *) timp1=AbsoluteTime[]; vectorulg1={se introduce criptograma}; vectorulg=vectorulg1[[2]]; baza=vectorulg[[Length[vectorulg]-2]]; a=vectorulg[[Length[vectorulg]-1]];b=vectorulg[[Length[vectorulg]]]; matrcod=Table[1,{i,1,a},{j,1,b}]; vectorulc={};vectorulc=Drop[vectorulg,-2]; For[i=1,ia,i++,matrcod[[i]]=IntegerDigits[vectorulg[[i]],baza]]; MatrixForm[matrcod]; contorvectorulm=0;vectorulm={}; For[i=1,ia,i++,For[j=1,jb,j++,contorvectorulm=contorvectorulm+1; vectorulm=Append[vectorulm,matrcod[[i,j]]]]]; If[vectorulm[[Length[vectorulm]]] 42,vectorulm=Delete[vectorulm,Length[vectorulm]]]; key=FromCharacterCode[vectorulm]; key=ToExpression[key]; Print["Cheia decodificat este: "]; Print[key]; k=Length[key]; c=vectorulg1[[1]];t=Length[c];n=Ceiling[Log[2,t]];reuniunekey={}; For[i=1,i k,i++,reuniunekey=Union[reuniunekey,key[[i]]]] tau=Log[2,Length[reuniunekey]];t1=2^(n-tau);m2={}; Print["t=",t,"; n=",n,"; k=",k]; m5={};m2={}; For[i=1,it,i++,m1=IntegerDigits[c[[i]],2];If[Length[m1]<k,dif=k-Length[m1]; For[j=1,jdif,j++,m1=Prepend[m1,0]]]; m2={};For[j=1,jk,j++,int=IntegerPart[(i-1)/t1]; If[MemberQ[key[[j]],int],m2=Append[m2,1],m2=Append[m2,0]]]; m3=Mod[m1+m2,2];m5=Append[m5,FromDigits[m3,2]]]; FromCharacterCode[m5] timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."]
161
Codul sursă a unei variante simplificate a algorimului Cripto 4 (compartimentul 3.4). timp1=AbsoluteTime[]; submsimboluri="mesajul"; q=2; tau=5; m=ToCharacterCode[submsimboluri];t=Length[m];n=Ceiling[Log[q,t]];k=Ceiling[Log[q,Max[m]]]; mmax=Max[m]; m2={}; Print["t=",t,"; n=",n,"; k=",k]; RandomRelist[xxxx_List]:=Block[{rand=xxxx,pppp},Do[pppp=Random[Integer,{1,iiii}];rand[[{pppp,iiii}]]=rand[[{iiii,pppp}]],{iiii,Length[xxxx]}];rand]; k=k+0; exp1=q^tau; exp2=q^k-1; key={}; For[i=1,iexp1,i++,key=Append[key,RandomInteger[{1,exp2}]]]; keymax=Max[key]; k1=Max[{Length[IntegerDigits[mmax,q]],Length[IntegerDigits[keymax,q]]}]; Print["Cheia este:"]; Print[key]; c={};m2={}; For[i=1,it,i++,j1=Mod[i-1,exp1]+1;m1=IntegerDigits[m[[i]],q];If[Length[m1]<k1,dif=k1-Length[m1];For[j=1,jdif,j++,m1=Prepend[m1,0]]];m2=IntegerDigits[key[[j1]],q]; If[Length[m2]<k1,dif=k1-Length[m2];For[j=1,jdif,j++,m2=Prepend[m2,0]]]; m3=Mod[m1+m2,q];c=Append[c,FromDigits[m3,q]]]; Print["Criptograma este:"]; codcod=FromCharacterCode[c]; Print[InputForm[codcod]]; timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."] timp1=AbsoluteTime[]; c=ToCharacterCode[codcod]; t=Length[c];n=Ceiling[Log[q,t]]; exp1=Length[key]; exp2=q^k-1;tau=Log[q,exp1]; m2={};mmax=Max[m];keymax=Max[key]; Print["t=",t,"; n=",n,"; k=",k] k1=Max[{Length[IntegerDigits[mmax,q]],Length[IntegerDigits[keymax,q]]}]; m5={};m2={}; For[i=1,it,i++,j1=Mod[i-1,exp1]+1;m1=IntegerDigits[c[[i]],q];If[Length[m1]<k1,dif=k1-Length[m1];For[j=1,jdif,j++,m1=Prepend[m1,0]]];m2=IntegerDigits[key[[j1]],q];If[Length[m2]<k1,dif=k1-Length[m2];For[j=1,jdif,j++,m2=Prepend[m2,0]]];m3=Mod[m1-m2+q,q];m5=Append[m5,FromDigits[m3,q]]]; Print["Textul decodificat este:"] FromCharacterCode[m5] timp2=AbsoluteTime[]; Print["In total au trecut ",timp2-timp1 ," secunde."]
162
DECLARAŢIA PRIVIND ASUMAREA RĂSPUNDERII Subsemnatul, declar pe proprie răspundere că materialele prezentate în teza de doctorat, se referă
la propriile activități și realizări, în caz contrar urmând să suport consecințele, în conformitate cu
legislația în vigoare.
Numele de familie, prenumele: Zgureanu Aureliu
Semnătura:
Data: 15.10.2011
163
CV AL AUTORULUI
Zgureanu Aureliu Adresa: Republica Moldova, m. Chișinău, c. Bubuieci, str. D. Cantemir 20/2 Telefon: +373 415755, +373 79234829 (mob.) Email: [email protected], [email protected] Data și locul nașterii: 10 noiembrie 19870, s. Gura Camencii, r. Florești, Rep. Moldova Studii: Iunie 1987, Absolvent al ȘM Gura Camnecii Iulie 1992, Absolvent al USM, matematician, profesor 2008-2011, Doctorand la specialitatea 01.01.09 (Cibernetică Matematică și Cercetări Operaționale)
Activitatea profesională
Iunie 1992-Iulie 1994, profesor, ȘM nr. 63, Chișinău Iulie 1994 - Noiembrie 1996, inginer pe pregătirea cadrelor, Moldovahidromaș Noiembrie 1996 - August 2000, profesor de matematică și informatică, Colegiul Tehnic August 2003 - Aprilie 2003, lector, Universitatea de Criminologie Iulie 2003 - 2011, lector superior ATIC
Domenii de activitate științifică
Teoria numerelor, Mulțimi de relații multi-are, Funcţii Booleene, Metode de criptare
Participări la foruri științifice internaționale
1. The XIVth Conference on Applied and Industrial Mathematics, Satellite Conference of the ICM, Chisinau 2006.
2. International Algebraic Conference dedicated to the 100th anniversary of D. K. Faddeev. St Petersburg, Russia, 2007.
3. ASADE Moldova, August 21, 2007. 4. Conferinţa ştiinţifică internaţională „Modelare matematică, optimizare şi
tehnologii informaţionale”. Chişinau, 19-21 martie, 2008. ATIC. 5. Системы управления, контроля и измерений (УКИ-08), Российская
Конференция с международным участием, Москва ИПУ РАН, 2008. 6. Conferinţa Internaţională ICT+ “TEHNOLOGII INFORMAŢIONALE ŞI DE
COMUNICAŢII - 2009”. 19 – 20 MAI 2009, or. CHIŞINĂU. 7. Conferinţa „Managementul întreprinderii în mediul economic contemporan”. 24-
25 septembrie, 2009. Chişinău. 8. Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare şi tehnologii
informaţionale. Chişinau, 26-28 martie, 2010 9. „Tiberiu Popoviciu seminar”, Cluj-Napoca 6-7 september, 2010. 10. International Student Conference on Pure and Applied Mathematics (ISCOPAM),
Iaşi, July 12-16, 2010. 11. MITRE-2011, International Conference dedicated to the 65th anniversary of
Moldova State University, Chişinău, 2011.
Lucrări științifice publicate
1. Bulat, M., Leon,D., Bivol, L., Ciobanu I., Zgureanu,A..(2006) ”Generadores de numeros primos y factorizadores de numeros compuestos” Revista de Matematica: Teoria y Aplicaciones, 2006 ,13(1) CIMPA-UCR-CCSS: pp. 1-15.
2. Bulat, M.; Zgureanu, A.; Ciobanu, I.; Bivol, L. (2006) “A method for obtaining arbitrary form prime numbers”, Satellite Conference of the ICM 2006. The XIVth Conference on Applied and Industrial Mathematics, Chisinau: pp. 70–73.
3. Bulat M., Zgureanu A., Ciobanu I., Bivol L. Generating of prime numbers based on the multidimensional matrices. International Algebraic Conference dedicated to the 100th anniversary of D. K. Faddeev. St Petersburg, Russia, 2007, pp. 98-99.
4. Bulat M., Zgureanu A., Ciobanu I., Bivol L. The inverse transformations of multidimensional matrices. ASADE Moldova, August 21, 2007, pag. 34-34.
5. Bulat M., Zgureanu A., Ciobanu I., Bivol L. Sisteme de criptare cu chei vectoriale. Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare şi tehnologii informaţionale. Chişinau, 19-21 martie, 2008. ATIC, pp. 281 – 285.
6. Булат М.С., Згуряну А.Ф., Чобану Я.И., Бивол Л.Г. Крипто-системы на базе n-арных отношений. Системы управления, контроля и измерений (УКИ-08), Российская Конференция с международным участием, Москва ИПУ РАН, 2008: pp. 66-67.
7. Aureliu Zgureanu, Mihai Bulat. Sisteme de criptare bazate pe funcţii booleene. Conferinţa Internaţională ICT+ “TEHNOLOGII INFORMAŢIONALE ŞI DE COMUNICAŢII- 2009”. 19 – 20 MAI 2009, or. CHIŞINĂU.
164
8. Zgureanu Aureliu, Sisteme de criptare cu chei variabile. Analele ATIC-2007-2008, vol. I (XII). pp. 92-98, Chişinău. Evrica. 2009.
9. Zgureanu A., Bulat M., Protecţia informaţiei şi managementul întreprinderii. Materialele conferinţei „Managementul întreprinderii în mediul economic contemporan”. 24-25 septembrie, 2009. Chişinău. Evrica. 2009. pp. 312-314.
10. Mihai Bulat, Aureliu Zgureanu, Iacob Ciobanu, Vladimir Izbaş. Sistem de criptare bazat pe derivarea funcţiilor booleene. Conferinţa ştiinţifică internaţională. Modelare matematică, optimizare şi tehnologii informaţionale. Chişinau, 26-28 martie, 2010. pp. 132-141.
11. Aureliu Zgureanu, Sergiu Cataranciuc. Encryption systems based on multidimensional matrixes. „Tiberiu Popoviciu seminar”, Cluj-Napoca 6-7 september, 2010, 11 pagini.
12. Zgureanu Aureliu, Information encryption systems based on Boolean functions. The Computer Science Journal of Moldova, vol.18, no.3(54), 2010, pp. 319-335.
13. Mihai Bulat, Sergiu Cataranciuc, Aureliu Zgureanu. A method for calculating the Zhegalkin polynomial coefficients. MITRE-2011, International Conference dedicated to the 65th anniversary of Moldova State University, Chişinău, 2011, pp. 19-20.
Top Related