Bra samling av bithanteringstrick

Vid konstruktion av digitala tekniska lösningar är det inte ovanligt att man behöver göra olika bitmanipulationer och trick med bitar. Detta gäller inte minst inbyggda system med begränsningar i utrymme och prestanda. Alla erfarna konstruktörer har några favorittrix dom tar till för att effektivt lösa ett problem. Typiska trick är kopiering av data i internregister, hitta mest signifikanta biten som är satt i ett ord eller beräkna paritet.

Sidan Bit Twiddling Hacks har den största samlingen av bithanteringstricks jag sett. Det som gör trixen speciellt intressanta är att i stort sett samtliga tricks formellt verifierats med verktyget UCLID. De flesta trick är mest effektiva på en processor med 32-bitars operatorer (och fungerar ofta bra på mindre arkitekturer). Men vissa av dom är avsedda för maskiner med 64-bitars operatorer eller generellt oavsett bitstorlek.

Jag hittade ett bra trick för att beräkna rank parallellt som i hårdvara fungerade riktigt bra. Du kanske också hittar något matnyttigt?

Rita vågformer med Wavedrom

Vid dokumentation av digitala hårdvarukonstruktioner är vågformsdiagram ofta det bästa sättet att förklara timingberoenden och hur protokoll beter sig på cykelnivå. Ett exempel är den här figuren som visar hur en A/D-omvandlare arbetar:

Timingdiagram för A/D-omvandlare.

Timingdiagram för A/D-omvandlare.

Som konstruktör kan det vara svårt att smidigt skapa bra vågformsdiagram att inkludera i dokumentation. En skärmdump från en vågformsvisare som visar testat beteende ökar sannolikheten att diagrammet stämmer med hur konstruktionen fungerar. Samtidigt kan en skärmdump visa för mycket irrelevant information och även bli svårläst vid utskrift etc. Vilka av följande signaler är relevanta att visa för att entydigt förklara funktionen?

GTKwave med en lite mer komplex vågformsdump.

GTKwave med en lite mer komplex vågformsdump.

Man kan alltid rita med olika verktyg. Jag har genom åren använt ett otal ritprogram som Visio, Star/Open/Libre Office Draw, Excel, yED (ett fantastiskt grafverktyg för övrigt) etc. Detta fungerar och kan ge figurer som skalar snyggt och blir bra vid utskrift. Men det är knappast smidigt och effektivt att rita diagram i rena ritverktyg. En variant av att rita diagrammen för hand är att använda ASCII-grafik.

Sedan finns det flera verktyg som går att använda specifikt för att skapa timingdiagram. TimimgTool är ett sådant verktyg som dessutom kan generera en testbänk för konstruktionen utifrån diagrammet (dvs diagrammet kommer först och är sättet du som konstruktör får beskriva din konstruktion). Ett annat liknande verktyg är TimeGen. Slutligen finns det tillägg/makron för att skapa timingdiagram till typsättningsspråket/systemet TeX. Figurerna som genereras ser jättefina ut, men bieffekten är att man måste använda hårbollen TeX…

Timingdiagram genererat med TeX

Timingdiagram genererat med TeX

Sedan ett tag har Google ett kul, fritt (MIT-licensierat) projekt kallat Wavedrom som i mångt och mycket gör det jag vill kunna göra med timimgdiagram. Utifrån en JSON-beskrivning kan Wavedrom generera diagram i form av SVG-bilder. Fördelen med detta är att det går relativt enkelt att, antingen manuellt i en texteditor, eller verktygsmässigt generera JSON-underlaget för diagrammet. Och eftersom utdata är i SVG-format är det lätt att lyfta in i olika textbehandlare och få figurer som skalar bra och ser snygga ut.

Exempel på diagram med Wavedrom.

Exempel på diagram med Wavedrom.

Wavedrom är byggt med Javascript och HTML5 och det är enkelt lägga in Wavedrom-diagram till en webbsida. Det finns även ett tillägg till Chrome som gör att du kan editera Wavedrom direkt i webbläsaren. Så här ser det ut när jag testar med ett exempel:

Test av Wavedrom i Chrome.

Test av Wavedrom i Chrome.

Om du i ditt jobb sitter och ritar timingdiagram och vill hitta mer effektiva sätt att skapa fungerande snygga diagram hoppas jag att du här hittar några bra alternativ – mitt förslag är att testa Wavedrom.

Knäckta satellitkrypton och hemliga algoritmer

Ars Technica skriver om hur forskare i Tyskland lyckats knäcka krypton som används vid satellitkommunikation.

Satellitkommunikation

Eftersom signalen från en satellit täcker så stora ytor är det enkelt att fånga in signalen. För att skydda samtal från avlyssning krävs därför ett bra konfidentialitetsskydd – ett bra krypto.

Det är den internationella standardriseringsorganisationen ETSI som specificerat både kryptona GMR-1 och GMR-2 kryptona samt hur dom ska användas. Hur dom ska användas är öppen information, men själva kryptona är hemliga. ETSI skriver i sin specifikation (pdf):

The internal specification of algorithm A5-GMR-1 is managed under the responsibility of the GSC; it will be made available in response to an appropriate request

Att algoritmerna är hemliga hindrade dock inte forskarna. Genom hacka sönder uppdateringsfiler av programvaran till telefoner samt genom att analysera trafiken vid användande av satellittelefoner från Thuraya och Inmarsat kunde forskarna räkna ut hur algoritmerna fungerar.

Forskarnas analys visar att det skydd kryptona ger är så svagt att det finns en klar risk att satellitbaserad trafik inklusive samtal går att avlyssna. I artikeln Don’t Trust Satellite Phones: A Security Analysis of Two Satphone Standards skriver forskarna:

In this paper, we analyze the encryption systems used in the two existing (and competing) satphone standards, GMR-1 and GMR-2.

We were able to adopt known A5/2 ciphertext-only attacks to the GMR-1 algorithm with an average case complexity of 2**32 steps. With respect to the GMR-2 cipher, we developed a new attack which is powerful in a known-plaintext setting. In this situation, the encryption key for one session, i.e., one phone call, can be ecovered with approximately 50–65 bytes of key stream and a moderate computational complexity.

A major finding of our work is that the stream ciphers of the two existing satellite phone systems are considerably weaker than what is state-of-the-art in symmetric cryptography.

(På forskarnas egna webbplats finns mycket mer information.)

Forskarnas bedömning är att eftersom det skulle kosta så mycket att byta algoritmer kommer dessa inte att ändras. Istället rekommendrar dom att betrakta kommunikationen som öppen och sedan komplettera med ytterligare lager av skydd. Tyvärr kostar dessa extraskydd kapacitet i en förbindelse som redan har ganska begränsad kapacitet. Dessutom kan dessa skydd införa ökad fördröjning och andra trafikala problem. Inmarsat, som även är operatör av satellitkommuninkation har över än så länge inte kommenterat eller gett några officiella råd till sina kunder.

Tyvärr är detta inte första gången ett hemligt krypto visat sig vara svagt och långt ifrån vad man kan förvänta sig av ett krypto som används i befintliga system. I smarta kort av MiFare Classic-typ, som bland annat används för betalning i publika transportsystem i Göteborg och Stockholm, finns ett hemligt krypto kallat Crypto-1. Trots att kryptot var hemligt lyckades forskare klura ut både hur kryptot fungerar, och att dess säkerhet var i stort noll.

Keeloq är ett krypto som används i elektroniska bilnycklar av i stort sett samtliga stora biltillverkare. Även detta krypto var hemligt och även här lyckades forskare räkna ut hur det fungerar samt visa på kryptots monumentala brister.

För ETSI är forskarnas nya resultat ännu ett misslyckande. Deras kryptostandarder för DECT, GSM, 3G och satellitkommunikation har alla visat sig ha stora brister. När det kommer till kryptoalgoritmer är det frågan om ETSI lever upp till sin devis World Class Standards.

Att hålla informationen om vilka kryptografiska algoritmer du använder hemliga är inte ett problem. Du kan helt enkelt strunta att berätta det. Problemet är om säkerheten hos ditt system beror av att denna information är hemlig.

Information som om den kommer ut kan skada din verksamhet ställer krav på skydd som kostar pengar. Du behöver införa mekanismer och metoder för att begränsa tillgången. Skyddet behöver dessutom övervakas så att du vet att det faktiskt fungerar.

Dessutom bör du ta fram en plan för hur du ska agera om informationen trots allt kommer ut. När hemligheten kommit ut måste den troligen bytas ut, alternativt att du måste kasta in handduken och införa andra skyddsåtgärder så som forskarna nu föreslår att användare av satellitkommunikation bör göra. Att byta algoritm kan bli väldigt kostsamt. Är det en algoritm som används i inbyggda system som tillverkas i stora volymer, används i fält och har lång livslängd är innebär bytet eventuellt att du måste byta ut hela systemet.

Hade din hemlighet istället bara varit en kryptonyckel hade bytet troligen handlat om att byta ut en sträng på 16, 32, 64 tecken eller liknande. Säkerheten sitter i nyckeln. Den är allt du egentligen ska behöva skydda.

Bra kryptoalgoritmer försvagas inte av att informationen om hur dom fungerar är känd. Tvärt om beror vår tillit på algoritmerna just av öppenheten. Algoritmen som utgör blockkryptot AES undersöktes ett stort antal gånger på olika sätt innan den accepterades som standard. Och AES fortstt under kontinuerlig undersökning. Det finns generationer av forskare som fixat sin hatt eller årets publiceringar genom att försöka hitta på nya sätt att vara elak mot AES.

Ju fler undersökningar som en algoritm står emot desto större tillit vågar vi sätta till den. Och det är öppenheten, tillgängligheten som gör dessa undersökningar möjliga.

I jämförelse med en öppen algoritm undersöks en hemlig algoritm mer sällan. Dessutom sker undersökningen oftast under en begränsad tid. När en hemlig algoritm bedömts som säker tas den i bruk och sedan sker sällan omvärdering av algoritmens säkerhet.

Det finns användare av hemliga algoritmer som vet vad dom gör, som har den spetskompetens som krävs att göra en bra bedömning. Men när erkända kryptoforskare som medlemmarna i ETSIs säkerhetsgrupp SAGE gör fel och försvagar snarare än förstärker en algoritm (som är fallet med KASUMI, byggt på MISTY-1) är det inte självklart att även en enskild grupp med aldrig så skarpa experter gör en bra bedömning. Den mekanism som har störst chans att ge bra algoritmer är öppna processer med många, oberoende tester över lång tid. Att skynda långsamt och kontinuerligt ompröva resultat.

AES togs fram genom en sådan process, strömkryptona i eSTREAM togs fram genom en sådan process och kommande hashfunktionen SHA-3 tas fram på detta sätt. Det finns inga garantier att detta ger säkra algoritmer, det visar bland annat eSTREAM där några krypton i dag är knäckta. Men detta är den bästa metod vi har i dag och det är en process som förbättras för varje iteration.

Även ETSI verkar till slut ha lärt sig av alla sina misstag och i arbetet med den senaste standarden ZUC har det faktiskt organiserats seminarier, workshops, diskussionsforum på nätet och varit en mycket mer öppen process (även om det finns mindre öppna designval även i ZUC).

Om du oroar dig för att någon ska veta hur ditt system fungerar så strunta att berätta vilket krypto du använder. Men hitta inte på egna algoritmer, utan använd öppna, etablerade standarder som stått emot granskning under lång tid. Gör du det är nyckeln till kostnadseffektiv,fungerande säkerhet din kryptonyckel.

Kollision hittad i MD5-meddelande

(Uppdaterad 2012-01-03 med korrektur)

2010 publicerade säkerhetsforskarna Tao Xie och Dengguo Feng en artikel om att de funnit en kollision hos hasfunktionen MD5 mellan två meddelanden som bara är ett block stort.

En kollision innebär att två olika meddelanden ner dom används som indata till en hashfunktion ger samma hashvärde. MD5, precis som andra kryptografiska hashfunktioner delar upp ett meddelande i ett antal block med en fix storlek. För MD5 är blockstorleken 512 bitar. Innan Xie och Fengs artikel hade det presenterats kollisioner för meddelanden som är större än ett block. Detta är enklare då det ger utrymme för att bygga på ett meddelande med bitmönster som gör att en kollision uppstår. Men för ett meddelande som är exakt ett block finns inte den möjligheten. En kollision på ett block kräver att hashfunktionens förmåga att skydda mot att räkna ut indata från ett givet hashvärde har brutits. Hashfunktionen är inte längre en evägsfunktion.

Xie och Feng presenterade i sin artikel två meddelanden på exakt 512 bitar som gav samma hashvärde:

Xie och Fengs kollision från 2010

Xie och Fengs kollision från 2010

Det Xie och Feng däremot inte gjorde var att berätta hur dom lyckats skapa sin kollision. Författarna hänvisar till att dom av säkerhetsskäl stoppats från att berätta hur dom gjort. Dom skriver:

Today, in the last month (Dec,) of 2010, we have to make public a result of our 1-block collision attacks on MD5 in Table 1 as below, which was actually
obtained at the beginning of 2010, but for security reasons, the techniques are not allowed to be disclosed at the moment.

Intressant nog utmanar istället Xie och Feng sina kollegor i världen att återskapa deras resultat genom att hitta ett annat par av meddelanden ned en storlek på ett block som ger en kollision i MD5:

Here, we are calling for a challenge to the cryptology community that, any one who first gives a new different 1-block collision attack on MD5 will win 10,000 US dollars (about 50,000 RMB in Chinese Yuan) as a reward for his (her) excellent work. This call for challenge will be ended on Jan 1st, 2013. This announcement’s first affiliated unit will be responsible for this amount of reward when a new different 1-block collision attack is received and verified.

Det som hänt nu är att Marc Stevens ser ut att vara den första att möta utmaningen. I en artikel publicerad 29 januari i 2012 presenterar Marc sina meddelanden och den kollision som detta ger:

Marc Stevens meddelanden som ger kollision i MD5

Marc Stevens meddelanden som ger kollision i MD5

Det första man kan lägga märke till är att det är andra meddelanden är de Xie och Feng använt. Notera även att det är två ställen i meddelandena som skiljer. I den första av dessa bytes är det bit två som växlat, 0×00 har blivit 0×02. I den andra byten är det bit åtta som växlat, 0×55 har blivit 0xd5.

Till skillnad från Xie och Feng tvekar inte Marc att berätta hur han gjort och i artikeln finns en redovisning av såväl bakomliggande teori och mekanismer samt den algoritm som Marc använt för att utföra sökningen av kollisionen. Enligt Marc skulle det med hans nya metod krävas 2**49.81, dvs ungefär 987 biljoner MD5-operationer för att hitta en kollision. Marc skattade att detta skulle ta maximalt fem veckors körtid, vilket innebär at han räknade med att kunna göra drygt 300 miljoner MD5-operationer per sekund. Detta var tillräckligt lite tid för att Marc skulle bedöma det som rimligt och startade därför sökningen. Med lite tur fick han träff efter tre veckor.

Skälet till att Marc lyckades och att MD5 är så svag är att lavineffekten hos MD5 är för svag och ojämnt fördelad över bitarna i det genererade hashvärdet. Lavineffekten innebär att en liten förändring av indata snabbt ska påverka många bitar i interntillståndet som i slutändan ger hashvärdet. Eller omvänt, varje bit i det genererade hashvärdet ska bero av många bitar i meddelandet. I fallet att meddelandet är lika stort som hashfunktionen innebär detta att varje bit i hashvärdet ska bero av många bitar i blocket. Tyvärr gäller inte detta för MD5. På grund av att den har så få iterationer sker inte en bra och jämn mixning. Vissa bitar i hashvärdet hos MD5 beror av väldigt få bitar. Detta kallas för en hashtunnel, ett begrepp och fenomen Vlastimil Klima presenterade 2006. Skillnaden i hur lavineffekten förklarar även den större varians jag fick för MD5 när jag gjorde bittester av hashfunktioner.

För den som själv vill pröva på att generera kollisioner hos meddelanden på enstaka block hos MD5 har Marc släppt ett program. Källkoden har Marc ännu inte släppts. Men koden, programmet, artikeln, meddelandena etc finns på Marcs egen sida.

Så vad är kontentan? Det första är att Xie och Fengs tävling har avgjorts och att Marc Stevens är att gratulera till ett bra utfört arbete. Förhoppningsvis får nu Xie och Feng chans att publicera information om hur dom gick tillväga. Att tvinga dom att hålla sin metod hemlig gav ett knappt års fördröjning av en publicerad metod. Att hemlighålla information om svagheter som ändå redan är kända har återigen visat sig inte vara en långsiktigt hållbar. Och någon får dessutom betala 10.000 USD.

För oss alla andra är väl detta bara ännu ett bevis på att MD5 inte skall användas och bör fasas ut till förmån för bättre hashfunktioner (exempelvis SHA-256). SHA-256 har inte bara fler iterationer och en bättre mixningsfunktion, den har även ett hashvärde på fler bitar – 256 bitar gentemot 128 bitar för MD5. Hashvärdet för MD5 är i dag så kort att det är inom gränsen för att praktiskt göra uttömmande sökningar och bygga upp tabeller med meddelanden och deras hashvärden, så kallade regnbågstabeller.

DMARC – nytt initiativ för att skydda mot domänförfalskning

Googles Gmailblog finns en beskrivning av ett nytt initiativ mot domänförfalskning (domain spoofing) kallar DMARC. Vid spam och annan icke önskvärd epost är det vanligt att mailen skickas från falska domännamn. Flera olika tekniker har sedan tidigare tagits fram för att stoppa detta – exempelvis Sender Policy Framework (SPF) DomainKeys Identified Mail (DKIM).

Domain-based Message Authentication, Reporting and Conformance (DMARC) bygger vidare på SPF och DKIM genom att tillföra en mekanism för organisationer i sina mail att tala om hur dom autenticerar sina mail och hur mail skall hanteras om autenticeringen inte är korrekt. Bland annat ger DMARC en möjlighet för mottagare att rapportera tillbaka till sändaren om den får mail som den inte litar på. En organisation som använder DMARC använder DNS för att berätta om hur dom avser att autenticera sin domän och policy för att hantera felaktiga mail. Exempelvis kan det se ut så här:

% dig +short TXT _dmarc.example.com.
”v=DMARC1\; p=none\; rua=mailto:dmarc-feedback@example.com\;
ruf=mailto:auth-reports@example.com”

Det finns en organisation skapad för att utveckla och marknadsföra DMARC skapad av bland annat Google. Ett av organisationens mål är att via IETF standardisera DMARC. Enligt organisationen används DMARC redan i dag, bland annat av Gmail, Facebook, LinkedIn och PayPal. På organisationens webbplats finns även specifikationen för DMARC om man vill titta närmare på hur det fungerar.

Jag lyckas dock inte hitta DMARC-policyn för Gmail/Google – bara att dom vill använda SPF. Vidare får jag inte organisationens webbplats, dmarc.org att svara på HTTPS (säker webbaccess). Och domänen dmarc.org verkar inte använda DNSSEC…

Lästips inför helgen: Think Complexity

För dig som är nyfiken på programspråket Python finns en bra bok kallad Python for Software Design, mer känd under namnet How to Think Like a Computer Scientist.

Boken Python for Software Design.

Tillsammans med Mark Pilgrims Dive Into Python och Dive Into Python3 [1] är den boken nog den bästa Pythonboken på nätet. (Dive Into Python är boken som verkligen fick mig att fastna för Python. Jag läste den över en natt och blev otroligt inspirerad av att börja använda Python. Något jag inte ångrat.)

Författaren till Python for Software Design, har nu gjort en till bok tillgänglig på nätet – Think Complexity.

Think Complexity

Den nya boken handlar inte om Python i sig, utan om algoritmer och datastrukturer. Sökträd, databaser, grafer m.m. och det viktigaste – hur olika algoritmer skalar med storleken på problemet dom används för att lösa. Detta brukar kallas för beräkningsmässig komplexitet, eller bara komplexitet.

Jag har hunnit läsa delar av boken och tycker att den är väl värd att lösa. Samtidigt är det intressant att se hur datastrukturer och algoritmer som arbetar på strukturerna fortfarande är viktiga. Moderna språk som Ruby och Python inkluderar kraftfulla datastrukturer som hashtabeller, listor, databaser som fundamentala datatyper. Och det finns, hävdar jag (det är i alla fall min observation) en tendens att utvecklarna använder de verktyg som finns till buds istället för att fundera igenom vad applikationen/problemet kräver. I de flesta fall blir det dessutom tillräckligt bra och går fort (fortare) att få till en lösning med de inbyggda typerna.

Men genom att känna till andra strukturer – vilka problem dom är bra för att lösa och även hur man kan implementera strukturerna kan verktygslådan utökas. I fallet med Python kan det även vara bra att veta att många datastrukturer finns i Pythons extensiva standardbibliotek. Använder du Python och inte grävt runt i biblioteket har du gjort dig själv en otjänst, det finns otroligt mycket bra att lyfta in i din applikation med ett enkelt import-kommando.

Läs, lär och ha en trevlig helg!
(JoachimS)

Fotnot [1]: Mark Pilgrim har skrivit flera bra böcker i sin Dive Into-serie, bland annat om HTML5 – böcker Mark dessutom gjorde tillgängliga på nätet. I oktober förra året valde Mark plötsligt att ta bort sig själv och sina alster från nätet. Många undrade vad som hänt och ringde även polisen som lyckades hitta Mark välbehållen. Han hade helt enkelt bestämt sig för att han haft nog med Internet. Det finns ett antal speglingar av böckerna, vilket gör att dom ändå går att läsa. Och detta är i linje med de licensvillkor Mark hade satt på sina verk varför jag väljer att peka på dom.

10000 industriella kontrollsystem kopplade till Internet

Ett argument som ofta framförs när det gäller säkerhet för industriella kontrollsystem (på engelska ofta kallade ICS och SCADA) är att det inte finns några riktiga problem, detta för att systemen är isolerade och inte är kopplade till externa nätverk – exempelvis till Internet. Populära isolerande skyddmetoder är så kallade luftgap (på engelska air gap) samt datadioder. Med luftgap avses att det inte finns någon elektrisk förbindelse mellan kontrollsystemets nätverk och andra nätverk. Med datadioder avses mekanismer som gör att  trafiken i nätverket bara kan flöda åt ett håll.

Datadiod

Figuren visar hur en datadiod är tänkt att figuren. Notera att figuren egentligen är åt fel håll. Detta för att datadioder används för att isolera system som hanterar känslig information och där vill man inte att information ska läcka ut. I ett kontrollsystem är det oftast precis tvärt om som är intressant. Det går att skicka över mätdata från kontrollsystemet, men det går inte att skicka styrkommandon till kontrollsystemet. Leverantörer av industriella säkerhetssystem kräver ofta att deras utrustning ska skyddas genom isolering. Men hur fungerar det i verkligheten, och är detta egentligen bra och robusta metoder att hantera säkerhetsproblem?

Wireds säkerhetsblogg Threat Level rapporterar om resultat som säkerhetsforskaren Eireann P. Leverett nyligen presenterade som visar att det finns industriella kontrollsystem kopplade till Internet, mer exakt har Leverett hittat fler än 10000 stycken! Genom att använda nätverksscannern Shodan har Leverett letat efter kända industriella ontrollsystem, och även kunnat identifiera vilka versioner av system som används. Leverett har sedan mappat dessa i en fin graf över världen som visar var systemet finns:

Everetts graf som visar var olika industriella kontrollsystem finns och deras svagheter.

ICS med versioner och dess svagheter.

Av de system Everett hittade visade sig bara 17% över huvud taget använda någon form av enklare accesskontroll, exempelvis lösenord! Undersökningen är en del av den avhandling Everett arbetat med och för den som vill veta mer om Everetts undersökning finns hans avhandling Quantitatively Assessing and Visualising Industrial System Attack Surfaces hos Wired.

Jag anser att resultaten Everett presenterat visar att bara använda isolering som enda säkerhetsmetod för sitt industriella kontrollsystem inte ger ett adekvat skydd. I stora, komplexa kontrollsystem med tusentals mät- och styrnoder finns det stor risk att effektivisering, krav på snabb problemlösning, underhåll utfört av tredje part eller misstag leder till att hela eller delar av systemet kan exponeras mot omvärlden under kortare eller längre tid. Någon kopplar in ett GSM-router för att kunna övervaka en nod som sitter taskigt till rent fysiskt. En leverantör behöver möjlighet att få diagnostik. En del av systemet kopplas temporärt in på kontorsnätet. I dag är det inte heller nyfikna personer som sitter och för hand letar efter märkliga maskiner på Internet. Istället är det robotar, automatiska scannerverktyg som Shodan som periodiskt scannar av Internet. Risken att det exponerade systemet blir upptäckt är därför mycket större än man kanske tror.

Istället bör man räkna med att sitt industriella kontrollsystem kommer att kunna exponeras på olika sätt och börja ställa krav på säkerheten hos de noder och maskiner som är inkopplade i nätet. Att använda isolering är bra, men det bör kompletteras med säkerhet på djupet. Och om det nu finns kommunikationskanaler ut ska dom självklart använda vettiga autenticeringsmekanismer. Att 87% av de system Everett hittade inte ens har lösenordsskydd är väldigt skrämmande.

För den som ändå tror på isolering som fungerande metod bör studera Stuxnet-attacken. Där var kontrollsystemet isolerat. Men det som inträffade var att någon, avsiktligt eller oavsiktligt kopplade in ett USB-minne eller laptop och därmed infekterade systemen innanför luftgapet. Att tekniker tar med sig mätverktyg, laptops när dom ska lösa problem och kopplar in dessa i systemet borde knappast vara otänkbart scenario. Självklart ska det ställas krav på utrustningen som kopplas in, exempelvis uppdaterat virusskydd, men säkerheten måste även finnas inne i kontrollsystemet.

Artikel på IDG om asymmetrisk kryptering

TechWorlds webbplats finns sedan några dagar en artikel om asymmetrisk kryptering skriven av Secworks.

Här får du min publika nyckel.

Här får du min publika nyckel.

Artikeln tar upp vad asymmetriska krypton och kryptering med publika nycklar är samt hur dom används och vilka problem som finns. Artikeln beskriver även skillnader i nyckelstyrka mellan symmetriska och asymmetriska algoritmer. Dessutom tittar vi i artikeln närmare på flera olika algoritmer som RSA, El Gamal, Elliptic Curve och Curve25519. Förhoppningsvis ger artikeln lite insikt i hur asymmetrisk kryptering fungerar och används.

Bittester av kryptografiska hashfunktioner

Kryptografiska hashfunktioner (och krypton) har en egenskap kallas lavineffekten. Lavineffekten innebär att små förändringar av indata ger stora förändring på det genererade hashvärdet.

Hashvärden för SHA-256 när S ändras till T.

Hashvärden för SHA-256 när S ändras till T.

Men hur stor är lavineffekten, och finns det indata som ger olika stor lavineffekt? Jag bestämde mig för att testa på de hashfunktioner som finns i biblioteket OpenSSL (version 0.9.8r).

Jag har använt ordlistan från OpenWalls lösenordsknäckare John The Ripper och behandlat varje enskilt ord som ett sepatat meddelande. För varje meddelande har jag beräknat ett hashvärde. Sedan har jag inverterat den första biten i varje ord och genererat ett nytt hashvärde. Sedan räknar jag alla bitar som växlat mellan de två värdena. Sedan gör jag detta för varje hashfunktion och beräknar statistik. Men närmare 4 miljoner ord i listan blir det många hashfunktionsoperationer.

Så här ser resultatet från körningarna ut:

Statistics for md5
Digest size in bits: 128
Number of words tested: 3917116
Min number of bits changed: 36
Min percentage of digest changed: 28.1
Max number of bits changed: 93
Max percentage of digest changed: 72.7
Average number of bits changed 64.0

Statistics for sha1
Digest size in bits: 160
Number of words tested: 3917116
Min number of bits changed: 49
Min percentage of digest changed: 30.6
Max number of bits changed: 112
Max percentage of digest changed: 70.0
Average number of bits changed 80.0

Statistics for sha224
Digest size in bits: 224
Number of words tested: 3917116
Min number of bits changed: 72
Min percentage of digest changed: 32.1
Max number of bits changed: 150
Max percentage of digest changed: 67.0
Average number of bits changed 112.0
Expected average: 896.0

Statistics for sha256
Digest size in bits: 256
Number of words tested: 3917116
Min number of bits changed: 89
Min percentage of digest changed: 34.8
Max number of bits changed: 171
Max percentage of digest changed: 66.8
Average number of bits changed 128.0

Statistics for sha384
Digest size in bits: 384
Number of words tested: 3917116
Min number of bits changed: 144
Min percentage of digest changed: 37.5
Max number of bits changed: 243
Max percentage of digest changed: 63.3
Average number of bits changed 192.0

Statistics for sha512
Digest size in bits: 512
Number of words tested: 3917116
Min number of bits changed: 201
Min percentage of digest changed: 39.3
Max number of bits changed: 316
Max percentage of digest changed: 61.7
Average number of bits changed 256.0

För samtliga testade hashfunktioner växlar i medelfallet hälften av alla bitar. Däremot är variansen för de äldre funktionerna SHA-1 och speciellt MD5 större än för SHA-2-funktionerna. Den snävare variansen för SHA-2 gör att det blir svårare att genom exempelvis sidoattacker försöka säga något om vilka meddelanden hashfunktionen bearbetar. Ingen av funktionerna ger med något av testmeddelandena en förvånande liten eller stor bitväxlingar.

Nästa steg är att testa finalisterna i NISTS SHA-3-tävling samt även jämföra med hashfunktioner som inte kryptografiskt säkra. Då bör vi se större varians och kanske även lite krockar.

Prestandatester av hashfunktioner

Den senaste tiden har jag tittat en del på prestanda och beteende hos olika kryptografiska hashfunktioner. OpenSSL innehåller funktioner och kommandon (kommandot speed) för att utföra prestandatester på den plattform dom körs. Maskinen jag kör på är utrustad med en 2.7 GHz Intel Core i7 och kör ett 64-bitars operativsystem. Den testade versionen av OpenSSL är 0.9.8r. När jag testar på min huvudmaskin får jag följande resultat:

Resultat från prestandatest av OpenSSL

Resultat från prestandatest av OpenSSL

Som förväntat är MD5 snabbast, tätt följt av SHA-1. Men en sak värd att lägga märke till är prestandan för SHA-2-funktionerna SHA-256 och SHA-512. För alla andra testfall än 16 Bytes data är SHA-512 snabbare. Detta kan tyckas underligt, om man tänker sig att göra avvägning mellan prestanda och säkerhet – att SHA-512 ger högre säkerhet till priset av prestanda. SHA-512 utför även 80 iterationer för att bearbeta ett datablock, och SHA-256 bara 64 iterationer. Men SHA-512 använder 64-bitarsoperationer och arbetar på större block än SHA-256 – 128 Bytes kontra 64 Bytes. Detta gör att SHA-512 på en maskin som min blir effektivare.

NIST, organisationen som specificerat SHA-2 (och SHA-1 samt arbetar med att ta fram SHA-3) har insett detta och presenterade i början av 2011 en ny version av specifikationen FIPS 180. Detta dokument specificerar SHA-1 och SHA-2. I den nya versionen finns det två nya funktioner – SHA-512/224 och SHA-512/256. Precis som SHA-384 är dessa funktioner SHA-512, men där det genererade hashvärdet kapas av till den bitstorlek som önskas. Använder du SHA-256 och har prestandaproblem kan det därför vara värt att titta SHA-512/256 på dessa funktioner.

Notera att SHA-384, SHA-512/224 och SHA-512/256 inte är exakt samma funktion som SHA-512. Det som skiljer är initialvärdena i interntillståndet. Dvs att implementera SHA-512/256 kräver lite mer än att köra med SHA-512 och kasta bort den högra halvan av hashvärdet. Koden i implementationen måste ändras, om än i liten grad.

För den som vill titta närmare på prestandan hos många olika hashfunktioner inklusive finalisterna i SHA-3-tävlingen finns det massor med data hos EU-projektet eBASH.

Äldre inlägg «

Switch to our mobile site