Blocarea memoriei program

Fie că este vorba de un programator amator sau de o firmă care activează în domeniul militar, indiferent de situație se dorește protejarea codului sursă împotriva accesului neautorizat sau a copierii. Pentru a facilita acest lucru producătorii de microcontrollere au dezvoltat diverse facilități prin care autorii să prevină descărcarea codului de pe microcontroller. Aceasta metodă de a preveni copierea poate fi văzută ca o blocare (a accesului neautorizat).

Blocarea memoriei program în cazul familiei MCS-51

modificare

Pentru a asigura un anumit grad de protecție împotriva accesului din exterior la memoria program, MCS-51 oferă un mecanism de blocare a memoriei program. Tabelul alăturat prezintă facilitațile de blocare ale unor dispozitive din familia MCS-51:

Dispozitiv Nr de biți de blocare prezenți
8751H 1
8751BH, 8752BH, 89C2051 2
87C51, 89C51, 89C52 3

Biții de blocare pot fi programați de orice programator și șterși prin ștergerea întregului cip. În acest mod se pierde și programul scris în memorie. Când avem la dispoziție mai mulți biți de blocare se pot implementa mai multe niveluri de securitate a conținutului memoriei program.


Un bit de blocare

modificare

Cu un singur bit disponibil, în cazul în care rămane neprogramat, memoria program poate fi citită din exterior iar programarea poate continua. De asemenea este permisă și executarea de instrucțiuni din memorie program externă. Cu toate acestea, în cazul în care acest bit de blocare este programat, memoria nu mai poate fi citită din exterior și nici programarea suplimentară nu mai este posibilă. Mai mult decât atât, cipul nu mai poate accesa memorie program externă. Toate aceste facilități pot fi recâștigate prin ștergerea conținutului bitului de blocare, odată cu conținutul memoriei program. Fără ștergerea celei din urmă, bitul nu poate fi șters.

Doi biți de blocare

modificare

În cazul în care avem la dispoziție doi biți de blocare, facilitățile oferite de cazul cu un singur bit sunt implementate în doi pași. Prin programarea doar a unui singur bit, cipul poate fi verificat (memoria program poate fi citită), dar nu se mai poate programa suplimentar. Această posibilitate de verificare poate fi suprimată prin programarea și a celui de al doilea bit.

În cazul lui 8751BH/8752BH cele două niveluri de blocare al memoriei program constau în 2 biți de blocare și a unui vector de criptare de 32 de octeți folosiți pentru protecția memoriei program împotriva pirateriei software.

În cadrul EPROM exista un vector de criptare de 32 de octeți, toți inițial neprogramați (ocupați cu 1). De fiecare dată când un octet este adresat în timpul unei verificări, sunt folosite 5 adrese pentru a selecta un octet din vectorul de criptare. Acest byte devine exclusive-NORed (XNOR) creându-se astfel un Encrypted Verify byte. Algoritmul, cu vectorul in forma neprogramată, va returna codul în forma sa originală, nemodificată.

Se recomandă ca de fiecare dată când se folosește vectorul de criptare, măcar un bit de blocare să fie programat.


Cei doi biți de blocare (Lock Bits) funcționează ca în tabelul de mai jos:

LB1 LB2 Efect
Neprogramat Neprogramat Codul este asigurat la un nivel minim. (verificarea codului este criptată de vectorul de criptare)
Programat Neprogramat Instrucțiunile MOVC executate de pe memoria program externă nu au dreptul de a accesa octeți din memoria internă.
Programat Programat La fel ca în cazul anterior, dar verificarea nu este permisă.
Neprogramat Programat Rezervat pentru viitor.

Trei biți de blocare

modificare

În cazul în care sunt oferiți trei biți de blocare, programarea unui singur bit duce la inactivarea posibilității de a folosi instructiunea MOVC astfel încât memoria externă să nu mai poată fi accesată. De asemenea nu permite programarea suplimentară. Verificarea memoriei este blocată prin programarea celui de-al doilea bit și execuția de cod de pe memoria externă este oprită prin programarea celui de-al treilea bit.

În cazul lui 89C52 puteți observa mai jos tabelul cu logica de programare a pinilor de blocare.

LB1 LB2 LB2 Efect
Neprogramat Neprogramat Neprogramat Codul nu este protejat
Programat Neprogramat Neprogramat Instrucțiunile MOVC executate de pe memorie program externă nu au dreptul de a accesa octeți din memoria internă.
Programat Programat Neprogramat La fel ca în cazul anterior, dar verificarea nu este permisă.
Programat Programat Programat La fel ca și în cazul anterior, dar nu se poate executa cod de pe memorie externă.

Bibliografie

modificare