A MADRYGA (a szerző, WE Madryga tiszteletére) egy blokk titkosítási algoritmus, amelyet V. E. Madriga hozott létre 1984-ben.
Ezt az algoritmust úgy tervezték, hogy megkönnyítse és hatékony legyen a titkosítás szoftveren belüli megvalósítása. Az algoritmus minden műveletet bájton hajt végre.
Az algoritmus megtervezésekor a szerző a következő problémákat oldotta meg:
A DES algoritmus teljesítette az első kilenc követelményt, de az utolsó három új lett. Lehetőséget adnak ennek az algoritmusnak a szoftveres megvalósításra.
A Madryga két egymásba ágyazott hurokból áll. A külső ciklus nyolcszor ismétlődik (de ez a szám növelhető a biztonság növelése érdekében), és tartalmazza a belső ciklus egyszerű szövegre való alkalmazását. A belső ciklus a nyílt szöveget titkosított szöveggé alakítja, megismétlve a nyílt szöveg minden 8 bites blokkjára (byte-jára). Ezért az algoritmus a teljes szöveget nyolcszor egymás után feldolgozza.
A belső hurok iterációja egy 3 bájtos adatablakon működik, amelyet munkakeretnek neveznek. Ez az ablak iterációnként egy bájttal eltolódik. A munkakeret első két bájtja változó számú pozícióval van elforgatva, az utolsó bájt pedig néhány kulcsbittel XOR -re kerül. A munkakeret előrehaladtával az összes bájt egymás után „forgatásra kerül”, és a kulcs egyes részeivel XOR-re kerül. Az egymást követő forgatások keverik a korábbi XOR-ok és forgatások eredményeit, és az XOR eredménye befolyásolja a forgatást. Ez visszafordíthatóvá teszi a folyamatot.
Mivel minden adatbájt igen bájtot érint tőle balra és egy bájtot jobbra, nyolc lépés után a titkosított szöveg minden bájtja 16 bájttól függ a bal és nyolc bájttól a jobb oldalon.
A titkosítás során a belső ciklus minden egyes művelete a műveleti keretet az utolsó előtti szövegbájtra állítja, és az utolsótól balra lévő harmadik bájtig ciklikusan. A teljes kulcsot először egy véletlenszerű konstanssal XOR-ezik, majd 3 bittel balra forgatják. A munkakeret alsó bájtjának alsó három bitje megmarad, és meghatározza a maradék két bájt elforgatását. A munkakeret alsó bájtja ezután XOR-re kerül a kulcs alacsony bájtjával. Ezután a két magas bájt egyesítése változó számú bittel (0-tól 7-ig) ciklikusan balra tolódik. Végül a munkakeret egy bájttal jobbra tolódik, és az egész folyamat megismétlődik.
A véletlenszerű állandó jelentése az, hogy a kulcsot pszeudo-véletlen sorozattá alakítja. Az állandó hosszának meg kell egyeznie a kulcs hosszával. Az adatcsere során az előfizetőknek azonos hosszúságú konstansokat kell használniuk. 64 bites kulcs esetén a Madriga a 0x0f1e2d3c4b5a6978 konstanst ajánlja.
A visszafejtéskor a folyamat megfordul. A belső ciklus minden iterációja során a munkakeret a rejtjelezett szöveg utolsó bájtjának bal oldali harmadára van beállítva, és visszalép a titkosított szöveg utolsó bájtjától két bájttal balra lévő bájtra. A kulcsot és a titkosított szöveg két bájtját is jobbra forgatjuk a folyamat során, és az XOR-t a forgatások előtt hajtjuk végre.
A Queenslandi Műszaki Egyetem kutatói a Madrygát és néhány más blokk-rejtjelet vizsgáltak. Azt találták, hogy ebben az algoritmusban nincs elárasztási hatás a nyílt szöveg titkosított szöveggé konvertálására. Ezenkívül sok rejtjelezett szövegben az egyesek százaléka magasabb volt, mint a nullák százaléka.
Eli Biham az algoritmus felületes megismerésével a következő következtetésekre jutott: