Upload
others
View
18
Download
0
Embed Size (px)
Citation preview
Zavod sv. Stanislava
Škofijska klasična gimnazija
Izdelava Android aplikacije
Dokumentacija
Maturitetna seminarska naloga iz Informatike
Avtor: Aleš Čebulj
Mentor: Helena Starc Grlj
Ljubljana Šentvid, marec 2020
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
2
1. Povzetek
V seminarski nalogi je opisana izdelava aplikacije za Android, ki sem jo izdelal, da bi
različna gesla, ki jih potrebujem v življenju, imel shranjena na varen in urejen način. Aplikacija
uporabniku omogoča vnos gesla in le temu pripadajočih atributov in seveda tudi pregled vseh
gesel in podatkov ter njihovo urejanje. Aplikacija je narejena s pomočjo programa Android
Studio in sprogramirana v jeziku Java.
2. Abstract
In my project work is described the process of making an Android app, I made in order
to save different passwords I use on everyday basis. App allows the user to input his passwords
and their attributes and their overview and editing. App is made in Android Studio in program
language Java.
3. Ključne besede
Java, Json, Android, Android Studio, Programiranje
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
3
4. Kazalo vsebine
1. Povzetek ............................................................................................................... 2
2. Abstract ................................................................................................................ 2
3. Ključne besede ..................................................................................................... 2
4. Kazalo vsebine ..................................................................................................... 3
5. Kazalo slik ........................................................................................................... 4
6. Stvarno kazalo ...................................................................................................... 4
7. Uvod ..................................................................................................................... 5
7.1 Vpeljevanje v problem ..................................................................................... 5
7.2 Predstavitev problema ...................................................................................... 6
8. Teoretična rešitev ................................................................................................. 7
8.1 Kriptografija ..................................................................................................... 7
8.2 Prijava v aplikacijo ........................................................................................... 7
8.3 Dodajanje gesla ................................................................................................ 8
8.4 Shranjevanje podatkov ..................................................................................... 8
8.5 Branje podatkov ............................................................................................... 8
8.6 Potrebno znanje ................................................................................................ 9
9. Praktični del ....................................................................................................... 10
9.1 Android Studio ............................................................................................... 10
9.2 Activity - grafika ............................................................................................ 11
9.3 Activity – logični del ...................................................................................... 13
9.4 Json struktura.................................................................................................. 15
9.5 Ikona ............................................................................................................... 16
9.6 Testiranje ........................................................................................................ 17
9.7 Namestitev aplikacije ..................................................................................... 17
10. Zaključek............................................................................................................ 18
10.1 Evaluacija opravljenega dela in izboljšave ................................................. 18
10.2 Porabljen čas ............................................................................................... 19
11. Literatura ............................................................................................................ 20
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
4
5. Kazalo slik
Slika 1: Skica prijave ..................................................................................................... 8
Slika 2: Skica dodajanja gesla ........................................................................................ 8
Slika 3: Skica branja podatkov ...................................................................................... 9
Slika 4: Ključne datoteke aplikacije ............................................................................ 10
Slika 5: Primer .xml datoteke....................................................................................... 11
Slika 6: Grafični urejevalnik ........................................................................................ 12
Slika 7: Primer .java datoteke ...................................................................................... 13
Slika 8: Primer JSON strukture.................................................................................... 16
Slika 9: Ikona izdelana s programom Inkscape .......................................................... 16
Slika 10: Izgled aplikacije ............................................................................................ 19
6. Stvarno kazalo
algoritem, 4, 7, 18
Android, 1, 2, 3, 4, 5, 6, 9, 10, 13, 14, 15,
16, 17, 20
gcm, 4
hash, 4, 7, 15
java, 4, 10, 13, 18
json, 4
kriptografija, 4, 5, 9, 18
sol, 4, 7
xml, 4, 9, 10, 13, 18
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
5
7. Uvod
7.1 Vpeljevanje v problem
Sem uporabnik veliko programov, družabnih omrežij ipd. in vsak od teh zahteva
uporabniško ime in geslo. Tega je veliko in moja prva rešitev je bila, da sem za večino
uporabljal ista gesla. Pred nekaj časa pa sem se začel zanimati za kriptografijo in ugotovil sem,
da je to izredno nevarno. Najboljše je imeti geslo čimbolj komplicirano in vedno drugačno.
Sedaj imam gesla zapisana na svojem računalniku, na telefon pa si jih ne upam zapisati, saj
imam zelo preprosto geslo za telefon in ga večino časa nimam pri sebi. Tako se bojim, da bi
kdo ugotovil moja gesla. Zato sem se odločil, da izdelam aplikacijo, v katero bom lahko varno
vpisoval vsa gesla.
Pri tej aplikaciji je pomemba preglednost in enostavnost za uporabo. Najbolj
pomembna pri tej aplikaciji pa je varnost samih podatkov. V skladu z lastnimi željami in
estetiko designa sem zasnoval osemmestno številsko kodo (10^8 možnosti), ki jo mora
uporabnik vnesti za vstop v aplikacijo.
Programiranje Android aplikacij sem že dobro poznal in želel sem izdelati nekaj
praktičnega. Izkušenj s tega področja, predvsem s področja baz podatkov, sem imel že kar
nekaj, nova pa je bila zame kriptografija, za katero sem se v prejšnjem šolskem letu začel
močno zanimati.
Tabela 1: Strojna oprema
Komponenta Programska oprema
računalnik HP Z440
procesor Intel Xeon CPU E5-1620 v3
RAM 16 GB
disk 237 GB SSD + 1,81 TB hard drive
telefon Samsung A6+
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
6
Tabela 2: Programska oprema
Programska oprema Vrsta programa
Windows 10 operacijski sistem
Java JDK-9.0.1 programski jezik
Android Studio 3.0.1 urejevalnik kode
Filezilla povezovalnik s strežnikom
Google Chrome brskalnik
Word urejevalnik besedil
Inkscape grafični program
Atom urejevalnik kode
Notepad++ urejevalnik kode
7.2 Predstavitev problema
Aplikacija vsebuje naslednje elemente in funkcije:
• prijava v aplikacijo in določitev kode ob prvi prijavi,
• vstop v aplikacijo s to kodo,
• zamenjava kode,
• vpis gesla ali beležke,
• pri geslu možnost vpisa naslova, uporabniškega imena, gesla in opomb in
• pregled shranjenih gesel/beležk in njihovo urejanje.
Ključna pri tej aplikaciji je predvsem varnost podatkov. Preprost pregled podatkov, kar
je sicer prvotni namen aplikacije, je dosežen že s kodo, ki jo je treba vnesti za vstop v aplikacijo.
Podatki morajo biti varni tudi pred bolj naprednimi poskusi vdora. Tako sem moral natančno
preučiti sodobne načine kriptiranja podatkov, ki so sicer večinoma vsi na voljo brezplačno. Gre
namreč za matematične algoritme, ki jih uporablja ves svet in so bili razviti za širšo svetovno
javnost.
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
7
8. Teoretična rešitev
Program, ki ga bom izdelal, bo sestavljen iz več funkcij, ki bodo potrebne za pravilno
delovanje programa in shranjevanje gesel. Vse te dele programa bom v nadaljevanju tudi
opisal.
8.1 Kriptografija
Prvi pomembi korak pri varovanju podatkov je že omenjena uporaba HASH-a. Hash
je zgoščevalni algoritem, ki za argument jemlje poljubno dolgo sporočilo in ga pretvori v
binarno vrednost fiksne dolžine. Povedano drugače iz moje osemmestne kode naredi
popolnoma nerazumljiv niz. Pomembna lastnost hash-a je, da je algoritem popolnoma javno
dostopen in vsak lahko pretvori v eno smer, matematično nemogoče pa je poiskati inverzno
funkcijo. To pomeni, da tudi če nekdo dobi hash, mu to ne pomaga, saj mora še vedno ugibati
kodo in jo nato primerjati s hash-om, da ugotovi ali je prava ali ne.
Drugi korak je uporaba sinhronične kriptografije. To je postopek, ki s pomočjo
algoritma (navadno znanega) pretvori sporočilo v kriptirano besedilo. Poleg prvotnega
sporočila potrebuje algoritem še ključ (ki je obvezno skriven) in postopek lahko obrnemo in
iz zakodiranega besedila s pomočjo ključa ugotovimo prvotno sporočilo.
Tretji postopek, ki ga bom uporabljal v vseh korakih, je dodajanje »soli«. To pomeni,
da se npr. prvotni kodi (npr. 12345678) doda še dodaten niz znakov (npr. abcdefgh) in se
nato novi niz prevede v hash. Sol je v moji aplikaciji statična, kar pomeni, da je zapisana
nekje v kodi (ki je nepooblaščena oseba načeloma ne more dobiti). Soljenje še dodatno
poveča varnost, saj če napadalec pozna hash in želi ugotoviti kodo, ki ni soljena, ima 10^8
možnosti, če pa se doda še sol in je napadalec ne pozna, pa je možnosti seveda še veliko
veliko več.
8.2 Prijava v aplikacijo
Pri prvi uporabi aplikacije si bo uporabnik moral izbrati osemmestno kodo,
sestavljeno iz številk od 0 do 9. To pomeni, da ima uporabnik na voljo 100000000 možnosti.
Številsko kodo sem si izbral zaradi boljšega izgleda aplikacije in ker je za moje potrebe
osemmestno geslo popolnoma dovolj varno. Temu geslu se doda še statična sol, ki jo
sestavlja osem naključnih znakov iz UNICODE kodne tabele. Iz gesla in soli se nato tvori
»hash« in sicer z algoritmom sha256, ki je trenutno najbolj sodoben tovrstni algoritem. Ob
vsakem naslednjem vstopu v aplikacijo mora uporabnik ponovno vpisati geslo in program
nato iz njega tvori »hash«, ki ga nato primerja s shranjenim (iz prve prijave).
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
8
Slika 1: Skica prijave
8.3 Dodajanje gesla
Uporabnik si bo lahko izbral ali bo shranil geslo ali beležko. Če bo izbral geslo, bo
vpisal naslov, uporabniško ime, geslo in opombe. Naslov in geslo sta obvezna. Pri
shranjevanju beležke pa sta uporabniku na voljo naslov in besedilo. Ko uporabnik pritisne
na gumb za shranjevanje, se vsa polja razen naslova obdelajo s sinhroničnimi kriptografskimi
algoritmi (AES-GCM). Za ključ se uporablja ključ (le ta je v aplikaciji zapisan le v času, ko
je aplikacija odprta), ki ga iz statične 20 mestne soli in gesla za vstop v aplikacijo generira
sodoben in zanesljiv »secret key generator« s 1000 ponovitvami.
Slika 2: Skica dodajanja gesla
8.4 Shranjevanje podatkov
Vsi podatki vključno z »hashom« se zapišejo v navadni tekstovni datoteki JSON tipa.
Datoteka je shranjena tako, da do nje lahko dostopa le aplikacija. Ta datoteka doseže izredno
majhne velikosti in je po mojem mnenju boljša izbira kot pa integracija bolj kompleksne
SQL tabele.
8.5 Branje podatkov
Ob vstopu v aplikacijo se iz JSON datoteke preberejo naslovi in tipi shranjenih
podatkov in se izpišejo v obliki seznama. Ob kliku nanje program prebere še ostale atribute
in jih dešifrira, tako da so uporabni za uporabnika.
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
9
Slika 3: Skica branja podatkov
8.6 Potrebno znanje
Za izdelavo takšne aplikacije moram poznati programski jezik Java, JSON strukturo,
jezik (strukturo) xml za grafični del, kriptografijo in arhitekturo pomnilnika android telefona.
Za kriptografijo bom uporabljal že razvite algoritme in jih bom tako moral le še integrirati v
svoj program. Nova stvar, ki se je moram naučiti, je kriptografija. Le z dobrim znanjem
celotne kriptografije se bom lahko odločil za varne rešitve, ki bodo ohranila moja gesla
popolnoma varna.
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
10
9. Praktični del
V nadaljevanju bom opisal in razlagal le ključne odstavke iz kode, saj že samo javanski
(logični) del kode obsega preko 2500 vrstic. Koda je poleg javanskega dela sestavljena še iz
xml datotek, v katerih so zapisani podatki kako naj aplikacija grafično izgleda.
9.1 Android Studio
Izdelave svoje aplikacije sem se lotil v programu Android Studio, ki je brezplačno
dostopen na internetu. Uporabil sem zadnjo verzijo (3.0.1), seveda pa je za delovanje potrebno
imeti na računalniku naloženo Javo. Android Studio je uporabniku precej prijazen program in
ko ustvarimo novo aplikacijo, že sam izdela vse za delovanje ključne datoteke, kot sta npr.:
Gradle Scripts in Manifest. Nato pa uporabnik sam začne izdelovati program. Aplikacija je v
prvi razdelitvi zgrajena iz t.i. Activity-jev,
ki so v resnici različni zasloni. So kot
različni zavihki oz. deli strani pri spletnih
straneh. Vsak Activity je sestavljen iz dveh
delov: iz datoteke .java in datoteke .xml. V
prvi je zapisana logika (kaj naj Activity
počne) v drugem pa kako naj Activity
izgleda. Vse te datoteke Android Studio
izdela samodejno. Uporabnik lahko nato še
dodaja poljubne javanske datoteke, če jih
potrebuje. Aplikacija vsebuje tudi druge
datoteke, kot so npr. datoteke v mapi res
(resources), ki so potrebne za ikono, za
različne slike, za različna besedila (lahko
tudi v več jezikih).
Slika 4: Ključne datoteke aplikacije
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
11
9.2 Activity - grafika
V tem delu bol opisal primer datoteke, ki kodira grafični del nekega Activitiy-ja.
Slika 5: Primer .xml datoteke
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
12
Xml datoteke lahko urejamo grafično (slika 3) ali pa datoteko kodiramo »ročno«. Sam
najraje pišem kodo ročno in nato v urejevalniku vidim ali je rezultat zadovoljiv ali ne. V spodnji
tabeli bom predstavil kodo, ki opisuje gumb SHRANI, ki je viden na sliki 3.
Tabela 3: Razlaga kode
<Button
android:id="@+id/addItemActivitySaveButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="2dp"
android:background="@drawable/border_rectangle"
V prvi vrstici določimo kakšen
element opisujemo. V tem
primeru gre za gumb. Nato
določimo atribute. Določimo
(vrstica 2) id, nato širino in
višino in postavitev na strani
(parent). V tem primeru sem še
Slika 6: Grafični urejevalnik
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
13
android:text="shrani"
android:textColor="@color/primaryTextColor"
android:textSize="16sp" />
določil posebno ozadje (ki ga
je potrebno definirati v drugi
datoteki). Nato sem določil še
besedilo.
9.3 Activity – logični del
Vsak Activity ima obvezno svojo .java datoteko, v kateri obstajajo obvezne metode
(ustvari jih že Android Studio). Taka metoda je onCreate, ki določi v glavni zanki tudi .xml
datoteko, ki naj se pokaže ob začetku delovanja Activity-ja.
Slika 7: Primer .java datoteke
Slika 4 prikazuje del datoteke, ki zapisuje logični del Activity-ja, katerega grafični del sem
predstavil pod sekcijo 8.2. Pisanje kode je v Android Studiu močno olajšano, saj uporabniku
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
14
pomaga »autocorrect« in program že sam dela zamike in zelo dobro predvideva kaj želiš
narediti in to močno pohitri. Uporabniku dobro pomaga tudi zaznavanje napak.
V spodnji tabeli bom opisal del kode, ki shrani geslo:
Tabela 4: Primer metode iz moje kode
//shrani geslo
private boolean savePasswordData() {
//dobi vse vpisane podatke
title = titleText.getText().toString();
username =
usernameText.getText().toString();
password =
passwordText.getText().toString();
notes = notesText.getText().toString();
//preveri če so vpisani vsi potrebni
podatki
if (!title.equals("") &&
!password.equals("")) {
String date = new
SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
JSONObject jsonObject = new
JSONObject();
//dobi ključ
int mySecureKey =
((MyGlobalVariables)
this.getApplication()).getMyKey();
//vsi podatki se zakodirajo s
pomočjo metode iz drugega razreda
date = new
String(aesCryptography.encryptData(date,
mySecureKey, true),
StandardCharsets.ISO_8859_1);
username = new
String(aesCryptography.encryptData(username,
mySecureKey, true),
StandardCharsets.ISO_8859_1);
password = new
String(aesCryptography.encryptData(password,
mySecureKey, true),
StandardCharsets.ISO_8859_1);
notes = new
String(aesCryptography.encryptData(notes,
mySecureKey, true),
StandardCharsets.ISO_8859_1);
mySecureKey = 0;
//vse podatke doda v Json objekt
try {
Koda je že nekoliko opisana s
komentarji, katerih začetek je
označen z: //
Metoda najprej dobi podatke. Že
obstoječo spremenljivko tipa
String na novo določimo in sicer iz
spremenljivke titleText dobimo
besedilo in ga pretvorimo v String.
To ponovimo še pri drugih.
If stavek preveri, če sta vnesena
naslov in geslo.
Če sta, kriptira vse podatke razen
naslova (zaradi lažjega dela pri
branju podatkov) in jih shrani v
Json objekt.
Za shranjevanje v Json objekt je
potrebna »try – catch« struktura.
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
15
jsonObject.put("dataType",
"password");
jsonObject.put("date", date);
jsonObject.put("title", title);
jsonObject.put("username",
username);
jsonObject.put("password",
password);
jsonObject.put("notes", notes);
} catch (JSONException e) {
e.printStackTrace();
}
//kliče drugo metodo
putJsonObject(jsonObject);
//zaključi to metodo
return true;
} else {
Toast.makeText(this, "Vsa polja
morajo biti izpolnjena.",
Toast.LENGTH_LONG).show();
return false;
}
}
Ko je objekt postavljen, kličem
drugo metodo (funkcijo) z in za
argument pošljem ta objekt. Nato
zaključim metodo.
Če vsa potrebna polja niso
izpolnjena, se uporabniku na
zaslonu pojavi »toast«.
9.4 Json struktura
Json je ime preproste tekstovne datoteke, v kateri so podatki shranjeni hierarhično,
podobno kot je za relacijsko urejena baza datoteka v formatu csv. Za ta model sem se odločil,
ker ga Android dobro podpira in tekstovna datoteka porabi zelo malo prostora. Moja baza
podatkov je urejena tako, da so na najvišji ravni shranjeni ime, priimek, hash in nato še polje z
vsemi gesli oz. besedili. Vsak od teh objektov ima še naprej določene atribute, kot so tip,
naslov, datum (za katerega lahko rečemo, da je ključ), geslo, uporabniško ime ter opombe (oz.
besedilo pri beležki).
Za demonstracijo sem v Notepad++ izdelal primer moje podatkovne baze z geslom
(glavna osemmestna koda) 12345678 in z le enim shranjenim geslom. To prikazuje slika 5. Na
sliki 5 je zapisan hash glavnega gesla brez soli in tudi podatki gesla (z naslovom test1) niso
zakodirani. Spodaj pa je prikazano, kako v resnici (po soljenju in kodiranju) izgleda takšna
datoteka:
{"name":"Aleš","surname":"Čebulj","password":"18d90aeab8bd72198d37c8198442b
5b353011c83faa1bef07dfbec5383b6d451","dataArray":[{"dataType":"password","d
ate":"\u0018fQ\u0006\u001a´n§��²í�k¹n©T\u00157ÇÛ�?e\\º#ç�«","title":"test
1","username":"K:\u0006Eg\u0015»�1ë�tÐ�¥L[ü\u001dþ","password":"K4\u0000\u
0007\u0018´J9�í�]��\u001c\u0007n_Ú×
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
16
\r","notes":"^9C\\O§1òáÂõ·Ä;óþKÕUh¨Ý1@�ª1\u0000ͬhñ!�*þ¡þ:xÑ{T�Êom2 ô
ña躻��\u0005óÁu��,"}]}
Slika 8: Primer JSON strukture
9.5 Ikona
Odločil sem se tudi, da bom za aplikacij izdelal preprosto ikono. Za to sem se odločil,
ker sem aplikacijo izdelal za dejansko uporabo in ikona je še zadnji detajl, ki ni obvezen, je pa
zelo lep dodatek. Za izdelavo sem uporabil program Inkscape, ki je prosto dostopen in je
odlično orodje za vektorsko grafiko. Pri izdelavi sem sledil uradnim priporočilom, ki so
objavljeni na spletni strani developer.android.com.
Slika 9: Ikona izdelana s programom Inkscape
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
17
9.6 Testiranje
Aplikacijo sem testiral že med samim razvojem aplikacije. Android Studio ima možnost
uporabe t.i. emulatorja, ki je navidezni Android telefon na računalniku. Testiranje sem začel
najprej na emulatorju, pozneje pa sem testiral še na svojem telefonu. Android Studio omogoča
zagon nove verzije na telefonu, ne da bi ta povozila prejšnjo in izbrisala že shranjene podatke.
Studio ima tudi odlično možnost uporabe razhroščevalca (debuger), ki deluje zelo dobro in mi
je močno pomagal pri delu. Na koncu sem naredil tudi podpisano »release« verzijo .apk
datoteke.
9.7 Namestitev aplikacije
V fazi testiranja sem imel Android Studio nastavljen na način »debug« in sem tako
lahko aplikacijo zagnal na telefonu (ki je bil seveda fizično povezan z računalnikom). Ko pa
sem zaključil, sem to aplikaciji izbrisal in jo znova namestil z release .apk datoteko. Namestitev
je preprosta: kopijo .apk datoteke premestimo v pomnilnik telefona, nato pa jo v raziskovalcu
(na telefonu) poiščemo in odpremo. Telefon nas najprej vpraša, če dovolimo temu viru, da
inštalira aplikacijo (privzeto sprejema le aplikacije iz trgovine Google Play). Ko to dovolimo,
se program inštalira (nekaj sekund) in aplikacija je naložena. Nato jo uporabnik le še poišče, jo
odpre, vpiše svoje ime in priimek ter vnese svoje geslo (dvakrat).
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
18
10. Zaključek
10.1 Evaluacija opravljenega dela in izboljšave
Po mojem mnenju sem nalogo, ki sem si jo zadal na začetku, dobro opravil. Glavni cilji
so po mojem mnenju doseženi. Aplikacija izgleda estetsko zadovoljivo, prav tako ikona.
Aplikacija je uporabniku prijazna in enostavna za uporabo. Edina pomanjkljivost je, da nisem
vgradil tudi brskalnika po shranjenih geslih in tako uporabnik lahko le išče po seznamu.
Zaenkrat mi to sicer še ustreza, v prihodnosti pa bom morda dodal tudi to funkcijo. Drugače pa
je aplikacija odlična in jo dejansko uporabljam že odkar sem jo izdelal. Tudi kriptografija
očitno deluje (kar lahko vidimo v odseku 8.4) in sem precej samozavesten, da mi kode nihče
ne bo razbil. Mislim sicer, da to ni nemogoče, toda potrebno bi bilo veliko dela in znanja.
Moj način šifriranja bi se sicer dalo razbiti na sledeč način:
1. Nekdo bi mi moral fizično ukrasti telefon in ugotoviti geslo ali pa nekako prek
omrežja vdreti vanj.
2. Nato bi moral narediti »root« telefona, kar pomeni, da bi dobil dostop do vseh
prej nevidnih datotek na telefonu. Takšna je tudi datoteka z mojimi gesli.
3. Datoteko bi moral kopirati na svoj računalnik.
4. Pridobiti, bi moral apk moje aplikacije in iz nje nekako dobiti mojo kodo (.java
in .xml), kar je sicer komplicirano, toda kolikor vem, je možno.
5. Iz moje kode pridobi vse soli, ki jih uporabljam in s preprosto zanko nato
preizkusiti največ 10^8 možnosti in tako ugotoviti mojo kodo.
6. Nato pa bi preprosto s to kodo dešifriral podatke.
7. Lahko pa bi se samo poskusil osredotočiti na moj GCM algoritem, kjer sem
naredil napako in za začetni vektor (IV) uporabil kar konstanto. To sem storil
zato, ker sem imel ogromne probleme z pridobivanjem IV-ja nazaj iz šifriranega
teksta. IV bi moral namreč generirati vsakič znova in ga pripeti na šifrirano
besedilo in ga pridobiti nazaj pri dešifriranju. To bom morda v prihodnosti
poskusil še popraviti.
Mislim, da je na področju kriptografije, ki sem jo uporabljal, še nekaj možnih izboljšav.
Morda glavna stvar, ki bi (jo bo) treba popraviti, je prenos teh gesel ob menjavi telefona. Poleg
tega bi bilo treba ustvariti tudi način za backup. O tem sem že razmišljal in sem tudi izdelal
možnost izvoza datoteke, toda ne vem kako točno bi to potem uporabil na drugem telefonu.
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
19
Slika 10: Izgled aplikacije
10.2 Porabljen čas
Grafikon 1: Porazdelitev časa
Porabljen čas (ure)
zbirnje idej in pridobivanje znanja programiranje
testiranje in poravljanje design
dokumentacija
Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20
20
11. Literatura
• Documentation for app developers (online), [Uporabljeno dne 25.3.2020]
Dostopno na https://developer.android.com/docs
• Material design (online), [Uporabljeno dne 25.3.2020] Dostopno na
https://material.io/
• Peter Smirnoff & Dawn M. Turner, Symmetric Key Encryption (online),
[Uporabljeno dne 25.3.2020] Dostopno na
https://www.cryptomathic.com/news-events/blog/symmetric-key-encryption-
why-where-and-how-its-used-in-banking
• Margaret Rouse, asymmetric cryprtography (online), [Uporabljeno dne
25.3.2020] Dostopno na
https://searchsecurity.techtarget.com/definition/asymmetric-cryptography
• Wechtersbach, Rado: INFORMATIKA, učbenik za srednje izobraževanje,
Založba Saji, Grosuplje, 2005