U razvoju softvera postoji zlatno pravilo - nikada nemojte implementirati sopstvenu enkripciju. Međutim, novo istraživanje pokazuje da developeri kontinuirano krše ovo pravilo, često ne shvatajući da to uopšte čine. Najnoviji podaci pokazuju da čak i iskusni programeri prave ozbiljne propuste u implementaciji kriptografskih sistema, verujući da su bezbedni samo zato što koriste standardne kriptografske biblioteke.
Jedan od nedavnih primera koji ilustruje ovaj problem dolazi iz blog posta jednog startapa koji je detaljno opisao njihovu implementaciju sistema za deljenje tajni. Iako je autor posta započeo sa priznanjem da je kriptografija kompleksna oblast, ubrzo je zaključio da njihovo rešenje nije problematično jer koristi "pouzdane" biblioteke poput Node.js crypto modula i OpenSSL-a. Međutim, detaljnija analiza koda otkrila je da je njihova implementacija bila ranjiva na Blajhenbaherov (Bleichenbacher) napad iz 1998. godine - jedan od najstarijih poznatih propusta u praktičnoj kriptografiji.
Fundamentalni propusti u razumevanju
Ključni problem leži u fundamentalnom nerazumevanju šta znači "implementirati sopstvenu enkripciju". Developeri često pogrešno veruju da se ovo odnosi samo na pisanje osnovnih kriptografskih algoritama. Međutim, stručnjaci naglašavaju da svako kreiranje protokola koji koristi kriptografiju, bez adekvatne provere i revizije od strane eksperata, predstavlja potencijalni bezbednosni rizik.
Istraživanje je otkrilo nekoliko alarmantnih primera iz prakse, koji uključuju:
- Korišćenje md5($password) kao funkcije za derivaciju ključeva u libsodium biblioteci
- Skladištenje ključeva za dekripciju direktno pored šifrovanih podataka u bazi, uz implementaciju logike za dekripciju direktno u SQL upitima
- Implementaciju end-to-end enkripcije gde se javni ključevi čuvaju nezaštićeni na serveru, što potpuno poništava svrhu ovog tipa zaštite
Nedostatak adekvatnih alata
Problem delom leži i u nedostatku pouzdanih, visoko-nivojskih kriptografskih alata koje developeri mogu lako da implementiraju. Iako postoje biblioteke poput Tink i libsodium koje nude bolja rešenja od tradicionalnog OpenSSL-a, one često ne pokrivaju sve potrebne aspekte, posebno u domenu upravljanja ključevima.
OpenSSL, koji mnogi developeri koriste kao osnovu, predstavlja nisko-nivojsku kriptografsku biblioteku koja sadrži "sve osim sudopere". Međutim, samo korišćenje OpenSSL-a nije dovoljno za bezbednu implementaciju kompleksnih protokola poput Messaging Layer Security (RFC 9420).
Čak i kada stručnjaci za kriptografiju razvijaju nove alate, oni se često fokusiraju na jednostavnije probleme, poput pakovanja standardnih AEAD (Authenticated Encryption with Associated Data) sa asimetričnom kriptografijom, umesto da rešavaju složenije izazove poput upravljanja ključevima.
Put ka rešenju
Stručnjaci naglašavaju da je za rešavanje ovog problema potreban višeslojni pristup. Prvo, potrebno je bolje obrazovanje developera o tome šta zapravo znači "implementirati sopstvenu enkripciju". Drugo, potreban je razvoj boljih alata koji će biti teški za pogrešnu implementaciju. Konačno, potrebna je promena u kulturi razvoja softvera, gde će revizija kriptografske implementacije od strane stručnjaka biti standardni deo razvojnog procesa.
0 komentara