Warning: Missing argument 2 for wpdb::prepare(), called in /home/stromber/public_html/kryptoblog/wp-content/plugins/wp-super-edit/wp-super-edit.core.class.php on line 109 and defined in /home/stromber/public_html/kryptoblog/wp-includes/wp-db.php on line 1292
March » 2009 » Kryptoblog

Archive for March, 2009

OTP-generator för iPhone

March 31st, 2009

Tydligen finns det nu en generator av engångskoder (One Time Password – OTP) för iPhone.

OTP-generator på iPhone.

Generatorn som är utvecklad av Verisign och här finns betan att testköra.

Jag tror på OTP-generatorer, och att ha en integrerad i mobilen är en ypperlig lösning – så länge som du kan lita på att den inte riskerar att läcka information och hackas. Fördelen med en enkel dosa från ex Vasco eller RSA är att de är så dumma och bla saknar kommunikationsmöjlgheter att det inte finns så många attackvektorer. Men att ha engångskoder genererade är bättre än att försöka komma ihåg komplicerade lösenord.

En sak gör mig dock riktigt ilsk. Det finns webbsidor och företag som använder engångskoder, men som ersätter siffrorna med stjärnor så att man inte kan se att man matar in korrekt kod. Om vi kan lita på att OTP-generatorn genererar en sekvens av koder som inte går att gissa även om man ser ett stort antal koder finns det inga säkerhetsmässiga skäl att inte låta användaren se koden. Däremot försvårar man för användaren och därmed användarens vilja att använda bra säkerhet.

Lite om diskkryptering för Mac

March 31st, 2009

Signaturen Kanske ställde en fråga om diskkryptering för Mac. Vad gäller Filevault känner jag bara till ett par utvärderingar som gjorts.

FileVault

En bra presentation om hur FileVault i Mac OS X fungerar är Unlocking FileVault som Ralf-Philipp Weinmann och Jacob Appelbaum höll på 23:e Chaos Communication Congress 2006. Att döma av den presentationen finns det inga fundamentala svagheter i konstruktionen och den bästa attackvektorn är (som vanligt) svaga lösenord. Presentationen innehåller länkar till verktyg för att utföra brute force-attack samt länkar till en del andra dokument. (En liten varning: För den som känner till Goatse kanske den sista bilden i presentationen kan vara en aning magstark. 😉

Sakthiyuvara ja Sakthivelmurugans artikel Security in FileVault från 2007 innehåller även den en analys av FileVault. Denna artikel pekar inte heller på fundamentala svagheter i krypteringen som används, men påpekar att det inte är hela disken som skyddas:


FileVault can’t possibly be extended with the current design to incorporate a full disk encryption as
many people would want to. But its possible to do; to have a full disk encryption the boot process
has to be modified to understand the decryption technique and more enhancements so that the
encrypted disk image can be mounted from which the OS should start booting.

The speed of the system may go down considerably considering the number of encryption and decryption operation that has to occur and a single disk image will be a point point of failure for corruption. Recovering corrupted image will be hurdle that has to be fixed.FileVault can’t possibly be extended with the current design to incorporate a full disk encryption.

FileVault was meant to encrypt home directories for which it is perfectly designed and have the
security features.

Det kan vara värt att notera att båda dessa källor är från 2006 respektive 2007, det är inte givet att det som står i dessa källor gäller i dag. Wikipedias sida om FileVault tar upp en del aspekter med FileVault, pekar på tidigare problem samt en händelse från 2008 som dock inte ger så mycket fakta om FileVault i sig.

Litar man inte på FileVault finns det flera alternativ/komplement värda att titta närmare på. Signaturen scrp pekade på utmärkta Truecrypt.

Ett annat alternativ är PGP Whole Disk Encryption som jag dock inte har någon personlig erfarenhet av, men som att döma av kommentarar på nätet verkar göra ett bra jobb. Du hittar dock inte så mycket säkerhet på www.pgp.org...

Uppdatering 2009-03-31:
MagnusB påpekade att om man använder FileVault bör man stänga av SafeSleep i OS:et. Detta är även något de tar upp i presentationen:


Safe sleep is invoked when power runs critically low

– Memory contents written to /var/vm/sleepimage

Safe sleep is careful but not careful enough…

– If encrypted swap is on: –contents of the sleep image will be encrypted, but key will be written out in the header (xnu-792.13.8)

MagnusB påpekar även att Checkpoint har en produkt för FDE (Full Disc Encryption) för Mac.

Uppföljning om USB-modemet

March 31st, 2009

Först ett tack till de som hört av sig med tips på hur man löser problemet med att få Huawei E220 att fungera på en ny maskin. Love Hörnquist Åstrand tipsade om Hua, ett verktyg han utvecklat som gör att man kan kontrollera vilket nätverk som väljs som standard.

Jag löste problemet genom att koppla in USB-modemet i datorn och sedan installera uppdateringar för firmware och programvara från den virtuella Windows XP-maskin jag har i Suns ypperliga virtualiserare Virtualbox. Efter att ha gjort dessa uppdateringar gick det utmärkt att få koppling i Mac OS X.

För att återigen hitta en koppling till säkerhet är det inte så lätt att försöka rita upp kommunikationsvägarna jag (temorärt) hade i mitt system. Jag hade alltså en USB-modem fysiskt inkopplat i min laptop. USB-modemet kopplades via Mac OS X till en applikation (Virtualbox) och in i det virtuella OS:et Windows XP. I Windows gjorde en applikation uppdateringar på firmware-nivå hela vägen tillbaka. Samtidigt finns det en koppling mellan Windows XP och Mac OS X via foldrar (av Vbox hanterade delade resurser) och virtualiserat nätverksinterface. Sätten som data kan flöda mellan olika producenter och konsumenter och konsumenter inom och utanför mitt lokala system blev för en stund j-kligt många.

Inte konstigt att virtualisering enl den undersökning som Clavister gjort ser ut att leda till att system plötsligt blir öppna för attacker. När man virtualiserar förändras säkerhetsmodellen för sitt system.

BTW: Tror du att molnet kommer att göra det lättare eller svårare att hålla koll på säkerheten?

Dagens datorstrul

March 22nd, 2009

Det här har inte så jättemycket med IT-säkerherhet och krypto att göra. Men när jag fick min nya MacBook-laptop och skulle försöka använda mitt USB-modem fungerade det inte alls. Jag har på olika sätt försökt replikera inställningarna på min gamla maskin (där det fungerar), men än så länge utan framgång.

Ett tips jag fått är att uppgradera programvaran för USB-modemet, en E220-dongle från Huawei. Tydligen finns det en ny programvara med Plug & Play-stöd för Mac OS X för de som är Macanvändare. Tyvärr är det inte så lätt installera uppgraderingen om man är Macanvändare:


Uppgraderingen gäller bara USB-modemet Huawei E220 och kan endast göras ifrån Windows. Den här uppgraderingen innehåller stöd för Windows Vista, plug n play för Mac OS X, stöd för Mac OS X Leopard samt stöd för 7.2 Mbps.

Hur tänkte dom nu? 😉

Skall vi hitta på en säkerhetskoppling kan det väl vara att installation av säkerhetsuppgraderingar (vilket detta iofs inte är) skall vara enkla att utföra.

Ny version av libssh2

March 18th, 2009

Haxx-Daniel har postat på sin blogg att det finns en ny version av libssh2. Daniel skriver:


There have been some well-founded criticism against libssh2 for a long time for its bad transfer performance when doing SCP and SFTP based transfers. Tests have proved it to be significantly slower than the openssh based alternatives in comparisons done in similar conditions. We’re talking down to a tenth(!) of the speed for SFTP.

Luckily I have a unnamed (by agreement) sponsor who pays me for improving this.

Daniel ger en kort men bra beskrivning på de problem han ser med dagens version av implementationen i libssh2 och vad han gjort för att fixa problemen:


SSH has a lower protocol layer that does the entire encryption thing, the transport layer, but on top of that is the “channel layer” that is packet based for sending data back and forth over the transport layer. This channel thing has a receive window concept, much like TCP itself has, which tells the remote side how much data it is allowed to send until it gets further notice.

libssh2 1.0 had a very conservative windowing logic. It started with a default window size of 64KB and it upped it at every read with the same amount that was read (which then could be 1K to 16KB something depending on the app).

My remake of this was to simplify the logic, read data from the network more evenly distributed over time, update the window size much less frequent and increase the window size by magnitudes! I found that when using a window size of 38MB (600 times the previous default size!!) things started flying.

Förändringarna verkar ha gett resultat:


With these modifications, libssh2 transfers SCP at close to 40MB/sec! SFTP is still left behind at a “mere” 14MB/sec on the same test setup but it has its own set of problems and solutions. Now this discussion on the libssh2 list is more about how to sensibly size the window to work the best way for different situations.

Daniel avslutar med en önskan om att få den nya versionen testad. Om du är intresserad tveka inte att knalla över till libssh2:s webbplats, tanka hem och kör.

Test av sphlib

March 18th, 2009

Jag testade i går kväll att kompilera upp sphlib, det nya bibliotek med hashfunktioner jag bloggade om i går.

På Mac var det inte svårare än att packa upp distributionen och köra det medföljande byggscriptet. Inga varningar eller problem dök upp under bygget och scriptet kör tom ett test av de olika hashfunktionerna efter att de byggts.

Jag upptäckte att det sphlib inkluderade ett benchmark-program, vilket jag naturligtvis kört med följande resultat:


Speed test: MD2
message length = 16 -> 2.32 MBytes/s
message length = 64 -> 4.63 MBytes/s
message length = 256 -> 6.26 MBytes/s
message length = 1024 -> 6.79 MBytes/s
message length = 8192 -> 6.93 MBytes/s
long messages -> 6.92 MBytes/s

Speed test: MD4
message length = 16 -> 75.60 MBytes/s
message length = 64 -> 171.02 MBytes/s
message length = 256 -> 321.05 MBytes/s
message length = 1024 -> 406.36 MBytes/s
message length = 8192 -> 417.39 MBytes/s
long messages -> 425.46 MBytes/s

Speed test: MD5
message length = 16 -> 56.83 MBytes/s
message length = 64 -> 124.44 MBytes/s
message length = 256 -> 221.65 MBytes/s
message length = 1024 -> 271.13 MBytes/s
message length = 8192 -> 290.17 MBytes/s
long messages -> 294.69 MBytes/s

Speed test: SHA-0
message length = 16 -> 37.82 MBytes/s
message length = 64 -> 80.94 MBytes/s
message length = 256 -> 148.31 MBytes/s
message length = 1024 -> 177.09 MBytes/s
message length = 8192 -> 188.11 MBytes/s
long messages -> 187.60 MBytes/s

Speed test: SHA-1
message length = 16 -> 36.36 MBytes/s
message length = 64 -> 79.28 MBytes/s
message length = 256 -> 135.82 MBytes/s
message length = 1024 -> 163.81 MBytes/s
message length = 8192 -> 177.21 MBytes/s
long messages -> 177.21 MBytes/s

Speed test: SHA-224
message length = 16 -> 20.78 MBytes/s
message length = 64 -> 43.04 MBytes/s
message length = 256 -> 73.02 MBytes/s
message length = 1024 -> 85.98 MBytes/s
message length = 8192 -> 90.83 MBytes/s
long messages -> 91.31 MBytes/s

Speed test: SHA-256
message length = 16 -> 20.43 MBytes/s
message length = 64 -> 42.73 MBytes/s
message length = 256 -> 71.50 MBytes/s
message length = 1024 -> 88.58 MBytes/s
message length = 8192 -> 92.52 MBytes/s
long messages -> 91.48 MBytes/s

Speed test: SHA-384
message length = 16 -> 3.51 MBytes/s
message length = 64 -> 14.18 MBytes/s
message length = 256 -> 19.26 MBytes/s
message length = 1024 -> 25.63 MBytes/s
message length = 8192 -> 28.88 MBytes/s
long messages -> 29.02 MBytes/s

Speed test: SHA-512
message length = 16 -> 3.52 MBytes/s
message length = 64 -> 14.04 MBytes/s
message length = 256 -> 19.16 MBytes/s
message length = 1024 -> 25.92 MBytes/s
message length = 8192 -> 31.41 MBytes/s
long messages -> 30.98 MBytes/s

Speed test: RIPEMD
message length = 16 -> 51.34 MBytes/s
message length = 64 -> 111.15 MBytes/s
message length = 256 -> 195.46 MBytes/s
message length = 1024 -> 235.09 MBytes/s
message length = 8192 -> 250.24 MBytes/s
long messages -> 247.85 MBytes/s

Speed test: RIPEMD-128
message length = 16 -> 41.58 MBytes/s
message length = 64 -> 90.01 MBytes/s
message length = 256 -> 154.04 MBytes/s
message length = 1024 -> 185.11 MBytes/s
message length = 8192 -> 197.71 MBytes/s
long messages -> 194.94 MBytes/s

Speed test: RIPEMD-160
message length = 16 -> 28.73 MBytes/s
message length = 64 -> 59.71 MBytes/s
message length = 256 -> 102.10 MBytes/s
message length = 1024 -> 121.77 MBytes/s
message length = 8192 -> 127.55 MBytes/s
long messages -> 130.20 MBytes/s

Speed test: Tiger
message length = 16 -> 23.31 MBytes/s
message length = 64 -> 47.86 MBytes/s
message length = 256 -> 79.82 MBytes/s
message length = 1024 -> 95.64 MBytes/s
message length = 8192 -> 100.71 MBytes/s
long messages -> 101.67 MBytes/s

Speed test: Tiger2
message length = 16 -> 23.24 MBytes/s
message length = 64 -> 47.90 MBytes/s
message length = 256 -> 80.09 MBytes/s
message length = 1024 -> 95.35 MBytes/s
message length = 8192 -> 100.81 MBytes/s
long messages -> 101.47 MBytes/s

Speed test: PANAMA
message length = 16 -> 4.98 MBytes/s
message length = 64 -> 18.87 MBytes/s
message length = 256 -> 65.16 MBytes/s
message length = 1024 -> 170.89 MBytes/s
message length = 8192 -> 323.63 MBytes/s
long messages -> 370.26 MBytes/s

Speed test: HAVAL[3 passes]
message length = 16 -> 28.10 MBytes/s
message length = 64 -> 110.82 MBytes/s
message length = 256 -> 165.24 MBytes/s
message length = 1024 -> 233.50 MBytes/s
message length = 8192 -> 262.07 MBytes/s
long messages -> 266.82 MBytes/s

Speed test: HAVAL[4 passes]
message length = 16 -> 20.69 MBytes/s
message length = 64 -> 82.65 MBytes/s
message length = 256 -> 119.51 MBytes/s
message length = 1024 -> 163.86 MBytes/s
message length = 8192 -> 183.72 MBytes/s
long messages -> 187.14 MBytes/s

Speed test: HAVAL[5 passes]
message length = 16 -> 16.85 MBytes/s
message length = 64 -> 66.94 MBytes/s
message length = 256 -> 90.74 MBytes/s
message length = 1024 -> 127.20 MBytes/s
message length = 8192 -> 144.84 MBytes/s
long messages -> 148.33 MBytes/s

Speed test: WHIRLPOOL
message length = 16 -> 5.09 MBytes/s
message length = 64 -> 10.32 MBytes/s
message length = 256 -> 16.66 MBytes/s
message length = 1024 -> 19.62 MBytes/s
message length = 8192 -> 20.68 MBytes/s
long messages -> 20.90 MBytes/s

Speed test: SHABAL-224
message length = 16 -> 6.65 MBytes/s
message length = 64 -> 20.41 MBytes/s
message length = 256 -> 50.08 MBytes/s
message length = 1024 -> 78.70 MBytes/s
message length = 8192 -> 93.75 MBytes/s
long messages -> 96.67 MBytes/s

Speed test: SHABAL-256
message length = 16 -> 6.73 MBytes/s
message length = 64 -> 20.27 MBytes/s
message length = 256 -> 50.27 MBytes/s
message length = 1024 -> 78.07 MBytes/s
message length = 8192 -> 93.57 MBytes/s
long messages -> 97.57 MBytes/s

Speed test: SHABAL-384
message length = 16 -> 6.67 MBytes/s
message length = 64 -> 20.38 MBytes/s
message length = 256 -> 50.12 MBytes/s
message length = 1024 -> 78.22 MBytes/s
message length = 8192 -> 93.54 MBytes/s
long messages -> 96.53 MBytes/s

Speed test: SHABAL-512
message length = 16 -> 6.60 MBytes/s
message length = 64 -> 20.36 MBytes/s
message length = 256 -> 50.09 MBytes/s
message length = 1024 -> 78.29 MBytes/s
message length = 8192 -> 92.96 MBytes/s
long messages -> 95.80 MBytes/s

Speed test: RadioGatun[32]
message length = 16 -> 8.17 MBytes/s
message length = 64 -> 28.01 MBytes/s
message length = 256 -> 41.35 MBytes/s
message length = 1024 -> 139.11 MBytes/s
message length = 8192 -> 182.84 MBytes/s
long messages -> 190.25 MBytes/s

Speed test: RadioGatun[64]
message length = 16 -> 2.08 MBytes/s
message length = 64 -> 7.99 MBytes/s
message length = 256 -> 20.33 MBytes/s
message length = 1024 -> 41.67 MBytes/s
message length = 8192 -> 56.12 MBytes/s
long messages -> 58.12 MBytes/s

Tittar man på prestandasiffrorna ser man tydligt varför SHA-2-funktionerna har problem att ersätta SHA-1 i verkliga applikationer. Eftersom det även finns benchmark-funktionalitet i OpenSSL kan det vara intressant att jämföra prestandan i sphlib med OpenSSLs implementation:


js@stajlis>openssl speed sha1
To get the most accurate results, try to run this
program when this computer is idle.

Doing sha1 for 3s on 16 size blocks: 2584309 sha1’s in 2.90s
Doing sha1 for 3s on 64 size blocks: 1855209 sha1’s in 2.87s
Doing sha1 for 3s on 256 size blocks: 1016274 sha1’s in 2.86s
Doing sha1 for 3s on 1024 size blocks: 362232 sha1’s in 2.86s
Doing sha1 for 3s on 8192 size blocks: 51519 sha1’s in 2.83s
OpenSSL 0.9.7l 28 Sep 2006
built on: Sat Jul 12 01:44:36 PDT 2008
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) aes(partial) blowfish(ptr)
compiler: cc -arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe -arch ppc -arch ppc64 -arch i386 -arch x86_64 -pipe -DOPENSSL_NO_IDEA -DFAR=
available timing options: TIMEB USE_TOD HZ=100 [sysconf value]
timing function used: getrusage

The ‘numbers’ are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 14251.15k 41376.71k 90860.85k 129683.24k 149025.34k

Räknar jag om till MByte får jag 13 MByte/s för 16 Byte data och 145 MByte för 8192 Byte data, vilket är långsammare än sphlib som ger 36 MByte/s respektive 177 MByte. Men vad det sedan beror på (slump?) vågar jag inte ens gissa på. Det här är inte precis någon väl planerad jämförelse. sphlib verkar iaf inte vara brutalt mycket långsammare än OpenSSL.

Eftersom jag har en Dual Core-processor och OpenSSl stödjer att köra på multipla processorer kan det vara intressant att testa vad det ger:


js@stajlis.springfield.se:/Users/js/tmp/untar/sphlib-1.1/c>openssl speed sha1 -multi 2
Forked child 0
Forked child 1
+DT:sha1:3:16
+DT:sha1:3:16
...
...
Got: +H:16:64:256:1024:8192 from 0
Got: +F:5:sha1:12663250.54:35445082.87:81488482.11:115173498.84:133125038.17 from 0
Got: +H:16:64:256:1024:8192 from 1
Got: +F:5:sha1:12774171.87:38159683.91:83045579.61:118426319.78:135401122.10 from 1

timing function used:
sha1 25437.42k 73604.77k 164534.06k 233599.82k 268526.16k

En ganska rejäl prestandaökning, i stort sett 100%. Testade även att köra med än fler processer och fick inga större förändringar. Det verkar alltså som att OpenSSL verkligen lyckas använda båda kärnorna ordentligt.

(Ok, gissar att jag nu kommer att bli dränkt med kommentarer om var jag gick snett och gjort fel. Kom igen bara!)

sphlib ett nytt bibliotek med hashfunktioner

March 17th, 2009

Som en del av Projet RNRT SAPHIR (japp, det heter så, och webbplatsen är på franska) har Franska myndigheter släppt sphlib, ett nytt bibliotek med implementationer av olika hashfunktioner.

Sphlib innehåller implementationer i C och i Java av följande hashfunktioner:


haval128_3 HAVAL, 128-bit output, 3 passes
haval128_4 HAVAL, 128-bit output, 4 passes
haval128_5 HAVAL, 128-bit output, 5 passes
haval160_3 HAVAL, 160-bit output, 3 passes
haval160_4 HAVAL, 160-bit output, 4 passes
haval160_5 HAVAL, 160-bit output, 5 passes
haval192_3 HAVAL, 192-bit output, 3 passes
haval192_4 HAVAL, 192-bit output, 4 passes
haval192_5 HAVAL, 192-bit output, 5 passes
haval224_3 HAVAL, 224-bit output, 3 passes
haval224_4 HAVAL, 224-bit output, 4 passes
haval224_5 HAVAL, 224-bit output, 5 passes
haval256_3 HAVAL, 256-bit output, 3 passes
haval256_4 HAVAL, 256-bit output, 4 passes
haval256_5 HAVAL, 256-bit output, 5 passes
md2 MD2
md4 MD4
md5 MD5
panama Panama
radiogatun32 RadioGatun[32]
radiogatun64 RadioGatun[64]
ripemd RIPEMD (original function)
ripemd128 RIPEMD-128 (revised function, 128-bit output)
ripemd160 RIPEMD-160 (revised function, 160-bit output)

rmd RIPEMD (original function)
rmd128 RIPEMD-128 (revised function, 128-bit output)
rmd160 RIPEMD-160 (revised function, 160-bit output)

sha0 SHA-0 (original SHA, withdrawn)
sha1 SHA-1
sha224 SHA-224
sha256 SHA-256
sha384 SHA-384
sha512 SHA-512

shabal192 SHABAL-192
shabal224 SHABAL-224
shabal256 SHABAL-256
shabal384 SHABAL-384
shabal512 SHABAL-512

tiger Tiger
tiger2 Tiger2 (Tiger with a modified padding)

whirlpool Whirlpool (2003, current version)
whirlpool0 Whirlpool-0 (2000)
whirlpool1 Whirlpool-1 (2001)


(funktionsnamnet i biblioteket är det som står längst till vänster.)

Det går även att köra sphsum för att köra de olika funktionerna för att beräkna en hash av givet indata.

Enligt webbplatsen är licensen för biblioteket MIT-lik och BSD-lik. Verkar det förvirrat? Författarna förklarar licensen så här:


Licensing is specified in the LICENSE.txt file. This is an MIT-like, BSD-like open-source license. Basically, we will get the fame but not the blame. If you reuse our code in your own projects, and distribute the result, then you should state that you used our code and that we always disclaimed any kind of warranty, and will continue to do so in the foreseeable future, and beyond. You have no other obligation such as disclosing your own source code. See the LICENSE.txt file for the details in a lawyer-compatible language.

Jag har inte testat att bygga sphlib på min maskin än. Återkommer när jag gjort det.

Leverantören av digitala pass i konkurs

March 16th, 2009

Elektroniktidningen hade en nyhet för några veckor sedan om att företaget Smarticware gått i konkurs. Smarticware är företaget som lett utvecklingen av EU-passen med RFID-kretsar för digital lagring av information.

I artikeln förklarar Smarticwares VD Omid Aval vad som orsakade konkursen:

– Vi fick inget gehör hos riskkapitalbolagen. Och när min nya revisor dessutom slarvade med att rapportera ordentligt så gick bolaget i konkurs, och det var ingen ide att försöka rätta till det. Men vi har inga skulder, säger Omid Aval.

Amid Aval.
Amid Aval, VD på Smarticware.

Svårt att säga om det finns några säkerhetsmässiga aspekter på konkursen. Men det står inget i artikeln om vad som händer bolaget (blir det en rekonstruktion, eller läggs det ner?) och om det finns känslig information som i och med detta riskerar att halka iväg på avvägar.

CUDA på Mac

March 16th, 2009

Jag har nyligen blivit med en ny laptop, en Apple MacBook Unibody:

MacBook

Förutom mer minne och större hårddisk, vilket gör det lättare att köra de virtuella system jag använder vid hårdvaruutveckling kommer maskinen med praktiska funktioner som bakgrundsbelyst tangentbord (iaf praktiskt om man sitter uppe på nätterna.)

En annan bra sak med den nya laptopen är att den kommer med en grafikprocessor (GPU) från Nvidia kapabel att stödja Nvidias programmeringsmiljö CUDA. Compute Unified Device Architecture (CUDA) gör det möligt att relativt enkelt accelerera applikationer med dataparallellism genom att exekvera beräkningar parallellt på grafikprocessorn.

Jag testade att installera CUDA 2.0 på laptopen förra veckan. Installationen gick i stort sett utan några problem alls, speciellt efter att ha hittat den här utmärkta bloggpostningen om att installera CUDA 2.0 på Mac. Följer man instruktionerna kan man snart testa CUDA på sin maskin:


js@stajlis.springfield.se:/Developer/CUDA/bin/darwin/release>./deviceQuery
There is 1 device supporting CUDA

Device 0: “GeForce 9400M”

Major revision number: 1 Minor revision number: 1 Total amount of global memory: 266010624 bytes Number of multiprocessors: 2 Number of cores: 16 Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 16384 bytes Total number of registers available per block: 8192 Warp size: 32 Maximum number of threads per block: 512 Maximum sizes of each dimension of a block: 512×512 x 64 Maximum sizes of each dimension of a grid: 65535×65535 x 1 Maximum memory pitch: 262144 bytes Texture alignment: 256 bytes Clock rate: 0.80 GHz Concurrent copy and execution: No

16 beräkningsenheter är inte precis enormt många, iaf inte i jämförelse med Nvidias Tesla. Nåja, det går dock att köra CUDA utan problem och Nvidias exempelapplikationer uppvisar en tydlig acceleration jämfört med en entrådars CPU-implementation. Jag upptäckte även att en totalt överspecad CUDA-applikation (ex nbody-applikationrn med 65535 kroppar att beräkna) totalt sänker Mac:en.

Slumptalsgeneratorn Mersenne Twister i CUDA-variant ger på min maskin följande prestanda:


js@stajlis.springfield.se:/Developer/CUDA/bin/darwin/release>./MersenneTwister
Using device 0: GeForce 9400M
Initializing data for 24000000 samples…
Loading CPU and GPU twisters configurations…
Generating random numbers on GPU
Generated samples : 24002560
RandomGPU() time : 77.352997
Samples per second: 3.102990E+08
Applying Box-Muller transformation on GPU
Transformed samples : 24002560
BoxMullerGPU() time : 35.231998
Samples per second : 6.812716E+08
Reading back the results…
Checking GPU results…
...generating random numbers on CPU using reference generator
...applying Box-Muller transformation on CPU
...comparing the results
Max absolute error: 2.264977E-06
L1 norm: 1.783765E-07

Jag har inte hunnit att hacka några egna CUDA-program. Förra året testade jag (min vana trogen) att koda strömkryptot RC4 i CUDA. Inte speciellt förvånande nog gav det dock ingen prestandaökning. Det var dock mer ett test av att jag fattat hur man kodar för CUDA. Skall försöka hinna koda lite CUDA under våren och då pröva med mer parallella algoritmer och applikationer.

Senare i år kommer (om tidplanen stämmer) Mac OS X 10.6 – Snow Leopard. I och med det borde det även finnas SDK på Mac för att koda för OpenCL, vilket verkar vara mindre yxigt och primitivt än CUDA. Återstår dock att se om det är så, när 10.6 väl dyker upp.

För den som vill testa CUDA har Raymond Tay som postade beskrivningen av installationen även postat en bra lista med CUDA-resurser. Om du testar CUDA och hackar några spännande algoritmer får du väldigt gärna posta kommentarer.

PS: En sak jag inte gillar med min nya Mac är att tangenterna skramlar. Speciellt mellanslagstangenten låter klonk modell en gammal Apple II. Men annars är den riktigt stajlish.

Identifiering av dokument genom att scanning

March 13th, 2009

Professor Ed Felten och hans team av forskare har precis presenterat en metod att identifiera fysiska dokument. Tekniken de använder är att helt enkelt scanna dokumenten med en vanlig scanner och detektera papprets struktur. Forskarna skriver:


This paper presents a novel technique for authenticating physical documents based on random, naturally occurring imperfections in paper texture. We introduce a new method for measuring the three-dimensional surface of a page using only a commodity scanner and without modifying the document in any way. From this physical feature, we generate a concise fingerprint that uniquely identifies the document.

Our technique is secure against counterfeiting and robust to harsh handling; it can be used even before any content is printed on a page. It has a wide range of applications, including detecting forged currency and tickets, authenticating passports, and halting counterfeit goods. Document identification could also be applied maliciously to de-anonymize printed surveys and to compromise the secrecy of paper ballots.

Ed Felten har lagt upp en bild på strukturen i ett papper sett i ett mikroskop:

Papprets struktur.

Det är två saker som jag tycker är intressanta med detta. För det första att fysiska papper skiljer sig strukturmässigt så mycket från ark till ark. Det andra är att en vanlig scanner kan användas för att detektera denna struktur. Ed Felten visar hur scannern tolkar papprets struktur med följande bild:

Struktur sedd med scanner.