< Algoritmusok

AES

Szerző: Sallai András

Copyright © 2014, Sallai András

Szerkesztve: 2014, 2020

Licenc: CC BY-SA 4.0

Web: https://szit.hu

Az AES algoritmusról

Advanced Encryption Standard

Az AES szimmetrikus kulcsú titkosítás.

A U.S. National Institute of Standards and Technology által meghirdetett versenyre beküldött eljárás, 2001-ben.

A blokkméret szigorúan 128 bit, a kulcs pedig 128, 192, vagy 256 bit.

A titkosítás során a használt ciklusok:

10 ciklus 128 bites kulcs esetén

12 ciklus 192 bites kulcs esetén

14 ciklus 256 bites kulcs esetén

Lépések

A következő lépések keverve kerülnek alkalmazásra:

AddRoundKey - minden bájton bitenkénti XOR művelet

SubBytes - minden bájt helyettesítése egy helyettesítési tábla egy értékére

ShiftRows - soronként különböző mértékkel eltolás

MixColumns - minden oszlopot invertálható lineáris transzformáció szerint változtatunk

Lépések

kulcs előállítása - Rijndael-féle módszer

előkészítés

AddRoundKey

több ciklusban

SubBytes

ShiftRows

Mixcolumns

AddRoundKey

befejezés

SubBytes

ShiftRows

AddRoundKey

Oszlopkeverés Perl nyelven

#!/usr/bin/perl my @bOszlop = (); my @aOszlop = (0xd4, 0xbf, 0x5d, 0x30); @bOszlop[0] = &szoroz(0x2, @aOszlop[0]) ^ &szoroz(0x3, @aOszlop[1]) ^ &szoroz(0x1, @aOszlop[2]) ^ &szoroz(0x1, @aOszlop[3]); @bOszlop[1] = &szoroz(0x1, @aOszlop[0]) ^ &szoroz(0x2, @aOszlop[1]) ^ &szoroz(0x3, @aOszlop[2]) ^ &szoroz(0x1, @aOszlop[3]); @bOszlop[2] = &szoroz(0x1, @aOszlop[0]) ^ &szoroz(0x1, @aOszlop[1]) ^ &szoroz(0x2, @aOszlop[2]) ^ &szoroz(0x3, @aOszlop[3]); @bOszlop[3] = &szoroz(0x3, @aOszlop[0]) ^ &szoroz(0x1, @aOszlop[1]) ^ &szoroz(0x1, @aOszlop[2]) ^ &szoroz(0x2, @aOszlop[3]); foreach $hexSzam (@bOszlop) { printf("%02x\n", $hexSzam); } sub szoroz { $matrixElement = @_[0]; $szam = @_[1]; if($matrixElement eq 1) { return $szam; }elsif($matrixElement eq 2) { my $eltoltSzam = $szam << 1; if($eltoltSzam> 0xff) { $eltoltSzam = $eltoltSzam ^ 0x11b; } return $eltoltSzam; }elsif($matrixElement eq 3) { my $eltoltSzam = $szam << 1; if($eltoltSzam > 0xff) { $eltoltSzam = $eltoltSzam ^ 0x11b; } return $eltoltSzam ^ $szam; }else { print("Hiba! Rossz szorzó!\n"); } }