Prijenos podataka putem fm signala
Radi: Josip Puđa
Opis: Kriptacija datoteke, slanje preko fm singala, primanje te dekriptacija datoteke
Sadržaj |
Uvod
U ovom projektu ćemo prikazati kako obaviti prijenos datoteka putem fm signala s jednog računala na drugi. Motivacija ovog rada je prikazati kako se može putem javnog kanala komunikacije poslati informacija na siguran način. Poslati ćemo kriptiranu datoteku s jednog računala koja će se na drugom računalu moći preuzeti, dekriptirati te, na kraju, koristiti.
Procedura
Uzimamo dva računala. U našem slučaju, jedno računalo je Raspberry Pi 3 B, dok je drugo računalo prijenosnik s Windows 10 operativnim sustavom. Da pojednostavimo stvari, jedno računalo ćemo nazvati Računalo A, a drugo Računalo B.
Računalo A
Na Računalu A ćemo napraviti skriptu u programskom jeziku Python(3.4) koja radi sljedeće. Uzeti će datoteku s računala, u našem slučaju tekstualnu datoteku pod nazivom 'Poruka.txt'. Tada ćemo prevesti tu datoteku u hexidecimalnu vrijednost. Ovo će nam omogućiti da lakše radimo s prijenosom. Budući da želimo privatnost datoteke koju šaljemo, želimo ju ujedino kriptirati. Za ovaj posao odlučio sam koristiti modul PyCryptodome. Njega ćemo koristiti kako bi kriptirali datoteku AES metodom. Zbog veličine, korisititi ćemo 128 bitnu verziju. Nakon što smo kriptirali, želimo poslati datoteku. Budući da koristimo fm signal, najbolji način bio bi koristiti tradicionalni mors kod. Prije negoli dođemo do toga, moramo se vratiti na našu kriptiranu datoteku. Budući da mors kod ima ograničen broj znakova u riječniku, nećemo moći poslati našu datoteku u obliku u kojem je sada. Kako bi rješio ovaj problem, ponovno pretvaram dani tekst u heksadecimalni zapis. Moguće je pretvoriti u Base64 format, no za Python to zahtjeva još jedan modul, a želimo smanjiti broj ovisnosti. Nakon toga možemo naš tekst pretvoriti u mors kod. Za ovo sam korstio skriptu koja uzima svaki simbol i pretvara ga u pripadajuću kombinaciju točaka i povlaka iz riječika za mors kod. Nakon toga pretvaramo kombinaciju tih simbola u zvučnu datoteku. Generiramo .vaw datoteku koju ćemo nazvati 'morse_code.vaw'. Prilikom generacije možemo mijenjati postavke našega koda. Najbitnije postavke su brzina i frekvencija. Za testiranje sam koristio 25 riječi u minuti ili 25 wpm, a za frekvenciju sam stavio 850Hz. Putem brzine možemo povećati brzinu slanja datoteke, no to može rezultirati u većim šansama za nastanak za grešku. Frekvencija je birna jer ne želimo da drugi zvukovi utječu na očitavanja poruke, što u našem slučaju može rezultirati u pokvarenoj datoteci. Nakon što smo generirali našu zvučnu datoteku, trebamo je poslati. Ovo ćemo učiniti putem skripte za slanje preko fm signala. Skripta je posebno napravljena za Raspberry Pi koristeći igle za GPIO rad. Kako bi skripta radila, u 4 iglu po redu zabiti ćemo produžni kabal ili 'jumper cable'. To će nam služiti kao antena za odašiljanje. Skripta koju koristimo uzima našu .vaw datoteku i štalje ju putem antene na frekvenciju koju mi odabiremo. Za test uzimamo frekvenciju 103.0MHz. Nakon toga pokrećemo skriptu, te odašiljemo našu datoteku.
Računalo B
Na računalu B moramo postaviti primanje datoteke. Za ovo ćemo morati koristiti neke softwaree za slušanje fm radio singala kao i software za pretvaranje morse koda u standardnu latinicu. Prvo korstimo hardware za primanje fm signala, za test koristimo Realtek rtl2832u. Nakon toga instaliramo software za slušanje fm signala. Za test koristimo HDSDR. Pomoću ova dva alata možemo uloviti signal naše radio stanice. Budući da smo na Računau A stavili da je radio frekvencija 103.0MHz to ćemo isto napraviti i u HDSDR-u. Nakon što podesimo frekvenciju, možemo čudi našu radio stanicu kako prenosi mors kod. Sada je potrebno uzeti taj kod i prevesti ga u latinicu. Za to ćemo koristiti MRP40. Ovaj alat uzima zvukove s zvučne kartice te dekodira mors kod u latinicu. Namješteno je automatsku pronalazi frekvenciju. Na Računau B smo stavili da je frekvencija 850Hz, tako da će se program automatski namjestiti na 850Hz ili oko te frekvencije. Na nama je samo da podesimo brzinu riječi, koja je, ako se sjetimo, 25 riječi po minuti. Nakon toga naš alat pretvara mors kod koji dobivamo od radio stanice u tekst. Tekst koji dobivamo sada moramo spremiti u datoteku, koja se u našem testu zove 'hexFile.txt'. Nakon toga ćemo koristiti skriptu koja će nam pretvoriti dobiveni tekst u datoteku. Dakle, moramo prvo pretvoriti heksadecimalni zapis u ascii pri čemu dobivamo enkriptiranu datoteku. Nakon toga se ta datoteka dekriptira kako bi dobili ponovno hexadecimalni zapis. Na kraju taj heksadecimalni zapis dekodiramo u ascii i spremamo u datoteku. Rezultat je datoteka s Računala A na Računalu B koju smo prenjeli putem fm signala.
Zaključak
Za kraj želim se vratiti na razlog ovog rada i onoga što izvuči iz primjene. Zbog interneta, ovakav način prenosa se čini suvišnim i u najboljem slučaju nepotrebnim. No iz ovoga možemo izvući par primjena. Ovakav način prijenosa omogućuje prijenos datoteka putem kanala koji svi vide, al koji na kraju osoba koja šalje posjeduje. Izbjegava se potreba ISP-eva i samim time omogućava privatnost. Može se izmjenjivati s kratke udaljenosti na dugu po potrebi te omogućava povećanje i smanjivanje brzina budući da se ne koriste ljudi za čitanje i dekodiranje.
Alati korišteni
- Raspberry pi 3 B
- Windows 10 Računalo
- Realtek rtl2832u
- HDSDR
- MRP40
- Python 3.4 (Raspbian)
- Python 3.6 (Windows 10)
Skripte korištene
- Fm transmitanje: https://github.com/markondej/fm_transmitter
- Morse kod enkodiranje: https://www.dropbox.com/s/4gg3ljgpyqaq25u/morsewav.py?dl=0
- Hex enkodiranje i kriptiranje: https://www.dropbox.com/s/b98ru0rrl512o1l/hex.py?dl=0