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
MOS6502 » Kryptoblog

Posts Tagged ‘MOS6502’

AES-implementationer för C64

August 30th, 2008

Daniel Kahlin heter en kreativ person som kodar algoritmer för 6502-processorn och gamla brödburken C64.

Daniel Kahlin

Flera av algoritmerna Daniel implementerat är relaterade till säkerhet. Bland annat har han som en del i ett antal Crack Me!tävlingar implementerat AES128 i assemblerkod för 6502 med olika kryptomoder. Electronic CodeBook Mode (ECB-mod) och Cipher Feedback Mode (CFB-mod).

Källkoden för implementationerna finns på sidorna och är lättläst och snygg. En intressant detalj är att Daniels kod räknar fram S-boxen samt och den tabell som används för att göra GF-multiplikationen i MixColumns-steget av AES.

Att döma av diskussionen kopplad till den utmaning där ECB-mod användes utnyttjade Ymgve Google för att söka på innehållet i S-boxen och den vägen identifiera AES. Ett snygg trick som visar att den som utför attacken inte alltid tar den väg man tror.

Ett annat program gör statistisk analys för att attackera enklare skiffer på C64. Imponerande att få till det på burken med dess beräkningar.

Daniel har även hackat en del andra fräcka program, bla en tracker till VIC-20 kallad VIC-TRACKER. Eftersom jag inte har någon gammal VIC-20, och är rätt kass på att använda trackers vet jag inte hur bra den är. Men bilden på trackerns sida är helt fantastisk:

VIC-TRACKER 2.0
Klockren annons (ett montage) från 80-talets början. Hela familjen samlas i värmen från sin fantastiska hemdator. Mycket nostalgi blir det.

MOS6502 – En Pythonbaserad emulator

August 29th, 2008

Jag har precis lagt upp en sida med mitt sommarhack MOS6502. MOS6502 är en enkel, objektorienterad emulator av den gamla processorn MOS 6502 skriven i Python.

MOS 6502

Processormodelln inkluderar i dag alla API-synliga register, flaggor och pekare. Dock finns det ingen egentlig funktionalitet för stack och interrupt. Vidare är inte de mer ortodoxa instruktionspekar, och adressberäkningarna i MOS 6502 med.

Däremot finns det stöd för att räkna cykler och instruktioner samt stega processorn en instruktion i taget. Vidare kan processorn dumpa valfri del av sitt minne. Tanken är att detta skall underlätta profilering och debuggning av assemblerprogram.

MOS6502 klarar i dagsläget av att exekvera en delmängd av alla instruktioner, och av dessa inte alla adesseringsmoder. Dock klarar den i alla fall av att köra en implementation av PRNG-delen av strömkryptot RC4:

js@sotis:>time ./rc4_MOS6502.py
Key byte 0: 2
Key byte 100000: 34
Key byte 200000: 27
Key byte 300000: ba
Key byte 400000: 56
Key byte 500000: ac
Key byte 600000: b
Key byte 700000: 9c
Key byte 800000: 6b
Key byte 900000: 20
Cycles executed: 80000000
i_ptr = 40
j_ptr = 81
acc_reg = 8a
x_reg = 8a
y_reg = 8e
carry = 0
95.658u 0.103s 1:35.97 99.7%0+0k 0+16io 0pf+0w

Körningen ovan är från ett exempelprogram som kör PRNG-delen av RC4 en miljon gånger. Assemblerkoden (som INTE är optimerad) tar 80 cykler per varv. Som synes tar körningen nästan 100 sekunder på min MacBook. Dvs jag får nästan 1 MHz(!) i klockfrekvens och drygt 10 kByte/s i kryptoprestanda. Inte snabbt, men samtidigt inte illa av en emulerad processor som körs i en emulerad miljö (Python VM).

RC4-exemplet finns med i den release som finns att tanka ner på emulatorns sida. Jag tar väldigt gärna emot kommentarer, buggrapporter, patchar och tips för att utveckla emulatorn vidare.