Tegu
yra natūraliųjų skaičių seka; jos elementus vadinsime svoriais. Pasirinkime skaičius
, kurie yra lygūs nuliui arba vienetui. Jei
, tai svorio
nedėsime į kurpinę, jei
- dėsime. Dabar raskime, kiek svers mūsų kuprinė. Jos svoris yra skaičius
.
Taigi sudėti kuprinę iš (1) sistemos svorių reiškia pasirinkti skaičius
, kurie lygūs nuliui arba vienetui, ir apskaičiuoti (2) svorį. Tai nesudėtingas skaičiavimo uždavinys.
O kaip su matematinės kuprinės iškraustymu?
Iškraustyti matematinę kuprinę reiškia žinant (1) svorių sistemą ir skaičių
rasti skaičius
, kad būtų teisinga (2) lygybė. Kad tai gali būti nelengvas uždavinys, galima pavaizduoti pavyzdžiu.
Tegu yra svorių seka
ir svoris
. Iškraustykite kurpinę, t.y. raskite
, kad būtų teisinga lygybė
.
Tikriausiai reiks šiek tiek padirbėti tikrinant variantus. Tačiau kartais iškraustyti matematinę kuprinę būna taip pat paprasta, kaip ir sudėti.
Tarkime mūsų svoriai yra tokie:
Sistemos svoriai sparčiai didėja: sekantis svoris yra didesnis už visų ankstesnių svorių sumą:
.
Iškraustyti kuprinę nesudėtinga. Pavyzdžiui, tegu svoris yra
. Reikia rasti skaičius
, kad būtų teisinga lygybė
.
Kadangi
, tai turi būti
, t.y.
Kadangi
, tai turi būti
, taigi
Panašiai samprotaudami gauname, kad turi būti
Taigi
Jeigu su visais
(1) svorių sistemos nariai tenkina nelygybę
tai tokią svorių sistemą vadinsime sparčiai didėjančių svorių sistema. Taigi (3) yra sparčiai didėjančių svorių sistema. Panašiai, kaip šios sistemos atveju, kuprinės iškraustymo uždavinį galima greitai išspręsti ir turint bet kurią kitą sparčiai didėjančių svorių sistemą.
Taigi sparčiai didėjančių svorių sistemos atveju kuprinės iškraustymo uždavinį galima išspręsti lengvai, o kitais atvejais - sunkiai.
Kad būtų lengva šifruoti ir iššifruoti reikia naudotis, pavyzdžiui, sparčiai didėjančių svorių sistema. Ši svorių sistema būtų kriptosistemos raktas, kurį turėtų saugoti abu ryšio dalyviai. Gautume simetrinę kriptosistemą ir tiek. Tačiau R. Merkle ir M. Hellmanas norėjo sukurti viešojo rakto kriptosistemą. Panagrinėkime, kaip jie tai padarė.
po to pasirinkime skaičių
, kad būtų
Dabar pasirinkime kokį nors natūralųjį skaičių
, kad būtų
. Skaičius
turi atvirkštinį moduliu N, raskime jį. Tegu tas atvirkštinis yra
, taigi
Privataus rakto parinkimas baigtas. Privatųjį Birutės raktą sudaro:
, skaičiai
.
Ši naujoji svorių sistema ir yra viešasis raktas. Ją sudaro nebe sparčiai didėjantys svoriai. Vadinasi, viešasis raktas yra tiesiog sugadinta sparčiai didėjančių svorių sistema.
Taigi Algis, norėdamas nusiųsti Birutei pranešimą
, gali nusiųsti šifrą
Jeigu svorių skaičius sistemoje
yra didelis, o svoriai nėra sparčiai didėjantys, galime nebijoti, kad kriptoanalitikas Zigmas iššifruos sugautą šifrą (suras skaičius, tenkinančius (4) lygybę, jei žinoma reikšmė
ir svoriai
). Žinoma, sugaišęs daug laiko jis gali tai padaryti, tačiau tada pranešimas bus tikriausiai nebevertingas ir jo pastangos nueis vėjais.
pačiai Birutei? Juk ieškoti skaičių
iš (4) lygybės jai taip pat sunku. Tačiau jai to daryti ir nereikia. Ji žino, kad blogi svoriai
gauti iš gerų svorių
ir gali dabar tuo pasinaudoti. Iš tikrųjų, kadangi
, tai
. Tačiau skaičius
yra skaičiaus
atvirkštinis moduliu N, t.y.
. Padauginę lygybę
iš t moduliu N gautume
Jeigu iš
moduliu
padaugintume lygybę
gautume:
Taigi
Tačiau reiškinys
yra mažesnis už
. Vadinasi, galima tiesiog rašyti
Štai ši lygybė ir rodo, kaip turi elgtis Birutė. Apskaičiavusi sandaugos
dalybos iš
liekaną
, ji gali ieškoti skaičių
iš lygybės
Taigi dešifruojant Birutei tenka spręsti kuprinės iškraustymo uždavinį, kai svoriai sudaro sparčiai didėjančią seką.
Aptartoji kriptosistema taip ir vadinama - kuprinės kriptosistema (knapsack cryptosystem).
1.4.5 [sepa]