Sunteți pe pagina 1din 19

1.

Echipamente numerice de conducere: cerințe și sisteme de


interfață (Achiziția și Prelucrarea Datelor)
CERINŢE IMPUSE ECHIPAMENTELOR NUMERICE DE CONDUCERE
● siguranţă în funcţionare - poate fi evaluată prin:
○ Fiabilitate - se defineşte din punct de vedere calitativ ca fiind caracteristica unui produs de a îndeplini
corect funcţiile prevăzute un anumit timp în condiţii de exploatare specificate.
○ Mentenabilitate - caracteristica unui produs de a de a fi menţinut sau repus în funcţiune în condiţii
prescrise.
○ Disponibilitatea - caracteristica unui echipament de îndeplinire a funcţiilor specificate sub aspectul
combinat al fiabilităţii şi mentenabilităţii la un moment dat sau un timp specificat.
● comportare în timp real - presupune un sincronism care trebuie să existe între operaţiile interne de calcul şi
evenimentele lumii exterioare.
● să permită conectarea la echipamentele periferice de proces - Informaţia privind starea procesului se obţine
prin intermediul traductoarelor iar transpunerea în proces a comenzilor generate de către echipamentul numeric
este realizată de către elementele de execuţie.
● să permită dialogul cu personalul de operare al procesului - posibilităţi care să i permită atât informarea
privind starea procesului cât şi intervenţii ocazionate de anumite evenimente apărute în evoluţia acestuia.

Sistemul de Interfaţă Proces Calculator SIPC - compatibilizarea între ENC și EPP

Structura generală a unui Sistem de Interfață Proces Calculator include:


● Subsistemul de Achiziţie a Datelor SAD - SAD, care cuprinde subsistemele de achiziţie a datelor analogice
(SADA) şi numerice (SADN), asigură preluarea semnalelor din proces, adaptarea lor în vederea prelucrării
numerice şi transmisia la calculator.
● Subsistemul de Distribuţie a Comenzilor SDC - cuprinde subsistemele de distribuţie a comenzilor în forma
analogică (SDCA) şi numerică (SDCN), asigură transformarea informaţiei furnizate de calculator în semnale
specifice elementelor de execuţie (analogice sau numerice) şi transmisia către acestea.
2. Tranzitiile taskurilor și operații multitasking

3. Bazele aritmetico-logice ale calculatoarelor


3.1 Sisteme de numeraţie
Un sistem de numeraţie (SN) este format din totalitatea regulilor de reprezentare a numerelor cu ajutorul unor
simboluri numite cifre.
SN sunt de două tipuri: poziţionale şi nepoziţionale. SN poziţionale mai sunt cunoscute şi sub denumirea de
SN ponderate întrucât valoarea unei cifre depinde atât de semnificaţia sa intrinsecă cât şi de poziţia acesteia în
respectivul număr. De exemplu, pentru numărul 1111 reprezentat în SN zecimal fiecare cifră 1 are o altă pondere
(mii, sute, zeci, unităţi). Un exemplu de sistem nepoziţional, în care ponderea nu este influenţată de poziţia cifrei
este sistemul roman.
Conversii

3.2 Reprezentarea numerelor în calculator


Reprezentarea numerelor în format virgulă fixă
Uzual virgula se consideră plasată în faţa celei mai semnificative cifre a numărului, în aceste condiţii numerele
cu care se operează fiind subunitare.
Reprezentarea unui număr în complement faţă de 1 (cod invers)
Pentru numere pozitive N 0 reprezentarea în complement faţă de 1 este identică cu reprezentarea semn –
mărime.
𝑛−1
Dacă N < 0, atunci bitul de semn s = 1 şi C1(|N|)=2 - 1 - |N| , (2.9) unde n-1 este numărul de biţi utilizaţi
pentru reprezentarea mărimii (fără semn).
Calculul C(1) se poate face prin două metode şi anume:

a. utilizând definiţia, respectiv


b. prin inversarea biţilor reprezentării cu semn a valorii absolute |N| a numărului N.
Reprezentarea unui număr în complement faţă de 2 (cod complementar)
Reprezentarea numerelor în virgulă mobilă
Coduri numerice şi alfanumerice
Codurile ponderate asociază fiecărei cifre zecimale o tetradă binară, în care fiecare rang are o anumită
pondere. Pentru exemplificare în Tabelul 2.6 se prezintă o serie de coduri numerice ponderate cu o frecvenţă mai
ridicată de utilizare.
Codurile neponderate nu presupun existenţa câte unei ponderi care să fie asociată fiecărei tetrade binare. În
Tabelul 2.7 sunt prezentate câteva coduri neponderate create pornind de la considerente impuse de utilizarea lor.

● Codul Exces 3 se obţine din codul 8421 prin adunarea la fiecare tetradă a cifrei 3 (0011) în binar. Rezultă un
cod cu proprietatea de autocomplementare4 din care s-a eliminat combinaţia 00005 .
● Codul Gray se caracterizează prin aceea că trecerea de la echivalentul binar al unei cifre zecimale la următorul
se face prin modificarea unui singur rang binar.
● Codul 2 din 5 utilizează pentru codificarea cifrelor zecimale cinci poziţii binare, în condiţiile în care fiecare
combinaţie trebuie să conţină câte doi biţi unitari. Această restricţie asigură unicitatea reprezentării şi creează
posibilitatea controlului asupra transmisiei informaţiilor codificate în acest mod.
Coduri detectoare şi corectoare de erori
Codurile detectoare de erori au următoarea proprietate: apariţia unei singure erori transformă un cuvânt valid
intr-un cuvânt invalid.
Un cod este cod corector de erori (CCE) atunci când cuvântul de cod corect poate fi întotdeauna dedus din
cuvântul eronat.

4. Subsistemul unitate centrala de prelucrare


Unitatea centrală de procesare (UCP) - reprezintă cel mai important subsistem al unui sistem de calcul
numeric care efectuează operaţiile esenţiale de prelucrare a datelor şi coordonează activitatea celorlalte subsisteme.
Structura şi funcţiile UCP
● Diviziunea de memorare este reprezentată de registrele generale (RG) care au rolul unor locaţii rapide de
memorie în care se păstrează date utilizate de către program, rezultate intermediare, operanzi etc.
● Unitatea Aritmetică şi Logică – UAL - reprezintă un subsistem al UCP care efectuează operaţiile aritmetice
şi logice elementare. Operaţiile pot fi efectuate paralel, când se prelucrează simultan toţi biţii unui cuvânt, sau
paralel - serie când se prelucrează simultan biţii unei zone a cuvântului transmis serial. Durata unei operaţii (cu
excepţia înmulţirii şi împărţirii) este egală cu durata unui ciclu al procesorului.
● Unitatea de Comandă – UC - realizează supervizarea resurselor sistemului de calcul, supervizare care
presupune:
○ obţinerea de informaţii în legătură cu starea acestor resurse;
○ generarea semnalelor de comandă în vederea execuţiei instrucţiunilor.

5. Elemente de inteligenta artificiala


Inteligență = cunoștințe + procedee de folosire a lor în atingerea scopului
Sistem inteligent = Sistem cognitiv + Sistem rezolutiv
Componente fundamentale ale unui sistem dotat cu IA (SIA):
● baza de cunoștințe (conține cunoștințele specifice domeniului problemei și eventual, cunoștințe generale);
● motorul de inferență (utilizează cunoștințele din baza de cunoștințe pentru rezolvarea problemei prin
raționare).
Definiții
● metodă de inferență sau inferență - o procedură de obținere la un moment dat, a unor noi cunoștințe.
● strategie de control - procesul de aplicare repetată a metodei de inferență pentru a ajunge la soluție cât mai
repede.
● Inferența este o formă de raționament prin care se trece de la un enunț la un alt enunț, în mod deductiv sau
inductiv, direct sau indirect.
● Deducția este o formă fundamentală de raționament în planul conceptelor în care concluzia decurge cu
necesitate din premise.
● silogism - un tip de raționament deductiv alcătuit din trei judecăți: (1) premisa majoră, care conține predicatul
concluziei; (2) premisa minoră, care conține subiectul concluziei; (3) concluzia.
● Inducția este o formă de raționament care permite trecerea de la particular la general, de la exemple la
concepte.
Strategii de căutare
► Căutarea neinformată - nu utilizează informații sau cunoștințe din domeniul problemei de rezolvat, ci doar
stabilește dacă o nouă stare, generată prin aplicarea unui operator de transformare, este sau nu stare finală.
➢ căutarea pe nivel -(numită şi căutare în lăţime, breadth first search) începe expandarea cu nodul
rădăcină, apoi expandează toate nodurile generate din rădăcină şi continuă expandarea cu toţi succesorii
acestora. Lista FRONTIERA este implementată sub formă de coadă.
➢ căutarea de cost uniform - găseşte starea scop cu adâncimea cea mai mică, dar aceasta nu poate fi
întotdeauna soluţia de cost minim.
➢ căutarea în adâncime (limitată) - expandează întotdeauna unul din nodurile de pe nivelul cel mai
adânc din arborele de căutare. Lista FRONTIERA stivă
➢ căutarea în adâncime cu nivel iterativ - alege diferite limite ale adâncimii de căutare 0 1 2 3 etc,
combinând avantajele căutării în adâncime cu cele ale căutării pe nivel. Strategie optimală şi completă
(avantajul căutării pe nivel), care necesită spaţiu mic de memorare (avantajul căutării în adâncime).
➢ căutrea bidirecţională - declanșează două căutări simultane, una înainte, pornind de la starea iniţială,
iar cealaltă înapoi, pornind de la scop şi opreşte căutarea soluţiei atunci când cele două căutări se
întâlnesc la mijlocul adâncimii soluţiei.

► Căutarea informată - utilizează cunoștințe euristice pentru a ghida procesul de căutare a soluției, către o
soluție cât mai bună.
➢ Căutarea informată de tip best first - strategie de căutare generală , în care nodurile de cost minim (în
conformitate cu o anumită măsură) sunt primele expandate. Selectează pentru expandare cel mai bun
nod din spaţiul de căutare, generat pe baza cunoştinţelor euristice.
➢ Strategia informată A* - minimizează costul total al căii.
Caracteristici ale strategiilor de căutare
► completitudinea - O strategie este completă dacă garantează găsirea unei soluţii, în cazul în care aceasta
există.
► optimalitatea - O strategie este optimală dacă găseşte soluţia optimă (cea mai bună soluţie, atunci când
există mai multe soluţii diferite).
► complexitatea - Complexitatea unei strategii se referă la complexitatea timp (în cât timp se găseşte o soluţie)
şi complexitatea spaţiu (cât spaţiu de memorie este necesar pentru a realiza căutarea soluţiei).
Ontologii
Ontologia reprezintă specificarea explicită a unei conceptualizări pentru un anumit domeniu.
● o descriere de concepte şi relaţii între acestea.
● cuprinde un vocabular de termeni bine definiţi, cu semnificaţie specifică unui anumit domeniu de expertiză.
Exemplu
● Considerăm ontologia Onto_POO, definită pentru domeniul programării orientată pe obiecte.
● Concepte cheie: clasă, obiect, clasă de bază, clasă derivată, clasă virtuală, clasă abstractă, funcţie virtuală,
polimorfism, încapsulare, constructor, destructor, funcţie friend etc.
● Descriere concept: clasă ( Secţiuni: privată, publică şi protejată; Membri: date şi funcţii membru)
● Relaţii: derivare, moştenire, abstractizare etc.
Sisteme bazate pe cunoștințe
Sistem bazat pe cunoștințe (SBC) - un program sau un pachet de programe care încorporează cunoștințe
dintr-un anumit domeniu şi rezolvă probleme dintr-o clasă bine definită de probleme din acel domeniu, aplicând
strategii de raţionare.
Componente de bază ale unui SBC:
● un sistem cognitiv (baza de cunoștințe),
● un sistem rezolutiv (motorul de inferență).
Sistem expert (SE) - un caz particular de sistem bazat pe cunoștințe, în care sunt incluse cunoștințe ale
experților umani în domeniu (cunoștințe euristice) şi care, rezolvă probleme din domeniul respectiv, la nivelul unui
expert uman.
Principalele componente ale unui SBC/SE:
● baza de cunoștințe (BC) - cuprinde cunoștințele domeniului problemei de rezolvat, exprimate sub
forma regulilor de producție şi cunoștințe specifice instanțelor problemei, exprimate sub formă de
fapte.
● motorul de inferență (MI) - reprezintă componenta de control şi execuție a unui SBC/SE, care
raționează şi printr-un proces de înlănțuire a cunoștințelor (deductiv, inductiv sau combinat),
găsește sau nu, soluția problemei de rezolvat.
● interfața utilizator (IU),
● modulul de achiziție a cunoștințelor (MAC).
Sistemul cognitiv
Sistemul cognitiv al unui sistem inteligent cuprinde cunoașterea ştiinţifică ce este caracterizată prin două
componente:
● componenta reflexivă - se bazează pe reflectarea exterioară şi ulterioară a faptului ştiinţific,
● componenta generativă - bazată pe crearea de obiecte abstracte şi pe constituirea de momente inițiale
pentru procesele de construire a unor noi fapte științifice şi programe de acţiune.
Caracteristicile unei baze de cunoștințe
1. Completitudine - O bază de cunoștințe a unui sistem inteligent este completă, dacă sistemul nu riscă
să oprească raționamentul datorită inexistenței unor cunoștințe în baza de cunoștințe.
2. Coerența - O bază de cunoștințe a unui sistem inteligent este coerentă, dacă nu produce fapte
contradictorii, pentru orice bază de fapte necontradictorii.
3. Neredundanța - O bază de cunoștințe a unui sistem inteligent este neredundantă, dacă aceleași
cunoștințe nu apar de mai multe ori în baza de cunoștințe, sub diferite forme de reprezentare.
Sistemul rezolutiv
Un sistem rezolutiv cuprinde totalitatea componentelor unui sistem inteligent care au ca obiectiv rezolvarea
problemelor.
Tehnici de inteligență artificială
● Inteligență artificială clasică
○ Modele bazate pe logica simbolică
○ Prelucrări simbolice
● Inteligență artificială computațională
○ Modele bazate pe calcul numeric
○ Prelucrări numerice

● Tehnici de inteligență artificială clasică (tradițională) - modelul logicii simbolice


○ Tehnici de învățare automată, tehnici de data mining
○ Tehnici de planificare automată a acțiunilor
○ Tehnici bazate pe cunoștințe, Raționament bazat pe cazuri
○ Tehnici bazate pe agenți inteligenți, Tehnici de modelare multi-agent
● Tehnici de inteligență artificială computațională (Computational intelligence)
○ Logică fuzzy
○ Rețele neuronale artificiale (RNA), Rețele neuro-fuzzy adaptive
○ Algoritmi genetici (AG), Programare genetică, Algoritmi evolutivi
○ Algoritmi inspirați din natură (incluzând swarm intelligence)

6. Algoritmi de criptare a informației


Criptografia descrie câmpul larg al comunicaţiilor secrete, fiind definită prin totalitatea mijloacelor şi
metodelor utilizate pentru protecţia interceptării pasive (înregistrarea mesajului transmis) sau/şi active (modificarea
informaţiei sau introducerea de mesaje false pe canalul transmisiei, între emiţătorul şi receptorul legali).
cheilor {K}.
Cheia criptografică k este o secvenţă secretă, relativ scurtă, de caractere, care identifică transformarea Ek
utilizată. Această cheie este selectată din spaţiul cheilor {K}, dintr-un număr mare de chei posibile, şi este cunoscută
numai de către corespondenţii legitimi. Formalizarea matematică este cea prezentată în relaţia: Ek(M)=C.
Criptanaliza se referă la tehnicile folosite pentru a intra în posesia informaţiei originale prin alte mijloace decât
cele disponibile receptorului legal (fără cunoaşterea cheii k). În acest context, criptanalistul este un receptor ilegal
care foloseşte metode de lucru specifice criptanalizei.
Sistemele criptografice oferă patru tipuri de servicii principale:
● Secretizare, prin intermediul căruia persoanelor neautorizate nu li se permite accesul la informaţia
corespunzătoare textului clar;
● Autentificare, prin care, de regulă, este validată sursa mesajului iniţial. Autentificarea se adresează atât
entităţilor cât şi informaţiei. Două părţi care comunică ar trebui să se identifice una pe cealaltă. O
informaţie transmisă pe un canal trebuie să-şi autentifice originea, datele despre origine, conţinutul
datelor, timpul transmisiunii. Din aceste motive acest aspect a criptografiei se împarte în două clase
majore: autentificarea entităţilor şi autentificarea originii datelor. Autentificarea originii datelor oferă
implicit şi integritatea datelor, deoarece dacă mesajul a fost modificat şi sursa a fost schimbată.
● Integritate, care permite luarea în considerare numai a anumitor mesaje transmise către persoana
identificată şi stabileşte că aceste mesaje nu fac parte din categoria celor transmise anterior. Serviciul de
integritate asigură faptul că mesajul nu a fost transmis accidental, în timpul operaţiilor de transmitere,
inserţie sau ştergere;
● Nerepudierea originii, care oferă protecţie împotriva unui transmiţător de mesaje care neagă, ulterior,
transmiterea acestora. Acest serviciu previne neacceptarea unei identităţi de a îndeplini angajamente sau
acţiuni asumate anterior.

Criptosisteme clasice
Cifrul lui Caesar
Cifrul lui Caesar este un cifru cu substituţie în care fiecare literă din grup este înlocuită pentru deghizare cu o
altă literă. Acest algoritm este unul dintre cele mai vechi cifruri cunoscute, fiind atribuit lui Julius Caesar. În această
metodă, A devine D, B devine E, C devine F, …, X devine A, Y devine B, Z devine C, conform reprezentării din
tabelul 7.1.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHIJKLMNOPQRSTUVWXYZAB C
De exemplu, mesajul
ACESTA ESTE UN TEXT CRIPTAT
Devine
DFHVWD HVWH XQ WHAW FULSWDW

Criptarea prin substituţie monoalfabetică


Comparativ cu metoda de criptare anterior prezentată, principala îmbunătăţire adusă de criptarea prin substitutie
monoalfabetică o reprezintă stabilirea pentru fiecare simbol din textul clar (pentru simplitate, cele 26 de litere ale
alfabetului), o corespondenţă cu o altă literă.
Ca un caz particular, este prezentat cifrul aleator de substituţie. Cheia este constituită din 26 de perechi de
numere echivalente de forma (a,b), cu (a,b) є (1,2,3,...,26). Într-un mod pseudoaleator, fiecărei litere a alfabetului
primar îi corespunde o literă a alfabetului secundar. Literele alfabetului de substituire sunt static independente, dar
există dezavantaje legate de generarea, transmiterea şi păstrarea cheii. Un exemplu este cel prezentat în tabelul 1.3.

Cheia acestui tip de codificare o reprezintă şirul de 26 de litere corespunzând întregului alfabet. În aceste
condiţii, mesajul
ACESTA ESTE UN TEXT CRIPTAT
Devine
QETLZQ TLZT XF ZTBZ EKOHZQZ

Criptarea prin transpoziţie pe coloane


Spre deosebire de cifrurile cu substituţie, cifrurile cu transpoziţie reordonează caracterele, dar nu le deghizează.
În exemplul următor este prezentată maniera de realizare a criptogramelor folosind un cifru cu transpoziţie pe
coloane (tabelul 1.4).
Cifrul are drept cheie un cuvânt sau o expresie care nu trebuie să conţină caractere repetate (în exemplul din
tabelul 1.4, cheia este cuvântul „universal”).
Sunt numerotate coloanele tabelului cu cifre corespunzătoare ordinii în care literele cheii, asociate coloanelor
respective, apar în alfabet; scopul cheii este să stabilească numărul de coloane şi să ordoneze caracterele.
Textul clar (necriptat) este scris orizontal, pe rânduri, iar textul criptat se obţine scriind ordonat, pe coloane,
literele corespunzătoare.
Text clar: ACEST ALGORITM DE CRIPTARE ESTE FOARTE BUN.
Text criptat : LEEA TMT UEIIT G R CRRSE AFNADRO.AOCETSTPEB

Metoda cheilor acoperitoare


Construirea unui cifru imposibil de spart este actualmente destul de simplă. Tehnica are următoarele etape:
● se alege un şir aleatoriu de biţi pe post de cheie;
● se converteşte textul clar într-un şir de biţi;
● pentru a obţine codificarea textului clar, se calculează xor între cheie şi textul clar, bit cu bit;
● pentru a realiza decodificarea se calculează tot xor între aceeaşi cheie şi textul codificat, tot bit cu bit.
Această metodă, cunoscută sub numele de metoda cheilor acoperitoare (one-time pad), are următoarele
avantaje:
● textul codificat nu oferă criptanalistului nici o informaţie;
● se poate codifica orice tip fişier (text, imagine, sunet, video, bază de date, executabil) ;
● chiar şi atunci când află metoda de codificare utilizată, criptanalistul nu are şanse să deducă cheia,
deoarece şirul de biţi al cheii poate avea orice lungime în raport cu şirul de biţi corespunzător textului
clar.
Cu toată siguranţa pe care o oferă această metodă, ea prezintă şi dezavantaje practice importante:
● cheia nu poate fi memorată, necesitând un suport, de preferinţă electronic, o copie a ei putând ajunge
oricând în posesia unei persoane neautorizate;
● indiferent că este consultată parţial sau în întregime, informaţia codificată trebuie decodificată în
întregime. Acesta este un foarte mare dezavantaj în cazul bazelor de date, utilizatorul fiind obligat să
decodifice şi să codifice respectiva bază de date în întregime, indiferent de numărul de înregistrări pe
care le consultă/modifică;
● cu cât fişierul codificat este mai mare, cu atât manipularea lui (consultare/modificare) este mai greoaie,
încetinind operarea cu produse software în care este implementată acestă metodă de codificare.
Un exemplu de criptare prin metoda cheilor acoperitoare este cel prezentat în continuare.
Mesaj: 00101010 10101000 10101010 01111100 01011101 11101111
Cheie: 10010111 00111011 00001111
Criptogramă: 10111101 10010011 10100101 11101011 01100110 11100000

Criptosisteme computaţionale
Algoritmul R.S.A.
Conform criptosistemului nou, propus de către Diffie şi Hellman, cheile de criptare şi de decriptare sunt diferite,
iar cheia de decriptare nu poate fi dedusă din cheia de criptare. Algoritmul (cheia) de criptare E şi algoritmul (cheia)
de decriptare D trebuie să satisfacă trei cerinţe. Aceste trei cerinţe pot fi exprimate simplificat după cum urmează:
● D(E(M))=M;
● Este foarte dificil să se deducă D din E;
● E nu poate fi spart printr-un atac cu text clar ales.

Semnătura digitală R.S.A.


Avantajul algoritmului R.S.A. este că poate fi utilizat şi pentru semnarea mesajelor expediate. Acest tip de
semnătură este cunoscut sub numele de semnătura digitală R.S.A. Semnătura digitală este folosită pentru a
identifica autorul unui mesaj şi reprezintă una dintre cele mai importante contribuţii ale criptării cu chei publice.

Algoritmul El-Gamal
Schema de criptare El-Gamal se bazează pe rezolvarea problemei logaritmilor discreţi care consideră drept date
iniţiale un grup G de ordinul n şi G, logaritmul discret al lui în bază , notat log este numărul întreg unic x, 0 ≤ x ≤
n-1, astfel încât =x.
Cel mai important aspect al criptării cu chei publice este acela care se referă la faptul că autorul unui mesaj nu
are posibilitatea să îl decripteze, după ce l-a trimis destinatarului, deoarece nu deţine cheia privată necesară
decriptării. Astfel, dacă este transmis, din greşeală, un mesaj unui alt destinatar decât cel dorit, acesta nu îl va putea
decripta, păstrându-se în acest fel secretul respectivei informaţii.
În acest context, două entităţi A şi B care doresc să comunice trebuie să parcurgă următoarele etape:
● generarea cheilor pentru criptarea cu chei publice El-Gamal (algoritm 1);
● realizarea schimbului de chei publice, care poate fi făcută pe orice canal de comunicaţii, indiferent de
gradul de securitate conferit de acesta (de exemplu prin e-mail sau telefonie);
● criptarea de către B a mesajului pe care doreşte să i-l transmită lui A (algoritm 2);
● decriptarea de către A a mesajului cifrat c primit de la B (algoritm 3).

Algoritmul Merkle-Hellman
Schema de criptare Merkle-Hellman se bazează pe problema sumei subşirurilor. Ideea de bază este selectarea
unei instanţe a problemei sumei subşirurilor care este uşor de rezolvat, deghizată apoi ca o instanţă a problemei
generale a problemei sumei subşirurilor care este mai dificil de soluţionat. Şirul original poate servi drept cheia
privată, iar şirul transformat serveşte drept cheie publică. Schema de criptare Merkle-Hellman este importantă din
motive istorice, deoarece a fost prima realizare concretă a unei scheme de criptare cu chei publice. Ulterior au fost
realizate mai multe variante, dar toate, inclusiv cea originală, s-au dovedit nesigure.
Definiţia problemei sumei subşirurilor poate fi formulată astfel: fiind dat un şir de întregi pozitivi {a1, a2,…,an}
şi un întreg pozitiv s, să se determine dacă există sau nu un subşir aj a cărui sumă este s, şi dacă există xi {0,1}, 1 ≤
i ≤ n astfel încât Σi=1n aixi = s.
Algoritmul pentru generarea cheilor pentru criptarea cu chei publice Merkle-Hellman cuprinde în mod necesar
următoarele etape:
Fiecare identitate îşi creează o cheie publică şi una privată corespunzătoare
1. Un număr întreg n este stabilit ca parametru comun de către sistem.
2. Fiecare identitate urmează paşii 3-7.
3. Se alege un şir supercrescător (b1, b2, ... , bn) şi un modul M astfel încât M>b1+b2+…+bn.
4. Se selectează un întreg aleator W, 1≤ W ≤ M – 1, astfel încât cel mai mare divizor comun al lui W şi M
să fie 1.
5. Se alege o permutare aleatoare π de întregi {1, 2, … , n}.
6. Se calculează ai = W ∙bπimod M pentru i=1, 2, ... , n.
7. Cheia publică a lui A este (a1, a2, ... ,an), iar cheia privată este (π, M, W, (b1, b2, ... ,bn)).
Criptarea cu chei publice Merkle-Hellman. B criptează un mesaj m pentru A.
a. Se obţine cheia publică autentică a lui A (a1, a2, ... ,an)
b. Mesajul m este reprezentat ca un şir binar de lungime n, m=m1m2…mn
c. Este calculat întregul c=m1a1+m2a2+…+mnan
d. Textul cifrat c este trimis către A.
Decriptarea cu chei publice Merkle-Hellman
e. Se calculează d = W-1c mod M.
f. Rezolvând problema sumei subşirurilor, sunt găsiţi întregii r1, r2, ... , rn, ri {0,1}, astfel încât
d=r1b1+r2b2+…+rnbn.
g. Biţii mesajului sunt: mi=rπ(i), i1,2,...,n.

7. Fundamente ale sistemelor de operare


8. Limbaje de programare (programare logica si functionala,
programare orientată pe obiecte, programare în limbaj de
asamblare, programare în limbajul C)
Limbajul de programare logică Prolog
Elemente introductive
Limbajul de programare Prolog este un limbaj descriptiv, bazat pe logica cu predicate de ordinul I. Specificarea
unei probleme se realizează în termenii unor fapte cunoscute despre obiecte din universul problemei și a relațiilor
existente între aceste obiecte.
Execuția unui program Prolog presupune definirea unui scop (goal) care este verificat pe baza cunoștințelor
(fapte și reguli) incluse în program.
Exemple de tipuri de aplicații dezvoltate în limbajul Prolog:
● – sisteme expert,
● – prelucrări simbolice,
● – procesarea limbajului natural,
● – teoria jocurilor,
● – implementarea dinamică a bazelor de date relaționale,
● – ...
Caracteristici ale limbajului Prolog:
● – limbaj de programare logică, bazat pe logica cu predicate de ordinul I;
● – execuția unui program se realizează prin evaluarea predicatelor;
● – realizează deducții logice (limbajul include un motor de inferență);
● – limbaj descriptiv;
● – permite realizarea de prelucrări simbolice;
● – programul Prolog este un demonstrator de fapte ce utilizează unificarea și rezoluția
(concepte descrise detaliat în Capitolul 2. Programare logică).
Elemente de bază
Un program Prolog este o secvență de clauze. O clauză se compune dintr-un predicat care poate fi urmat sau nu
de argumente.
Predicate
Predicatul Prolog este echivalentul structural al instrucțiunilor din alte limbaje de programare, având însă un
mod total diferit de interpretare și utilizare. Un predicat este o funcție logică care permite descrierea relațiilor
existente între obiecte ale universului problemei.
Sintaxa:
<predicat>[(<argument> [, <argument> ...])]
Observație:
Numele predicatelor trebuie să înceapă cu literă mică. De obicei, tot numele este scris cu litere mici. În limbajul
Prolog există predicate standard (built-in, predefinite) și predicate definite de programatori.
Exemple de predicate definite de programator:
● student(“Irimescu”, “Ioana”, calculatoare, 1810)
● integralist(“Irimescu”, “Ioana”, 9.75)
● lucreaza(“Irimescu”, “IBM_Bucuresti”)
● este_student(X)
● lucreaza(X, Y)
Exemple de predicate predefinite:
● readln(X),
● write(...)
Numărul de argumente ale unui predicat reprezintă aritatea predicatului. Argumentele predicatului pot fi:
constante, variabile și structuri.
În limbajul Prolog există două categorii de constante:
● – atomii - constante simbolice care încep cu literă mică;
● – numerele - întregi sau reale.
Variabile
Variabilele sunt din punct de vedere sintactic tot atomi. Ele reprezintă obiecte necunoscute ale căror valori se
stabilesc sau se modifică în timpul prelucrării. Numele variabilelor trebuie să înceapă fie cu literă mare, fie cu
caracterul de subliniere “_”.
Variabilele anonime sunt variabile ale căror valori nu interesează, ele fiind simbolizate prin caracterul “_”.
Exemple de utilizare a unei variabile anonime:
● lucreaza( _ , loc_de_munca )
● integralist(“Irimescu”, _, 9.75 )
Structuri Prolog
Structura Prolog un obiect care desemnează o colecție de obiecte corelate logic, ce formează componentele
structurii.
Exemplu de structură Prolog:
● are_cont(nume(ileana, manole), adresa(rudului, 21, ploiesti), cont(bcr, 11207647))
Operatori logici
● conectorul logic SI - virgula (“,”);
● conectorul logic SAU - punct și virgula (“;”);
● operatorul NOT - predicatul not().
Program Prolog - Un program Prolog cuprinde următoarele entități: fapte, reguli și scopuri interne sau externe
numite întrebări.
Fapte Prolog - Faptele sunt predicate de ordinul I, de aritate n, considerate adevărate. Ele stabilesc relații între
obiectele universului problemei. O faptă Prolog se încheie cu punct.
Reguli Prolog - Regulile se reprezintă în Prolog în formă inductivă. Cele două părți ale unei reguli - concluzia
și premisa - sunt separate prin simbolul “:-” care are semnificația “dacă”. Concluzia și premisa sunt exprimate sub
formă de clauze. O regulă se încheie cu punct. Forma generală a unei reguli: p(...) :- p1(...), p2(...), ...pn(...). unde p,
p1, p2, ..., pn sunt nume de predicate.
Un program Prolog este alcătuit din secțiuni. Forma generală cuprinde următoarele secțiuni: constante,
domenii de valori ale argumentelor predicatelor definite de programator, baze de date dinamice, predicate definite
de programator, predicate globale, domenii globale, baze dinamice globale, clauze și scop intern.
● constants ... definire constante
● domains ... declararea domeniilor
● database ... definire BD
● predicates ... declarare predicate
● global predicates ... declarare predicate globale
● global domains ... declarare domenii globale
● global database ... definire BD globale
● clauses ... definire clauze (reguli și fapte)
● goal ... definire scop intern (opțional)
Limbajul de programare funcțională Haskell
Programele funcționale scrise în limbajul Haskell definesc funcții exprimate sub forma unor expresii care sunt
evaluate de către evaluatorul Haskell ce furnizează rezultatul. În definiția unei funcții implementată în limbajul
Haskell se pot utiliza și funcții standard, predefinite în Haskell.
Fișierul Prelude.hs conține o serie de definiții ale unor funcții de bază din limbajul Haskell. Alte funcții standard
se regăsesc în diferite biblioteci ale limbajului.
Limbajul funcțional Haskell ca orice limbaj funcțional pur, bazat pe paradigma programării funcționale (un tip
de programare declarativă) permite evaluarea expresiilor și nu executarea unor instrucțiuni ca în programarea
imperativă.
Considerăm definiția matematică generală a unei funcții f,
f : Domeniu → Co-domeniu
f(<lista_arg>) = <expresie>
unde Domeniu este domeniul de valori ale argumentului sau ale argumentelor funcției, iar Co-domeniu este
domeniul de valori ale funcției. În cazul funcțiilor cu mai multe argumente, domeniul este un produs cartezian al
mai multor domenii de valori (numărul de domenii fiind egal cu numărul argumentelor funcției).
În mod similar cu această definiție, se definește în limbajul Haskell o funcție matematică. Astfel, există un antet
al funcției, în care este specificat prototipul funcției și conținutul funcției, reprezentând definiția propriu-zisă a
funcției.
O expresie descrie o valoare de un anumit tip de date. Ea poate conține operatori și operanzi. Forma de scriere a
unei expresii poate fi infixată, postfixată sau prefixată. Ordinea în care se aplică operanzii este stabilită de regulile
de asociativitate, precedență și de prezența parantezelor în expresie.
Unele expresii se pot simplifica prin operații de substituție și reducere până când se ajunge la o formă normală
(forma canonică), echivalentă cu prima formă a acestora.
Definirea unei funcții în limbajul Haskell respectă următoarea sintaxă generală:
<signatura_functiei>
<definitia_propriu-zisă>
În limbajul Haskell definițiile de funcții au forma unor ecuații între diferite tipuri de expresii care pot conține
constante, variabile, alte funcții etc.
O observație importantă este aceea că, ordinea în care sunt scrise diferitele variante de definire a funcției are o
mare importanță, întrucât evaluatorul Haskell va realiza evaluarea în ordinea scrierii acestor variante din definiția
funcției.
Exemplu:
produs :: Float → Float → Float
produs = x * y
Gărzile sunt secvențe de clauze delimitate de o linie verticală la stânga care definesc alternative în definiția unei
funcții. Ele reprezintă o alternativă de scriere a selecției (adică, a deciziei multivariantă).
Sintaxa generală a unei gărzi:
| <conditie> <expresie>
Exemplu:
Funcția signatura, sign.
sign :: Integer → Integer
sign x
|x>0=1
|x=0=0
| x < 0 =-1
Un program Haskell conține un set de module cu declarații (de clase, funcții etc) și expresii ale funcțiilor,
incluse în declarații. Fișierul care conține un program Haskell are extensia hs.
Modulele existente se pot importa cu clauza import. În limbajul Haskell este foarte importantă scrierea aliniată
(indentată) la stânga, a textului programului.
Structura generală a unui program Haskell:
module <nume> [(<lp>)] where
<declaratii>
unde lp este lista de parametri ai modulului.
În general, primele declarații sunt cele prin care sunt importate module existente, necesare programului.
O clauză de importare a unui modul are forma:
import <nume_modul>
Comentariile sunt de tip linie, având caracterele -- înaintea textului sau de tip multi-linie, reprezentate astfel:
{-
<textul comentariului>
-}

9. Modelul ISO-OSI pentru rețele de calculatoare.


Pe baza modelului ISO-OSI au fost dezvoltate protocoalele de comunicație, sub forma unor seturi de reguli
specifice, care stau la baza funcționării oricărui sistem de comunicații utilizat la ora actuală. Modelul OSI nu
specifică nimic legat de funcționarea internă a sistemelor deschise, rezumându-se doar la interconectarea acestora,
adică la transferul informației între acestea.
În cadrul modelului OSI, un sistem de comunicații este reprezentat ca un ansamblu organizat pe mai multe
niveluri, la fiecare nivel realizându-se funcții bine definite. Cooperarea între două sisteme deschise se realizează
prin schimbul de mesaje între nivelurile omoloage, transmise prin intermediul serviciilor oferite de nivelul imediat
inferior [Tanenbaum, A., Reţele de calculatoare, Editia a 4-a, Ed. Byblos, Bucureşti, 2007].
Relațiile între nivelurile modelului trebuie privite ca relații logice. Astfel, nivelul N-1 oferă un serviciu nivelului
N, iar acesta oferă la rândul său un serviciu mai amplu nivelului N+1, incluzând și serviciul oferit de nivelul N-1.
Fiecare nivel adaugă în acest fel servicii noi, astfel încât nivelul cel mai înalt permite aplicațiilor să colaboreze,
indiferent de arhitectura sau tipul mașinilor pe care rulează. Modelul OSI prezintă avantajul transparenței nivelurilor
inferioare pentru serviciul sau aplicația de la nivelul N, permițând astfel utilizarea unui serviciu de nivel înalt, fără a
cunoaște de exemplu modul de transmitere al semnalului la nivel fizic, sub forma de semnal electric.
Arhitectura definită de modelul de referință OSI este constituită prin suprapunerea a șapte niveluri enumerate de
jos în sus: fizic, legătură de date, rețea, transport, sesiune, prezentare și aplicație. În figura 1 sunt prezentate
nivelurile modelului ISO-OSI și modul de împachetare al datelor.
În continuare vor fi prezentate caracteristicile esențiale ale fiecărui nivel din modelul ISO-OSI.
● Nivelul aplicație asigură entităților aplicație, care interacționează în mod direct cu utilizatorul, mijloacele
de acces la mediul rețelei. Pe lângă transferul de date, serviciile oferite includ: alocarea resurselor,
asigurarea integrității și coerenței datelor obținute, sincronizarea operațiilor, acordul asupra procedurilor
de control.
● Nivelul prezentare gestionează modul de reprezentare al datelor transferate între entitățile aferente
nivelului aplicație. Reprezentarea datelor poate diferi de la un sistem la altul. De exemplu numerele pot fi
reprezentate prin cuvinte de 16 sau 32 biți, în complement față de 1 sau față de 2. Nivelul prezentare
asigură o reprezentare comună a datelor transferate. Nivelul prezentare asigură existența unei sintaxe
comune de transfer a datelor. O altă funcție importantă a nivelului prezentare este legată de securitatea
datelor. În unele sisteme datele transmise de o entitate de tip aplicație sunt mai întâi criptate și transmise
spre celelalte niveluri, urmând a fi decriptate de entitatea prezentare corespondentă.
● Nivelul sesiune stabilește modul de organizare și sincronizarea dialogului între entitățile de tip prezentare
cooperante, și administrează schimburile de date dintre ele. Pentru a permite transferul datelor se
stabilește o conexiune la nivel sesiune la cererea uneia dintre entități. Totodată se stabilesc punctele de
sincronizare în cadrul dialogului, permițând întreruperea acestuia și reluarea sa de la punctul de
sincronizare.
● Nivelul transport optimizează utilizarea serviciilor disponibile, prin utilizarea unor mecanisme destinate
evitării saturării legăturii de date prin controlul fluxului și al erorilor, segmentarea mesajelor în pachete și
secvenţierea acestora. Este important de menționat faptul că la nivelul transport traseul datelor nu are
relevanță, stabilirea acestuia fiind specifică nivelului rețea.
● Nivelul rețea oferă mecanismele necesare pentru a stabili, menține și elibera conexiunile de rețea între
sistemele care comunică. La acest nivel se realizează procesul de rutare a pachetelor, ce constă în
determinarea drumului optim al fiecărui pachet de date în rețea. Totodată sunt introduse și mecanisme de
adresare la nivel logic, ce permit crearea de subrețele.
● Nivelul legătură de date stabilește, menține și eliberează conexiunile legătură de date între entități rețea.
O conexiune logică este realizată prin intermediul uneia sau mai multor conexiuni fizice. Sarcina
principală a nivelului legătură de date este de a prelua un mijloc de transmisiune fizic și a-l transforma
într-o cale de comunicație ce pare pentru nivelul rețea scutită de erori. La acest nivel datele sunt formatate
sub formă de cadre, sunt tratate erorile și eventualele pierderi de date. Mecanismele nivelului au fost
astfel concepute încât să se evite saturarea unui receptor lent de către un emițător mai rapid.
● Nivelul fizic este cel care furnizează mijloacele mecanice, electrice și funcționale necesare activării,
menținerii și dezactivării conexiunilor fizice destinate transmiterii semnalelor asociate biților între entități
ale legăturii de date. O conexiune fizică poate implica mai multe sisteme deschise intermediare, fiecare
constituind un releu pentru transmiterea biților la nivelul fizic. La acest nivel se pun probleme de
reprezentare a biților de informație, durata transmisiei fiecărui bit, posibilitatea de a transmite în cele două
sensuri simultan, tipul conectorilor utilizați, mediul de transmisie – cablu coaxial, torsadat, fibră optică,
canal radio.

Modelul TCP/IP
Protocolul TCP/IP este utilizat în mod curent, inclusiv în sistemele de automatizare pentru interconectarea
subrețelelor create la nivelul aparaturii de automatizare sau pentru conectarea cu echipamentele de la nivelul
superior de supervizare și comandă. Totodată protocolul TCP/IP stă la baza funcționării Internetului, potențial
mediu de conectare și globalizare a sistemelor automate. Același protocol este utilizat de către rețelele de
comunicații standard, din acest motiv fiind foarte cunoscut de atacatori, fiind identificate numeroase vulnerabilități
și tipuri de atacuri consacrate.
Protocolul TCP/IP este compus din două entități independente și anume:
● − TCP (Transmission Control Protocol), care are rolul de a realiza transpunerea datelor în pachete și de a
asigura transmisia corectă a acestora de la emițător la receptor;
● − IP (Internet Protocol), care are rolul de a livra pachetele transmise, dacă în funcționarea TCP nu apar
erori. La nivel IP se realizează fragmentarea unor pachete cu dimensiuni mai mari decât cele a căror
transmitere este posibilă în rețea.
Protocolul TCP/IP este modelat folosind o schemă cu patru niveluri – Aplicație, Transport, Internet și Acces
Rețea - care vor fi succint prezentate în continuare.
● Nivelul Aplicație are rolul de a oferi servicii de rețea utilizatorilor, prin intermediul diverselor programe
(browsere, clienți FTP, clienți de e-mail, etc.), între aceste servicii semnificative fiind:
○ − SMTP1, folosit pentru transferul mesajelor e-mail;
○ − FTP2, destinat transferului bidirecțional de fișiere;
○ − HTTP3, destinat transmiterii paginilor Web;
○ − SNMP4, utilizat pentru monitorizarea și administrarea de la distanță a echipamentelor
interconectate în rețea.
● Nivelul Transport administrează comunicația între două entități, asigurând în același timp calitatea și
securitatea liniei de transmisie, controlul fluxului date, precum și detecția și corecția erorilor. La acest
nivel, datele ce trebuie transmise sunt împărțite în pachete, cărora li se adaugă toată informația necesară
pentru identificarea emițătorului, destinatarului și a entității de nivel aplicație care a inițializat
comunicația. În cadrul nivelului transport sunt folosite protocoalele: UDP – User Datagram Protocol și
TCP – Transmission Control Protocol. UDP este un protocol simplu, considerat destul de nesigur fiind
neorientat pe conexiune. Din acest motiv nu se poate garanta livrarea mesajului la destinație, respectiv
recepția fără erori și pierderi, fără duplicate sau în ordinea în care pachetele au fost transmise. Protocolul
UDP este utilizat în cadrul unor transmisii de date de viteză mare, de tipul transmisiei video peste
Internet, iar programele de la nivelul aplicație trebuie să asigure soluționarea tuturor problemelor legate
de transmisie. Protocolul TCP este destul de complex și asigură servicii de comunicație orientate pe
conexiune. TCP este considerat un protocol sigur, ce poate îndeplini funcțiile de reordonare a pachetelor
transmise, detecție și corecție erorilor și confirmare a livrării.
● Nivelul Internet realizează rutarea pachetelor de la sistemul sursă la sistemul destinație. La acest nivel
funcționează protocolul IP, cu bine-cunoscuta adresare IPv4, și mai recent IPv6. Fiecare sistem din rețea
(Internet) are cel puțin o adresă IP. Când se trimit sau se primesc date, mesajul se divide în segmente mai
mici. Fiecare segment este caracterizat de un antet compus dintr-o parte fixă de 20 octeți și o parte
opțională de lungime variabilă. Partea fixă a antetului, care este standardizată, oferă informații cu privire
la identitatea (adresa IP) sursei și respectiv a destinației, numărul de ordine al pachetului, tipul de date
transmise. Câmpurile opționale, pot fi utilizate de către programele de nivel aplicație pentru includerea
unor informații specifice acestora, informații care nu sunt însă critice pentru funcționarea rețelei.
1. SMTP – Simple Mail Transfer Protocol
2. FTP – File Transfer Protocol
3. HTTP – HyperText Transfer Protocol
4. SNMP – Simple Network Management Protocol
La nivelul Internet funcționează și protocoalele ICMP5, prin care poate fi semnalată
funcționarea incorectă, respectiv, ARP6 și RARP7, care permit cunoașterea adresei IP sau a
adresei fizice a unui sistem pe baza unor informații cunoscute (adresa proprie sau alte adrese
cunoscute).
● Nivelul Access Rețea primește pachetele de la nivelul superior (Internet) și le pregătește pentru
transmiterea pe un anumit mediu fizic de comunicație (cablu torsadat, cablu coaxial, fibră optică, radio,
etc.). Practic în cadrul acestui nivel sunt concentrate funcțiile de la nivelurile Fizic și Legătură de date din
cadrul modelului ISO-OSI.

S-ar putea să vă placă și