Bütyköltem

Néha mindenféle érdekes dolgokat rakok össze otthon, melyek egy része talán másokat is érdekelhet.

TIVEDA

  • Így előzd meg a büntetést!Ti megszoktátok már a VÉDA kapukat az utakon? Hogy jövet-menet figyelik mindent jól csináltok-e, nem telefonáltok, nem érintitek a záróvonalat, és azonnal megálltok, ha sárgára vált a jelzőlámpa? Hogy...
  • Így működik a TIVEDAMivel a TIVEDA-ban használt ESP8266 összesen 96Kbyte rammal rendelkezik, aminek nagy részét az alap rendszer elfoglalja, ezért az iGO-val vagy a Waze-el ellentétben nem volt lehetőségem arra, hogy...
  • Kijelzőt a TIVEDáraTegnap kaptam ezt a kis videót, ahol egyik olvasóm mutatja meg, hogy kis átalakítással akár egy OLED kijelző is ráköthető a TIVEDára, ami így már a pontos sebességet és időt is ki tudja jelezni. A...
  • TIVEDA firmware feltöltésElkészültem végre az ígért videóval a TIVEDA szoftver feltöltéséről. A Wemos D1 mini a CH340 meghajtót igényli. Ezt windowshoz itt találjuk meg, ha telepítettük, akkor csatlakoztatás után egy új COM...
  • TIVEDA beépítéseAmikor az elkészült TIVEDA-t szeretnénk fixen beszerelni egy járműbe, az első probléma, amit meg kell oldani, az az, hogy a jármű áramellátása általában 12 voltos (ritkábban 6), a mi vezérlőnk viszont...
  • Ti küldtétekAz elmúlt napokban egyre több visszajelzést kapok olyanoktól, akik a korábbi cikkem alapján megépítették saját TIVEDA készüléküket. Ezekből osztanék meg párat veletek, háthat lesznek olyanok, akik...

Friss topikok

Linkajánló

Okmányiroda, kormányablak időpontfoglalás térképen. Ha hivatali ügyet kell intézned, érdemes itt kezdened.

Ha kiváncsi vagy melyik izzót éri meg megvenni, akkor próbáld ki a másik oldalamat is!

Also check out my light cost calculator site!

Készítsünk saját titkosított chatet!

2016.04.02. 02:06 Mr. Big

Sok más informatikussal egyetemben én is elborzadva olvastam azokat az "ötleteket" ami szerint a kormány tiltaná azokat az alkalmazásokat melyek olyan titkosítást alkalmaznak, melyet a készítője nem tud feloldani. Azt, hogy ez miért borzalmas ötlet már sokan mások is leírták, ezért erre nem is pazarolnám a betűket. Viszont a többség még úgy hiszi, hogy egy ilyen alkalmazást összerakni csak kivételes emberek tudnak. Ezzel szemben az igazság az, hogy a titkosításokhoz szükséges algoritmusok mára annyira kiforrottak, hogy minimális hozzáértéssel pillanatok alatt össze lehet dobni egy új alkalmazást.

Gondoltam ezt a gyakorlatban is kipróbálom, és megnézem mennyi idő összeütni egy end-to-end titkosító chat alkalmazást.

Elsőnek is kell egy chat alkalmazás. Ezt például a nodejs alapú socket.io-val nem nagy dolog összerakni, van rá kész tutorial is. Az egyszerűség kedvéért letöltöttem a kész oktató anyagot, és telepítettem:

$ git clone https://github.com/guille/chat-example.git $ npm install

Már csak el kell indítani:

$ node index.js listening on *:1984

Hoppá, máris van egy működő chat szolgáltatásom:

chat_basic.jpg

Már ezt önmagában is elég nehéz lenne megtalálni, hiszen bárki, bárhol elindíthat egy chat szervert. Viszont itt még nem használunk semmilyen titkosítást, így ha a hatóságok megtalálták akkor probléma nélkül le is tudják hallgatni.

Mivel azt szeretnénk, hogy csak a két fél tudja a titkosítást megfejteni ezért a végpontokon (a böngészőben) kel az adatokat titkosítani. Bár még nem végleges, de már szépen halad a HTML5 Crypto szabványa, ami pont ezt teszi számunkra egyszerűen elérhetővé.

A példa kedvéért elég lesz egy szimmetrikus kulcsú titkosítás is, azaz minden félnek ugyanazt a jelszót kell majd ismernie, ha hozzá akar férni az üzenetekhez. Ehhez tegyünk be egy jelszó mezőt az oldal tetejére:

form.jpg

Ezzel párhuzamosan az alsó form kapott egy "bottom" class-t. Pár apró css beállítás után meg is van az új képernyőnk:

chat_2.jpg

Következő lépés az, hogy a beírt jelszóból generáljunk egy titkosító kulcsot. A jelszó önmagában gyakran nem annyira összetett, hogy egy brute force támadásnak ellenálljon, ezért a Crypto API deriveKey() metódusával kicsit "megerősítjük" (egyszerűen kimásoltam a példakódokat az MDN cikkéből):

keygen_1.jpg

Megjegyzés: mivel a titkosított chatünk arab magyar felhasználóknak készül, ezért gondolnunk kell az ékezetes karakterekre is. Fogadjuk meg az MDN tanácsát, és a karakter műveletekre használjuk az Unibabel csomagot.

Miután a .zip fájlt letöltöttük a socket.io szerver kódjába (index.js) be kellett rakni, hogy ezt is kiszolgálja. Ehhez ez a néhány sor kell, és ezután már be lehet szúrni a script taget az index.html-be.

serve_js_files.jpg

Más dolgunk nincs is, mint titkosítani az üzenetet elküldés előtt. Ehhez az index.html-ben a korábbi socket.emit sort erre a kódra kell lecserélnünk:

encode.jpg

Hoppá, már titkosított üzeneteket küldözgetünk, igaz elolvasni még nem tudjuk őket:

encode_in_work.jpg

 Most akkor próbáljuk meg dekódolni! Az AES-CBC esetében ehhez az Initialization Vectorra (IV) is szükségünk van, tehát az üzeneten kívül ezt is el kell küldeni. Mivel itt csak az a megkötés, hogy mindig egyedi legyen, ezért nyugodtan átküldhetjük kódolatlanul is. Ezért a socket.emitnek átadott adatstruktúrát kicsit kibővítjük:

emit_with_iv.jpg

Ezután a fogadó oldalon az üzenet eseménybe berakhatjuk a dekódolást:

decode.jpg

És már működik is a chatünk: amint a jó jelszót adjuk meg megkapjuk a dekódolt üzeneteket:

encoded_messags.jpg

A hálózat ablakban is látszik, hogy az üzenetek titkosítva jönnek-mennek, mi viszont már csak a dekódoltat látjuk - feltéve, hogy ismerjük a jelszót.

Ezt a kódot már csak el kell indítani egy publikus szerveren, és már van is egy működő "szolgáltatásunk". Nekem nagyjából két-három órába telt összerakni. Nyilván ez egy "fapados" alkalmazás, de jól szemlélteti, hogy a titkosítást behúzni alig pár sor kódot jelent.

Az alkalmazás jelenleg modern asztali chrome és firefox böngészőkön fut, de vélhetően hamarosan elérhetőek lesznek ezek az API-k a mobil böngészőkön is.

A teljes kód némi finomításokkal elérhető githubon, kipróbálni pedig itt lehet.

Szólj hozzá!

Címkék: web titkosítás chrome crypto end-to-end

A bejegyzés trackback címe:

https://butykoltem.blog.hu/api/trackback/id/tr338553454

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása