Lenne egy feladat, amiben AVR-rel kellene megoldani az RSA titkosítást, utánna is néztem már, hogy miből is áll ez, de kiváncsi lennék, hogy valaki foglalkozott-e már ezzel AVR szinten?
Alapból már ott kezdődik a "gond", hogy kell 2db 10számjegyű prímszámot találni mindig, majd ezeket össze kell szorozni, de íme inkább képlettel, leírással:
Generálni kell két nagy prímet:
p1 és p2 (titkos)
Fontos, hogy a prímek tényleg nagy számok legyenek, általában kb. 100 decimális számjegyből állnak. Annak eldöntése, hogy a generált számok valóban prímek-e, pontosan ugyanolyan nehéz feladat, mint az RSA titkosítás brute force-szal való feltörése, mert több, mint száz jegyű szám faktorizálása nagyon sokáig tart.
Ezután elő kell állítani az
n = p1 . p2 (nyilvános)
illetve az
m = (p1 - 1) . (p2 - 1)
számokat.
Generálni kell egy véletlen
e (nyilvános)
számot úgy, hogy m és e relatív prímek legyenek.
Véletlen szám előállítására azt gondoltam ki, hogy egy AD-bemenetre a tápot kötöm s az itt vett zajból gfenerálnám.
Annak eldöntése, hogy az m és az imént generált e szám relatív prímek-e, egyszerű feladat: a legnagyobb közös osztó az euklideszi algoritmus segítségével O(log(n)) lépésben meghatározható, s ha az 1, akkor relatív prímek.
Meg kell határozni az e szám multiplikatív inverzét modulo m:
d = e-1 (mod m) (titkos)
azaz
e . d = 1 (mod m)
Az e szám inverzét, azaz a d számot az inverz euklideszi algoritmus segítségével határozzuk meg.
Az információ, egy x szám (x < n) titkosítása ezután a következőképpen történik:
y := xe (mod n)
azaz a nagy számok hatványozása algoritmus segítségével.
Nagyjábol ennyi lenne az RSA
Menni fog ez AVR-rel?
