A kriptográfiában az RC5 egy egyszerű szimmetrikus kulcsú blokkos titkosítás. Az 1994-ben Ronald Rivest által tervezett RC5 egy paraméterezett algoritmus, amely változó blokkmérettel, változó kulcsmérettel és változó számú körrel rendelkezik. Az "RC" a "Rivest Cipher", vagy más néven "Ron kódja" rövidítése.
A különböző biztonsági és hatékonysági szintek biztosítása érdekében az RC5 változó blokkmérettel (32, 64 vagy 128 bit), változó kulcsmérettel (0-2040 bit) és változó körök számával (0-255) rendelkezik. Az eredetileg javasolt paraméterek 64 bites blokkméret, 128 bites kulcs és 12 forduló volt.
Általános felépítés és működés
Az RC5 egyik fő jellemzője az adatfüggő forgatások használata; az RC5 egyik célja a blokkos kódolás műveleteinek mint kriptográfiai primitívnek a tanulmányozása és értékelése volt. Az RC5 számos moduláris összeadásból és eXclusive OR (Xor)-ból is áll. Az algoritmus általános szerkezete egy Feistel-szerű hálózat. A titkosítási és visszafejtési rutinok néhány sornyi kódban megadhatók. A kulcs ütemezése azonban bonyolultabb, a kulcsot egy lényegében egyirányú függvény segítségével bővíti, az e és az aranymetszés bináris kiterjesztését is felhasználva, mint a "semmit a kabátujjamban számok" forrásait. Az algoritmus egyszerűsége az adatfüggő forgatások újdonságával együtt vonzóvá tette az RC5-öt a kriptoanalitikusok számára.
Paraméterek és hatásuk
- Szóbőség (w): az RC5 belső szavának mérete (például 16, 32 vagy 64 bit). A blokkméret kétszerese a szóbőségnek: 2w (például 32, 64 vagy 128 bit).
- Körök száma (r): a titkosítás iterációinak száma; javasolt érték az eredeti specifikációban r = 12 (w = 32) volt, de ez növelhető a biztonság érdekében.
- Kulcshossz (b): a felhasználó által választott titkos kulcs hossza bájtokban, elméletileg 0-tól akár több száz bitig (a gyakorlatban korlátozott). Hosszabb kulcs nagyobb ellenállást ad a feltöréssel szemben.
Titkosítási és visszafejtési lépések (összefoglalás)
Egyszerűsítve a titkosítás menete (w bites szóokra bontva, A és B a blokk két fele):
- Inicializálás: A = A + S0; B = B + S1 (S tömb a kulcsütemezés eredménye)
- Minden kör i = 1..r: A = ((A xor B) <<< B) + S[2*i]; B = ((B xor A) <<< A) + S[2*i+1].
A visszafejtés a fenti lépések fordított sorrendben, fordított műveletekkel történik: először kivonás S-ből, majd jobbra való elforgatás és xor az ellenkező sorrendben.
Kulcsütemezés (Key schedule)
Az RC5 kulcsütemezése a titkosító kulcsból bővíti ki a S nevű segédtömböt, amely 2(r+1) w-bites szót tartalmaz. Az ütemezés fő lépései:
- A felhasználói kulcs bájtjai átrendeződnek és L tömbbé (w-bites szavak) alakítódnak.
- Az S tömb inicializálása két konstanssal, általában P és Q, amelyek az e és az aranymetszés irracionális számok bináris kiterjesztéséből származó konstansok (a konkrét bitfüggő konstansok a w-től függnek).
- Ezután S és L keverése következik több iteráción keresztül (a specifikációban javasolt 3 * max(t, c) lépés, ahol t = 2(r+1), c = kulcstömb hossza), amely során moduláris összeadások és adatfüggő elforgatások történnek. Ennek az a célja, hogy a kulcs minden bitje szétszóródjon az S tömbbe.
Előnyök és hátrányok
- Előnyök:
- Paraméterezhetőség: rugalmasan választhatók w, r és b értékei a teljesítmény/biztonság kompromisszumának megfelelően.
- Egyszerű szerkezet és rövid implementációs kód lehetséges.
- Adatfüggő forgatások miatt a klasszikus lineáris/differenciális kriptoanalízis nehezebb lehet.
- Gyors futás a processzoroknál, ahol natív forgató (rotate) utasítással rendelkezünk.
- Hátrányok:
- Néhány paraméterkombinációnál (különösen kevesebb kör esetén) léteznek hatékony kriptoanalitikus módszerek, ezért fontos megfelelő paraméterek használata.
- Az adatfüggő műveletek óvatos implementációt igényelnek oldalsáv-kiszivárgások (side-channel) elkerülésére, különösen beágyazott rendszerekben.
- Korábbi időszakban az RC5 az RSA Data Security által kezelt jogi és szabadalmi kérdésekhez kötődött, ami bizonyos felhasználási korlátokkal járt (a szabadalmi helyzet idővel változott).
Biztonság és alkalmazások
Az RC5 biztonsága nagymértékben függ a kiválasztott paraméterektől. Általános irányelv, hogy növelve a körök számát és a kulcshosszt jelentősen nő a rezisztencia a nyerserővel (brute-force) és egyéb kriptoanalitikus támadásokkal szemben. Több kutatás foglalkozott az RC5 különböző, csökkentett körszámú változataival, és kimutatták, hogy egyes redukált változatok sebezhetők speciális támadásokkal szemben; ugyanakkor a megadott ajánlott paraméterek mellett az RC5 általánosan biztonságosnak tekinthető a széles körű alkalmazásokban.
Az RC5 inspirálta a későbbi algoritmusokat is (például az RC6, amelyet ugyanaz a tervezőcsapat javasolt és amely AES-jelölt volt). RC5 és leszármazottai főként szoftveres környezetben, illetve bizonyos protokollok belső blokkjaként kerültek alkalmazásra.
Gyakorlati megfontolások
Implementáláskor figyelembe veendő dolgok:
- Válasszunk elegendő számú kört és megfelelő kulcshosszt az elvárt biztonsági szinthez.
- Kerüljük a gyenge, rövid kulcsokat vagy alacsony körszámot produkáló konfigurációkat.
- Ügyeljünk arra, hogy az elforgatások és memóriahozzáférések oldalsáv-információt (időzítés, energiafogyasztás) ne szivárogtassanak.
- Ha hosszú távú kompatibilitás és széles körben elfogadott szabvány a cél, érdemes mérlegelni modernebb, szélesebb körben auditált algoritmusokat is.
Összefoglalva: az RC5 egy rugalmas, jól dokumentált és egyszerűen implementálható blokk-cipher, amely az adatfüggő forgatások alkalmazásával és parametrizálhatóságával fontos szerepet játszott a modern kriptográfia fejlődésében. Megfelelő paraméterek és gondos implementáció mellett máig használható megoldást kínál, bár a konkrét felhasználási cél és a mai biztonsági követelmények határozzák meg, hogy ez a legjobb választás-e egy adott alkalmazásban.