Sekureco kaj konfidenceco en komputila komunikado
Ni vidis, ke estus utile havi aron da unidirektaj funkcioj, tiel ke ĉiu homo povu havi sian. Ĉu ili ekzistas? Teoria pruvo estas malfacila, ĉar iu geniulo ja povus inventi novan kalkul-metodon, per kiu eblas inversigi funkcion, kiun oni antaŭe kredis unudirekta. Sed estas kelkaj matematikaj problemoj, kiuj ĉenerale estas konsiderataj kiel ege kompleksaj, kvankam la inversa problemo estas facile solvebla. Tia problemo estas la malkompono de grandaj nombroj al iliaj prim-faktoroj (faktorigo). La malo de tiu problemo estas la multipliko de tiuj faktoroj por retrovi la originan nombrojn, kaj multiplikado estas tre simpla tasko.
Laŭ la plej primitiva metodo por faktorigi iun nombron N necesus provi ĉiujn eblajn faktorojn malpli grandajn ol la radiko de N, dividante N per ili. Tiel oni nepre trovas unu faktoron kaj per divido reduktas la problemon al malpli grandaj nombroj. Kvankam la matematiko konas multajn metodojn por faciligi la faktorigon, la laboro necesa por faktorigo tamen restas senkompare pli granda ol tiu por la multiplikado.
La apuda programo (kondiĉo: via krozilo rulas Java-programojn) kapablas faktorigi entjerajn nombrojn. Tajpu entjeran (dekuman) nombron en la supran kampon kaj klavu "revenu" ("enigu") aŭ puŝu al "Faktorigu". Se vi havas tempon, provu 22222222223 aux 22222222223345678. Salomaa donas jenan ekzemplon: 32954765761773295963 . Tiu nombro havas 20 poziciojn kaj du 10-ciferajn faktorojn. (En eksperimento, komputilo kun procezila frekvenco de 2,6 GHz bezonis 4000 sekundojn, do iom pli ol horon, por faktorigi la nombron, laŭ tre simpla algoritmo.) |
La scio pri la primaj faktoroj de iu granda entjera nombro N (la "prima malkompono" N = p·q) do estas sekreto, kies solvo estas facile kontrolebla, ĉar la multiplikado de p kun q estas facila, kaj same la komparo de ĝia rezulto al N. Sed per malkaŝo de la faktoroj p kaj q la sekreto estus perfidita kaj perdita.
Same kiel ĉe la sekreto de Tartaglia ekzistas eblo pruvi la scion sen malkaŝi ĝin. Por tio utilas la "teoremo de Carmichael", kiu diras jenon:
Estu n = pq prima malkompono de n, cd mod (p-1)(q-1) = 1; tiam por ajna entjero a validas: |
(ac)d = acd = a (mod n) |
Trovi du tiajn nombrojn c kaj d ne estas malfacile, se oni scias la malkomponon p·q. Eblas uzi la potencigon per c kiel ĉifradon kaj la potencigon per d kiel malĉifradon. Tio estas la fama ĉifro RSA, nomita laŭ la aŭtoroj de jena artikolo:
Rivest, Shamir, Adleman: A method of obtaining digital signatures and public key cryptosystems. Comm. ACM 1978, 120–126. |
Kvankam la matematiko trovis multajn rimedojn por plirapidigi la faktorigon de entjeroj, ili ĝis nun ne serioze minacas la metodon RSA. Ĉar ekzistas nefinie (senfine) da primoj, eblas generi tiom da ŝlosiloj (ŝlosilaj paroj), kiom oni volas.
La metodo ja estas multe tro kompleksa por ruli ĝin mense aŭ surpapere, sed estas facile rulebla en komputiloj. Eĉ ico-karto kapablas ruli ĝin, kvankam ne kun tre alta rapido.
F. L. Bauer en sia libro "Kryptologie" prezentas jenan ekzemplon por malkompono kaj ŝlosiloj:
N = 2773 = 47 * 59 d = 157, e = 17 |
Ekzemplaj datenoj: Po du literoj estas koditaj en unu nombro (laŭ la kodo A=1, B=2, Z=26) kaj ĉifritaj per la ŝlosilo 17. Per la ŝlosilo 157 la mesaĝo estas malĉifrebla: |
1787 2003 2423 0596 0340 1684 0340 0508 2109 |
La longa eniga kampo (dua linio, sub la du malgrandaj kampoj) de la ĉi-supra apleto povas alpreni aŭ vicon da dekumaj nombroj (disigitaj per spacetoj) aŭ vicon da literoj (kodo ASCII). Indiku por N la valoron p·q kaj por "c/d" unu el la ŝlosiloj. La rezulto estas prezentata en tri formoj:
Signojn ne prezenteblajn anstataŭas strekoj ("_"). (Se via komputilo estas grafika, eblas marki datenojn el la ekzemplo per la muso kaj poste per "kopiado kaj enmetado" kopii en la (mal)ĉifrilon, prefere ol tajpe kopii ilin.) |
Vi povas kontroli la metodon ĉifrante per la ŝlosilo "17" (de Bauer) ajnan tekston, kopiante la (dekuman) rezulton en la enigan kampon kaj malĉifrante ĝin per la "sekreta" Bauer-ŝlosilo "157".
La ekzemplo ĉifris po du literojn en unu nombro, kio eblis pro la 26 literoj en la baza latina alfabeto kaj pro 26*26 = 676 < 2773. En la praktiko oni uzas multe pli grandan N kaj kodas pli ol du literojn en unu nombro. Tion oni faras ne nur pro ŝparemo. Kiu plia kialo ekzistas por kodi laŭeble grandajn blokojn da literoj en unu nombro?