You are on page 1of 19

Dr.

Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2


Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Predavanje 2
Testovi prostosti zasnovani na kongruencijama

Testiranje nekog broja na prostost može se smatrati jednim od osnovnih problema teorije brojeva,
koji nije efikasno izvodljiv polazeći samo od definicije prostog broja. Međutim, mnogi uvjeti koji
garantiraju prostost ili složenost nekog broja mogu se iskazati u vidu kongruencija, tako da se
kongruencije mogu koristiti za testiranje prostosti. Najneposrednija veza između kongruencija i
prostosti iskazana je kroz Wilsonovu teoremu, koja tvrdi da je broj prost ako i samo ako vrijedi
( − 1)! ≡ − 1 (mod ). Iskazano jezikom modularne aritmetike, ovaj uvjet možemo iskazati i u
obliku [( − 1)! = [ − 1 , što se dalje svodi na uvjet ∙ ∙…∙ − = − . Nažalost, ne
postoji nikakav način da se izraz s lijeve strane znaka jednakosti u prethodnom uvjetu izračuna bez
− množenja, tako da primjenom ove teoreme ne možemo dobiti postupak za ispitivanje da li je broj
prost ili nije koji bi bio efikasniji od “brutalnog” testiranja na prostost prema definiciji prostosti.

Mnogo efikasniji postupak testiranja prostosti može se izvesti iz male Fermatove teoreme. Naime,
prema ovoj teoremi, ukoliko je broj prost, za svaki broj za koji je NZD( , ) = 1 mora vrijediti da je
) = . Stoga, ukoliko je broj složen, tada je sigurno ) ≠ . Postupak sada teče
ovako. Biramo slučajan prirodan broj manji od . Uz pretpostavku da je zaista prost broj, uvjet <
garantira da sigurno vrijedi NZD( , ) = . Nakon toga, računamo ) , što je lako izračunati čak i
za veoma velike vrijednosti pogotovo uz pomoć računara). Dobijemo li rezultat različit od , broj
sigurno nije prost. Međutim, ukoliko je rezultat jednak , to još ne znači da je broj prost, jer mala
Fermatova teorema daje samo potreban, ali ne i dovoljan uvjet za prostost. U tom slučaju se kaže da je
pseudoprosti broj po bazi u nekim knjigama pojam pseudoprostosti se definira na nešto drugačije
načine, koji nisu uvijek posve ekvivalentni definiciji koja je data ovdje). Dakle, svi prosti brojevi su
ujedno i pseudoprosti po svakoj bazi, ali broj koji je pseudoprost po nekoj bazi ne mora biti prost. Na
primjer, broj 341 je pseudoprost po bazi 2, jer je ) = , što nije teško provjeriti. Ipak, broj
341 nije prost, jer je 341 = 11 ∙ 31.

Prije nego što pokažemo kako se zaista možemo uvjeriti u prostost nekog broja (a ne samo u
pseudoprostost po izabranoj bazi), razmotrimo jedan historijski interesantan primjer. Naime, Fermat
je bio ubijeđen da je Fermatov broj F5 = 4 94967 97 prost. U njegovo vrijeme, bez pomoći računskih
mašina, brutalno traženje da li ovaj broj ima djelioce bio bi uzaludan posao. Međutim, postoji mnogo
načina da se pokaže da ovaj broj nije prost, bez traženja njegovih eventualnih djelilaca. Ironično je da se
jedan od načina zasniva upravo na maloj Fermatovoj teoremi, koju se Fermat nije sjetio da primijeni.
Zaista, ukoliko nađemo neki broj za koji je ) ≠ , to je siguran dokaz da F nije prost
broj. Takav broj ne treba dugo tražiti − naime, ova nejednakost je ispunjena već za = 3. Zaista, za
= 3 imamo

) = ) = ) ) =…= 9 6 6

što se dobija nakon kvadriranja. S obzirom da je rezultat različit od , Fermatov broj F nije
prost. Naravno, izvođenje kvadriranja je nesumnjivo dosadan i naporan postupak, ali je on posve
izvodljiv u razumnom vremenu čak uz upotrebu samo papira i olovke. Dakle, Fermat je mogao utvrditi da
F nije prost broj, i to koristeći svoj vlastiti alat, ali to ipak nije učinio bolje rečeno, nije se sjetio da to
može učiniti). Napomenimo da baza = 2 ne bi dala potvrdu složenosti ovog broja, odnosno F je
pseudoprost po bazi . Zaista, do rezultata jednakog jedinici došli bismo već nakon šestog kvadriranja.
Također, bitno je primijetiti da Fermatova teorema samo daje činjenicu da broj F nije prost, odnosno
da ima proste faktore, ali ne daje nikakvu informaciju o tome kako glase njegovi prosti faktori (usput,
oni glase 641 i 6700417).

Već smo rekli da ukoliko smo se uvjerili u pseudoprostost broja po nekoj bazi, to ne znači da je on
zaista prost. Međutim, test možemo ponoviti više puta, birajući svaki put drugačiju bazu po slučajnom
izboru. Ukoliko u bilo kojem pokušaju dobijemo ) ≠ , broj sigurno nije prost. Međutim,
ukoliko stalno dobijamo da je ) = , to je veoma dobra indikacija (mada ne i posve sigurna)
da je broj prost, pri čemu pouzdanost takvog zaključka raste s povećanjem broja testova. Opisani
način testiranja broja na prostost naziva se Fermatov test.

1
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Fermatov test je zaista jednostavan. Međutim, problem s ovim testom je što postoje složeni brojevi
koji su izuzetno otporni na njega. Naime, R. Carmichael je pokazao da postoje složeni brojevi koji su
pseudoprosti u odnosu na svaku bazu koja je relativno prosta s njima. Oni se nazivaju Carmichaelovi
brojevi. Recimo, prva dva Carmichaelova broja glase 56 i 5. Stoga, jedina šansa da Fermatov test
utvrdi složenost nekog Carmichaelovog broja je da se slučajno odabere takva baza manja od za
koju je NZD( , ) ≠ . To je moguće jedino ukoliko je umnožak nekog od faktora broja . Recimo, za
Carmichaelov broj 56 , čiji su prosti faktori 3, 11 i 17, Fermatov test s bazom = će utvrditi njegovu
složenost. Međutim, ukoliko broj ima velike proste faktore, tada je vjerovatnoća da će se slučajno
odabrati upravo takva baza zanemarljiva, tako da je utvrđivanje složenosti takvih brojeva Fermatovim
testom praktično nemoguće. Napomenimo da je već sama činjenica da je NZD , ) ≠ 1 za neko <
siguran znak da nije prost, ali ta spoznaja nam nije ni od kakve koristi. Također je interesantno istaći
da za Carmichaelove brojeve vrijedi ) = za svaki cijeli broj , neovisno da li je on relativno
prost s ili nije (ista stvar vrijedi i za proste brojeve, tako da je test zasnovan na ovoj relaciji posve
nemoćan da napravi razliku između Carmichaelovih i prostih brojeva).

Vidjeli smo da su Carmichaelovi brojevi veliki problem za Fermatov test. Srećom, postoji neznatna
modifikacija opisanog postupka, poznata pod nazivom Miller-Rabinov test, koja je daleko pouzdanija.
Da bismo opisali ovaj test, potrebna nam je sljedeća generalizacija male Fermatove teoreme. Neka je
najveći stepen dvojke s kojim je broj − 1 djeljiv, tj. = max { | ∣ − 1}. Može se dokazati da ukoliko
)
je prost broj, tada za svaku bazu < mora vrijediti ili ) = − za neko = 1, 2, …, ,
)
ili ) = . Dakle, ukoliko ovi uvjeti nisu ispunjeni, broj sigurno nije prost. Međutim,
njihovo ispunjenje ne garantira da je zaista prost. Stoga se za broj koji zadovoljava ove uvjete kaže
da je jaki pseudoprosti broj (engl. strong pseudoprime) po bazi . Motivacija za ovaj naziv potiče od
činjenice da je svaki jaki pseudoprosti broj po nekoj bazi ujedno i pseudoprosti broj po istoj bazi , ali
obrnuto ne mora biti. Recimo, vidjeli smo da je broj 341 pseudoprost po bazi 2, ali on nije ujedno i jaki
pseudoprosti broj po istoj bazi, s obzirom da vrijedi ) ≠ 4 , ) ≠ 4 i
) ≠ . Dalje, iz definicije je jasno da je svaki prosti broj također i jaki pseudoprosti broj po
svakoj bazi. Da obrnuto ne vrijedi, možemo vidjeti na primjeru broja 47, koji je složen, ali je ipak jaki
pseudoprosti broj po bazi 2, s obzirom da vrijedi ) = .

Miller-Rabinov test se sada izvodi tako što se za broj koji se testira na prostost vrši gore opisano
ispitivanje njihove jake pseudoprostosti korištenjem raznih slučajno odabranih baza. Međutim, za
razliku od obične pseudoprostosti, za koju postoje složeni brojevi koji su pseudoprosti praktično po
svakoj bazi Carmichaelovi brojevi), dokazano je da svaki složeni broj može biti jaki pseudoprosti
broj po najviše 5 % baza manjih od . Drugim riječima, ukoliko je neki broj složen, vjerovatnoća da on
neće biti jaki pseudoprost broj po nekoj nasumice izabranoj bazi tj. da će biti detektiran kao složen)
veća je od .75, odnosno vjerovatnoća da testiranje nekog složenog broja na pseudoprostost po
nasumice izabranoj bazi neće prepoznati taj broj kao složen manja je od 0.25. Ukoliko sada testiranje
ponovimo puta s različitih nasumice izabranih baza, vjerovatnoća da eventualna složenost broja
koji se testira neće biti prepoznata postaje manja od . 5 . Ova vrijednost rapidno opada s porastom .
Recimo, za = , vjerovatnoća da Miller-Rabinov test ne prepozna složen broj kao složen manja je od
, što je manje od vjerovatnoće hardverske ili softverske greške na računaru na kojem se vrši
testiranje. Također, poznato je da je u većini slučajeva test dovoljno ograničiti na male baze. Recimo, za
testiranje prostosti brojeva s manje od 15 cifara, njihova prostost je garantirana ukoliko su oni jaki
pseudoprosti brojevi po bazama 2, 3, 5, 7, 11, 13 i 17. Zbog svoje jednostavnosti i pouzdanosti,
Miller-Rabinov test je danas najviše korišteni algoritam za testiranje prostosti velikih brojeva.

Algoritmi poput gore opisanog Fermatovog testa i Miller-Rabinovog testa, koji se zasnivaju na
generiranju slučajnih brojeva, nazivaju se randomizirani algoritmi. Ovi algoritmi također spadaju u
probabilističke algoritme, što znači da dovode do rješenja samo s određenom vjerovatnoćom. Pri
tome, za ova dva algoritma je karakteristično da je jedan od mogućih odgovora tj. odgovor “broj je
složen”) apsolutno pouzdan, dok drugi mogući odgovor tj. odgovor “broj je prost”) možemo dobiti
samo s određenim stepenom vjerovatnoće, koji možemo učiniti onoliko bliskim jedinici koliko to
želimo, ukoliko test izvodimo dovoljno dugo. Probabilistički algoritmi koji posjeduju to svojstvo
nazivaju se Monte Carlo algoritmi. Postoji i druga vrsta probabilističkih algoritama, koji se nazivaju Las
Vegas algoritmi. Kod takvih algoritama, ukoliko dobijemo bilo kakav odgovor, on je apsolutno
pouzdan, međutim postoji izvjesna obično mala) vjerovatnoća da nećemo dobiti nikakav odgovor.

2
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Interesantno je napomenuti da postoje randomizirani algoritmi koji nisu probabilistički, odnosno


koji uvijek dovode do rješenja, koje je posve sigurno, iako koriste slučajne brojeve (kod takvih
algoritama, sreća pri izboru slučajnih brojeva uglavnom utiče na to koliko ćemo brzo doći do rješenja).
Kasnije ćemo se upoznati s nekim primjerima takvih algoritama. Također, treba istaći da probabilistički
algoritmi u načelu ne moraju ujedno biti i randomizirani, mada gotovo uvijek jesu.

Linearne kongruencije
Ukoliko su , i > 0 cijeli brojevi koje smatramo poznatim, tada se relacija oblika ≡ (mod )
naziva linearna kongruencija s nepoznatom . Pod rješenjem ove kongruencije smatramo svaku
vrijednost koja zadovoljava ovu relaciju, odnosno za koju zaista vrijedi ≡ (mod ). Nije teško
vidjeti da rješenje linearne kongruencije nikada nije jednoznačno, s obzirom da ukoliko je rješenje,
tada je rješenje i svaki broj takav da je ≡ (mod ). Ukoliko pod tipičnim rješenjima linearne
kongruencije smatramo ona rješenja za koja vrijedi ≤ < tada su sva njena rješenja ili tipična, ili su
kongruentna s nekim od tipičnih rješenja. Prema tome, poznavanje tipičnih rješenja je sasvim dovoljno da
znamo sva rješenja. Stoga se smatra da je linearna kongruencija riješena kada se odrede njena tipična
rješenja. Primijetimo još da linearnu kongruenciju možemo napisati i u obliku ∙ = , koji
predstavlja linearnu jednačinu u modularnoj aritmetici.
Postoji mnogo načina za rješavanje linearnih kongruencija. Na primjer, one se veoma lako svode na
linearne Diofantove jednačine. Zaista, na isti način kao i pri određivanju inverznog elementa za
množenje klasa ostataka, lako je pokazati da je linearna kongruencija ≡ (mod ) ekvivalentna
Diofantovoj jednačini + = . Prema tome, ona je rješiva ako i samo ako je NZD , ) ∣ . Pored
toga, nije teško pokazati da je broj njenih tipičnih rješenja upravo NZD( , ). Stoga, ukoliko je
NZD( , ) = , tipično rješenje je jedinstveno. Također, lako je pokazati da ukoliko je najmanje
tipično rješenje, tada sva rješenja možemo izraziti u obliku ≡ (mod /NZD( , )).
 Primjer : Riješiti linearnu kongruenciju 51 ≡ 9 (mod 69).
Ova kongruencija je ekvivalentna Diofantovoj jednačini 5 + 69 = 9. Kako je NZD(51, 69) = 3 i
3 ∣ 9, kongruencija je rješiva i očekujemo tipična rješenja. Dijeljenjem s 3 dobijamo 17 + 23 = 3.
Prošireni Euklidov algoritam daje rastavu = −4 ∙ 17 + 3 ∙ , na osnovu čega je = −12 + 23 gdje je
proizvoljan cijeli broj. Tražimo li tipična rješenja, mora vrijediti ≤ < 69, odnosno 1 ≤ ≤ 3, što
daje tipična rješenja = 11, = 34 i = 57. Sva rješenja razmatrane kongruencije možemo izraziti u
obliku ≡ 11 (mod 69), ≡ 34 (mod 69) i ≡ 57 (mod 69) ili, alternativno, u obliku ≡ 11 (mod 23).
Drugi način rješavanja linearne kongruencije ≡ (mod ) zasniva se na njenom tretiranju kao
jednačine ∙ = u modularnoj aritmetici. Uzmimo prvo da je NZD( , ) = 1. Pod tim
uvjetom, element ima inverzni element ) za operaciju množenja, te množenjem obje
strane jednačine s ) neposredno dobijamo rješenje u obliku = ) ∙ . Ovaj način
rješavanja je interesantan jer ukazuje na uočljivu analogiju s klasičnim linearnim jednačinama oblika
= , čija se rješenja mogu napisati u obliku = ∙ . Bez obzira na prividnu jednostavnost ovako
dobijenog rješenja, ostaje problem računanja ) . Ukoliko ovu vrijednost računamo svođenjem na
linearnu Diofantovu jednačinu, ne dobijamo ništa suštinski novo u odnosu na već opisani metod
rješavanja svođenjem čitave linearne kongruencije na linearnu Diofantovu jednačinu, osim prividno lijepo
)
zapisanog rješenja. Međutim, vidjeli smo da iz Fermat-Eulerove teoreme slijedi ) = ) ,
) )
tako da rješenje možemo zapisati i u obliku = ) ∙ . Vrijednost ) može
se izračunati metodom kvadriraj-i-množi, tako da u slučaju kada vrijednost φ( ) nije velika, ovaj
metod rješavanja može biti praktičniji od metoda svođenja na linearnu Diofantovu jednačinu, koji dalje
zahtijeva primjenu proširenog Euklidovog algoritma, ili nekog srodnog metoda rješavanja. Također,
ovaj metod može biti praktičan ukoliko treba riješiti veliki broj različitih linearnih kongruencija kod
kojih je koeficijent i modul isti, ali se razlikuje vrijednost koeficijenta . Naime, tada je dovoljno samo
jednom izračunati inverzni element ) , koji dalje možemo koristiti za rješavanje svih kongruencija.

Pretpostavimo sada da je NZD( , ) = ≠ . U tom slučaju, inverzni element ) ne postoji,


pa gore opisani metod nije direktno primjenljiv. Međutim, u tom slučaju, kongruencija ≡ (mod )
je rješiva samo ako je ∣ , iz čega slijedi da su tada sva tri broja , i djeljiva s . Ako sada uvedemo
oznake = / , = / i = / , na osnovu osobina kongruencija zaključujemo da mora vrijediti
≡ (mod ). Kako je NZD( , ) = 1, na novu kongruenciju možemo primijeniti gore opisani
metod, tako da imamo = ) ∙ odnosno = ) ∙ . Tako
dobijeno rješenje lako prevodimo u oblik iskazan preko kongruencije po modulu = / .

3
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

 Primjer : Riješiti linearnu kongruenciju 51 ≡ 9 (mod 69) metodom svođenja na jednačinu


modularne aritmetike.
Kako je NZD(51, 69) = 3, ovu kongruenciju ćemo prvo podijeliti s , čime dobijamo kongruenciju
17 ≡ 3 (mod 23). Napišemo li ovu kongruenciju u vidu jednačine 7 ∙ = , neposredno
slijedi = 7 ) ∙ . Ostaje da izračunamo 7 ) . Ilustracije radi, koristićemo Fermat-
Eulerovu teoremu. Kako je φ(23) = 22, imamo 7 ) = 7 ) . Sada imamo 7 ) = ,
7 ) = ) = , 7 ) = ) = , 7 ) = ) = i, konačno,
7 ) = 7 ) ∙ 7 ) ∙ 7 = ∙ ∙ 7 = 9 . Sada možemo izračunati i
= 9 ∙ = , odnosno rješenje razmatrane kongruencije možemo iskazati u obliku
≡ 11 (mod 23).
U nekim situacijama je potrebno razmatrati i linearne kongruencije s više nepoznatih, odnosno
relacije oblika + +…+ ≡ (mod ) pri čemu su , , …, , i > 0 poznate
vrijednosti, a , , …, nepoznate vrijednosti koje treba odrediti da relacija bude zadovoljena. Nije
teško pokazati da je uvjet rješivosti ovakvih kongruencija NZD( , , …, , ) ∣ . Postoji mnogo
metoda za rješavanje ovakvih kongruencija, a najočigledniji je svođenjem na Diofantovu jednačinu s
+ nepoznatih. Zaista, slično kao za slučaj linearne kongruencije s jednom nepoznatom, lako se vidi
da se kongruencija + +…+ ≡ (mod ) može izraziti u vidu linearne Diofantove
jednačine + +…+ + = .

Sistemi linearnih kongruencija

U praktičnim primjenama elementarne teorije brojeva često se javlja potreba za rješavanjem sistema
linearnih kongruencija. Ovdje ćemo razmotriti nekoliko tipova takvih sistema koji imaju praktični
značaj. Prvo ćemo razmotriti sisteme linearnih kongruencija s jednom nepoznatom. Neka je dat sistem
od kongruencija oblika ≡ (mod ), = 1, 2, …, . Jasno je da je ovaj sistem može biti rješiv samo
ako je svaka od ovih kongruencija rješiva sama za sebe, stoga pretpostavimo da je to ispunjeno. Tada,
nakon što svaku od ovih kongruencija riješimo zasebno, dobijamo skupinu relacija oblika ≡ (mod ),
= 1, 2, …, . Stoga proučavanje sistema linearnih kongruencija s jednom nepoznatom možemo ograničiti
na proučavanje sistema upravo ovakvog oblika.

Pretpostavimo da je dat sistem linearnih kongruencija oblika ≡ (mod ), = 1, 2, …, . Iz prve


kongruencije ≡ (mod ) slijedi = + pri čemu je proizvoljan cijeli broj. Odredimo sada
tako da bude zadovoljena i druga kongruencija. Uvrštavanjem izraza za u drugu kongruenciju
≡ (mod ) dobijamo + ≡ (mod ) odnosno ≡ − (mod ). Ovo je linearna
kongruencija s nepoznatom . Da bi ona bila rješiva, mora biti ispunjen uvjet NZD , ) ∣ − . U
suprotnom, ona nije rješiva, pa nije rješiv ni sistem koji želimo riješiti. Stoga pretpostavimo da je ovaj
uvjet ispunjen. Rješavanjem ove kongruencije dobijamo rješenje u obliku ≡ (mod /NZD( , )),
koje se može zapisati u obliku = + /NZD( , ) pri čemu je proizvoljan cijeli broj. Sada,
uvrštavanjem nađene vrijednosti za nazad u izraz = + dobijamo = + NZS( , )
gdje je = + , jer je / NZD( , ) = NZS( , ). Jasno je da ovaj postupak možemo
nastaviti dalje i odrediti , tako da bude zadovoljena i treća kongruencija, itd. Kada dođemo do
posljednje kongruencije, na kraju ćemo dobiti izraz oblika = + NZS( , , …, ) gdje je
proizvoljan cijeli broj. Ovaj izraz možemo zapisati i u obliku ≡ (mod NZS( , , …, )). U svakom
slučaju, ovo predstavlja rješenje traženog sistema. Nije teško pokazati da je opisani postupak moguće
provesti do kraja ako i samo ako su ispunjeni uvjeti NZD( , ) ∣ − za sve , = 1, 2, …, , ≠ .
Drugim riječima, ovi uvjeti predstavljaju uvjete rješivosti razmatranog sistema.

 Primjer : Riješiti sistem kongruencija 5 ≡ 1 (mod 6), 6 ≡ 18 (mod 20) i 7 ≡ 11 (mod 15).

Prvo treba svaku od ovih kongruencija riješiti zasebno, nakon čega dobijamo sistem ≡ 5 (mod 6),
≡ 3 (mod 10) i ≡ 8 (mod 15). Iz prve kongruencije slijedi = 5 + 6 gdje je proizvoljan cijeli
broj. Uvrštavanjem ovog rezultata u drugu kongruenciju dobijamo 5 + 6 ≡ 3 (mod 10), odnosno
6 ≡ −2 (mod ). Rješenje ove kongruencije je ≡ 3 (mod 5), odnosno = 3 + 5 , gdje je
proizvoljan cijeli broj. Vraćanjem u izraz = 5 + 6 dobijamo = 23 + 30 . Sada ćemo uvrstiti ovaj
rezultat u treću kongruenciju, čime dobijamo + 30 ≡ 8 (mod 15), odnosno 30 ≡ −15 (mod 15).
Rješenje ove kongruencije je ≡ 0 (mod ), što zapravo znači da može biti proizvoljan cijeli broj.
Slijedi da na kraju imamo = 23 + 30 odnosno ≡ 23 (mod 30). Ovaj rezultat ujedno predstavlja
rješenje polaznog sistema, s obzirom da smo zadovoljili sve kongruencije.

4
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Za praktične primjene su od osobite važnosti sistemi linearnih kongruencija oblika ≡ (mod ),


= 1, 2, …, kod kojih su ispunjeni uvjeti NZD( , ) = 1 za sve , = 1, 2, …, , ≠ . Jasno je da su takvi
sistemi uvijek rješivi. Međutim, za njihovo rješavanje postoji mnogo jednostavniji postupak od gore
opisanog općeg postupka, koji slijedi iz tzv. kineske teoreme o ostacima (neke specijalne sisteme ovog
tipa rješavao je kineski matematičar Sun Tsŭ negdje između III i V vijeka nove ere, dok je opću
formulaciju teoreme dao Ch’in Chiu-Sao, također Kinez, sredinom XIII vijeka nove ere). Prema ovoj
teoremi, jedno rješenje ovog sistema dato je formulom = + +…+ pri čemu je
=( … )/ , = 1, 2, …, , dok su ma koja rješenja linearnih kongruencija ≡ (mod ),
= 1, 2, …, . Ono rješenje za koje vrijedi 0 ≤ < … nazivamo tipično rješenje. Jasno je da je
tipično rješenje jedinstveno, dok su sva ostala rješenja kongruentna s njim po modulu … .
 Primjer : Pronaći najmanji prirodan broj koji pri dijeljenju s 2, 3 i 5 daje ostatke 1, 2 i 4 respektivno.
Problem se očito svodi na nalaženje tipičnog rješenja sistema kongruencija ≡ 1 (mod 2),
≡ 2 (mod 3) i ≡ 4 (mod 5). Ovaj sistem ćemo riješiti koristeći kinesku teoremu o ostacima. Imamo
= 30, = 30/2 = 15, = 30/3 = 10 i = 30/5 = 6, tako da u skladu s kineskom teoremom o
ostacima, rješenje možemo predstaviti u obliku ≡ 15 + 10 + 6 (mod ), pri čemu su , i
ma koja rješenja linearnih kongruencija 5 ≡ 1 (mod 2), 10 ≡ 2 (mod 3) i 6 ≡ 4 (mod 5).
Dalje, tipična rješenja svake od ovih kongruencija koja je najlakše naći pogađanjem, s obzirom da su
svi moduli mali brojevi) glase respektivno = 1, =2 i = 4. Stoga je opće rješenje sistema dato
kao ≡ 15 ∙ 1 + 10 ∙ 2 + 6 ∙ 4 = 59 (mod ). S obzirom da tražimo tipično rješenje, to je očigledno
= 9, što ujedno predstavlja rješenje postavljenog problema. Pored toga, sva rješenja razmatranog
sistema kongruencija mogu se praktičnije izraziti preko tipičnog rješenja kao ≡ 29 (mod 30).
Već je rečeno da sistemi linearnih kongruencija koje se mogu riješiti preko kineske teoreme o
ostacima imaju veliku praktičnu primjenu. Recimo, takvi sistemi se javljaju pri rješavanju kongruencija
višeg reda, o čemu ćemo kasnije govoriti. Pored toga, na kineskoj teoremi o ostacima mogu se zasnovati
prilično efikasni algoritmi za implementaciju računskih operacija s veoma velikim brojevima na
višeprocesorskim ili distribuiranim računarskim arhitekturama, o čemu je moguće naći više informacija
u široj literaturi.
Sada ćemo preći na razmatranje sistema linearnih kongruencija s više nepoznatih. Kako je svaka
kongruencija oblika X ≡ Y (mod ) ekvivalentna s kongruencijom oblika X ≡ Y (mod ) gdje je
ma kakav cijeli broj, uvijek možemo postići da sve kongruencije budu po istom modulu. Zaista, neka je dat
sistem od kongruencija po modulima , , …, respektivno, i neka je M = NZS( , , …, ).
Tada, množenjem obje strane i modula -te kongruencije s M/ za sve = 1, 2, …, dolazimo do
ekvivalentnog sistema u kojem su sve kongruencije po modulu M. Na primjer, neka je dat sistem
4 − 3 ≡ 1 (mod 10) i 5 + 7 ≡ 3 (mod 5). Množenjem obje strane i modula prve kongruencije s
3, a druge kongruencije s 2, dobijamo ekvivalentni sistem kongruencija 12 − 9 ≡ 3 (mod 30) i
10 + 14 ≡ 6 (mod 30) u kojem su obje kongruencije po istom modulu. Slijedi da bez umanjenja
općenitosti možemo razmatrati samo sisteme u kojima sve kongruencije imaju isti modul .

Sistemi linearnih kongruencija s istim modulom mogu se riješiti tehnikama eliminacije koje su
veoma slične načinima rješavanja sistema linearnih jednačina s više nepoznatih. Pri tome, moramo
paziti da je množenje obje strane neke kongruencije s nekim brojem (bez promjene modula)
dozvoljeno samo ukoliko je taj broj relativno prost s modulom. U suprotnom ćemo dobiti kongruenciju
koja nije ekvivalentna s polaznom preciznije, koja može imati više rješenja od polazne). Zaista, neka
imamo kongruenciju oblika X ≡ Y (mod ). Ukoliko sada pomnožimo obje strane ove kongruencije
brojem za koji je NZD( , ) = ≠ 1, dobijamo kongruenciju X ≡ Y (mod ), koja je, prema
pravilima rada s kongruencijama, ekvivalentna s kongruencijom ( / ) X ≡ ( / ) Y (mod / ). Jasno je
da svakom tipičnom rješenju ove kongruencije odgovara tipičnih rješenja po modulu , koja ne
moraju biti i rješenja polazne kongruencije. Iz tog razloga, množenje kongruencije s brojem koji nije
relativno prost s modulom nije regularna transformacija. Zapravo, kako je u tom slučaju faktor
nule i neinvertibilan element, situacija je donekle analogna s množenjem obje strane neke jednačine s
nulom. S druge strane, dozvoljeno je na obje strane bilo koje kongruencije dodati odgovarajuće strane
bilo koje druge kongruencije pomnožene bilo kojim brojem, bio on relativno prost s modulom ili ne.
Regularnost ovog postupka nije teško dokazati.
Proces eliminacije se odvija tako da se serijom regularnih transformacija polazni sistem transformira
u ekvivalentni sistem u kojem jedna od kongruencija sadrži samo jednu nepoznatu ovo je moguće

5
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

postići samo ukoliko je broj kongruencija jednak ili veći od broja nepoznatih). Ukoliko ta kongruencija
nije rješiva, nije rješiv ni polazni sistem. Ukoliko je ona rješiva, uvrštavanjem njenog rješenja u
preostale kongruencije dobijamo sistem koji sadrži jednu kongruenciju manje, nakon čega možemo
nastaviti isti postupak. U slučaju da ona ima više rješenja, treba razmotriti šta se dešava uvrštavanjem
svakog od njenih rješenja u preostale kongruencije. Naime, neka od njenih rješenja mogu nakon
uvrštavanja voditi ka nerješivom sistemu po ostalim nepoznatim. Naravno, takvo rješenje onda ne
dovodi do rješenja čitavog sistema. Ukoliko je broj kongruencija manji od broja nepoznatih, ne možemo
nikada eliminacijom doći do kongruencije koja sadrži samo jednu nepoznatu, nego se proces eliminacije
završava kada dođemo do kongruencije koja sadrži − + 1 nepoznatih, gdje je broj kongruencija, a
broj nepoznatih. Nakon što riješimo tu kongruenciju postupcima za rješavanje kongruencija s više
nepoznatih, nastavljamo dalje na identičan način kao i u slučaju kada je broj kongruencija jednak ili
veći od broja nepoznatih.
Opisani postupak nije uvijek jednostavan i traži izvjesnu dozu domišljatosti. Ipak, na opisanim
idejama može se zasnovati opća ne posve jednostavna) teorija sistema linearnih kongruencija, koja
ima upadljivih sličnosti s teorijom sistema linearnih jednačina u linearnoj algebri. Pošto nam prostor ne
dozvoljava ulazak u ovu teoriju, rješavanje sistema linearnih kongruencija s više nepoznatih ćemo
ilustrirati kroz nekoliko karakterističnih primjera.

 Primjer : Riješiti sistem linearnih kongruencija 5 − 3 ≡ 11 (mod 13), 2 + 7 ≡ 6 (mod 13) i


7 − 9 ≡ 4 (mod 13).

Množenje prve kongruencije s 2 daje kongruenciju 10 − 6 ≡ 22 (mod 13). Sada, ukoliko na nju
dodamo drugu kongruenciju pomnoženu s −5, dobijamo kongruenciju −41 ≡ −8 (mod 13). Slijedi da
je polazni sistem ekvivalentan sistemu kongruencija −41 ≡ −8 (mod 13), 2 + 7 ≡ 6 (mod 13) i
7 − 9 ≡ 4 (mod 13) u kojem prva kongruencija sadrži samo nepoznatu . Na već poznati način,
možemo pronaći njeno rješenje ≡ 4 (mod 13). Uvrstimo sada njeno tipično rješenje = 4 u drugu
kongruenciju. Na taj način dobijamo kongruenciju 2 + 28 ≡ 6 (mod 13), odnosno 2 ≡ −22 (mod 13),
čije je rješenje ≡ 2 (mod ). Međutim, do sada treću kongruenciju nismo iskoristili nizašta. Provjera
pokazuje da dobijeno rješenje za i iz prve dvije kongruencije zadovoljava i treću kongruenciju da
se to nije desilo, sistem ne bi imao rješenja, jer prve dvije kongruencije ne ostavljaju nikakvu drugu
mogućnost za i ). Dakle, rješenje ovog sistema može se izraziti u obliku ≡ 2 (mod 13) i
≡ 4 (mod 13).
 Primjer : Riješiti sistem linearnih kongruencija 7 + 3 ≡ 1 (mod 33) i 2 + 27 ≡ −1 (mod 33).

Množenje prve kongruencije s 2 daje kongruenciju 14 + 6 ≡ 2 (mod 33). Ukoliko sada na nju
dodamo drugu kongruenciju pomnoženu s −7, dobijamo kongruenciju −183 ≡ 9 (mod 33), odakle
slijedi da je polazni sistem ekvivalentan sistemu −183 ≡ 9 (mod 33) i 2 + 27 ≡ −1 (mod 33). Kako
prva kongruencija sadrži samo nepoznatu , možemo je riješiti zasebno. Imamo NZD −183, 33) = 3 i
3 ∣ 9, tako da je ova kongruencija rješiva. Dijeljenjem s 3 dobijamo kongruenciju −61 ≡ 3 (mod 11)
čije se rješenje ≡ 5 (mod ) lako nalazi primijetimo da ovom rješenju odgovaraju tri tipična rješenja
= 5, = 16 i = 7). Da ne bismo svako od tipičnih rješenja razmatrali posebno, izrazimo opće
rješenje ove kongruencije u obliku = 5 + 11 , gdje je proizvoljan cijeli broj. Uvrštavanje ovog
rješenja u drugu kongruenciju dovodi do kongruencije + 135 + 297 ≡ −1 (mod 33) odnosno
2 ≡ −136 − 297 (mod ). Međutim, ova kongruencija je potpuno ekvivalentna s kongruencijom
2 ≡ −136 (mod 33), s obzirom da je 297 djeljivo s . Rješavanjem ove kongruencije dobijamo
≡ 31 (mod ). Dakle, rješenje sistema može se izraziti u obliku ≡ 31 (mod 33) i ≡ 5 (mod 11).
Ukoliko se ograničimo na tipična rješenja, ovaj sistem ima tipična rješenja: = 31, = 5, zatim
= 31, = 6 i, konačno, = 31, = 27.

 Primjer : Riješiti sistem linearnih kongruencija − 9 ≡ 3 (mod 30) i 10 + 14 ≡ 6 (mod 30).

U ovom primjeru nije posve očigledno kako uopće izvesti eliminaciju bez neregularnih množenja, s
obzirom da su svi koeficijenti djeljivi ili s 2 ili s 3, a ti brojevi su faktori od 30. Ipak, to je izvodljivo uz
malo domišljatosti ali ne u jednom koraku). Ideja je da postepeno smanjujemo koeficijent uz neku od
nepoznatih u nekoj kongruenciji, dok on u potpunosti ne nestane. Tako ćemo prvo na prvu kongruenciju
dodati drugu kongruenciju pomnoženu s − , čime dobijamo kongruenciju − 23 ≡ −3 (mod 30).
Stoga se polazni sistem svodi na sistem 2 − 23 ≡ −3 (mod 30) i 10 + 14 ≡ 6 (mod 30). Sada ćemo
na drugu kongruenciju dobijenog sistema dodati prvu kongruenciju pomnoženu s −5, čime se dobija
kongruencija 129 ≡ 21 (mod 30). Slijedi da smo polazni sistem sveli na sistem 2 − 23 ≡ −3 (mod 30)

6
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

i 129 ≡ 21 mod ) u kojem druga kongruencija sadrži samo nepoznatu . Rješenje ove kongruencije
lako dobijamo u obliku ≡ 9 (mod ), tako da ukupno imamo tipična rješenja za , koja potencijalno
mogu zadovoljavati sistem. Predstavimo sva rješenja na jedinstven način kao = 9 + 10 ( ∈ ℤ) i
uvrstimo ovo rješenje u preostalu kongruenciju − 23 ≡ −3 (mod 30). Time se dobija kongruencija
2 − 207 − 230 ≡ −3 (mod 30) odnosno 2 ≡ 204 + 230 (mod 30). Da bismo izbjegli rad s velikim
brojevima, reduciraćemo sve koeficijente po modulu , čime dobijamo ekvivalentnu kongruenciju
2 ≡ 24 + 20 (mod 30). Kako je NZD(2, 30) = , ova kongruencija je rješiva samo ako je ∣ 24 + 20 .
Ovaj uvjet je očigledno ispunjen za sve vrijednosti , tako da svako od potencijalnih rješenja za vodi
ka rješenju sistema. Sada, dijeljenjem ove kongruencije s , odmah dobijamo rješenje u obliku
≡ 12 +10 (mod 5). Slijedi da svakom tipičnom rješenju za (koja se dobijaju za = 0, = 1 ili
= ) odgovaraju po dva tipična rješenja za , tako da ukupan broj tipičnih rješenja ove kongruencije
iznosi 6. Sortirano u leksikografski poredak, ova rješenja glase
= 2, = 29 = 7, = 19 = 12, = 9 = 17, = 29 = 22, = 19 = 27, = 9
Sva rješenja sistema kongruentna su s nekim od ovih tipičnih rješenja po modulu 30 i mogu se
kompaktno prikazati u obliku = 12 + 10 + 15 i = 9 + 10 , pri čemu su i proizvoljni cijeli brojevi.
 Primjer : Riješiti sistem linearnih kongruencija 3 + 5 − 2 ≡ 4 (mod 7), 5 + 2 − 3 ≡ 6 (mod 7)
i 4 − 2 + ≡ 1 (mod 7).
Prva kongruencija nakon množenja s 5 postaje 15 + 25 − 10 ≡ 20 (mod 7). Ukoliko sada na
nju dodamo drugu kongruenciju pomnoženu s −3, ona dobija oblik 19 – ≡ 2 (mod 7), u kojem se
više ne javlja nepoznata . Pomnožimo sada drugu kongruenciju sa 4, čime ona dobija oblik
20 + 8 − 12 ≡ 24 (mod 7). Dodajmo sada na ovu kongruenciju treću kongruenciju pomnoženu s
−5. Na taj način ona dobija oblik − 17 ≡ 19 (mod 7). Slijedi da se polazni sistem svodi na sistem
19 − ≡ 2 (mod 7), 18 − 17 ≡ 19 (mod 7) i 4 − 2 + ≡ 1 (mod 7), u kojem se u prve dvije
kongruencije ne nalazi nepoznata . Da bismo izbjegli rad s velikim brojevima, izvršićemo redukciju
koeficijenata po modulu 7, tako da dobijamo sistem 5 − ≡ 2 (mod 7), 4 − 3 ≡ 5 (mod 7) i
4 − 2 + z ≡ 1 (mod 7). Ukoliko sada na drugu kongruenciju dodamo prvu kongruenciju pomnoženu
s −3, dobijamo kongruenciju −11 ≡ −1 (mod 7), pa je polazni sistem ekvivalentan sistemu
5 − ≡ 2 (mod 7), −11 ≡ −1 (mod 7) i 4 − 2 + ≡ 1 (mod 7) u kojem druga kongruencija sadrži
samo nepoznatu . Rješavanjem ove kongruencije dobijamo ≡ 2 (mod 7). Uvrštavanjem njenog
tipičnog rješenja = 2 u prvu kongruenciju, dobijamo kongruenciju 10 − ≡ 2 (mod 7), odakle direktno
slijedi ≡ 8 (mod 7) odnosno, nakon redukcije, ≡ 1 (mod 7). Konačno, uvrštavanjem tipičnih rješenja
= 2 i = u treću kongruenciju dobijamo 4 − 3 ≡ 1 (mod 7) odnosno 4 ≡ 4 (mod 7), odakle
slijedi očigledno rješenje ≡ 1 (mod 7). Tako se rješenje polaznog sistema može izraziti u obliku
≡ 1 (mod 7), ≡ 2 (mod 7) i ≡ 1 (mod 7).
 Primjer : Riješiti sistem linearnih kongruencija + 3 − ≡ 1 (mod 5) i + 4 + 3 ≡ 1 (mod 5).
Ukoliko na drugu kongruenciju dodamo prvu kongruenciju pomnoženu s 3, dobijamo kongruenciju
7 + 13 ≡ 4 (mod 5), tako se polazni sistem svodi na ekvivalentni sistem 2 + 3 – ≡ 1 (mod 5) i
7 + 13 ≡ 4 (mod 5). S obzirom da je broj kongruencija manji od broja nepoznatih, ne možemo
nastaviti s eliminacijom tako da moramo riješiti kongruenciju 7 + 13 ≡ 4 (mod 5) kao kongruenciju s
dvije nepoznate. Redukcijom njenih koeficijenata po modulu 5 ona dobija oblik 2 + 3 ≡ 4 (mod 5).
Umjesto njenog svođenja na Diofantovu jednačinu s tri nepoznate, možemo postupiti i ovako. Napišimo
ovu kongruenciju u obliku 2 ≡ 4 − 3 (mod 5) i posmatrajmo kao parametar. Kako je NZD(2, 5) = 1,
ona je rješiva kakav god da je , tako da s njenog aspekta, može biti proizvoljno. Rješavanjem
kongruencije 2 ≡ 4 − 3 (mod 5) po promjenljivoj smatrajući da je parametar a ne nepoznata),
dobijamo rješenje ≡ 12 − 9 (mod 5) koje, nakon redukcije koeficijenata po modulu 5, možemo
napisati i kao ≡ 2 − 4 (mod 5) ili, još bolje, kao ≡ 2 + (mod 5), što smo postigli dodavanjem
člana 5 na desnu stranu što smijemo uraditi, s obzirom da je 5 djeljivo s 5). Posljednje rješenje
može se prikazati i kao = 2 + + 5 , gdje je proizvoljan cijeli broj pored toga što je i također
proizvoljan). Uvrštavanjem u prvu kongruenciju imamo 4 + 5 + 10 − ≡ 1 (mod 5), odakle dalje
slijedi ≡ 3 + 5 + 10 (mod 5), odnosno ≡ 3 (mod 5), s obzirom da je 5 + 10 djeljivo s 5. Kako
pri tome nismo dobili nikakva dodatna ograničenja za , slijedi da zaista može biti proizvoljan. Stoga
se rješenje sistema možemo prikazati u obliku ≡ 2 + (mod 5) i ≡ 3 (mod 5), pri čemu može biti
proizvoljan cijeli broj. Naravno, ukoliko tražimo tipična rješenja, ograničenje ≤ < 5 daje svega 5
mogućnosti za , odakle dobijamo 5 tipičnih rješenja polaznog sistema.

7
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Kvadratne kongruencije

U modernim primjenama elementarne teorije brojeva, a naročito u modernoj kriptografiji, od


velikog su značaja kvadratne kongruencije, tj. kongruencije oblika + + ≡ 0 (mod ), pri čemu
je nepoznata. Ovakva kongruencija se lako može svesti na oblik (2 + ) ≡ ( − 4 ) (mod ), što
uz smjenu 2 + = i oznaku −4 = postaje ≡ (mod ). Slijedi da je dovoljno
razmatrati samo kvadratne kongruencije ovog oblika. Zaista, ukoliko nađemo rješenja kongruencije
≡ (mod ) izražena u obliku ≡ (mod ), rješenja polazne kongruencije očigledno dobijamo
rješavanjem linearne kongruencije 2 + ≡ (mod ) odnosno 2 ≡ − (mod ).
Razmatranja kvadratnih kongruencija oblika ≡ (mod ) na koje se, kao što smo vidjeli, mogu
svesti sve druge kvadratne kongruencije, postaju znatno jednostavnija ukoliko je ispunjen uvjet
NZD( , ) = . Stoga je značajno da je svaku kongruenciju kod koje ovaj uvjet nije ispunjen moguće
svesti na odgovarajuću kongruenciju za koju ovaj uvjet vrijedi u brojnoj literaturi se redovito navodi
da je ovo moguće, ali se vrlo rijetko objašnjava kako se to radi). Zaista, neka je data kongruencija
≡ (mod ) kod koje je NZD( , ) = ≠ 1. Tada, iz ∣ i ∣ slijedi ∣ . Prikažimo broj u
obliku = gdje su i prirodni brojevi takvi da se u rastavi broja na proste faktore ne javlja niti
jedan prosti faktor s eksponentom većim od (takav prikaz je jedinstven i posve ga je lako pronaći kada
je poznata rastava broja na proste faktore). Inače, za broj sa takvim svojstvima kaže se da je
slobodan od kvadrata (engl. squarefree). Sada, lako se vidi da iz ∣ mora slijediti ∣ . Stoga,
možemo uvesti smjenu = nakon koje polazna kongruencija postaje ≡ (mod ) što se,
nakon dijeljenja s , svodi na kongruenciju ≡ (mod ), gdje je = / i = / . Nakon
smjene = dobijamo linearnu kongruenciju ≡ (mod ) koja je rješiva samo ukoliko je
ispunjen uvjet NZD( , ) ∣ . Zapravo, iz načina kako su formirani brojevi , i , nije teško vidjeti
da je ovaj uvjet ekvivalentan uvjetu NZD( , ) = 1. Ukoliko taj uvjet nije ispunjen, polazna kongruencija
nije rješiva. U suprotnom, neka je rješenje kongruencije ≡ (mod ) dato kao ≡ (mod ).
Ovo rješenje daje kvadratnu kongruenciju ≡ (mod ) za koju se može pokazati da vrijedi
NZD( , ) = , što smo i htjeli postići. Sada, ukoliko uspijemo naći rješenja ove kongruencije u obliku
≡ (mod ), na osnovu izvršene smjene = slijedi da se rješenja polazne kongruencije mogu
iskazati u obliku ≡ (mod ) odnosno ≡ (mod / ). Stoga, svakom tipičnom rješenju
odgovara tipičnih rješenja polazne kongruencije po modulu .
Na osnovu izloženog razmatranja, slijedi da je dovoljno ograničiti se na proučavanje kvadratnih
kongruencija oblika ≡ (mod ) kod kojih je ispunjen uvjet NZD( , ) = 1. Za dalja razmatranja
korisno je uvesti neke definicije. Neka je ∈ ℕ, > 1, ∈ ℤ i NZD( , ) = . Kažemo da je broj
kvadratni ostatak (engl. quadratic residue) po modulu ukoliko je kongruencija ≡ (mod )
rješiva, tj. ukoliko postoji ∈ ℤ takav da je ≡ (mod ). Ukoliko takav ne postoji, kažemo da je
broj kvadratni neostatak (engl. quadratic nonresidue) po modulu . Ukoliko je kvadratni ostatak
po modulu , svaki broj koji je rješenje kongruencije ≡ (mod ) i za koji vrijedi 0 ≤ <
nazivamo diskretni kvadratni korijen broja po modulu (diskretni kvadratni korijen uglavnom nije
nikada jedinstven, osim u nekim trivijalnim slučajevima). Kvadratna kongruencija ≡ (mod )
može se zapisati i u vidu modularne jednačine ) = . Za klasu ostataka koja zadovoljava
ovu jednačinu također kažemo da je diskretni kvadratni korijen klase . Jasno je da diskretni
kvadratni korijen klase postoji samo ako je kvadratni ostatak po modulu .
Treba naglasiti da ukoliko je zaista ispunjen uvjet NZD( , ) = 1, diskretni kvadratni korijen broja
po modulu , ukoliko postoji, praktično nikada nije jedinstven, osim u trivijalnom slučaju = 1 (tada
je = 0 jedinstveni diskretni kvadratni korijen svakog cijelog broja ) i nešto manje trivijalnom slučaju
= 2 (tada je = 1 jedinstveni diskretni kvadratni korijen svakog neparnog broja , a = 0 jedinstveni
diskretni kvadratni korijen svakog parnog broja ). Zaista, ukoliko je diskretni kvadratni korijen
broja po modulu > , nije teško pokazati da je − također diskretni kvadratni korijen broja po
modulu . Stoga, diskretni kvadratni korijen može biti jedinstven samo ako je − = , odnosno ako je
= 2 . Uvjet NZD( , ) = 1 sada postaje NZD( , 2 ) = 1, što je moguće samo ako je = 1 i = 2.
Dakle, svaki kvadratni ostatak po nekom modulu > 2 uvijek ima barem dva različita diskretna
kvadratna korijena, a može ih imati i više. Zapravo, može se pokazati da u slučaju kada je modul prost
broj veći od 2, svaki kvadratni ostatak ima tačno dva različita diskretna kvadratna korijena. O broju
diskretnih kvadratnih korijena u slučaju kada je složen broj, govorićemo kasnije.
Sada ćemo razmotriti uvjete rješivosti kvadratnih kongruencija. Prvo ćemo razmotriti slučaj u
kojem je modul prost broj različit od 2, koji ćemo označiti s . Neka pri tome nije djeljiv s , što
garantira da je NZD( , ) = 1. Radi pojednostavljenja izlaganja koja slijede, korisno je uvesti prikladnu

8
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

simboliku. Tako, ukoliko je kvadratni ostatak po modulu koji je prost broj različit od pišemo
) = 1, a ukoliko je kvadratni neostatak po takvom modulu , pišemo ) = − . Također se
definira i ) = 0 ukoliko je djeljiv s . Ovako uvedeni simbol ) naziva se Legendreov simbol.
Ponekad se u literaturi umjesto oznake ) viđaju i nešto drugačije oznake, recimo ( ).
Uz uvedene oznake, problem rješivosti kongruencije ≡ (mod ) pri čemu je prost broj različit
od 2 svodi se na ispitivanje da li je ) = . Jedan od načina da izračunamo ) je korištenje
Eulerovog kriterija po kojem je )
≡ ) (mod ), iz čega slijedi da je ) = 1 ako i samo ako
) ) ) može
je mod( , ) = 1. Kako se mod , ) može izračunati efikasno, slijedi da se
efikasno izračunati na ovaj način. Međutim, računanje Legendrovih odnosno Legendre-Jacobijevih
simbola može se izvesti još efikasnije, korištenjem sljedećih osobina koje ovi simboli zadovoljavaju:

)=1 )= − ) )
− za ≠ 2
)= − ) ) )= ) )
za ≠ 2
)=1 ≡ (mod p) ⇒ )= )

Iz posljednjeg svojstva posebno slijedi ) = mod , ) ). Naredno svojstvo je osobito značajno, i


poznato je kao zakon kvadratnog reciprociteta (ovdje su i prosti brojevi):
) )
)= )∙ − ) za ≠ 2, ≠ 2 i ≠

Navedene osobine su dovoljne da se Legendreov simbol ) veoma jednostavno izračuna,


ukoliko je broj dovoljno mali da ga je jednostavno rastaviti na proste faktore, kao i izvjesne brojeve
manje od koji se mogu javiti u toku računanja. Prije nego što pokažemo kako možemo ukloniti ovo
ozbiljno ograničenje, razmotrimo prvo dva ilustrativna primjera.

 Primjer : Ispitati rješivost kongruencija ≡ 28 (mod 97) i ≡ 65 (mod 307).

Broj 97 je prost. Stoga nam za testiranje rješivosti prve kongruencije treba vrijednost 97):
) )
97) = ∙ 7 97) = 97) 7 97) = 7 97) = 97 7) ∙ − ) = 97 7) =
)
= mod 97, 7) 7) = 6 7) = ∙ 7) = 7) 7) = − ) ∙ (3 | 7) = 7) =
) )
= 7 )∙ − ) = − 7 ) = − mod 7, ) ) = − ) = −1

Dakle, prva kongruencija nije rješiva. Slično, za testiranje rješivosti druge kongruencije treba
izračunati 65 7):

65 7) = 5 ∙ 7) = 5 7) 7) =
) ) ) )
= 7 5) ∙ − ) ∙ 7 )∙ − ) = 7 5) 7 )=
)= )= − ) ) )=
= mod 7, 5) 5) mod 7, ) 5) ∙
)=− )=− ) )=− )=− − ) )
=− ∙ =1

Dakle, druga kongruencija je rješiva zaista, lako je provjeriti da su = 40 i = 67 njena tipična


rješenja).

Primijetimo da računanje ) primjenom opisanih pravila zahtijeva rastavu broja na proste


faktore. Kada bismo bili u mogućnosti da odmah primijenimo zakon kvadratnog reciprociteta, tj. kada bi
) )
vrijedilo )= )∙ − ) bez ograničenja na prostost broja , potreba za faktorizacijom
bi nestala. Nažalost, ukoliko nije prost broj, simbol ) nije definiran u smislu Legendreovog simbola,
s obzirom da Legendreov simbol zahtijeva da broj iza crte bude prost broj. Međutim, probajmo vidjeti šta
bismo dobili kada bismo formalno obavili račun, ne poštujući ograničenje da broj iza crte mora biti prost
jedino ćemo paziti da broj iza crte ne bude paran jer bi se u suprotnom u eksponentu mogao pojaviti broj
koji nije cijeli):
) )
65 7) = 7 65) ∙ − ) = 7 65) = mod 7, 65) 65) =
) )
= (47 | 65) = 65 47) ∙ − ) = 65 47) = mod 65, 47) 47) = 47) =
)
= ∙ 9 47) = 47) 9 47) = − ) ∙ 9 47) =
)
= 9 47) = 47 9) = mod 47, 9) 9) = 9) = − ) =1

9
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Vidimo da smo dobili ispravan rezultat. To bi doduše mogla biti i slučajnost, ali brojni drugi primjeri
ukazali bi na to da nije u pitanju slučajnost. Stoga se prirodno postavlja pitanje da li je moguće na neki
način uopćiti Legendreov simbol ) na brojeve koje nisu prosti, a da pri tome pravila računanja s
Legendreovim simbolima i dalje ostanu na snazi. Pokazuje se da je to moguće uraditi, ali po cijenu da se
izgubi izvorno značenje koje su Legendreovi simboli imali. Naime, Jacobi je uopćio Legendreov simbol
) na sve neparne prirodne brojeve , bili oni prosti ili ne i to tako da vrijede sva opisana pravila
računa s Legendreovim simbolima. Međutim, prema takvom uopćenju, činjenica da je ) = 1 za slučaj
složenog više ne znači da je zaista kvadratni ostatak po modulu , mada činjenica da je ) = −1 i
dalje znači da je kvadratni neostatak po modulu (kriterij kada je kvadratni ostatak po složenom
modulu razmotrićemo kasnije). Prema Jacobijevom uopćenju, ukoliko je = … gdje su
, = 1, 2, …, prosti brojevi različiti od , uzimamo da je )= ) )… ). Ovakvo
uopćenje Legendreovog simbola obično se naziva Jacobijev simbol odnosno Legendre-Jacobijev simbol.

Već je rečeno da je glavni razlog uvođenja Legendre-Jacobijevih simbola olakšavanje računanja


Legendreovih simbola, jer se tada pri njihovom računanju kao međurezultati mogu pojaviti i općenitiji
Legendre-Jacobijevi simboli, uz zadržavanje istih pravila računanja kao i za obične Legendreove
simbole. Posebno je značajno što uz Jacobijevo uopćenje, zakon kvadratnog reciprociteta
)
)= )∙ − ) )
važi za ma kakve neparne brojeve i . Mada se u literaturi često
navodi da je NZD( , ) = također neophodan uvjet za važenje zakona kvadratnog reciprociteta, uz
definiciju Legendreovih simbola kakvu smo prihvatili ovdje prema kojoj je ) = 0 ukoliko je djeljiv
s , svakako vrijedi )= ) = 0 kad god je NZD( , ) ≠ 1. Odavde slijedi da zakon kvadratnog
reciprociteta vrijedi i bez ovog ograničenja.
) )
Bitno je primijetiti da pri računanju izraza kao što su − ) itd. nije potrebno zaista
izvoditi operaciju stepenovanja, s obzirom da rezultat može biti samo ili − ovisno da li je eksponent
paran ili neparan, što nije teško utvrditi. Na osnovu ovih pravila nije teško formulirati efikasan opći
algoritam za računanje Legendreovih i Legendre-Jacobijevih simbola (tzv. Jacobijev algoritam), koji
ovdje nećemo navoditi. Inače, glavni razlog zbog kojeg su uopće uvedeni Legendre-Jacobijevi simboli je
činjenica da se oni u prikazanom postupku mogu pojaviti kao međurezultati čak i kada računamo čiste
Legendreove simbole.

Nije na odmet ponovo istaći da činjenica da je ) = samo u slučaju kada je prost broj govori
da je kvadratni ostatak po modulu . Naravno da je uopćenje Legendreovog simbola moglo ići u
drugom smjeru, tako da se uzme da ) = prosto znači da je kvadratni ostatak po modulu ,
kakav god da je . Međutim, za takvo uopćenje ne bi više vrijedila ista pravila računanja kao i za
Legendreove simbole. Kako se za praktične potrebe pokazalo važnijim sačuvati pravila računanja nego
izvorni smisao Legendreovih simbola, uopćavanja nisu išla u ovom pravcu.

Mogućnost efikasnog računanja Legendreovih simbola, u kombinaciji s Eulerovim kriterijem, daje još
jedan efikasan randomizirani probabilistički test prostosti, koji može poslužiti kao alternativa
Miller-Rabinovom testu. Naime, prema Eulerovom kriteriju, ukoliko je broj prost, za svaki cijeli broj
) ) (mod ). Pored toga, poznato je da ako broj nije prost, ova kongruencija
mora vrijediti ≡
neće vrijediti barem za polovicu brojeva u opsegu od do − . Stoga, možemo slučajno odabrati broj
iz ovog opsega, i provjeriti da li je Eulerov kriterij zadovoljen. Ukoliko nije, odmah znamo da broj
nije prost. U suprotnom, za broj kažemo da je Eulerov pseudoprosti broj po bazi . On može ali i ne
mora biti prost, pri čemu je vjerovatnoća da je on zaista prost veća od .5. Ukoliko test ponovimo
puta s različitim slučajno odabranim brojevima iz opsega od 0 do − 1 i svaki put Eulerov kriterij
bude zadovoljen, vjerovatnoća da je zaista prost postaje veća od − .5 , što rapidno teži jedinici s
porastom recimo, već za = dobijamo vjerovatnoću preko 99.9 %). Ovaj test naziva se Solovay -
Strassenov test.

Razmotrimo sada uvjete rješivosti kongruencije ≡ (mod ) u općem slučaju, odnosno bez
pretpostavke da je prost broj. Uzmimo prvo da je NZD( , ) = 1. Ukoliko prikažemo u obliku
= … gdje su , = 1, 2, …, međusobno različiti prosti brojevi različiti od , može se
pokazati da je navedena kongruencija rješiva ako i samo ako vrijedi ) = 1, = 1, 2, …, uz
dopunski uvjet ≡ 1 (mod 4) ukoliko je = 2, odnosno ≡ 1 (mod 8) ukoliko je ≥ 3. Ukoliko su ovi
uvjeti ispunjeni, broj tipičnih rješenja kongruencije je za = 0 ili = 1, za = 2 i za ≥ 3.
Ukoliko je NZD( , ) = ≠ , kongruencija je rješiva ako i samo ako vrijedi NZD / , / ) = 1 i ako
je rješiva kongruencija 2  / (mod / ), gdje su i prirodni brojevi takvi da je = pri čemu
se u rastavi broja na proste faktore ne javlja niti jedan prosti faktor s eksponentom većim od .

10
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Ukoliko su ovi uvjeti ispunjeni, broj tipičnih rješenja polazne kongruencije iznosi , gdje je broj
tipičnih rješenja kongruencije 2  / (mod / ). Ovi zaključci zapravo slijede iz diskusije provedene
na početku ovog odjeljka.

Interesantno je naglasiti da je razmještaj kvadratnih ostataka i neostataka za većinu modula vrlo


nepravilan, tako da nije moguće uočiti nikakvu jasnu zakonitost. Na ovoj činjenici se zasnivaju izvjesni
kriptografski protokoli, kao i algoritmi za generiranje prividno slučajnih brojeva. Također, može se
pokazati da ukoliko je prost broj, tada među brojevima u opsegu od do − postoji tačno − 1)/2
kvadratnih ostataka i isto toliko kvadratnih neostataka. Slijedi da vjerovatnoće da nasumice izabrani
broj u opsegu od 1 do − 1 bude kvadratni ostatak odnosno neostatak po modulu iznose tačno 5 %.

Sve do sada govorili smo samo o rješivosti kvadratnih kongruencija. Sada ćemo preći na postupke
za njihovo rješavanje. Mada sam postupak njihovog rješavanja nikada nije pretjerano složen, postupak
drastično ovisi o strukturi modula , tako da je potrebno koristiti različite postupke za različite oblike
modula. Stoga je potrebno opisati veći broj različitih postupaka. Razmotrimo prvo kako se rješava
kongruencija ≡ (mod ) gdje je prost broj različit od slučaj = 2 je trivijalan). Pri tome ćemo
pretpostaviti da je kongruencija zaista rješiva. Ona tada ima dva tipična rješenja, pri čemu ukoliko je
jedno tipično rješenje, drugo tipično rješenje je dato kao = − . Lagrange je primijetio da se ova
kongruencija veoma lako rješava ukoliko vrijedi mod , 4) = , što je čest slučaj u praktičnim
primjenama. Naime, nije teško pokazati da je tada jedno njeno tipično rješenje dato jednostavnom
)
formulom = mod( , ). Na primjer, jedno tipično rješenje kongruencije ≡ 7 (mod 19), za
koju možemo lako provjeriti da je rješiva, dato je kao = mod(7 , 19) = 11, tako da je njeno drugo
tipično rješenje = 19 − 11 = 8. Sva ostala rješenja su, naravno kongruentna s jednim od ova dva
rješenja (primijetimo da se sva rješenja mogu kompaktno zapisati u obliku ≡ ±8 (mod 19)). Legendre
je uopćio Lagrangeovu formulu na kongruencije istog tipa kod kojih je mod( , 8) = 5, tako da su one
također veoma lako rješive. Naime, pokazuje se da za takve kongruencije jedno njihovo tipično rješenje
) ) )
iznosi ili = mod( , ), ili = mod( ∙ , ). Pri tome, postoje relativno jednostavni
uvjeti pod kojim vrijedi prva odnosno druga formula, ali je tehnički jednostavnije prosto izračunati obje
vrijednosti i provjeriti koja od njih zaista zadovoljava kongruenciju. Recimo, za rješivu) kongruenciju
≡ 13 (mod 61) jedno tipično rješenje je ili = mod( , 61) = 47, ili = mod( ∙ , 61) = 29.
Direktnim provjeravanjem zaključujemo da je samo = 47 zaista rješenje ove kongruencije, tako da je
njeno drugo tipično rješenje = 61 − 47 = 14.

Situacija je znatno složenija ukoliko je prost broj različit od za koji ne vrijedi niti mod , 4) = 3,
niti mod( , 8) = 5 lako se vidi da u tom slučaju mora vrijediti mod , 8) = ). Za taj slučaj, ne postoji
nikakva jednostavna formula koja bi direktno davala rješenja kongruencije ≡ (mod ), kao što je to
bilo u prethodnim slučajevima. Bez obzira na to, i u ovom slučaju postoje efikasni algoritmi za nalaženje
rješenja. Dva najpoznatija takva algoritma su Tonelli algoritam i Cipolla algoritam. Oba ova algoritma
rade za bilo koji prost broj različit od , ali je u slučaju mod , 8) ≠ 1 znatno jednostavnije koristiti
već opisane Lagrangeove odnosno Legendreove formule. Interesantno je da su oba navedena algoritma
randomizirani (odnosno zasnovani su na primjeni slučajnih brojeva), ali nisu probabilistički, odnosno
garantirano daju tačno rješenje jedino što trajanje računanja ovisi od sreće pri izboru slučajnih
brojeva). Također je interesantno da za isti problem do danas nisu poznati efikasni čisto deterministički
algoritmi, tj. algoritmi koji nisu randomizirani.
Pređimo na opis Tonelli algoritma za rješavanje kongruencije ≡ (mod ) gdje je prost broj
različit od . Prema ovom algoritmu, koji se zasniva na nekim rezultatima iz teorije grupa, prvo je
potrebno naći bilo koji kvadratni neostatak po modulu , tj. broj za koji vrijedi ) = −1. Upravo
se u ovom dijelu algoritma javlja randomiziranost. Naime, za ovaj na prvi pogled jednostavan zadatak
ne postoji nikakav poznat efikasan deterministički postupak, s obzirom da su kvadratni ostaci i
neostaci veoma nepravilno raspoređeni. Traženje zasnovano na testiranju uzastopnih brojeva redom
od naviše nije dobra ideja, s obzirom da se može desiti da u velikom bloku uzastopnih brojeva nema
kvadratnih neostataka. Mnogo bolja ideja je nasumice izabrati broj između i − 1 i testirati da li je
) = − . Kao što smo već rekli, vjerovatnoća da pogodimo iznosi 5 %, što je prilično dobro. Ukoliko
nismo pogodili, biramo novu slučajnu vrijednost , i ponavljamo test. Prema zakonima vjerovatnoće,
broj s traženim svojstvima u prosjeku bi trebao da bude nađen u prilično malom broju pokušaja.
Zapravo, postoje jake indicije (ali ne i dokazi) da takav broj mora postojati u opsegu od 2 do 2 ln
(ukoliko je ta hipoteza istinita, to garantira da se broj sigurno može naći efikasno, bez oslanjanja na
vjerovatnosne zakone). Nakon što je takav nađen, algoritam nastavlja posve deterministički, prema
sljedećem pseudokôdu:

11
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

← ( − 1)/2; ← 1; ← ; ℎ ← inv( , )
while mod( , 2) = 0 do
← / 2; ℎ ← mod(ℎ , )
if mod( , ) ≠ 1 then
← mod( ∙ , ); ← mod( ∙ ℎ, )
← mod( , )
)
← mod( ∙ , )

Oznaka inv( , ) predstavlja inverzni element za operaciju množenja od po modulu (koji


nalazimo Euklidovim algoritmom), odnosno ℎ = inv( , ) zapravo znači ℎ = ) . Po završetku
algoritma, sadrži jedno od traženih rješenja drugo rješenje je naravno − ).

Prikaz Tonelli algoritma koji je ovdje dat donekle se razlikuje od prikaza koji se obično daju u
literaturi, u smislu da je prilagođen za efikasnu implementaciju na računaru u proceduralnim
programskim jezicima. Također, ponegdje se u literaturi Tonelli algoritam susreće pod imenom
Adleman-Manders-Miller (AMM) algoritam, mada je Tonelli algoritam samo specijalan slučaj znatno
generalnijeg AMM algoritma, koji je namijenjen za rješavanje kongruencija višeg reda oblika
≡ (mod ), tj. za nalaženje diskretnog -tog korijena (za = 2 dobija se upravo Tonelli algoritam).
U literaturi se još može susresti i neznatno optimizirana verzija Tonelli algoritma, poznata kao
Shanks-Tonelli algoritam, koji ovdje nećemo opisivati.

Tonelli algoritam je obično vrlo efikasan, osim u slučaju kada je broj − 1 djeljiv s velikim
stepenom dvojke, recimo s , jer se tada petlja u algoritmu izvršava puta. U takvim slučajevima
pogodniji je Cipolla algoritam. Ovaj algoritam zasnovan je na nekim rezultatima iz oblasti diskretne
matematike poznate pod nazivom teorija konačnih polja i obično se prezentira u vrlo kompaktnoj
formi, u kojoj se koristi aritmetika nad polinomima i iz koje nije direktno vidljiv način za njegovu
efikasnu implementaciju na računaru. Ovdje će biti prikazana njegova “prečišćena” verzija, pogodna za
neposrednu računarsku implementaciju i koja koristi samo elementarne operacije. Prema Cipolla
algoritmu, prvo je potrebno naći broj takav da je −4 ) = − , što je, kao i kod Tonelli
algoritma, najbolje izvesti slučajnim pogađanjem, jer je očekivani broj pogađanja mali. Nakon toga,
jedno rješenje tražene kongruencije dobija se po formuli = mod( ) ∙ ( + 1)/2, ) pri čemu su
, = 1, 2, …, ( + 1)/2 elementi niza koji se rekurzivno računa prema formuli

mod mod , ) − mod , ), ) za parno


)
mod mod ) ) , )− mod , ), ) za neparno

uz početne vrijednosti = i = mod( − 2 , ). Bitno je uočiti da je priroda ove rekurzivne formule


takva da je potrebno izračunati znatno manje od ( + 1)/2 vrijednosti niza da bi se našla vrijednost
) koja nam je jedina potrebna za nalaženje rješenja konkretnije, broj različitih vrijednosti
koje je potrebno izračunati približno je proporcionalan s log ).

Razmotrimo sada kako se rješavaju kongruencije ≡ (mod ) kod kojih je modul oblika
= , gdje je prost broj različit od , a prirodan broj. Ove kongruencije, ukoliko su rješive, također
imaju dva tipična rješenja. Za njihovo rješavanje, prvo je potrebno riješiti kongruenciju ≡ (mod ),
što znamo uraditi. Neka je jedno njeno rješenje = i neka je ℎ = ) . Tada su tipična
rješenja polazne kongruencije = i = − , pri čemu se vrijednosti , = 2, 3, …, računaju po
rekurzivnoj formuli = mod( −ℎ∙( − ), ). Inače, ovaj način rješavanja slijedi iz jednog
općeg rezultata iz teorije polinoma poznatog pod nazivom Henselova lema, koji se može primijeniti i
na rješavanje izvjesnih kongruencija višeg reda o čemu ovdje nećemo govoriti)

Do sada je prikazano kako se rješavaju kvadratne kongruencije u kojima je modul stepen bilo kojeg
prostog broja osim dvojke broj je specijalan slučaj za kvadratne kongruencije iz dva razloga, prvo što
je to jedini parni prosti broj, a drugo što se radi o kongruencijama drugog stepena). Razmotrimo sada
rješavanje kongruencija u kojima je modul oblika = , tj. kongruencija ≡ (mod ). Bez
umanjenja općenitosti ćemo pretpostaviti da je neparan broj, jer je u suprotnom NZD( , ) ≠ 1. Prvo
ćemo analizirati specijalne slučajeve za = 1, = 2 i = 3. Kongruencija ≡ (mod 2) je trivijalna,
jer ona za svaki neparan broj ima jedinstveno tipično rješenje = 1. Dalje, lako je uvidjeti da je
kongruencija ≡ (mod 4) rješiva samo ako je ≡ 1 mod 4) pri čemu su njena tipična rješenja = 1
i = 3, dok je kongruencija ≡ (mod 8) rješiva samo ako je ≡ 1 (mod 8), i tada su njena tipična

12
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

rješenja = 1, = 3, = 5 i = 7. Može se pokazati da su pod istim uvjetom rješive i kongruencije oblika


≡ (mod ) za > 3 i da pod tim uvjetom one također imaju četiri tipična rješenja. Sama rješenja
nalazimo ovako. Pretpostavimo da smo prvo našli tipična rješenja kongruencije ≡ (mod ).
Poredajmo njena rješenja po veličini. Među njena dva najmanja rješenja, pokazuje se da će jedno od
njih (nazovimo ga ) biti ujedno biti i rješenje kongruencije ≡ (mod ). Time smo našli jedno
tipično rješenje ove kongruencije, dok preostala tri tipična rješenja glase − , + i − .
Time možemo rekurzivno riješiti kongruenciju za proizvoljnu vrijednost , polazeći od poznatih
rješenja za = 3.

Preostaje još da razmotrimo opći slučaj kongruencije ≡ (mod ) gdje je modul ma kakav
složen broj. Prikažimo u obliku = … gdje su , = 1, 2, …, međusobno različiti
prosti brojevi različiti od 2. Na osnovu općih osobina relacije kongruencije, slijedi da je ova kongruencija
ekvivalentna sistemu kongruencija ≡ (mod ) i ≡ (mod ) za sve = 1, 2, …, . Jasno je da
je polazna kongruencija rješiva samo ako su sve ove kongruencije rješive same za sebe. Ukoliko svaku
od ovih kongruencija riješimo samu za sebe što znamo uraditi, jer su njihovi moduli prosti brojevi ili
njihovi stepeni), na kraju dobijamo sisteme linearnih kongruencija s uzajamno prostim modulima, koji
se mogu lako riješiti pomoću kineske teoreme o ostacima. Time se dobijaju rješenja polazne kongruencije.
Naravno, sve ovo vrijedi uz pretpostavku da je NZD( , ) = 1. U suprotnom je potrebno transformirati
kongruenciju u novu kongruenciju kod koje će ovaj uvjet biti ispunjen, koristeći tehnike koje su
obrađene na početku ovog odjeljka. Sve ovo će biti ilustrirano kroz konkretan primjer, koji ujedno
rezimira većinu tehnika o kojima je ovdje bilo govora.

 Primjer : Naći sve diskretne kvadratne korijene broja 2871 po modulu 17325.

Problem se svodi na rješavanje kongruencije ≡ 2871 (mod 17325). Prvo što treba primijetiti je da
je NZD(2871, 17325) = 99 ≠ 1, tako da trebamo primijeniti tehniku opisanu u uvodnim razmatranjima
da modul učinimo relativno prostim s brojem s desne strane kongruencije. Kako je 99 = 11 ∙ ,
uvešćemo smjenu = 11 ∙ 3 ∙ odnosno = 33 . Nakon ove smjene, polazna kongruencija dobija oblik
1089 ≡ 2871 (mod 17325) što se, nakon dijeljenja s 99, svodi na kongruenciju 11 ≡ 29 (mod 175).
Smjena = daje linearnu kongruenciju 11 ≡ 29 (mod 175). Rješavanjem ove kongruencije dobijamo
≡ 114 (mod 75), što s obzirom na smjenu = daje kvadratnu kongruenciju ≡ 114 (mod 175)
za koju vrijedi NZD(114, 175) = 1, što smo željeli postići. Preostaje da riješimo ovu kongruenciju.

Kako je 175 = 5 ∙ 7, to je kongruencija ≡ 114 (mod 175) ekvivalentna sistemu kongruencija


≡ 114 (mod 5 ) i ≡ 114 (mod 7). Obje ove kongruencije se lako rješavaju primjenom prethodno
opisanih tehnika (pri relativno malim modulima najbolje je koristiti tehniku isprobavanja). Tako,
rješavanjem prve kongruencije dobijamo rješenja ≡ 8 (mod 25) ili ≡ 17 (mod 25), dok druga
kongruencija daje rješenja ≡ 3 (mod 7) ili ≡ 4 (mod 7). Kako obje kongruencije moraju vrijediti
istovremeno, to daje ukupno četiri mogućnosti za :

≡ 8 (mod 25) i ≡ 3 (mod 7) ≡ 8 (mod 25) i ≡ 4 (mod 7)


≡ 17 (mod 25) i ≡ 3 (mod 7) ≡ 17 (mod 25) i ≡ 4 (mod 7)

Dobili smo 4 nezavisna sistema linearnih kongruencija, od kojih se svaki za sebe lako rješava
pomoću kineske teoreme o ostacima. Njihovo rješavanje daje respektivno rješenja ≡ 108 (mod 175),
≡ 158 (mod 175), ≡ 17 (mod 175) i ≡ 67 (mod 175). S obzirom da je = 33 , ova rješenja postaju
≡ 3564 (mod 5775), ≡ 5214 (mod 5775), ≡ 561 (mod 5775) i ≡ 2211 (mod 5775), što daje sva
rješenja polazne kongruencije. Traženi kvadratni korijeni su njena tipična rješenja, odnosno ona
rješenja koja leže u opsegu od do 7 4, odakle slijedi različitih vrijednosti za diskretni kvadratni
korijen broja 2871 po modulu 17325. To su, sortirano po veličini, 56 , , 564, 5 4, 6 6, 79 6,
9339, 10989, 12111, 13761, 15114 i 16764.

Primijetimo da opisani postupak rješavanja kongruencije ≡ (mod ) zahtijeva poznavanje


rastave broja na proste faktore. S druge strane, Rabinova teorema tvrdi da se svaki eventualni
algoritam za rješavanje ove kongruencije može prepraviti u algoritam koji bi vršio rastavu broja na
proste faktore. Drugim riječima, problem rješavanja kvadratne kongruencije je u općem slučaju jednako
težak kao i problem rastave njenog modula na proste faktore. Kako do danas nisu poznati univerzalni i
efikasni postupci za rastavu velikih brojeva na proste faktore, slijedi da u općem slučaju ne postoji
poznat efikasan algoritam za računanje diskretnog kvadratnog korijena po modulu u slučaju kada je

13
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

veoma veliki složen broj. Međutim, ukoliko neko slučajno zna proste faktore broja (recimo, ukoliko
je on kreirao broj množeći nekoliko velikih prostih brojeva), on može izračunati diskretni kvadratni
korijen po modulu efikasno, bez obzira što niko drugi nije u stanju to uraditi. Upravo je ova činjenica
od presudnog značaja za moderne kriptografske postupke, o čemu ćemo uskoro govoriti.

Već je rečeno da kvadratne kongruencije imaju velike primjene u praksi. Unutar same teorije
brojeva, rješavanje kvadratnih kongruencija javlja se kao jedna od etapa u nekim naprednim algoritmima
teorije brojeva, kao na primjer u algoritmu kvadratnog sita (engl. quadratic sieve) za faktorizaciju
brojeva, koji je jedan od najefikasnijih poznatih algoritama za faktorizaciju velikih brojeva. Izvan same
teorije brojeva, pored već spomenutih primjena u kriptografiji, rješavanje kvadratnih kongruencija
koristi se i u akustici, prilikom projektovanja svodova akustičnih dvorana.

Neke primjene teorije brojeva u kriptografiji

Kriptografija je nauka koja se bavi obezbjeđivanjem tajnog prenosa informacija. Ona ovaj zadatak
obavlja putem transformacije podataka koji se prenose. Osnovna ideja je u biti posve jednostavna:
pošaljilac umjesto poruke šalje poruku = E( ) gdje je E neka transformacija (funkcija), koja se
naziva funkcija enkripcije. Poruka naziva se izvorna poruka, dok je šifrirana ili kodirana poruka.
Primalac prima šifriranu poruku i iz nje rekonstruira originalnu poruku koristeći pravilo = D( ),
gdje je D tzv. funkcija dekripcije. Jasno je da mora vrijediti D(E( )) = , odnosno funkcija D mora biti
inverzna funkcija funkcije E.

Najstariji postupci šifriranja oslanjali su se isključivo na tajnost funkcija E i D, koje su bile poznate
samo pošaljiocu i primaocu poruke. Međutim, takvi postupci postaju potpuno neupotrebljivi ukoliko se
funkcije E i D otkriju. Zbog toga se svi moderni kriptografski postupci zasnivaju na boljoj ideji:
pošaljilac šifriranu poruku kreira pomoću pravila = E( , ) dok primalac dešifrira poruku pomoću
pravila = D( , ). Ovdje su funkcije E i D javne, odnosno poznate svima, dok je određena tajna
informacija koja se naziva ključ i koja smije biti poznata samo pošaljiocu i primaocu poruke. Naravno, za
funkcije E i D pri ovakvom načinu šifriranja mora vrijediti uvjet D(E( , ), ) = . Jasno je da je ovakav
postupak šifriranja siguran sve dok neko ne sazna ključ. Međutim, čak i ukoliko neko sazna ključ,
dovoljno je samo promijeniti ključ, nakon čega se isti postupak i dalje može koristiti.

Kod opisanog metoda, koji se zove šifriranje tajnim ključem (engl. private key encription), javlja se
problem što ključ moraju poznavati kako pošaljilac, tako i primalac. Ukoliko su pošaljilac i primalac
fizički razdvojeni, javlja se problem kako da bezbjedno razmijene informaciju o ključu. Interesantno je
da postoje relativno jednostavni načini da se taj problem riješi, koje zajednički nazivamo protokoli
razmjene ključeva. Opća ideja ovih protokola je sljedeća. Potrebno je pronaći dvije funkcije Φ i Ψ koje
se lako računaju i za koje vrijedi Ψ(Φ( ), ) = Ψ(Φ( ), ), pri čemu se za funkciju Φ postavlja dopunski
zahtjev da se njena inverzna funkcija Φ veoma teško računa, što zapravo znači da ukoliko poznajemo
samo Φ ) i ništa drugo, nema načina da u razumnom vremenu odredimo vrijednost uz pomoć
tehnologije koja nam je danas na raspolaganju. Funkcije koje ispunjavaju taj uvjet nazivamo
jednosmjerne funkcije (engl. one way functions). Ideja je sada vrlo jednostavna. Neka dvije osobe A i B
treba da se dogovore oko vrijednosti ključa . Osoba A izabere nasumice neku vrijednost , izračuna
Φ( ) i pošalje javnim putem izračunatu vrijednost osobi B. Osoba B izabere nasumice neku vrijednost
, izračuna Φ ) i pošalje javnim putem izračunatu vrijednost osobi A. Osoba A sada zna i Φ ), te
može izračunati vrijednost Ψ(Φ ), ). S druge strane, osoba B sada zna i Φ ), te može izračunati
vrijednost Ψ(Φ ), ). Zbog postavljenih zahtjeva na funkcije Φ i Ψ, imamo Ψ(Φ ), ) = Ψ(Φ ), ),
tako da su krajnje vrijednosti koje su dobile osobe A i B jednake. Upravo ta vrijednost se uzima za
dogovorenu vrijednost ključa k. Dakle, osoba A računa ključ po formuli = Ψ(Φ ), ), dok osoba B
računa ključ po formuli = Ψ(Φ ), ). S obzirom da se u javnosti distribuiraju samo vrijednosti Φ ) i
Φ ), a da je poznavanje vrijednosti makar jednog od ili neophodno za računanje ključa, neko ko
prisluškuje tok komunikacije mogao bi izračunati ključ samo ukoliko bi bio u stanju da iz vrijednosti
Φ ) ili Φ ) izračuna vrijednost ili . Međutim, kako je Φ jednosmjerna funkcija, ovo nije moguće
izvesti u razumnom vremenu. Dakle, mada svaka osoba koja je prisluškivala komunikaciju principijelno
posjeduje neophodne informacije na osnovu kojih je moguće izračunati ključ, ona to nije u stanju izvesti.
Drugim riječima, jedino osoba A odnosno osoba B, koje posjeduju vrijednosti odnosno , mogu
izračunati ključ u razumnom vremenu.

Ostaje problem kako odabrati funkcije Φ i Ψ s traženim svojstvima. Teorija brojeva daje mnogo
mogućih odgovora na ovo pitanje. Najpoznatiji je tzv. Diffie-Hellmanov protokol razmjene ključeva,

14
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

kod kojeg je Φ( ) = mod( , ) i Ψ( , ) = mod( , ) gdje je neki veliki prost broj, a neki broj
takav da je primitivna klasa ostataka (primitivni korijen) po modulu . Stoga, prema ovom protokolu,
osobe A i B prvo treba da se dogovore o brojevima i , čime su određene funkcije Φ i Ψ. Bitno je istaći
da se i ovaj dogovor može obaviti javno cilj protokola zapravo i jeste u tome da se niti jedna razmjena
informacija ne mora obavljati u tajnosti). Nakon toga, osoba A bira slučajni broj u opsegu od 0 do
− , računa vrijednost α = mod( , ) i šalje tu vrijednost osobi B. Osoba B također bira slučajnu
vrijednost u opsegu od 0 do − 1, računa vrijednost β = mod( , ) i šalje tu vrijednost osobi A.
Osoba A sada računa ključ po formuli = mod(β , ), dok s druge strane osoba B računa ključ po
formuli = mod(α , ). Da obje formule daju istu vrijednost za , slijedi iz lanca identiteta u
modularnoj aritmetici β ) = ) ) = ) = ) ) = α ) .

Razmotrimo sada šta može učiniti osoba koja prisluškuje razmjenu ključeva po Diffie-Hellmanovom
protokolu. Takva osoba direktno može saznati samo vrijednosti , , α i β. Međutim, za računanje
ključa, potrebno je još znati bilo vrijednost , bilo vrijednost . Prisluškivač može odrediti ove
vrijednosti samo ukoliko je u stanju riješiti bilo jednačinu mod , ) = α po nepoznatoj , bilo
jednačinu mod( , ) = β po nepoznatoj . Obje jednačine su iste vrste i mogu se zapisati u obliku
) = α odnosno ) = β . Formalno gledano, rješenja ovih jednačina glase = ind α i
= ind β , gdje oznaka “ind” predstavlja diskretni logaritam o kojem smo ranije govorili. Međutim
tom prilikom smo također rekli da do danas nisu poznati algoritmi pomoću kojih je u razumnom
vremenu moguće računati diskretne logaritme kad god je modul dovoljno velik. Na taj način nam
teorija brojeva pruža siguran način za razmjenu ključeva.

Ilustrirajmo Diffie-Hellmanov protokol na jednom konkretnom primjeru. Neka su osobe A i B


izabrale prost broj = 7 ovo je samo primjer za ilustraciju; u praktičnim primjenama, za
postizanje dovoljne sigurnosti, broj treba imati više desetina pa i stotina cifara). Provjerom lako
nalazimo da je primitivna klasa ostataka po modulu 7, tako da možemo uzeti = 2. Osoba A
sada nasumice bira broj u opsegu od 0 do 8236, recimo = 5 , i računa vrijednost
α = mod( , 8237) = 5 6, koju šalje osobi B. Isto tako, osoba B bira slučajan broj b u istom opsegu,
recimo = 94, i računa vrijednost β = mod( , 8237) = 55 9, koju šalje osobi A. Osoba A sada
može izračunati ključ po formuli = mod(55 9 , 8237) = 795 . Potpuno istu vrijednost ključa
može dobiti i osoba B, ali prema formuli = mod(5 6 , 8237) = 795 . Na taj način, osobe A i B su se
usaglasile oko vrijednosti ključa, a da pri tome nisu javno razmijenili nikakve informacije na osnovu
kojih bi treća osoba mogla u razumnom vremenu izračunati ključ. Naravno, pošto je u razmotrenom
primjeru ključ sasvim mali za kriptografske svrhe, na osnovu poznatih vrijednosti α i β bi se relativno
lako mogle naći vrijednosti i , recimo grubom silom uz pomoć računara za šta ne bi trebalo više od
nekoliko sekundi).

Vratimo se ponovo na opći problem šifriranja i dešifriranja s ključem. Neka se šifriranje obavlja
pomoću pravila = E( , ) a dešifriranje pomoću pravila = D( , ), gdje su E i D funkcije enkripcije i
dekripcije respektivno, dok je ključ. Vidjeli smo da je osnovni problem pri upotrebi ovakvog metoda
šifriranja kako osigurati tajnost ključa . Mada se ovaj problem može relativno uspješno riješiti
korištenjem nekog od protokola razmjene ključeva, situacija postaje znatno komplikovanija ukoliko je
vrijednost ključa potrebno distribuirati između većeg broja osoba. Iako postoje poopćenja protokola
poput Diffie-Hellmanovog protokola za slučaj razmjene zajedničke vrijednosti ključa između osoba
gdje je proizvoljan prirodan broj, situacija bi bila znatno jednostavnija kada bi se ključ mogao
slobodno distribuirati u javnost. Stoga je prirodno postaviti pitanje da li je ikako moguće ključ također
učiniti javnim.

Na prvi pogled, odgovor na prethodno postavljeno pitanje je odrečan, s obzirom da se iz poznatog


ključa i šifrovane informacije primjenom funkcije D neposredno dobija izvorna informacija . Stoga
je prilično iznenađujuće da je problem ipak rješiv, i to na relativno jednostavan način. Ideja se zasniva
na upotrebi jednosmjernih funkcija. Naime, pretpostavimo da su funkcije E i D takve da je vrijednost
E( , ) lako izračunati na osnovu poznatih i , dok je vrijednost D( , ) na osnovu poznavanja samo i
praktično nemoguće izračunati i u kakvom razumnom vremenu uz pomoć tehnologije koja nam je
danas na raspolaganju drugim riječima, funkcija dekripcije D je jednosmjerna funkcija). Tada je lako
moguće kreirati šifrovanu poruku = E( , ) na osnovu izvorne poruke , dok je izvornu poruku
= D( , ) praktično nemoguće rekonstruisati iz šifrovane poruke , bez obzira što su i funkcija D i
ključ poznati. Doduše, u tom slučaju niko ne bi bio u stanju dešifrirati poruku. Međutim, pretpostavimo
da postoji efikasan algoritam za računanje D( , ) pod uvjetom da se znaju neke dopunske informacije o

15
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

ključu , koje nije moguće na efikasan način odrediti iz poznavanja , i pretpostavimo da samo primalac
poruke (i niko drugi) zna te dopunske informacije. Tada samo primalac poruke može dešifrirati poruku,
bez obzira što su funkcije E i D kao i ključ poznati svima. Za funkcije D s takvim svojstvom kažemo da
su jednosmjerne funkcije s tajnim prolazom (engl. trapdoor one way functions), dok se postupak
šifriranja zasnovan na upotrebi takvih funkcija naziva šifriranje javnim ključem.

Ostaje pitanje kako je moguće da samo primalac poruke zna dopunske informacije neophodne za
efikasno računanje D( , ). Međutim, to uopće nije osobito teško. Na primjer, neka efikasan algoritam
za računanje D( , ) zahtijeva poznavanje rastave broja na proste faktore. Primalac poruke može
uzeti dva ogromna prosta broja i koji imaju, recimo, 100 cifara, i kreirati broj = . Tada primalac
zna proste faktore od , ali niko drugi ko poznaje samo ne može odrediti i , jer ne postoji nikakav
postupak kojim se tako veliki prosti faktori tako velikog broja mogu naći u razumnom vremenu, čak i
uz pomoć najbržih postojećih računara. Dakle, u tom slučaju samo je primalac (i niko drugi) u stanju da
dešifrira poruku.

Kao jedan konkretan primjer šifriranja javnim ključem možemo navesti Rabinov kriptosistem, koji
se direktno zasniva na prethodno opisanoj ideji. Neka je E( , ) = mod( , ) i neka je ≤ < . Tada
za funkciju D mora vrijediti mod(D( , ) , ) = , što se može zapisati i kao D , ) ) = . Dakle,
D( , ) je diskretni kvadratni korijen iz po modulu . Međutim, ranije smo naglasili da je za potrebe
efikasnog računanja kvadratnog korijena po modulu nužno poznavanje prostih faktora broja .
Ukoliko je ogroman broj, niko ne može u razumno vrijeme odrediti proste faktore broja znajući
samo njega, ali neko ko poznaje faktore broja (npr. neko ko je kreirao broj po formuli = gdje su
i izabrani veliki prosti brojevi) može efikasno izračunati D( , ). Ukoliko je taj neko upravo primalac
poruke, samo je on u stanju dešifrirati poruku. Da bi se računanje D( , ) učinilo što lakšim za onog ko
poznaje i ), i se obično biraju tako da vrijedi mod , 4) = mod( , 4) = 3 (brojevi koji su produkt
dva takva prosta broja nazivaju se Blumovi brojevi, odnosno je obično Blumov broj).

Mada je Rabinov kriptosistem veoma jednostavan, njegov osnovni nedostatak je što funkcija D nije
jednoznačna. Zaista, svaki broj koji uopće ima diskretni kvadratni korijen po modulu = ima po tom
modulu četiri različita kvadratna korijena. Odavde slijedi da se iz svake šifrirane poruke mogu
rekonstruisati četiri različita kandidata za izvornu poruku, od kojih naravno samo jedna može biti
prava poruka koja je zaista poslana. Stoga je za praktičnu primjenu Rabinovog kriptosistema potrebno
ugraditi i neku strategiju kojom se prepoznaje prava poruka između četiri moguće poruke. To se obično
postiže ugradnjom izvjesnih signatura u izvornu poruku, čije odsustvo sigurno znači da se ne radi o
pravoj poruci. Nažalost, prisustvo tih signatura čine sistem ranjivijim odnosno olakšava njegovo
probijanje). Zbog opisanih problema, Rabinov kriptosistem se rijetko koristi u praksi.

Od svih postupaka šifriranja javnim ključem, danas se najviše koristi postupak poznat pod nazivom
RSA kriptosistem, čije je ime akronim imena autora R. Rivesta, A. Shamira i L. Adlemana. U ovom
postupku, za šifriranje se koristi formula = mod( , ), pri čemu je 0 ≤ < i NZD( , φ( )) = 1.
Ovdje se kao ključ koristi par ( , ). Bitno je uočiti da Rabinov kriptosistem nije specijalan slučaj RSA
kriptosistema za = 2, s obzirom da uvjet NZD( , φ( )) = 1 kod Rabinovog kriptosistema nije ispunjen.
Može se pokazati da formula za dešifriranje u ovom slučaju glasi = mod( , ) pri čemu je rješenje
linearne kongruencije ≡ 1 (mod ( )) po nepoznatoj drugim riječima, klasa ) je inverzni
element za množenje klase ) ). Računanje ( ) nije moguće obaviti u razumnom vremenu bez
poznavanja prostih faktora od , tako da samo onaj ko poznaje proste faktore od može dešifrirati
poruku (podrazumijeva se da je veliki broj), s obzirom da se samo rješavanje linearne kongruencije
odnosno nalaženje inverznog elementa za množenje) može obaviti efikasno Euklidovim algoritmom.

Treba još napomenuti da RSA postupak zakazuje u slučaju da je poruka takva da za nju vrijedi
NZD( , ) ≠ 1. Međutim, kako se u praksi uvijek uzima da je = gdje su i dva velika prosta broja
i kako je pri tome 0 ≤ < , jedina mogućnost da se dogodi da je NZD , ) ≠ 1 je da bude = ili
= , odnosno ukoliko se dogodi da je poruka tačno jednaka jednom od dva prosta faktora od . Kako
su i veoma veliki brojevi, jasno je da je vjerovatnoća da se ovako nešto dogodi posve zanemarljiva.

Ilustrirajmo RSA postupak na jednom konkretnom primjeru. Neka je primalac poruke izabrao
proste brojeve = 29 i = 37 i kreirao broj = = 1073 (razumije se da su ovi brojevi premali za
praktičnu primjenu, ali mogu lijepo poslužiti kao ilustracija). Primalac lako može izračunati vrijednost
( ) = ( − 1) ( − 1) = 1008. Primalac dalje treba izabrati broj takav da je NZD( , φ( )) = , što se
može efikasno obaviti nasumičnim izborom i provjerom da li je NZD( , φ( )) = 1 pomoću Euklidovog

16
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

algoritma (takav broj uvijek se može naći u relativno malo pokušaja). Na primjer, = 5 je takav broj, jer
je NZD(5, 1008) = . Sada primalac može javno objaviti ključ , ) = (5, 7 ). Također, s obzirom da
vrijednost koja je neophodna za dešifriranje ne zavisi od poruke koja se šifrira, primalac može odmah
izračunati vrijednost iz kongruencije 5 ≡ 1 (mod ), čije se rješenje = 6 5 može efikasno naći
pomoću Euklidovog algoritma. Naravno, izračunatu vrijednost primalac čuva u tajnosti, tako da se par
( , ) = (605, 7 ) često naziva i tajni ključ. Neka sada pošaljilac želi da pošalje poruku = 8. On tada
računa šifrovanu poruku = mod( , 1073) = 57 što smo vidjeli da se može izračunati efikasno) i šalje
je primaocu. Primalac sada lako računa izvornu poruku koristeći formulu = mod(57 , 1073) = 8
što se također izvodi efikasno). Pri tome, niko osim primaoca nije u mogućnosti da izračuna , s
obzirom da niko drugi ne može u razumnom vremenu izračunati vrijednost . Zaista, za računanje
vrijednosti , potrebno je prvo izračunati vrijednost φ( ), što se može izvesti u razumnom vremenu
samo uz poznavanje faktora broja (naravno, ovo vrijedi samo ukoliko je dovoljno velik).
Kao što je već rečeno, poruka koja se šifrira RSA postupkom mora biti u opsegu od do − 1
slično ograničenje vrijedi i za mnoge druge kriptografske protokole). Ukoliko to nije slučaj, izvorna
poruka se dijeli u blokove čija vrijednost leži u navedenom opsegu, nakon čega se svaki od blokova
šifrira zasebno. Ta podjela se može izvesti na razne načine. Najčešći postupak je da se poruka
predstavi kao broj u bazi , tj u formi = +…+ + + gdje je 0 ≤ < za sve
= 0, 1, …, . Nakon toga se svaka “cifra” tako dobijenog broja šifrira RSA postupkom ili nekim
drugim srodnim postupkom), čime se dobija odgovarajuća “cifra” šifrirane poruke. Na kraju se
kompletna šifrirana poruka rekonstruira iz šifriranih cifara kao = +…+ + + .
Recimo, uzmimo da se ponovo koristi RSA postupak s ključem (5, 1073) i neka je potrebno šifrirati
poruku = 321293575. Uzastopnim dijeljenjem i izdvajanjem ostataka pri dijeljenju sa 1073
dolazimo do rastave = 279 ∙ 7 + 67 ∙ 1073 + 9 , odnosno “cifre” broja u bazi 1073 glase
= 279, = 67 i = 893. Sada se svaka “cifra” transformira zasebno RSA postupkom, čime dobijamo
= mod( 79 , 1073) = 943, = mod(67 , 1073) = 324 i = mod( 9 , 1073) = 54. Na kraju se
dobija konačna šifrirana poruka = 943 ∙ 7 + 324 ∙ 1073 + 54 = 1086050953.
Primjer RSA postupka ukazuje na drugi način na koji možemo gledati postupke kriptografije s
javnim ključem. Naime, možemo smatrati da se pri takvim postupcima koriste dva ključa, tzv. javni
ključ (ili ključ za enkripciju) i tzv. tajni ključ (ili ključ za dekripciju) , pri čemu se šifriranje vrši
prema formuli = E( , ), a dešifriranje prema formuli = D( , ). Pri tome, za funkcije E i D kao i
za ključeve i mora vrijediti relacija D(E( , ), ) = . Recimo, kod RSA postupka možemo uzeti
da par ( , ) predstavlja javni ključ, a par , ) tajni ključ. Zbog ovakvog načina posmatranja,
postupci šifriranja s javnim ključem se ponekad nazivaju i asimetrični kriptosistemi (u smislu da se za
šifriranje i dešifriranje koriste različiti ključevi), za razliku od postupaka šifriranja s tajnim ključem,
koji se nazivaju i simetrični kriptosistemi u smislu da se isti ključ koristi i za šifriranje i za
dešifriranje). Jasno je da je zbog relacije D(E( , ), ) = , koja mora biti ispunjena za sve vrijednosti
, uvijek principijelno moguće izračunati tajni ključ iz javnog ključa . Međutim, za praktičnu
primjenljivost kriptosistema, ova mogućnost ne smije biti izvodljiva ni u kakvom razumnom vremenu
(osim za onoga ko posjeduje neke dopunske tajne informacije). Tipično, oba ključa i primalac
poruke računa iz nekih samo njemu poznatih pomoćnih informacija, ali samo ključ objavljuje u
javnosti, dok ključ čuva za sebe. Prednost ovakvog načina posmatranja je u tome što se pri ovakvom
pristupu, funkcija D izražava znatno jednostavniji, izrazima (recimo, kod RSA postupka, D i E su
praktično iste funkcije). Bez obzira na to, matematički posmatrano, ovakav način posmatranja je u
potpunosti ekvivalentan ranije razmotrenom pristupu, u kojem se pojam tajnog ključa nigdje ne
pominje eksplicitno.
Obratimo pažnju da je kod šifriranja s javnim ključem postupak šifriranja jednosmjeran, odnosno
pošaljilac i primalac ne mogu zamijeniti uloge, s obzirom da primalac zna informacije koje pošaljilac ne
zna niti ih zna iko drugi). Međutim, ovaj problem se lako prevazilazi ukoliko se koriste dva ključa i
, pri čemu osoba A zna dodatne informacije o ključu , a osoba B zna dodatne informacije o ključu
. Tada, kada osoba A šalje poruku osobi B, ona šalje šifriranu poruku = E( , ) koju B dešifrira
kao = D( , ), što može uraditi s obzirom da zna dodatne informacije o ključu . S druge strane,
kad osoba B šalje poruku osobi A, ona šalje šifriranu poruku = E( , ) koju A dešifrira kao
= D( , ), što može uraditi s obzirom da zna dodatne informacije o ključu . Alternativno, ukoliko
postupak šifriranja posmatramo na asimetričan način, tada možemo uzeti da osoba A posjeduje javni
ključ i tajni ključ , dok osoba B posjeduje javni ključ i tajni ključ . Osoba A tada šifrira
poruku po formuli = E( , ), koju B dešifrira po formuli = D( , ). Slično, osoba B šifrira
poruku po formuli = E( , ), koju A dešifrira po formuli = D( , ).

17
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

Sada smo u mogućnosti da opišemo jednu revolucionarnu novinu koju pruža šifriranje javnim
ključem, koja je posve neizvodljiva pri šifriranju tajnim ključem. Pretpostavimo da osoba A pored
šifrirane poruke = E( , ) pošalje osobi B također i poruku = E(D( , ), ), koju A može kreirati
efikasno, s obzirom da zna dopunske informacije o ključu . Alternativno, ukoliko stvari posmatramo s
asimetričnog aspekta, ćemo računati kao = E(D( , ), ). Po prijemu poruke , osoba B može
efikasno izračunati vrijednost E D , ), ) odnosno E(D( , ), ), pri čemu se kao rezultat treba
dobiti , jer je
E(D( , ), ) = E(D(E(D( , ), ), ), ) = E(D( , ), )=
odnosno
E(D( , ), ) = E(D(E(D( , ), ), ), ) = E(D( , ), )=

S obzirom da se pretpostavlja da je osoba B prethodno dešifrirala poruku , ona može provjeriti da li je


zaista E(D( , ), ) = odnosno E(D( , ), ) = . Međutim, nakon što se osoba B uvjeri da je
ova relacija zadovoljena, ona može sa sigurnošću tvrditi da je poruka zaista stigla od osobe A (a ne
eventualno od neke treće osobe C koja se lažno predstavlja kao osoba A), s obzirom da niko drugi nije u
stanju efikasno izračunati na osnovu . Stoga se poruka naziva digitalni potpis (engl. digital
signature) poruke . Postojanje digitalnih potpisa je vjerovatno jedna od najfascinantnijih posljedica
tehnika šifriranja s javnim ključem, koja je unijela sasvim nova gledišta u modernu kriptografiju.

Ukoliko se za kreiranje digitalnog potpisa koristi RSA postupak, ili bilo koji drugi kriptografski
protokol kod kojeg je ograničen opseg poruka koje se mogu šifrirati bez potrebe za razbijanjem na
blokove, treba obratiti pažnju na jedan detalj. Naime, čak i u slučaju da je poruka dovoljno mala da se
na nju direktno može primijeniti osnovni definicioni izraz za funkciju E( , ), bez potrebe za
prethodnim razbijanjem poruke na blokove, ne mora značiti da će se na nju moći direktno primijeniti
osnovni definicioni izraz za funkciju D( , ), odnosno moguće je da će računanje međurezultata
= D( , ) zahtijevati razbijanje na blokove. Čak i ako to nije slučaj, može se desiti i da međurezultat
bude prevelik da se digitalni potpis = E( , ) može izračunati bez razbijanja na blokove, tako da i
tada može doći do potrebe za razbijanjem na blokove.

U praksi se digitalni potpisi računaju neznatno drugačije. Naime, gore opisani digitalni potpis dug je
koliko i sama poruka koja se prenosi, što udvostručuje trajanje prenosa poruke. Stoga se digitalni
potpis najčešće računa po modificiranoj formuli = E(D(H( ), ), ), gdje je H neka javno dogovorena
funkcija za koju vrijednosti H( ) leže u znatno užem opsegu nego što je opseg vrijednosti koje može
uzimati. Takva funkcija obično se naziva funkcija raspršenja ili heš (engl. hash) funkcija, dok se
vrijednost H( ) naziva otisak prsta (engl. fingerprint) poruke ili “provarena” poruka (engl. message
digest). Recimo, jednostavan primjer takve funkcije H je H( ) = mod( , ), koja generira samo
vrijednosti H( ) u opsegu od 0 do − pri čemu je zadani parametar, koji određuje veličinu “otiska
prsta”). Na mjestu prijema, provjera potpisa vrši se testiranjem da li je E D , ), ) = H( ), kako bi
trebalo biti.

S obzirom da funkcija H s navedenim svojstvima ne može biti injektivna, za svaku poruku uvijek
postoje poruke , itd. s istim otiskom prsta, tj. za koju je H( ) = H( ) = H( ) = … što otvara
mogućnost da se podmetne lažna poruka s istim potpisom. Stoga, da bi funkcija H bila sigurna za
kriptografske primjene, ona mora biti takva da ne postoji efikasan algoritam kojim se na osnovu
poznate poruke može konstruisati ijedna poruka za koju je H( ) = H( ), niti da se za poznatu
vrijednost ℎ može konstruisati neka poruka za koju vrijedi H( ) = ℎ (jednostavni primjer funkcije H
koji je maloprije naveden ne ispunjava ove sigurnosne kriterije). Postoje brojne funkcije H s traženim
svojstvima, pri čemu se najčešće koristi funkcija H poznata pod kodnim imenom MD5 (Message Digest
ver. 5). Ova funkcija ne može se prikazati jednostavnom formulom, ali je moguće prikazati algoritam za
njeno računanje, koji ovdje nećemo navoditi.

Teorija brojeva se masovno koristi i za konstrukciju protokola pomoću kojih neka osoba koja
poznaje neke tajne informacije može ubijediti druge da poznaje te informacije, bez otkrivanja i
najmanje količine tih informacija. Takvi protokoli nazivaju se ubjeđivanja bez otkrivanja znanja
(engl. zero knowledge proofs). Ovdje je upotrijebljena riječ “ubjeđivanja” a ne “dokazi”, jer se više radi o
ubjeđivanju sagovornika u posjedovanje informacija, nego o klasičnom dokazu u matematičkom smislu.
Opisaćemo primjer jednog takvog protokola. Neka je jedino osobi A povjerena tajna šifra u vidu dva
velika prosta broja i i neka je u javnosti objavljeno da je osoba A ona osoba koja zna proste faktore

18
Dr. Željko Jurić: Diskretna matematika (novi kurs) Predavanje 2
Radna skripta za istoimeni kurs na Elektrotehničkom fakultetu u Sarajevu (akademska godina 2019/20)

broja = (naravno, u javnost je dat samo broj , a ne i faktori i ). Pokazaćemo kako je osoba A u
stanju ubijediti neku drugu osobu koju ćemo nazvati ispitivač) da je baš ona ta osoba, a da pri tome ne
otkrije same brojeve i . Osoba A će narediti ispitivaču da izabere slučajan prirodan broj manji od n
i da ga saopći. Nakon toga, osoba A će izračunati diskretni kvadratni korijen iz po modulu ukoliko
on postoji bolje rečeno, jedan od korijena, pošto ih ima više) i saopćiće ispitivaču rezultat , ili
informaciju da diskretni kvadratni korijen ne postoji. Ispitivač sada lako može provjeriti da li je rezultat
dobar, tj. da li je mod( , ) = . Međutim, već je rečeno da računanje diskretnog kvadratnog korijena
po modulu zahtijeva poznavanje faktora broja , tako da ako je neka osoba zaista u stanju izračunati
, ona mora znati i , odnosno ona mora biti osoba A. Naravno, moglo se desiti da je neka osoba koja
se lažno predstavlja kao A slučajno pogodi vrijednost , iako je vjerovatnoća za tako nešto veoma mala.
Međutim, ako se opisani protokol ponovi više puta s različitim nasumice odabranim vrijednostima i
ako ispitivana osoba svaki put uspješno odredi diskretni kvadratni korijen iz po modulu , svaka
sumnja da se ne radi o osobi A praktično nestaje. Dakle, osoba A je u stanju ubijediti proizvoljnog
ispitivača da je baš ona ta osoba koja poznaje tajne informacije, bez otkrivanja ikakvih informacija kako
te tajne informacije glase.

U navedenom primjeru protokola dokaza bez otkrivanja znanja, tajna informacija sastojala se samo
od dva prosta broja. Opisani protokol se lako može generalizirati za dokazivanje poznavanja
proizvoljne skupine podataka bez njihovog otkrivanja. Nije teško naslutiti kakve ovo mogućnosti otvara
u savremenoj elektronskoj komunikaciji.

19

You might also like