Posted by: mykopop | Donderdag 11 Oktober 2007

Bietjie Brag!

1.
Mag ek maar bietjie spog vanaand met iets wat ek reggekry het? Ongelukkig sal dit bietjie tegnies raak, dus het ek besluit om hierdie inskrywing in te deel in twee helftes. Eers die deel vir normale mense, en dan…

Kortliks, ek werk nou al ‘n klompie jare met enkripsiestelsels maar ek kon tot dusver nie regtig so naby aan die enkripsie en dekripsie kom dat ek dit kan voel en proe nie. Net vir iemand wat nou glad nie weet nie, enkripsie is wat gebruik word bv. deur die geheime diens om boodskappe te stuur sonder dat dit onderskep kan word, dit word ook gebruik in betaal-TV stelsels om voorwaardelike toegang te gee.

Ek het die afgelope paar dae gewerk aan ‘n rekenaarprogram wat ‘n datastroom kan enkripteer en op die ontvangsrekenaar dekripteer. Ek het bv. ‘n mp3 gespeel op een rekenaar, dit geënkripteer een deur die netwerk na die ander rekenaar gestuur waar dit gedekripteer word en dan deur ‘n mediaspeler gespeel word.

Aangesien hierdie program basies heeltyd pakkie inligting na die netwerk pomp, het ek besluit om ook vandag ‘n gedig-dingetjie wat ek al in 1993 geskryf het, te plaas, genoem Rekenaarvlokkie (dis nou ‘n chip).

Hierdie is nogal vir my ‘n prestasie, ek sal graag wil hoor van enigiemand in Suid-Afrika (Afrika?) wat tot so iets in staat is. Ek het altyd die gewoonte gehad as ek ‘n ‘n kollega iets moeilik saam reggekry het, om blad te skud. Aangesien ek dit alleen gedoen het, geluk, Self!

Wees asseblief so gaaf om Afrikaanssprekende leerlinge wat in rekenaarwetenskap belang stel, na hierdie geskriffie te verwys.

2.

Goed, hier is die tegniese deel. Ek gaan ook nou nie al my geheime weggee nie. (Net brag.) ‘n Jaar of twee gelede het ek ‘n C-programmetjie geskryf wat ek ‘n multicast-repeater genoem het, wat luister op een multicast adres en poort en dit dan enige pakkies wat ontvang word uitstuur op ‘n ander multicast adres en poort. (Jammer, hier gaan ek heelwat Engelse woorde moet gebruik.) Die program gee ook nie juis om as dit unicast UDP is nie.

Ek wil eintlik ‘n baie meer ambisieuse C++ objekgeoriënteerde program skryf om datastrome te enkripteer ens. maar ek besluit toe om dit eers net in die repeater programmetjie in te bou. Ek het besluit dieselfde program moet in staat wees om te enkripteer of dekripteer.

Om die data self te enkripteer, moet mens ‘n simmetriese enkripsie-algoritme gebruik, ek het op Blowfish besluit. Omdat dit ‘n simmetriese algoritme is, moet die enkriptor en die dekriptor natuurlik dieselfde sleutel gebruik. Ek het ‘n “random” funksie gebruik in die enkriptor om ‘n 128-bit (16 bytes) sleutel te genereer. Die sleutel moet nou na die ontvanger gestuur word. Daarvoor gebruik mens ‘n openlike-sleutel (my eie skepping) enkripsie algoritme, ek het die bekende RSA gebruik. Eers gebruik ek ‘n command-line opdrag om ‘n sleutel-paar (d.i. ‘n privaatsleutel en ‘n openlike sleutel te genereer). Dit word saam in ‘n lêer gestoor, sê ‘private.pem’. Ek gebruik dan ‘n ander opdrag om net die openlike sleutel te ontrek, sê in ‘n lêer ‘public.pem’. Dit moet tipies op die ontvangrekenaar gedoen word. Die openlike sleutel kan dan na die enkriptor-rekenaar gestuur word, bv. deur e-pos.

Wanneer my program begin hardloop, probeer dit ‘private.pem’ oopmaak. As dit daar is, neem dit aan “ek is die dekriptor”, anders probeer dit die openlike sleutel (“public.pem”) oopmaak, indien dit gekry word, word die program ‘n enkriptor.

Die enkriptor neem eerstens die lukrake sleutel wat gegenereer is vir die Blowfish algoritme en enkrypteer dit met RSA, met gebruik van die openbare sleutel. Net iemand wat die privaatsleutel het kan dan hierdie pakkie oopmaak om die Blowfish-sleutel (dit word gewoonlik ‘n sessie-sleutel genoem) uit te haal. Daarna kopieer die enkriptor eenvoudig pakkies van inset na uitset en gebruik ‘n teller om so elke 160 pakkies weer die sessie-sleutel te stuur. As die dekriptor dus eers later begin word, hoef dit net so 10 sekondes of minder te wag vir die sessie-sleutel.

Ek gebruik ‘n baie eenvoudige beginsel vir die dekriptor om te weet wanneeer ‘n pakkie wat dit ontvang die sessie-sleutel is.

Om dit te toets, het ek die enkriptor en dekriptor op twee rekenaars gehardloop. Op die enkriptor-rekenaar het ek ook VLC-mediaplayer gehardloop en ‘n mp3-lêer na die rekenaar self se adres gestroom as UDP (RTP). Die enkriptor ontvang dit en stuur dit uit op ‘n multicast adres. Op die dekriptor-rekenaar ontvang die dekriptor die pakkies, kry die sessie-sleutel, dekripteer die oudio-pakkies en stuur dit weer as UDP na daardie rekenaar se eie adres. Ek hardloop nog ‘n VLC op daardie rekenaar en sê “Open Network Stream”, en gee eenvoudig die poort-nommer. Die musiek het sonder enige breke op daardie rekenaar teruggespeel.

Ek besef die stelseltjie is nog baie eenvoudig op die oomblik, bv. dit kan net met een ontvanger werk, behalwe as mens die privaat-sleutel na meer as een rekenaar kopieer, maar dis nooit ‘n goeie idee by enkripsie nie. Ek soek ook na ‘n manier om te verseker dat die privaat-sleutel net op een rekenaar gebruik kan word.

Ek weet natuurlik nie veel van kriptologie af nie, maar verstaan darem nou bietjie meer van hoe dit werk. Ek het natuurlik ook nie die wiel oor-ontwerp om die kode vir die enkripsie self te skryf nie, ek gebruik funkies uit ‘n bekende ‘library’ (oopkopkode!) om dit te doen. (Ek sal nie sê watter een nie, behalwe as ek gemartel word – rubber-hose crypto-analysis!)


Responses

  1. Geluk met jou prestasie! Programmering is vir my Grieks. Ek het net al baie keer gewens as ek werk met ‘n program met tekorte/foute dat ek iets kon doen om dit reg te stel!!

  2. Sjoe! ek het VB6 gedoen, paar jaar gelede, maar nie daarin gegaan nie, nie die geleentheid gehad..te besig met skool! baie geluk…het iemand wat ek kan verwys! geluk weereens!

  3. Ek het nie ‘n idee waarvan jy praat nie, maar jy klink soos 007…

  4. jip, soos boer verstaan ek min tot niks van wat jy reggekry het nie, maar dit klink defnitief impressive! Dis vir my baie cool as mense so opgewonde en entosiasties kan wees oor wat hulle doen!! Baie geluk!!

  5. Dit is FLIPPIN goed! geluk! Jy het rede om te ‘brag’.

  6. awesome🙂

  7. ek val in die groep gelukwensers waarvoor die eerste helfde van die inskrywing gedoen is.

    Baie geluk!

  8. Welgedaan.


Lewer kommentaar

Verskaf jou besonderhede hieronder of klik op 'n logo om in te teken:

WordPress.com Logo

Jy lewer kommentaar met jou rekening by WordPress.com. Log Out / Change )

Twitter picture

Jy lewer kommentaar met jou rekening by Twitter. Log Out / Change )

Facebook photo

Jy lewer kommentaar met jou rekening by Facebook. Log Out / Change )

Google+ photo

Jy lewer kommentaar met jou rekening by Google+. Log Out / Change )

Connecting to %s

Kategorieë

%d bloggers like this: