Etikettarkiv: Bentfunktioner

Konvertera sbox till hårdvara

Sitter och tittar på Bentfunktioner. Dessa används i vissa fall för att skapa ersättningstabeller (sbox) i krypton. Ett krypto som använder detta är det symmetriska blockkryptot CAST.

För att analysera hur en sbox beter sig bitmässigt kan det vara intressant att omvandla tabellen till en uppsättning ANF-nät. Detta är nätlistor med logiska AND-OR-operationer med tabellens inoperands bitar som invärden. En nätlista skapas för varje bit ut från tabellen. Och som tur är det har Bo Zhu vid Shanghais universitet hackat ihop ett verktyg som gör detta.

Sbox2ANF är ett GPL-licensierat Pythonprogram som kan ta en Sbox-tabell och generera nätlistor för alla utbitar:
The sample sbox
y = sbox(x) = (0, 2, 4, 6, 7, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15)
has been translated to ANF Boolean functions

y0 = x2 + x0x2 + x1x2 + x0x1x2 + x3 + x2x3 + x0x2x3 + x1x2x3 + x0x1x2x3
y1 = x0 + x2 + x0x2 + x1x2 + x0x1x2 + x2x3 + x0x2x3 + x1x2x3 + x0x1x2x3
y2 = x1 + x2 + x0x2 + x1x2 + x0x1x2 + x2x3 + x0x2x3 + x1x2x3 + x0x1x2x3
y3 = x0x2 + x1x2 + x0x1x2 + x2x3 + x0x2x3 + x1x2x3 + x0x1x2x3

Eftersom det är ett Pythonprogram går det naturligtvis även att importera in och använda som byggblock i sina egna program. Väldigt praktiskt, exempelvis som i mitt fall där jag bygger generatorer för hårdvarubeskrivningar av krypton och vill kunna välja hur en sbox ska implementeras. Antingen som en tabell som kräver ROM-minne, eller som en uppsättning logiska grindar.