A téma valahol programozás, biztonságtechnika, s projectbejelentés is egyben, tehát ha nem feltétlen ide illik, elnézéseteket kérem :)
Tehát:
egyik barátom részére kerestem Windows alá fájltitkosító programot. Meg is találtuk a neki szimpatikus alkalmazást, de elkezdett mocorogni a kisördög odabent. No, nekiálltím kutakodni, hogy linux alatt milyen programok vannak a témában.
Találataim között csupa olyat találtam, amit laikus elég nehezen tud használni, illetve egy-két olyat, ami nem túl bonyolult, de nincs hozzá GUI. Ez elég könnyen orvosolható lenne, de mivel másnap azon kaptam magam, hogy munkahelyen algoritmus vázlatokat vetek papírra, nyilvánvalóvá vált számomra, hogy nem ezt az utat választottam. :) Sebaj, legalább növekszik a csomagok száma.
Itt jön a project bejelentése:
egy olyan szoftvert terveztem meg, mely fájlok titkosítását végzi, mindezt olyan formában, hogy az egyszeri felhasználónak se okozzon különösebb fejtörést. Rendelkezik GUI-val, de parancssorból is elérhető. A feljesztést Mono-ban kezdtem (lehet fujjogni!). Hogy miért is nem C/C++ lett a vége? Hordozhatóvá szerettem volna tenni. Tudom, GTK-val C-ből is lehetne ilyet csinálni (egyébként még ez sincs elvetve, nem tart túl sokból átültetni az algoritmust). Itt jön az első kérdésem (lesz még pár, szertném a felhasználók igényeihez igazítani a project-et): mi a véleményetek, melyikben szülessen a végeredmény?
A Mono ilyen téren azért tűnik számomra jobb megoldásnak, mert a programot csak egyszer kell fordítani, a keretrendszer pedig minden OS-en elfuttatja azt. GTK esetén sem úsznánk meg pl.: Windows alatt a plusz telepítést, tehát installálási számban ugyanott van a user. Azaz Mono esetén számomra kényelmesebb a közreadás, hiszen nem kell minden egyes OS-re fordítgatni. Ellene az szól, hogy a Mono körüli huzavona mit fog eredményezni a jövőben, lesznek-e licensz problémák.
A keretrendszer működik, az általam most rábízott feladatot ellátja, egyelőre nem találtam hibás működést a készülő programban.
Leírás:
alapvetően matematikai alapon működik (mi máson lehetne) a titkosítás. Két darab 4 jegyű "PIN"-kódot kér, s ezekkel, no meg még sok egyéb mással karöltve hozza létre a végeredményt. A két kód összesen 100.000.000 variánst enged, ami egy BruteForce-al való törésnél már elég meredek vállalkozás lenne (gondolom én).
A két "PIN"-re utaló bejegyzés nem kerül bele a titkosított fájlba, tehát az alapján nem fejthető meg a két kulcs. A választott módszer ugyan biztonságosabbá teszi a titkosított fájlt, viszont van egy szépséghibája, mégpedig az, hogy ha jó a "PIN", ha nem, akkor is legyártja a fájlt (még ha hibás lesz a végeredmény, akkor is). Ez jócskán nehezíti a BruteForce módszert, hiszen százmillió fájlt átnézni nem egy leányálom :)
Második kérdés: valakinek van ötlete a "lecsekkolás" megoldására olyan módon, hogy az alap koncepció ne sérüljön, azaz ne kelljen fájlba helyezni a két kódot? Sajnos én még nem jöttem rá, pedig lehet, hogy pofon egyszerű (vagy mégsem).
szerk: olyan jutott még eszembe, hogy az eredeti fájl md5 értékét beleteszem, s visszakódolás után ezt leellenőrzi. Ennek ismeretében vajon könnyedén visszakódolható a fájl? Létezik olyan eszköz, ami helyre tudja állítani az md5 értéket? Illetve visszaszámolhatóvá válna a "PIN" ez alapján?
A módszeremnek szerintem az az előnye, hogy nyugodt szívvel teszem nyílt forrásúvá, ugyanis hiába ismerjük a kódolási algoritmust, szinte lehetetlen a fájl kikódolása (kivéve ugye a százmilliós brute módszert), ellenben a fájlban elhelyezett kulcsra utaló "nyomokkal", ahol az algoritmus és a kódolt fájl párosával már sokkal reálisabb esély mutatkozik a visszafejtésre.
Harmadik kérdés: nagyon szeretném a közösség részére átadni a forrást, de felmerült bennem a kétely, hogy biztonságtechnikai program lévén jó ötlet-e. A fentiek alapján mi a véleményetek? Közzé lehet tenni a forrást anélkül, hogy bárki is vissza tudjon élni vele?
A jövő:
ha időm is úgy engedi, 1-2 hónap múlva már elő tudok rukkolni az első stabil kiadással. Most még ugyan nem látom át, hogy az algoritmusban mit lehetne majd a jövőben továbbfejleszteni, de szolgáltatásokban biztosan lehet bővíteni (halovány elképzeléseim már derengenek).
Várom véleményeiteket, javaslataitokat!
Dávid