CCSSH De complexiteit van eenvoud – random

oktober 16th, 2009

Wat zijn willekeurige getallen? Hoe krijg je ze en waarom zijn zeven zo belangrijk? Het lijkt heel simpel, maar het is het niet, daarom past dit onderwerp prima bij de rode draad van deze blog.

De mens

Zeg na het lezen van deze zin hardop een willekeurig getal tussen de 0 en de 10.

Grote kans dat je 7 wilt zeggen, omdat veel mensen hebben geleerd 7 als een geluksgetal te zien en ik je heb proberen te beïnvloeden met een `tikfout’ in de tweede zin van deze blog. Het is moeilijk om een mens al een echt random getal te laten bedenken, laat staan een computer.

Random

Random is belangrijk, omdat als je iets wil vercijferen je wil voorkomen dat mensen de inhoud van het gecodeerde bericht kunnen raden. Als je twee keer het bericht: `De geit is gemolken.’, zou versturen zou dat betekenen dat er twee keer dezelfde data voorbijkomt. Had je al één keer eerder de betekenisvan het gecodeerde `De geit is gemolken.’ ontdekt, dan zou dat dus betekenen dat je iedere keer weet wanneer mensen dat bericht versturen.

Om dit probleem op te lossen wordt de inhoud van het gecodeerde bericht aangevuld met random data. Deze random data zorgt ervoor dat, mits een fatsoenlijke encryptie algoritme wordt gebruikt, de gecodeerde variant hetzelfde is.

Gokken

Belangrijk is dan dus ook dat random waarden niet te gokken zijn. Maar hoe maak je met computer software nu een écht random getal? Het enige goede antwoord is: NIET!

Er zijn formules die hele ingewikkelde uitkomsten hebben, maar het nadeel is dat deze uitkomsten wel iedere keer hetzelfde zijn als met dezelfde start waarden wordt gewerkt. Tevens, omdat het hier om een formule gaat, is een opvolgend getal te berekenen zodra de `hacker’ genoeg informatie heeft.

Een betere oplossing is een microfoon aan een computer die omgevingsgeluid oppikt. Dat levert wel degelijk een sterke random op. Muis bewegingen en de timing van de bewegingen ook, wat ook weer geldt voor toetsaanslagen. Daarnaast zijn er ook hardware oplossingen die gebruik maken van bijvoorbeeld radioactief verval.

Gevaar

Er dreigt echter een gevaar in het gebruik van deze data. Toetsaanslagen bijvoorbeeld kunnen informatie verklappen over wat de gebruiker aan het tikken is geweest. Deze informatie die in de random verborgen zit moet er op een of andere manier worden uitgehaald.

Hier is ook een oplossing voor, namelijk een hashing functie. Hash komt van hakken en mixen, denk maar aan Hachee; je neemt de oorsponkelijke data, je husselt het wat en dan hak je het in stukken. Wat je overhoudt is een deel van het origineel maar niet alles, en het is gehusseld. Doe dit wiskundig op bit niveau en je hebt niets meer van de originele data over. Later kom ik terug op hashing functies, want ze worden ook gebruikt bij het controleren van een identiteit of de integriteit van data.

Als je verschillende bronnen gebruikt, en deze informatie met een cryptografische hash functie husselt dan heb je een veilige random.

Overdreven

Het lijkt misschien allemaal wat overdreven. Een goede pseudo-random formule is toch genoeg? Ja en nee. Ja, het is waarschijnlijk genoeg en overdreven. Nee, waarschijnlijk is niet goed genoeg. Ze kunnen je pseudo-random formule ontdekken en je random nummers gaan raden. Als je met relatief simpele middelen een nog veiliger systeem kan creëren die het misbruikers onmogelijk maakt, met uitsluiting van toeval, om ook maar één random getal te voorspellen dan moet je dat niet nalaten.

In het volgende blog ga ik het hebben over rekenen met grote getallen. Dat is simpel, want daar zijn computers goed in, toch?

Post to Twitter Twitter Post to Delicious Delicious Post to Digg Digg Post to Facebook Facebook Post to Reddit Reddit

CCSSH De complexiteit van eenvoud – inleiding

oktober 11th, 2009

Ik ben begonnen aan een project voor mezelf. CCSH is de naam en staat voor CrossCode SSH (Secure Shell). Mijn bedoeling is om het Qt ontwikkel framework aan te vullen met het SSH protocol omdat ik een eigen SSH client wil ontwikkelen en verkopen. Met deze blog wil ik jullie op de hoogte houden van de complexiteit van juist de simpele dingen die ik tijdens het ontwikkelen van CCSSH tegenkom.

Hergebruik?

Mijn bedoeling is om alles zelf te implementeren ook al zijn er bibliotheken, verzameling van functies die je in software kan (her)gebruiken. De reden hiervoor is dat omdat het om veiligheid gaat er fouten in die bibliotheken kunnen zitten. Het zijn deze fouten die `hackers’ misbruiken om op systemen in te breken. Als er één zwakheid in een algemene bibliotheek zit dan zijn alle systemen die gebruik maken van deze systemen kwetsbaar.

Nu wordt de soep niet zo heet gegeten zoals ik het hier opdien, want ze zijn vaak heel erg veilig en al heel lang in gebruik. Dat neemt niet weg dat vanuit de gedachte van veiligheid het een goed idee is voor een nieuwe implementatie.

Complexiteit

Tijdens de ontwikkeling van deze zaken blijken dingen die heel eenvoudig lijken toch ineens een stuk minder simpel te zijn. Als een gebruiker van software merk je hier (gelukkig) heel weinig van, maar als ontwikkelaar kom je voor heel veel keuzes te staan en vaak over hele elementaire, op het eerste gezicht eenvoudige, zaken.

Cryptografie

SSH is een procotol voor veilige communicatie over het internet en maakt heftig gebruik van cryptografische formules. Om deze beveiliging te garanderen moeten een paar zaken worden voorkomen, simpel gezegd:

  1. De data moet niet te ontcijferen zijn voor mensen die de data pakketjes weten te onderscheppen.
  2. De identiteit van beide partijen (verzender, ontvanger) moet bij beide bekend en te controleren zijn.

Er zijn in de cryptografie twee dingen heel belangrijk:

  1. Willekeurige waarden moeten willekeurig(!) en onvoorspelbaar zijn. (Random)
  2. De sleutels moeten niet eenvoudig uit te rekenen zijn, en de berichten dus niet makkelijk te ontcijferen.

Dit is een korte inleiding in een serie van blog posts die ik over dit onderwerp ga houden. Het volgende blog gaat over willekeurige getallen. Dat is een makkelijk onderwerp, want willekeurige getallen zijn simpel, toch?

Post to Twitter Twitter Post to Delicious Delicious Post to Digg Digg Post to Facebook Facebook Post to Reddit Reddit

Ontwikkeling van een website

oktober 5th, 2009

Een bedrijf moet zichzelf presenteren en vindbaar zijn. Dit kan onder andere met een website. Met blogs wil ik mensen op de hoogte houden van de ontwikkeling omtrent www.crosscode.nl.

Technieken

Bij het maken van een site zijn er diverse keuzes te maken. Zo kun je een bestaande CMS gebruiken of zelf iets (laten) ontwikkelen. Ik, aangezien ik een ontwikkelaar ben, heb besloten mijn site zelf te ontwikkelen.

Mijn site is tweetalig, of eigenlijk meertalig, opgezet. Er zit een backend achter waarmee pagina’s bewerkt kunnen worden die zichtbaar zijn voor de gebruiker. Het is ontwikkeld in PHP en verbindt met een MySQL database. Dit is een vrij veel voorkomende opzet.

De content, het design en de programmacode is voor 100% door mijzelf bedacht, geschreven, ontworpen en ontwikkeld. Voor de plaatjes heb ik veel afbeeldingen van Open Clip Art Library welke onder een Creative Commons licentie ter beschikking zijn gesteld.

De afbeeldingen zijn op deze site te vinden in een vector gebaseerd formaat. In de praktijk betekent dit dat de afbeeldingen zonder kwaliteit verlies zijn te vergroten of te verkleinen.

Succes

Op een gegeven moment ging de website online. Na het vinden van een provider, de site was al klaar, was het een kwestie van de boel op de server plaatsen en nog wat `last minute’ probleempjes oplossen.

Om aan de initiële bezoekers te komen heb ik iedereen die ik ken een mailtje gestuurd en op de hoogte gesteld van het online gaan van mijn site. Dit was duidelijk zichtbaar in de statistieken. Sommigen onder deze mensen waren zo vriendelijk om feedback te geven waardoor de site en de content nog beter uit de verf is gekomen, waar ik ze erg dankbaar voor ben.

Hierna werd het echter stil. Het aantal bezoekers is drastisch teruggezakt naar het aantal van één à twee bezoekers per dag. Dit was voor mij een teken om actie te ondernemen.

Vindbaar zijn

Het eerste plan was de site aan te melden bij zoekmachines. Deze komt echter pas goed naar boven in de zoekopdracht als er mensen zijn die naar je linken. Ik moest dus nog iets meer doen.

Dit is de reden dat ik een blog ben begonnen. Ik wil bij gaan houden waar ik mee bezig ben zodat anderen daarvan kunnen meegenieten en of leren. Tevens biedt dit transparantie voor potentiële klanten of opdrachtgevers. Ik zie het zo, als je een kijkje in de keuken krijgt van een restaurant dan kun je al een goede eerste indruk krijgen van de kwaliteit van de maaltijden die ze je voor zullen schotelen.

Wegens tijdgebrek en andere projecten heb ik besloten geen blog systeem te ontwikkelen voor mijn site, maar een bestaand systeem te gebruiken waarvan ik weet dat het goed is: Wordpress.

Dit is het eerste blog in dit systeem en ik zal in de komende dagen de weblog meer en meer integreren in de site. Op het moment van schrijven kijk je naar de basis installatie van Wordpress. Hier zal naar verloop van tijd nog weinig van terug te zien zijn.

AdWords

Via een tegoedbon heb ik tevens bij wijze van experiment twee advertenties aangemaakt bij Google AdWords. Dit is tevens een vrij tijdrovende zaak, wil je goed naar voren komen en vindbaar zijn. Hier ben ik dus nog mee bezig en ik probeer nog uit te vinden wat het meest handig is.

Mijn eerste dag was overigens niet zo best. Ik was vindbaar met het zoekwoord Windows en stond bovenaan. Hoewel dit goed lijkt was mijn daglimiet er binnen 5 minuten doorheen. Ik denk niet dat de mensen die met dit zoekwoord mijn site bezoeken daadwerkelijk interesse hebben in de diensten die ik bied. Dit is dus zonde en voor mij een reden om dit zoekwoord weer te verwijderen.

Ik heb wel al betere zoekwoorden gevonden, maar ik moet nog even uitzoeken hoe ik daarmee dan ook op de eerste pagina verschijn. Ik heb sinds het verwijderen van het zoekwoord `Windows’ in ieder geval geen bezoekers meer gehad via Google AdWords. Maar het tegoed blijft natuurlijk een tijdje geldig en ik ben geduldig. ;)

Afsluiting

Ik hoop jullie zo een klein beetje inzicht te hebben gegeven in een paar zaken omtrent www.crosscode.nl en dat jullie het met interesse gelezen hebben. Mochten er vragen of opmerkingen zijn dan staat het natuurlijk vrij om deze in de comments te stellen.

Post to Twitter Twitter Post to Delicious Delicious Post to Digg Digg Post to Facebook Facebook Post to Reddit Reddit