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 1222
Krypto » Kryptoblog

Posts Tagged ‘Krypto’

Ny attack på AES

May 24th, 2009

På Eurocrypt presenterades tydligen ett arbete av Alex Biryukov, Dmitry Khovratovich och Ivica Nikoli´c som visar på en ny attack mot AES-256. Deras presentation AES-256 Is Not Ideal ser ut att visa att med kopplade nycklar (related keys) går det att urskilja en sekvens genererad med AES från en slumpmässig sekvens.

Jag begriper för lite av den kortfattade presentationen för att avgöra hur mycket bättre deras resultat är en den bästa kända attacken med 26 related keys, 2**114 data och 2**173 time. Enligt en kommentar på Cryptography-listan hävdade författarna vid sin presentation att det nu finns praktisk möjlighet att bryta hashfunktioner byggda på round-funktionen i AES. Detta gör resultatet intressant för den pågående SHA-3-tävlingen då flera av kandidaterna lånar delar av eller hela round-funktionen.

Författarnas artikel om sin nya attack är tydligen godkänd för CRYPTO 2009, så om inte förr så vet vi mer i slutet av Augusti.

En krypto-optimeringslista

May 3rd, 2009

På Google finns det sedan ett tag tillbaka en Google-grupp för krypto-optimering. Gruppen är inte speciellt aktiv. Men några av de postningar som kommit är klart intressanta för den som försöker vrida ur maximal prestanda ur en kryptoimplementation.

Trolig attack på SHA-1

May 3rd, 2009

FredrikL tipsade om att det på förra veckans Eurocypt 2009s rump session presenterats vad som verkar vara en ny attack på hashfunktionen SHA-1.

Den nya attacken presenterad av Cameron McDonald, Philip Hawkes och Josef Pieprzyk har en komplexitet på 2**52 (operationer). Som forskarna påpekar är detta en stor förbättring gentemot tidigare bästa resultat, 2**63. Jämför man exempelvis med de DES-knäckare (ex COPACOBANA som byggts för att klara DES komplexitet på 2**56 är detta i samma härad och attacker är för den som har budget och tillräcklig vilja/behov möjliga att genomföra.

COPACOBANA-prototyp med FPGAer.
COPACOBANA-prototyp med FPGAer.

Det finns ännu ingen riktig artikel publicerad så det går inte att verifiera resultatet. Vidare finns det ingen egentlig skala, dvs 2**52 av vad behöver man genomföra för att knäcka SHA-1. Dock är forskarna bakom kända som seriösa forskare som tidigare publicerat ett antal artiklar och bidrag till fältet.

Om resultatet visar sig stämma är det ett signifikant resultat. För vissa typer av applikationer av SHA-1, exempelvis certifikat (beroende på hur de beräknas) skulle attacken göra det möjligt att generera falska certifikat. (Enl uppgift sätter Verisign serienumret helt slumpmässigt vilket gör det klart svårare att generera ett falskt certifikat.)

Om det inte sagts tidigare är det hög tid att (iaf för vissa användningar) migrera bort från SHA-1 och det presenterade resultatet understrycker även vikten av att NISTs SHA-3 tävling leder till minst en (den NIST antar) familj av nya hashfunktioner.

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.

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.

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.

Första SHA-3-konferensen genomförd

February 28th, 2009

I dag är sista dagen på SHA-3-konferensen som NIST anordnar. Än så länge har det inte dykt upp några fantastiska nyheter, och NIST har inte trots att det tidigare utlovats lagt upp sina presentationer. Dock finns ett stort antal presentationer på konferensen sida om de olika kandidaterna.

Förväntningarna från konferensen är att det skall trilla ut 10 till 15-16 kandidater (Ron Rivest har föreslagit 16 kandidater där två tas ut genom ett wildcard-system) utifrån det 50-tal kandidater som NIST fick in och accepterade vid tävlingens start. Förhoppningsvis kommer information om vilka kandidater som gått vidare inom några få dagar.