Kod som körs under Linux kan delas in i två halvor, kernelspace och userspace. I kernel space körs Linuxkärnan med sådant som drivrutiner och minneshantering. Resten ligger i userspace. Med kommandot strace kan alla hopp från user -> kernelspace visas. Testa att kompilera följande Hello World program och kör strace på det.

#include <stdio.h>

int main(void)
{
   puts("Hello, World!");
   return 0;
}

Kompilera med:

gcc -o hello hello.c

För att se alla hopp till Linuxkärnan som det lilla programmet hello gör skriv:

strace ./hello
execve("./hello", ["./hello"], [/* 35 vars */]) = 0
...
write(1, "Hello, World!\n", 14)         = 14
exit_group(0)

Först anropas execve som startar en ny process med programmet ./hello. Sen har jag utelämnat massa rader som har med dynamisk laddning av glibc att göra. Själva strängen “Hello, World!\n” skrivs som synes ut med systemanropet write. Libc-funktionen puts() har alltså lagt till en newline på slutet av strängen och sedan bett Linuxkärnan skriva ut den via systemanropet write(). Första argumentet till write är en etta, vilket betyder stdout. Andra argumentet är själva strängen och sista argumentet (14) är längden på strängen.

För att göra programmet lite effektivare skulle alltså write() kunna anropas direkt:

int main(void)
{
   write(1, "Hello, World!\n", 14);
   return 0;
}

Tyvärr blir ovanstående kod endast marginellt snabbare än originalet eftersom även write() hoppar in i libc och gör en massa saker innan till sist systemanropet write() anropas. Se efter själv med objdump:

objdump -d ./hello
...
080482c8 <write@plt>:
 80482c8:       ff 25 7c 95 04 08       jmp    *0x804957c
 80482ce:       68 08 00 00 00          push   $0x8
 80482d3:       e9 d0 ff ff ff          jmp    80482a8 <_init+0x30>
...
08048374 <main>:
 8048374:       8d 4c 24 04             lea    0x4(%esp),%ecx
 8048378:       83 e4 f0                and    $0xfffffff0,%esp
 804837b:       ff 71 fc                pushl  -0x4(%ecx)
 804837e:       55                      push   %ebp
 804837f:       89 e5                   mov    %esp,%ebp
 8048381:       51                      push   %ecx
 8048382:       83 ec 14                sub    $0x14,%esp
 8048385:       c7 44 24 08 0e 00 00    movl   $0xe,0x8(%esp)       ; Argument 3 (längden)
 804838c:       00
 804838d:       c7 44 24 04 70 84 04    movl   $0x8048470,0x4(%esp) ; Argument 2 (adressen)
 8048394:       08
 8048395:       c7 04 24 01 00 00 00    movl   $0x1,(%esp)          ; Argument 1 (fildeskriptorn)
 804839c:       e8 27 ff ff ff          call   80482c8   ; Hoppa till write@plt WTF??
 80483a1:       b8 00 00 00 00          mov    $0x0,%eax
 80483a6:       83 c4 14                add    $0x14,%esp
 80483a9:       59                      pop    %ecx
 80483aa:       5d                      pop    %ebp
 80483ab:       8d 61 fc                lea    -0x4(%ecx),%esp
 80483ae:       c3                      ret
 80483af:       90                      nop
...

Det börjar bra, argumenten läggs på stacken och sedan skulle man förvänta sig ett syscall, men nej. Istället anropas write@plt, som i sin tur anropar…osv (den intresserade kan läsa om PLT). Om man följer det ännu längre kommer man till sist till en instruktion int $0×80 som gör själva hoppet in i kernel space. Så var det förr i tiden i alla fall. Det går fortfarande att göra int $0×80 för att hoppa, men nyare processorer har ett snabbare sätt att göra systemanrop, sysenter.

För ett par år sedan kom Linus Torvalds och hans legion av hackers på att int $0×80 tog flera gånger längre tid att exekvera på nyare processorer än sysenter. Men på gamla processorer finns inte sysenter. Det löste han genom att låta Linuxkärnan detektera om sysenter finns och är snabbare än int $0×80 när kärnan bootar. Sen lägger kärnan in något mycket märkligt som kallas VDSO (Virtual Dynamic Shared Object). Från userspace ser det ut som ett vanligt delat bibliotek (shared object) men det är inte vanligt på något sätt, det ligger nämligen i Linuxkärnan. Pröva ldd:

ldd hello
 linux-gate.so.1 =>  (0xb7f3d000)
 libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7dd9000)
 /lib/ld-linux.so.2 (0xb7f3e000)

I linux-gate ligger funktionen som gör hoppet till kernelspace. För att krångla till det ännu mer slumpas adressen till linux-gate varje gång programmet startar (försvårar för elak kod att gissa adresser). För att titta på linux-gate kan man skriva ett litet program:

#include <stdio.h>
#define ADDRESS 0xb7fe3000

int main(void)
{
   unsigned char *p = (unsigned char *)ADDRESS;
   FILE *fp = fopen("linux-gate.vdso", "w");
   if (!fp) {
      return 1;
   }

   /* Dump page to file */
   fwrite(p, 4096, 1, fp);

   fclose(fp);
   return 0;
}

I ovanstående program har jag hårdkodat adressen. Det kunde jag göra genom att tillfälligt stänga av randomiseringen av linux-gate, dumpa sidan och sedan slå på randomiseringen igen. Ett annat sätt är att lägga in kod som tittar i filen /proc/self/maps och tar adressen från början av raden som slutar med [vdso], men det är överkurs. Randomiseringen slås av med ‘echo 0 > /proc/sys/kernel/randomize_va_space‘. Kommandot måste köras som root. Titta på den dumpade filen med:

objdump -d linux-gate.vdso
ffffe400 <__kernel_vsyscall>:
ffffe400:       51                      push   %ecx
ffffe401:       52                      push   %edx
ffffe402:       55                      push   %ebp
ffffe403:       89 e5                   mov    %esp,%ebp
ffffe405:       0f 34                   sysenter
ffffe407:       90                      nop
...

Där har vi funktionen som gör hoppet, sysenter i det här fallet. Hade jag bootat på en äldre processor skulle det stått int $0×80 istället för sysenter. I bägge fallen fungerar det att lägga argumenten i registren eax-edx och sedan hoppa till __kernel_vsyscall och det är just detta som glibc gör i sina innersta delar.

Nästa fråga är då själva adressen, den varierar ju varje gång man startar programmet så det går inte att hoppa till en fast adress (förbaskade randomisering!). Det finns två sätt att lösa detta. Enklast och minst säkert är att hoppa med ‘call *%gs:0×10‘. När programmet startar upp läggs nämligen adressen för TCB (Thread Control Block) i registret gs och adressen till __kernel_syscall återfinns oftast på offset 0×10. Structen heter tcbhead_t och är definierad internt i glibc. Det är offseten från starten på structen till fältet uintptr_t sysinfo man är ute efter. Den kan fås med offsetof() ifall man har tillgång till tls.h vid kompileringen, vilket man oftast inte har eftersom det är en intern fil för glibc.

En säkrare metod är att titta på ELF-headern och leta reda på AT_SYSINFO som innehåller samma adress.

#include <elf.h>

unsigned int at_sysinfo;

int main(int argc, char* argv[], char* envp[])
{
   Elf32_auxv_t *auxv;

   /* Find address of __kernel_vsyscall */
   while(*envp++ != NULL); /* *envp = NULL marks end of envp */
   /* auxv->a_type = AT_NULL marks the end of auxv */
   for (auxv = (Elf32_auxv_t *)envp; auxv->a_type != AT_NULL; auxv++) {
      if( auxv->a_type == AT_SYSINFO) {
         printf("AT_SYSINFO is: 0x%x\n", auxv->a_un.a_val);
         at_sysinfo = auxv->a_un.a_val;
      }
   }
...
}

Ovanstående kod letar reda på AT_SYSINFO och kopierar adressen till den globala variabeln atsysinfo. Det är just denna adress man ska hoppa till för att göra ett syscall. Visserligen är det lite krångligt, men efter att atsysinfo initierats kan man sedan använda den adressen för att göra blixtsnabba systemanrop, helt utan att blanda in libc. Nackdelen är att det blir ungefär lika portabelt som en flygel. Det fungerar endast med Linux 2.6 och uppåt, endast med 32-bitars x86 processorer och garanterat inte med något annat operativsystem.

Slutligen lite källkod med exempel på hur man kan göra egna icke-portabla systemanrop, utan libc. Observera att du behöver minst gcc-3.4 för att kompilera C-exemplet (__attribute__ ((fastcall)) stöds från och med 3.4). Assemblerexemplena fungerar även med äldre versioner.

För att titta på assemblerkoden i emacs kan följande rad passa bra i din .emacs fil, ‘(asm-comment-char ?#). Alternativt M-x set-variable [enter] asm-comment-char [enter] ?#

Information till denna bloggpost har hämtats från

A couple of years ago I heard Richard Stallman sing the Free Software Song on the GNU website. The rythm of the song seemed familiar in some way and after som research I realized that a lot of old Macedonian folk songs have the same rythm. Stallman wrote his own words to an old Bulgarian folk song, Sadi Moma. Since Bulgaria is a neighbouring country to Macedonia it is not surprising that the folk music is similar. Stallman calls the fenomenon of putting english computer-related words to old folk songs - Filk music.

After a while I noticed a couple of alternate versions of the song popping up. None of the alternate versions preserved the original rythm of the song so I decided to make a version of my own, with the original rythm.

Youtube compresses audio pretty hard and even worse, it is mixed down to mono. This ruins the stereo effects with the guitars panned a bit to the left and right. A higher quality version can be downloaded from here:

http://vmlinux.org/~av/albertveli-free-software-song.ogg

The software used for the recording were

Feel free to contact me if you want the Hydrogen and/or the Audacity files. The Hydrogen file is very small, but the Audacity file is pretty big. It contains the raw audio of all tracks which sums up to about 100Mb. My singing is not so good I’m afraid so it would be especially interesting if someone that can sing would get the Audacity files and insert a song track of their own. Another interesting experiment would be if someone would get these files and insert track(s) with traditional folk music instruments (clarinet, gajda, tupan, accordion etc).

Under ett par kvällar har jag suttit med ett litet program som ritar ut en fraktal med hjälp av SDL. Ekvationen för fraktalen är tagen från boken Chaos in Wonderland av Clifford A. Pickover, ISBN 0-312-12774-X. Fraktalen kallas Latööcarfian i boken. Kärnan i algoritmen är:

x' = sin(y * b) + c * sin(x * b);
y' = sin(x * a) + d * sin(y * a);

där a = -0.966918, b = 2.879879, c = 0.764155 och d = 0.744728 för bilden som kallas “kings dream” i boken. Som en extra touch ändrar jag lite på dessa värden mellan varje frame och ritar sedan om bilden vilket får den att se ut som den rör sig lite spöklikt. Allt finns med i källkoden, som laddas hem med följande kommando:

bzr branch http://vmlinux.org/~av/latoocarfian

För att kompilera bör följande paket vara installerade: build-essential, libsdl1.2-dev och libpng12-dev. För en extra finess, installera även gimp och ffmpeg.

Gå in i katalogen och skriv make för att bygga och make link för att skapa en länk från filter.scm till ~/.gimp-2.4/scripts/. Genom att ange argumentet -p till programmet kommer en massa png-filer skapas. Dessa kan sedan bearbetas med gimp via scriptet gimp.sh (som använder filter.scm, därav länken). Kör bara ./gimp.sh ‘*.png’ efter att bilderna skapats med ./latoocarf -p. Till sist kan en avi-fil
skapas med ffmpeg. Kör ./encodemovie.sh för att göra detta. Naturligtvis går det att skapa en filmfil utan att köra varje frame genom gimp först också. Hoppa bara över gimp.sh.

Om ni inte orkar installera, bygga från källkod, fixa och trixa så finns en kort video på youtube som visar hur det blir. Ganska gålig upplösning dock.

FRAVisst är det märkligt att FRA-lagen, datalagringsdirektivet och de andra lagarna som inkräktar på den personliga integriteten verkar införas en efter en på så kort tid.

Idag var ännu en lag i samma anda på ekonyheterna. PKU-banken handlar det om denna gång. Jag har två barn födda 2004 och 2005. Båda barnen lämnade blodprov till PKU på BB och bägge gångerna blev jag garanterad att registret endast skulle användas till forskning. Det skulle aldrig lämnas ut till intresserade myndigheter eller försäkringsbolag. Nu ser man hur långt dessa löften höll.

Novus Occi Seclorum

Man måste väga vilken nytta dessa åtgärder ger mot vilken kostnad det innebär i form av inskränkning i den personliga integriteten. Redan innan dessa lagar införts ligger Sverige näst sist i Europa när det gäller att respektera människors personliga integritet. Endast England är sämre än Sverige. I och med de nya lagarna kommer Sverige rasa ned till sista platsen i Europa och endast ha rena diktaturer bakom sig (om ens de). Överväger verkligen nyttan denna bottenplacering? Hur mycket säkrare blir Sverige och vilka hot är det egentligen man försöker skydda sig mot?

Som utlovat kommer nu musik i andra kategorier. Den här gången från olika delar av före detta Jugoslavien. Jag har valt ut några klassiska låtar jag känner till.

Jugoslavien - Först kommer några klassiska hyllningslåtar till Jugoslavien och Tito.
* Po Šumama i Gorama - Genom Skogarna och Kullarna
* Uz Maršala Tita - Med Marsalk Tito
* Druže Tito mi ti se kunemo - Kamrat Tito, jag följer din väg
* Jugoslavijo

Sedan musik från de individuella delstaterna.

Makedonien - Den delstat mina föräldrar kom från.
* Bitola moj Roden Kraj - Folkvisa om staden Bitola som min mamma kom från.
* Makedonsko Devojče - Folkvisa om Makedonska flickor.
* Zajdi, Zajdi Jasno Sonce - Gammal folkvisa om ungdomen som flytt.
* Jovano, Jovanke - Gammal Bulgarisk/Makedonsk folkvisa.

Serbien
* Marš na Drinu - Marschsång från första världskriget.
* Tamo Daleko - Sentimental visa om reträtten till Korfu under första världskriget.
* U Boj - Kampsång i Jugoslavisk anda.
* Gusta mi Magla Padnala - Brölloppssång från Kosovo.

Slovenien
* Life is Life - Cover från 80-talet med Slovenska bandet Laibach.
* Folkdans

Kroatien
* Dinamo ja Volim - Supportersång för fotbollslaget Dinamo från Zagreb.
* Folkdans från Slavonien/Kroatien.
* Folklore från Dalmatien/Kroatien.
* Oj Krajino - Folkmusik från Krajina/Kroatien.
Montenegro
* Oj Ðevojko - Fin ballad.
* Eh da mi je, da me želja mine
* Crna Gora - Gusle, traditionellt instrument.

Bosnien & Herzegovina
Cudna jada od Mostara grada - Bosnisk folkmusik, Sevdah (Sevdalinka).
Bosno moja - Sevdah med Safet Isovic.
Pevaj Srbijo - Republika Srpska/Bosnien.

Ortodox kyrkomusik - Låter liknande i Serbien, Montenegro och Makedonien (även Grekland) och får ett eget stycke.
* Kyrkomusik från Ravanica
* Medley med 10 kyrkosånger

Romsk Musik - Har ett speciellt sound med mycket trumpeter. Även de är utspridda över flera länder i före detta Jugoslavien och får ett eget stycke. Denna musikstil har gjorts känd av filmregissören Emir Kusturica som flitigt använder sig av musiken i sina filmer.
* Kalashnikov - Goran Bregovic.
* Pitbull Terrier - Emir Kusturica & Non Smoking Orchestra.
* Djelem Djelem - Šaban Bajramović. Romernas officiella hymn.

Skicka gärna in fler förslag från de olika delarna av forna Jugoslavien så kompletterar jag listan.

Idag nationaldag. Den firar jag med att lägga ut länkar till några av mina svenska favoritlåtar.

 

 

 

Svensk Progg
http://www.youtube.com/watch?v=tiCxcWTA-dU - Vi Äro Tusenden - Tältprojektet

http://www.youtube.com/watch?v=pn8OoKn3eyI - Vi Är Många - Sånger om Kvinnor

http://www.youtube.com/watch?v=wvKoM7oTrSA - Vi Måste Höja Våra Röster - Sånger om Kvinnor

http://www.youtube.com/watch?v=M-TDh-8Ub4w - Barn av Vår Tid - Nationalteatern

http://www.youtube.com/watch?v=GvguWb_l6-U - Kolla Kolla - Nationalteatern

http://www.youtube.com/watch?v=4WVol2KSXSc - Bängen Trålar - Nationalteatern

http://www.youtube.com/watch?v=1sF2LdPyd7o - Sanningens Silverflod - Träd, Gräs & Stenar

http://www.youtube.com/watch?v=EMYxUqa-Uac - Keops Pyramid - Hoola Bandoola Band

http://www.youtube.com/watch?v=lIGcceDsd1A - Kungens Man - Björn Afzelius

http://www.youtube.com/watch?v=cjgPw2nR2oY - Rastlös - Rasta Hunden

http://www.youtube.com/watch?v=fOaV4OVbVKc - Just Idag - Kenta

Svensk Punk
http://www.youtube.com/watch?v=kem-PraYFZQ - Dörrterror - KSMB

http://www.youtube.com/watch?v=KrYwkc50lmk - Klockan 8 - KSMB

http://www.youtube.com/watch?v=YM8Tl0kvZU0 - Sex Noll Två - KSMB

http://www.youtube.com/watch?v=-Y6fCCMFkbU - We’re Only In It For the Drugs - Ebba Grön

http://www.youtube.com/watch?v=Ya6z54IHdu0 - Staten & Kapitalet - Ebba Grön

http://www.youtube.com/watch?v=q4FV6DAoonM - Die Mauer - Ebba Grön

http://www.youtube.com/watch?v=K8YjRl-QqNM - Märk Hur Vår Skugga - Imperiet

http://www.youtube.com/watch?v=VDue0Ylywe4 - Blod Svett & Tårar - Strebers

http://www.youtube.com/watch?v=AfvJLkWczjc - Betongbarn - Strebers

http://www.youtube.com/watch?v=L_z17D9oyWQ - Hon Får - Dia Psalma

http://www.youtube.com/watch?v=91oEZ1n2EUk - Luft - Dia Psalma

http://www.youtube.com/watch?v=ex62NCymsXE - Evigt Liv - DLK

http://www.youtube.com/watch?v=Db9_0kvsUIA - Troll & Häxor - Total Egon

Låten Tänk om jag vore med DLK från Le som en Fotomodell ville jag också ha med, men den verkar inte ligga ute.

Eftersom det är nationaldagen kommer ett par folkmusiklåtar med också.

Svensk Folkmusik
http://www.youtube.com/watch?v=tPAozeYf8M4 - Byssan Lull - Evert Taube

http://www.youtube.com/watch?v=WJ5GBwVZ1pM - Värmelandsvisan - Jussi Björling

http://www.youtube.com/watch?v=lyjHCav3-Eg - Emigrantvisan -

http://www.youtube.com/watch?v=0XK7dsxMIyg - Vårvindar Friska - Göteborgs Symfonietta

http://www.youtube.com/watch?v=exVmTbQeg5I - Gärdebylåten -

http://www.youtube.com/watch?v=S56dIwQWCIc - Hårgalåten - In Flames

http://www.youtube.com/watch?v=uRz46sbp_oI - Grålåten - Skäggmanslaget

Jag ville ha med Tula Hem och Tula Vall också i den här kategorin, men hittade den ej.

En sista svensk låt, helt okategoriserad men den får komma med ändå.

Håll till godo. Nästa gång kanske jag postar favoritlåtar i andra kategorier.

Så var det då dags för ESC-final. Bland kändisarna i publiken finns Maradona, Gaultier, Divac och Carl Bildt och bland TV-publiken finns jag och William (4 år). Här är våra subjektiva kommentarer. Nova har redan lagt sig, klockan är ju 21.

Programmet startade med förra årets vinnare Molitva. William tycker den är bra och propsar på att jag ska skriva upp det på en gång.

01. Rumänien - Nico och Vlad - Pe-o Margine de Lume
William tycker sången är rolig för han sjunger bra. Han tycker hon sjunger bättre än honom. Jag tycker den är dålig, riktigt tråkig.

02. Storbritannien - Andy Abraham - Even If
England har otroligt många bra artister. När det drar ihop sig skickar de en..sopåkare. Jag gillar inte den här låten heller, men William tycker den är bra. Bättre än den förra för de här sjunger högre än de andra.

03. Albanien - Olta Boka - Zemrën E Lamë Peng
Den här tyckte jag var ok och William tyckte också den var bra. Men jag tror inte den placerar sig bland de 10 främsta. Fast jag brukar ha fel så allt jag skriver kommer troligen reflektera den diametrala motsatsen till resultatet.

04. Tyskland - No Angels - Disappear
Ja, den här var helt klart sämst hittills. Vi får se om det dyker upp någon sämre längre fram. William tröttnade och gick iväg till sovrummet.

05. Armenien - Sirusho - Qele, Qele
Bra. Om den förra var sämst hittills så var den här bäst hittills.

06. Bosnien & Herzegovina - Laka - Pokusaj
Oj, den refrengen är verkligen catchy! Jag kan inte sluta sjunga pokušaću da te poljubim a ti se pravi luda. Vilken härlig rytm i refrängen. Den här är helt klart bäst hittills. Flera divisoner bättre än den förra, jag har svårt att tänka mig att någon kommer knäcka den här!

07. Israel - Boaz - The Fire In Your Eyes
Tillbaka till jorden igen och de halvdana låtarna. Den här kommer inte komma bland de 10 bästa. Ganska bra refräng dock som nog kan lyfta låten till den övre halvan bland låtarna.

08. Finland - Teräsbetoni - Missä miehet ratsastaa
Galloperande gitarrkomp och metalyl inleder finnarnas eurovisionsäventyr. Jag gillar den här låten, den är inte lika stark som Lordis låt för några år sen. Men bra ändå jämfört med resten av startfältet. En sångare som också spelar Rickenbacher bas är aldrig helt fel. Han påminner lite om sångaren i Venom i sina glansdagar på 1980-talet.

09. Kroatien - Kraljevi Ulice feat. 75 cents - Romanca
Kvällens äldsta deltagare, 75-årige 75 cents håller ett skakigt tag om käppen och sjunger om bananer och apor? Kul när han scratchar på en gammal stenkaka på slutet. Jag har svårt att ge den här betyg. Det är bra eftersom det sticker ut, men är låten verkligen bra?

10. Polen - Isis Gee - For Life
Det här är riktigt uselt och tävlar med Tyskland i kategorin sämsta låt. Jag hatar Mariah Carey och det här är som ett dåligt plagiat.

11. Island - Euroband - This is my Life
De försöker sig på lite Schlager-Eurodisco med medelmåttigt resultat. Eurodisco var inte bra ens på 90-talet. Det här är inte helt uselt, men inte heller bra.

12. Turkiet - Mor ve Ötesi - Deli
Turkiets motsvarighet till Pearl Jam. Första gången jag hörde låten gillade jag den inte, men den växer. Jag tror den här kommer hamna på den övre halvan.

13. Portugal - Vânia Fernandes - Senhora do Mar (Negras A’guas)
Den här var bra och hamnar på min topp-10 lista. Det länns lite ensamt här framför TV:n nu. Nova sover sen tidigare och nu har även William somnat.

14. Lettland - Pirates Of The Sea - Wolves Of The Sea
Först måste jag kommentera den otroligt snygga LED skärmen i bakgrunden som visar vågor i svart och cyan som rör sig långsamt över scenen. Bandet är utklädda till pirater och låten har en catchy refräng. Den känns inte helt lyckad men kan nog gå hem i vissa länder.

15. Sverige - Charlotte Perrelli - Hero
Snygga effekter igen med Charlotte i svart-vitt och plasmafall i vitt-blått-svart i bakgrunden. Hon gör ett bra framförande som känns välrepeterat. Jag gillade inte alls den här låten i den svenska uttagningen, men med tanke på den medelmåttiga konkurrensen kan den ändå stå sig bra.

16. Danmark - Simon Mathew - All Night Long
Det här tycker jag inte om. Undrar vad William skulle tyckte om den om han var vaken.

17. Georgien - Diana Gurtskaya - Peace Will Come
Här har vi äntligen en låt som har något speciellt. Att sångerskan är blind ger framförandet det där lilla extra. Hoppsan nu blev alla vitklädda helt plötsligt. Den här hamnar definitivt på min 10 i topp lista.

18. Ukraina - Ani Lorak - Shady Lady
Den här var också bra och hamnar möjligen på min topplista, jag har inte bestämt mig än. Det känns lite B att sångerskan har likadan klänning som Charlotte.

19. Frankrike - Sebastien Tellier - Divine
Här är en av förhandsfavoriterna och jag gillar den också skarpt. Enligt mig tävlar den här med Bosnien om positionen bästa låt på Alberts topplista. Bara det faktum att låten fick mig att skriva om mig själv i tredje person betyder något extra.

20. Azerbaijan - Elnur Guseynov & Samir Javadzadeh - Day After Day
Låten inleds med en falsett som skulle få självaste King Diamond avundsjuk. Jag gillar hårdrock, men inte falsettrock. Låten skulle få tummen ned om det inte vore för det dualistiska temat om den eviga kampen mellan det goda och det onda som tilltalar mig.

21. Grekland - Kalomira - Secret Combination
Grekisk flickpop. Det enda som fattas är en barbiedocka och ett dockhus. Jag är ju varken flicka, barn eller popsnöre, därför får låten tummen ned.

22. Spanien - Rodolfo Chikilicuatre - Baila el Chiki Chiki
Den här var lite kul och får tummen upp. Men den hamnar inte på 10 i topplistan.

23. Serbien - Jelena Tomašević feat. Bora Dugic - Oro
Värdlandets låt är bra i år igen. Låten påminner mig om min mamma som brukade sjunga finstämda sånger för mig när jag var barn.

24. Ryssland - Dima Bilan - Believe
Ryssland tillhör också favoriterna och jag har försökt gilla låten, men jag klarar inte av att gilla den. Den hamnar därför utanför listan.

25. Norge - Maria Haukaas Storeng - Hold On Be Strong
Bra, jättebra! Det här var en ballad jag gillade så pass mycket att den får smyga med i listan.

Topplistan. Jag fick inte ihop 10 låter jag gillar men väl 7 stycken.

- Bosnien, Frankrike, Sverige, Serbien, Georgien, Finland, Norge

Jag uppdaterar när det riktiga resultatet är klart.

Resultat

Den slutgiltiga 10-i-topplistan blev Ryssland, Ukraina, Grekland, Armenien, Norge, Serbien, Turkiet, Azerbajdzjan, Israel, Bosnien. Av mina 7 låtar kom alltså 3 med på den riktiga listan. Georgien kom på 11:e plats så det var alltså på håret att jag skulle fått 4 rätt. Hmm, rent statistiskt skulle jag kunna plockat vilka 10 låtar som helst av de 25 deltagande länderna och då fått i snitt 10/25 = 40%. Det blir exakt 4 låtar av 10 rent statistiskt. Jag prickade in 3, alltså sämre än slumpen ;-) Till mitt försvar får jag väl tillägga att jag inte valde 10 låtar utan bara 7 och därmed hamnar ungefär lika med slumpen.

Det var länge sedan jag skrev något. Nu är det dags, mer än dags. Denna gång om astrobiologen Alexander Zaitsev och hans artikel om att det är kört. För sent. Vad?!

Jo, det är för sent att hindra utomjordingarna. Ett klassiskt science-fiction tema är att TV-signaler från jorden når ut till utomjordingar, men Zaitsev påpekar att det är mer sannolikt att signaler från någon av följande anläggningar avslöjar jorden:

  • ART (Arecibo Radar Telescope)
  • GSSR (Goldstone Solar System Radar)
  • EPR (Evpatoria Planetary Radar)

I want to beleive
De ingår i METI-programmet (Messaging to Extra-Terrestrial Intelligence). Som namnet antyder går programmet ut på att skicka meddelanden till eventuella intelligenta varelser i rymden. METI-fober kallas folk som är rädda att signalerna ska locka till sig icke vänligt sinnade utomjordingar. Det finns skäl att oroa sig, inte så mycket för METI-programmet, men för starkare signaler. Radarastronomi kallas en teknik som handlar om att skicka ut mikrovågor i rymden för att kartlägga asteroider vars bana passerar jordens närområde. Zaitsev har räknat ut att sannolikheten är 1 miljon gånger högre att radarastronomin avslöjar jorden än att METI-signalerna gör det.

Nu står vi inför ett klassiskt dilemma. Radarastronomin behövs eftersom asteroider är högst verkliga och behöver kartläggas. Samtidigt blir allt fler vetenskapsmän ense om att sannolikheten för intelligent liv någonstans i vintergatan är mycket hög. Signalerna från radarastronomin når ut över hela vintergatan och avslöjar tydligt jordens position. Ska vi fortsätta med radarastronomin? Det är farligt att fortsätta och det är farligt att sluta. Där är dilemmat. Vad tycker du?

http://arxiv.org/pdf/0804.2754v1
http://en.wikipedia.org/wiki/Radar_astronomy

Nu är det final. Jag har inte tittat på någon av deltävlingarna, men nu har jag tagit mig samman för att titta på och recensera den svenska finalen.

1 Charlotte Perrelli - Hero
Charlotte ger ett allmänt töntigt intryck. En fördel är att hon har ett utseende som liknar den i utlandet stereotypiska bilden av svenska blondiner.
Låten är ok, men inget speciellt.
William (snart 4 år) tycker låten var bra. Nova (2 år) har redan lagt sig.
Betyg: 2/10.
2 Sibel - That is where I’ll go
Sibel är proffsigare än föregående artist.
Inte heller den här låten känns som något speciellt.
William tycker den här låten var bättre än den förra.
Betyg: 4/10.
3 Rongedal - Just a minute
Tvillingarna har ett närmast komiskt scenframträdande och känns allmänt roligare än de två föregående artisterna.
Låten har en bra refräng och känns som en riktig dänga.
William tycker den här var bäst hittills.
Betyg 6/10.
4 Linda Bengtzing - Hur svårt kan det va?
Om jag inte minns fel var hon med för ett par år sedan och jag tycker hon är bättre nu än sist. Fortfarande är det dock inte särskilt bra. Största problemet är att den här musikstilen känns så föråldrad och tråkig. Det gjordes visst bra musik förr i tiden, men det gjordes dålig musik också. Den här påminner om det senare.
William säger lite kryptiskt att han tycker låten är bättre än han tror.
Betyg 4/10.
5 Christer Sjögren - I love Europe
Låttiteln bådar inte gott. Inte framträdandet heller.
Låten däremot är ganska härlig. Jag kommer att tänka på den gamla filmen Elvis i Hawaii.
William tycker lite oväntat att låten är bra och börjar dansa med en Shrekleksak från ett Happy Meal.
Betyg: 5/10.
6 Amy Diamond - Thank You
Jag missade titeln och varenda internetsajt envisas med att skriva skvaller om artisterna men inte en enda sajt talar om låttitlarna. Trots sin ringa ålder har Amy det bästa scenframträdandet hittills.
Låten är också bra och jag känner att den här låten skulle klara sig bra i Belgrad.
William dansar, snurrar och snurrar tills han nästan ramlar. Nova vaknar.
Betyg: 7/10
7 Sanna Nielsen - Here I am
Sanna är ytterligare en blondin. Till skillnad från Charlotte Perrelli känns Sanna mycket mer äkta.
Hennes låt är en lugn och fin tryckare som skulle passat bra som sista låt på ungdomsdisko på A-salen 1986.
William tycker att den här låten är bra, men att han själv är ännu bättre. Han tycker att han dansar bättre också.
Betyg: 6/10.

8 Nordman - I lågornas sken
Nordman ser ut som han kommer direkt ur en fornnordisk myt där han druckit mjöd och fäktats i 15 år.
Låten är den bästa hittills. Inte fantastiskt bra, men det var inte de andra heller. Den vinner på att den sticker ut från mängden.
William tycker den här låten är jättebra och att han sjunger så det kommer rök.
Betyg: 8/10.

9 Frida feat Headline - Upp och hoppa
De här ungdomarna ser ut som de kommer direkt från fritidsgården. Låten med. Jag gillar inte den här musikstilen, men det finns säkert yngre personer som uppskattar det.
Williams mage tycker om den här låten.
Betyg: 3/10.

10 BWO - Lay your love on me
BWO är populära i östeuropa och de skulle utan tvekan gå hem bäst av kvällens artister där.
Låten är den bästa i kväll. Framträdandet likaså.
William tycker låten är dålig och vill inte dansa. Han tycker det ska vara en i taget som sjunger. Om inte William hade sågat den skulle den fått toppbetyg.
Betyg 9/10

Av alla låtarna tyckte William flickan var bäst (Amy). Han påpekar att när han får barn så blir han också pappa. Mina favoriter är BWO, Amy Diamond och Nordman.

Jag passade också på att titta på Belgrads eget bidrag, Oro med Jelena Tomašević. En finstämd låt inspirerad av folkmusik skriven av Zeljko Joksimovic. Samma person som framförde låten Lane Moje 2004. Om man tänker på det hör man vissa likheter mellan låtarna. Den senare tycker jag är riktigt bra. Jag ringde min styvfar som är från Montenegro och diskuterade låten Oro. Han sade att både melodin och texten anspelar på Kosovo. Det är sista meningen i texten det handlar om, “Väck mig på St.Vitusdagen så jag kan se honom igen“. St.Vitusdagen är en religiös högtid då de som stupade vid trastfältet år 1389 hedras. Frasen “så jag kan se honom igen” är naturligtvis en metafor för att regionen åter ska anslutas till fäderneslandet. Jag tror inte särskilt många utanför Balkanregionen förstår den symboliska betydelsen av sista meningen. Tur att jag ringde Nedeljko för att reda ut begreppen.

Sammanfattning

De senaste dagarna har jag funderat och läst på lite om säkerheten hos bankernas säkerhetsdosor (eng. digipass). Den första banken jag kollade var Swedbank och säkerheten hos deras dosa var inte tillfredsställande.

Bakgrund

Swedbanks dosa kommer från ActivIdentity, tidigare ActivCard, och följer standarden ANSI X9.9 som inte finns på nätet utan måste beställas från ANSI. En standard som däremot finns online är FIPS 113. Bägge beskriver samma algoritm. Krypteringen som används är vanlig DES. Väl gömd inne i dosan finns 56-bitars nyckeln som DES använder. Nyckeln går inte att läsa ut. Enligt uppgifter på nätet lagras nyckeln i ett flyktigt minne som backas upp av batteri och om man försöker läsa ut nyckeln, eller om strömmen till batteriet bryts, så förstörs nyckeln och dosan blir oanvändbar. [Redigerat: jag har fått påpekat att dosan även har ett backupbatteri (eller kondensator) som håller liv i nyckeln vid byte av huvudbatteriet]. Varje dosa har en egen nyckel som också lagras i en databas hos Swedbank (där nyckeln knyts till dosans serienummer).

DES är en beprövad standard som använts i över 30 år så dosan borde vara säker… eller? Tyvärr inte, DES använder en alldeles för kort nyckel. Med moderna hemdatorer/FPGAer så kan inte DES längre anses vara säkert. Det går att genomföra en brute force attack, dvs att testa alla nycklar, en efter en, tills man hittar den rätta.

Så fungerar dosan

DES i säkerhetsdosan

Användaren matar in en 8-siffrig kod i dosan. Varje siffra översätts till siffrans ASCII-kod (0 = 0×30, 1 = 0×31 … 9 = 0×39). De åtta ASCII-koderna bildar tillsammans 64 bitar klartext som med hjälp av 56-bitars nyckeln krypteras till 64 bitar skiffertext. Av dessa 64 bitar skiffertext bildar de vänstra 32 bitarna utdata som presenteras i hexformat. En hexsiffra (0-F) motsvarar alltså 4 bitar. I outputen finns dock bara siffrorna 0-9, tecknen A-F mappas till siffrorna 0-5. Detta gör en brute force attack aningen svårare och dessutom är det lättare för användaren att läsa vanliga siffror.

Attacker mot DES

DES kryptoanalyserades första gången officiellt 1997 i tävlingen DES-I som arrangerades av RSA. Metoden som användes var brute force. Eftersom nyckellängden endast är 56 bitar blir antalet nycklar blygsamma 2^56, eller drygt 72 biljoner (kvadriljoner på engelska), 72 X 10^15. En genomsnittlig PC med 1GHz processor klarar att testa runt 5 miljoner nycklar per sekund (det skulle ta runt 166000 dagar för en standard PC att testa alla nycklar). I DES utmaningarna samarbetade tusentals datorer i ett distribuerat nätverk och hjälptes tillsammans åt att testa alla nycklarna. Med 166000 datorer skulle det istället ta en dag att testa alla nycklarna. År 1998 byggde EFF den spektakulära Deep Crack för 250.000 dollar. Den hade specialdesignad hårdvara och byggdes specifikt för att knäcka DES. Deep Crack kan testa 90 miljarder nycklar per sekund.. Mycket riktigt tog också EFF med hjälp av Deep Crack hem första priset i nästa tävling, DES-II. DES går alltså att knäcka både med ett distribuerat nätverk av datorer och/eller med specialdesignad hårdvara. Priset på elektronik sjunker hela tiden. År 2006 byggdes COPACOBANA under ledning av två tyska professorer. Den har liknande prestanda som Deep Crack men är mycket billigare. För 8900 euro kan du köpa en från projektets hemsida. Dessutom har COPACOBANA, till skillnad från Deep Crack, programmerbara FPGAer vilket gör att den kan användas till olika typer av kodknäckning.

Attacker mot säkerhetsdosan

I tävlingarna som RSA arrangerade var upplägget att både 64 bitar klartext och 64 bitar skiffertext var kända. Vi har bara tillgång till 32 bitar skiffertext. Eftersom hexsiffrorna A-F dessutom är mappade mot 0-5 har vi egentligen ännu mindre. Tim Güneysu från crypto.rub.de (som ligger bakom COPACOPANA) förklarar detta så här:

Om DES är en pseudoslumpmässig funktion med god statistisk distribution, kan vi uppskatta sannolikheten att X är en icke detekterad mappning A..F=>0..5 på en outputvektor med Pr(X)=3/8 (eftersom 6 av 16 siffror kan vara mappade). Enligt en enhetlig distribution av dessa mappningar är 3 av 8 siffror (som utgör outputvektorns 32 bitar) i snitt påverkade av ett fel. Med hänsyn till värdet innebär felet en skillnad på en bits information (”1″ kan t ex tolkas som antingen “1″ eller “B”). Totalt har vi ett statistiskt fel på 3 bitar per utvärde och kan således antas ha 29 bitar korrekt information för en första brute force attack.

Genom att mata in en serie av tal och välja en output med många siffror i intervallet 6-9 kan sannolikheten för fel minskas (eftersom 6-9 inte mappas). För varje nyckel som provas fås 64 bitar skiffertext. Om de 32 mest signifikanta bitarna av skiffertexten stämmer så har vi en nyckelkandidat. Efter att alla kombinationer gåtts igenom finns 2^32 kandidater. Eftersom vi dessutom hade 3 bitars osäkerhet pga mappningen leder detta till att vi kommer få 2^35 kandidater (nycklarna måste testas mot alla kombinationer av skiffertext som mappningen kan motsvara). Tim förklarar att det räcker med ett till klartext-skiffertext par för att avgöra vilken av dessa kandidater som är den riktiga nyckeln. Två par motsvarar 58 (29 + 29) bitars information och nyckeln är endast på 56 bitar.

Tidsuppskattning

COPACOBANA testar 2^36 nycklar per sekund vilket innebär att alla 2^56 nycklar kan testas på 2^(56-36) sekunder, drygt 12 dygn. I genomsnitt tar det drygt 6 dygn att hitta den rätta nyckeln. De flesta privatpersoner har (till skillnad från NSA och andra säkerhetstjänster) inte tillgång till en Deep Crack eller COPACOBANA. Ett distribuerat nätverk bestående av (mer eller mindre) frivilliga personer som upplåter datorkraft till beräkningar skulle också kunna knäcka en nyckel. Men om det ska kunna ske inom rimlig tid måste nätverket bestå av tusentals datorer. Låt säga att snittdatorn aningen optimistiskt beräknar 10 miljoner nycklar per sekund, då behövs 2^56/(10000000*31*24*3600) = 2690 datorer för att hitta nyckeln på en månad i värsta fallet. Det är också rimligt att tänka sig ett zombienätverk (botnet) som används för att göra sådana beräkningar. Polisen har avslöjat zombienätverk med mångdubbelt fler datorer än vad som krävs för att knäcka en DES-nyckel.

Sammanfattning

Det hela sammanfattas väl med Tims ord angående algoritmen:

With a breaking time of 2 weeks, it must be considered as completely unsecure.

Tacklista

Följande personer har bidragit med information:

  • Tim Güneysu - Givande diskussion om attackteori och COPACOBANA.
  • Matthew Kwan - Svar på frågor om mjukvaruimplementation av algoritmen bitslice-DES.
  • Alexander Peslyak (aka Solar Designer) - Svar på frågor om MMX- och SSE2-optimering av bitslice-DES.

Next Page »