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’

SMS4-kryptot implementerat i ett kalkylark

February 25th, 2009

James Hughes har implementerat kryptot SMS4, vilket används i den Kinesiska standarden för WLAN-säkerhet kallad WAPI. Sättet James har implementerat kryptot är dock en smula ovanligt, han har nämligen implementerat SMS4 i ett kalkylark! James skriver:


Building a reference implementation of a cipher can be an invaluable aid to writing code. Building a cipher in a spreadsheet, while some may suggest is strange, is a valid way to effectively describe a cipher in a visual sense. This has been done before with The Illustrated DES Spreadsheet, it has been done again.

With the help of a Chinese document and an english translation by Whitfield Diffie and George Ledin, I was able to create a spreadsheet that demonstrates the SMS4 algorithm.

Implementationen finns både för Apples Numbers och i Excelformat.

Jag testade att ladda in och köra sms4.xls i NeoOffice 2.2.5 (NeoOffice är en port av OpenOffice.org för Mac) och det fungerade alldeles utmärkt. Ändrade jag nyckel eller indata utördes (vad jag antar vara) SMS4-beräkningarna.

... Och jag som tyckte att implementera krypton i Python var lite udda… 😉

Svagheter i SHA-3-implementationer

February 22nd, 2009

Fortify har postat på sin blogg om en undersökning av säkerheten i referensimplementationerna av SHA-3-kandidaterna.

Fortify har använt sitt verktyg Fortify SCA, en linter speciellt utvecklad för att hitta kodmässiga svagheter som buffertöverskrivningar etc. (Det hade antagligen gått bra att använda splint eller liknande säkerhetsinriktade lintverktyg för att hitta svagheterna.)

Vad Fortify upptäckt är att ett antal av SHA-3-kandidaterna har mer eller mindre allvarliga svagheter i sin implementation, mer specifikt i Blender, Crunch, FSB, MD6, Vortex. Några typiska fel är att koden tillåter buffertöverskrivningar, att den läser utanför gränserna i en buffert (indexeringsfel) och minnesläckage. Som ett exempel tar Fortify upp MD6:


One of the projects with buffer issues was MD6, the implementation provided Professor Ron Rivest and his team. All of the problems came back to the hashval field of the md6_state struct:

unsigned char hashval[ (md6_c/2)*(md6_w/8) ];

The buffer size is determined by two constants:

#define w md6_w /* # bits in a word (64) */ #define c md6_c /* # words in compression output (16) */

At several points, this buffer is read or written to using a different bound:

if (z==1) /* save final chaining value in st->hashval */ { memcpy( st->hashval, C, md6_c*(w/8) ); return MD6_SUCCESS; }

Further analysis showed that ANSI standard layout rules would make incorrect behavior unlikely, but other compilers may have allowed it to be exploited. The MD6 team has doubled the size of the vulnerable buffer, which eliminated the risk. In this case, Fortify SCA found an issue that would have been difficult to catch otherwise.

The other buffer overflow was found in the Blender implementation, from Dr. Colin Bradbury. This issue was a classic typo:

DataLength sourceDataLength2[3];// high order parts of data length ... if (ss.sourceDataLength < (bcount | databitlen)) // overflow if (++ss.sourceDataLength2[0] 0) // increment higher order count if (++ss.sourceDataLength2[1] 0) // and the next higher order ++ss.sourceDataLength2[3]; // and the next one, etc.

The developer simply mistyped, using 3 instead of 2 for the array access. This issue was probably not caught because it would not be exposed without a very large input. The other issues we found were memory leaks and null dereferences from memory allocation.

Att den här typen av programmeringsfel kan få betydelse för SHA-3-tävlingen är uppenbart, och illustreras tydligt med MD6. Dess internbuffert behövde dubbleras i storlek. Detta gör att implementationer av MD6 för inbyggda system kommer att kräva mer minnesresurser än vad tidigare angetts. En av styrkorna med MD6 enligt dess skapare är att den skalar extremt bra ner till mycket små implementationer, och det argumentet fick sig nu nog en liten törn.

Ett annat skäl till varför jag tycker att Fortifys undersökning är bra är att referensimplementationer ofta används i applikationer. Antingen direkt eller som bas (funktionell referens) för en ny implementation. Därmed riskerar svagheter i referensimplementationen att sprida sig. Fortify tar själva upp ett exempel från en svaghet i referensimplementationen av RSA som lett till buggar i olika SSL-implementationer.

I fallet SHA-3, med dess fokus på prestanda, vilket gjort att skaparna av kandidater slitit och sliter med att optimera ut varenda cykel de kan ur sin kod, tror jag att referensimplementationer kommer att få stor användning i applikationskod.

AIS 31 РEn tysk standard f̦r slumptalsgeneratorer

February 20th, 2009

Ibland springer man på saker man inte alls kände till.

Tydligen finns det en tysk standard för slumptalsgeneratorer kallas AIS 31. Tydligen är det en myndighet/organisation kallad Bundesamt für Sicherheit in der Informationstechnik (BSI) som specat AIS 31. Det som är intressant är att det för AIS 31 skett en del utveckling av (i mitt tycke) bra metoder för att testa och utvärdera generatorerna (även i system). Det finns en bra presentation från BSI som förklarar AIS 31 och hur de utvärderar slumptalsgeneratorer (Powerpoint-presentation).

Infineon har publicerat en artikel om hur de designat AIS 31-generatorer som är testbara generatorer och går att implementera på chip.

Den här (väldigt tyska) webbsidan innehåller en hel del information om hemmasnickrade slumptalsgeneratorer, varav en del möter AIS 3. Sättet att uppnå NISTs FIPS 140-klassificering gör att maskinerna ser lite hemliga ut:

Ett PCI-kort med hemmabyggd RNG.

Hur jag sprang på AIS 31? ZK Crypt, en av kandidaterna till SHA-3-tävlingen är skapad av ett företag kallad Fortress GB, och dom har tydligen även AIS 31-produkter.

RC4 i programspråket Lua

January 30th, 2009

Tyvärr har jag just nu väldigt lite tid, lust och ork för bloggen. Har dessutom legat sjuk i några dagar.

Det enda jag orkat med är att leka lite med programspråket Lua. Och vad kan vara bättre som kodexempel när man prövar ett nytt språk är strömkryptor RC4?

Så nu finns det en väldigt enkel och ful implementation av RC4 i Lua. Bara att tanka ner från sidan med filer för nedladdning för den som är nyfiken och vill se Lua-fulkod.

Eftersom jag kodar en hel del Python kan jag kanske våga mig på några korta jämförelser mellan Lua och Python:

  • Lua är litet och enkelt. Det gÃ¥r snabbt att greppa grunderna i sprÃ¥ket. Ungefär som Python.
  • Att exekvera Lua-program verkar gÃ¥ fort. Bra prestanda helt enkelt.
  • Kompilering och installation av Lua gick väldigt smidigt. Inga varningar och bra tester för att kontrollera installationen.
  • Debugutskrifter frÃ¥n VM:en när den stöter pÃ¥ fel är inte speciellt tydliga. Python kan dränka dig i kärlek och utskrifter, men det brukar alltid gÃ¥ att enkelt se var, vad och varför det är fel. Lua ger ibland det nÃ¥got kortfattade “?” som sammanfattning.
  • Lua har inte alls samma mängd med bibliotek med i distributionen som Python. Och de som finns är inte lika välmatade och inte minst lika väldokumenterade som Pythons standardbibliotek.
  • Lua räknar index frÃ¥n ett inte noll. Dock kan man räkna frÃ¥n noll, men tydligen bara ibland. Har man vant sig att allt börjar frÃ¥n noll (typ C, Verilog, Python etc) och dessutom algoritmer är byggda utifrÃ¥n indexeringar frÃ¥n noll till XYZ blir det lite trixigt att fÃ¥ till det.

(Gissar att jag nu kommer att fÃ¥ massor med ilskna kommentater om Lua…)

Ny version av Keccak

January 26th, 2009

Det finns nu en ny version av SHA-3-kandidaten Keccak.

Version 1.1 inkluderar ny användningsmoder och ny, mer optimerad SW-implementation. Efter att jag släppte min artikel om implementation av Keccak i FPGA har jag haft en del kontakter med skaparna av Keccak och den nya versionen av Keccak inkluderar även HW-implementation som fungerar mycket bättre.

Enigma i Flash

January 21st, 2009

MagnusL tipsade (för ett tag sedan) om en fin Enigma-simulator i Flash. Det som gör den här simulatorn bra är att den så tydligt visar den interna funktionen.

En annan fin Enigma-simulator är den som Terry Long skrivit. Den simulatorn är dock bara för Mac OS X.

Bra presentation om säkerheten i GSM och UMTS

January 19th, 2009

Sprang på en några år gammal men bra presentation om säkerheten i 2G- och 3G-mobilsystem.

Presentationen Design and Analysis of Cryptographic Algorithms for Mobile Communication Systems av Henri Gilbert från Orange Labs tar bland annat upp säkerheten på systemnivå såväl som algoritmer som används. Presentationen ger även en kort intro till Security Algorithms Group of Experts (SAGE), gruppen inom ETSI som arbetar med att specificera de algoritmer som används.

Om du är nyfiken på säkerheten i mobilsystem kan den här presentationen vara värd att bläddra igenom.

OpenPGP SDK 0.9 släppt

January 18th, 2009

Ben Laurie och Rachel Williams har öppnat upp en Tracwebb för deras gemensamma projet SDK, en BSD-licensierad implementation av RFC 2440.

Enligt OpenPGP SDKs webbplats bygger SDK:n på Ubuntu och Fedora samt FreeBSD och Mac OS X.

rule30 IP-core släppt

January 12th, 2009

I dag släppte vi på InformAsic den cellautomatbaserade slumptalsgenerator byggd på rule30 jag byggt som öppen IP-core. Det tog lite längre tid att få ut den än jag hade hoppats, men nu blev det en bra start på nya arbetsåret.

För den som vill titta på och använda vår IP-core finns den här. Koden är BSD licensierad. Skriven i Verilog (naturligtvis). Förhoppningsvis kommer den till nytta för att exempelvis driva FPGA-baserad test med kontrollerad, slumpmässiga indata. Det är så jag ex använder den för att testa kryptoimplementationer.

Glädjande nog fick vi en del uppmärksamhet för släppet, bland annat i Elektroniktidningen och Elektronik i Norden. Ett litet förtydligande angående Opencores och Sourceforge är att vi på InformAsic tycker att dessa är mycket bra initiativ.

Dock är Opencores en aning (lite väl) knölig att använda, både för utvecklare och användare av cores. Tittar man på många av de (ex Rudolf Usselman) som var med att starta Opencores bor deras cores i dag på andra platser även om det finns information om deras core på Opencores. En sådan lösning skulle säkert kunna fungera för oss också. Vi får se hur vi gör nästa gång, speciellt när vi snart släpper nästa öppna IP-core.

Återanvändning av AES för SHA-3

January 6th, 2009

Jag har ägnat nåra timmar åt att gå igenom alla specifikationer för de olika SHA-3-kandidaterna. En sak som blev ganska uppenbar är vilken framgång och vilket inflytande AES som krypto och designstrategin i den bakomliggande algoritmen Rijndael har fått.

Av de 55 kandidater som finns listade på ECRYPTs SHA-3-Zoo återanvänder inte mindre än 21 kandidater koncept, komponenter eller tom hela roundfunktionen från AES och Rijndael. Den lista jag slängt ihop ser ut som följer (det blir engelska nu då jag även klippt citat:

  • Abacus: MDS from AES.

  • Arirang: S-box from AES. MDS from AES for some versions of the hash.

  • Aurora: ShiftRows from AES.

  • Cheeta: “Inspired by AES

  • Echo: Stated goal to reuse as much of AES as possible (hence the
    name). Complete AES round reused.

  • Ecoh: AES “key wrap” reused.

  • Gr0stl. S-box and diffusion directly from AES.

  • JH: Differential propagation methodology from AES.

  • LANE: SubBytes, ShiftRows and MixColumns reused from AES.

  • Lesamnta: Reuse of the AES round as function F.

  • Luffa: “Based on Rijndael-like transform”

  • NaSHA: “Improved AES S-box.”

  • SANDstorm: AES S-box,

  • Sarmal: “An AES (or Whirlpool)-like nonlinear subround function g is used.”

  • SHAMATA: “uses one of the AES primitive functions MixColumns to incorporate the message into the internal state and a modified version of the AES round function to mix the internal state.”

  • SHAvite-3: “Iterates a round function based on the AES round.”

  • StreamHash: S-box based on AES S-box.

  • Tangle: Reuse of AES S-box.

  • Twister: MDS concept from Rijndael and S-box from AES. ShiftRows from AES.

  • Vortex: Based on Rijndael rounds.

  • Waterfall: Rijndael S-box.

Jag är inte helt säker på om detta är bra eller inte.

Å ena sidan är AES och dess ingående komponenter några av de mest välanalyserade som går att uppbringa. Detta faktum är något flera av kandidaternas skapare tar upp i sin motivering av sin kandidaters säkerhet. Implementationsmässigt är det dessutom bättre om samma programkod (funktioner) går att använda till flera saker. Speciellt för inbyggda system med hårda krav på liten kodstorlek är detta naturligtvis eftersträvansvärt.

Samtidigt kan jag inte släppa känslan av att vi riskerar att hamna i en monokultur – att säkerheten i alla dess olika delar (konfidentialitet, autenticitet, integritet) bygger pÃ¥ en eller ett fÃ¥tal algoritmer eller komponenter. Vad händer om S-boxen i AES faktiskt visar sig väldigt svag?

Vidare var den uttalande tanken från NIST att SHA-3-tävlingen skulle stimulera till nytänkande och uppmuntra till att hitta nya koncept för att bygga hashfunktioner. Att det sker ett rejält brott mot Merkle-Damgård är uppenbart, men nu är det istället AES och Rijndael. Är det bra eller dåligt?

Det verkar dock som de flesta verkligen försökt att tänka i nya banor. I min snabbläsning hittade jag för övrigt att tre kandidater (Abacus, Keccak och Luffa) bygger pÃ¥ de nya (relativt färska 😉 svampfunktionerna. Dessutom sÃ¥g jag bara tre kandidater (Chi, DynamicSHA, DynamicSHA2) är direkta utökningar av SHA-1 och SHA-2.