matej trop metode deljenja skrivnostimetode deljenja skrivnosti klju cne besede: deljenje...

78
UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RA ˇ CUNALNI ˇ STVO IN INFORMATIKO Matej Trop Metode deljenja skrivnosti Magistrsko delo Maribor, december 2017

Upload: others

Post on 07-Mar-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO, RACUNALNISTVO IN

INFORMATIKO

Matej Trop

Metode deljenja skrivnostiMagistrsko delo

Maribor, december 2017

Page 2: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek
Page 3: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Metode deljenja skrivnostiMagistrsko delo

Student: Matej Trop

Studijski program: Magistrski studijski program

Racunalnistvo in informacijske tehnologije

Mentor: izr. prof. dr. Damjan Strnad

Lektor: Esnet, Spela Krivec s.p.

Maribor, december 2017

Page 4: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

ZAHVALA

Posebna zahvala gre najprej mojemu mentorju, izr. prof. dr. Damjanu Strnadu, za

strokovno pomoc in usmerjanje pri nastajanju te magistrske naloge.

Iskreno hvala tudi moji druzini in vsem tistim, ki so me v casu studija podpirali in

mi kakorkoli stali ob strani.

Hvala.

Page 5: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Metode deljenja skrivnosti

Kljucne besede: deljenje skrivnosti, kriptografija, varnost, hranjenje podatkov

UDK: 004.08:512.624.95(043.2)

Povzetek

Metode deljenja skrivnosti so kriptografske metode, ki s posebnimi postopki skrivnost

razdelijo na deleze. Iz dovolj velike podmnozice teh delezev lahko nato izracunamo

zacetno skrivnost, medtem ko premajhna mnozica delezev ne izda nobene informacije

o skrivnosti. V magistrskem delu smo opisali in implementirali tri razlicne metode

deljenja skrivnosti, ki delujejo nad poljubnimi podatki, uporabne pa so tudi za poraz-

deljeno racunanje, avtorizacijo z vec udelezenci ipd. Pri testiranju se je ena izkazala

za prevec pocasno, drugi dve pa brez tezav delujeta na manjsih kolicinah podatkov.

Na koncu smo napisali se preprosto spletno aplikacijo, ki prikazuje primer varnega

izracuna delezev, hranjenja in rekonstrukcije skrivnosti.

Page 6: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Secret sharing methods

Key words: secret sharing, cryptography, security, data storage

UDK: 004.08:512.624.95(043.2)

Abstract

Secret sharing methods are cryptographic methods which divide a given secret into

shares. The initial secret can then be reconstructed with a large enough subset of these

shares, while a too small set provides no useful information about the secret. These

methods can also be used in distributed computing and authorization which requires

the cooperation of multiple entities. Three different methods were implemented,

which can be used on any kind of data. When testing these methods, it turned out

that one of the methods was too slow to be useful for bigger amounts of data, while

the remaining two worked smoothly. In the end a simple web application was written,

which shows how to safely distribute shares, store them and reconstruct the secret.

Page 7: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek
Page 8: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Kazalo

1 Uvod 1

2 Matematicne osnove 3

2.1 Grupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1.1 Splosna definicija grupe . . . . . . . . . . . . . . . . . . . . . 3

2.2 Polja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3 Polinomi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.4 Galvajeva polja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.4.1 Aritmetika v Galvajevih poljih . . . . . . . . . . . . . . . . . . 7

2.4.2 Mnozenje in multiplikativni inverz v Galvajevih poljih . . . . . 8

3 Osnove deljenja skrivnosti 11

3.1 Shamirjeva metoda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.1.1 Lagrangeva interpolacija . . . . . . . . . . . . . . . . . . . . . 13

3.2 Blakleyeva metoda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3 Kitajski izrek o ostankih . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.1 Postopek resevanja . . . . . . . . . . . . . . . . . . . . . . . . 17

3.4 Celicni avtomati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.4.1 Zgodovina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.4.2 Enodimenzionalni binarni celicni avtomati . . . . . . . . . . . 20

3.4.3 Deljenje skrivnosti s celicnimi avtomati . . . . . . . . . . . . . 21

viii

Page 9: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4 Predstavitev implementiranih algoritmov 24

4.1 Metoda Asmuth-Bloomova . . . . . . . . . . . . . . . . . . . . . . . . 24

4.1.1 Opis algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.1.2 Varnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.2 Metoda deljenja skrivnosti s celicnimi avtomati in metodo Asmuth-

Bloom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.2.1 Opis algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.2.2 Slabosti in prednosti . . . . . . . . . . . . . . . . . . . . . . . 28

4.3 Metoda deljenja skrivnosti z detekcijo goljufov . . . . . . . . . . . . . 28

4.3.1 Opis algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.3.2 Prednosti in slabosti . . . . . . . . . . . . . . . . . . . . . . . 31

4.4 Rabinov IDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.4.1 Opis algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.4.2 Prednosti in slabosti . . . . . . . . . . . . . . . . . . . . . . . 35

5 Implementacije 36

5.1 Projekt OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.1.1 Uporaba knjiznice . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.1.2 Struktura BIGNUM . . . . . . . . . . . . . . . . . . . . . . . 37

5.1.3 Aritmetika v GF(2m) . . . . . . . . . . . . . . . . . . . . . . . 39

5.2 Metoda deljenja skrivnosti s CA in kitajskim izrekom o ostankih . . . 40

5.3 Metoda deljenja skrivnosti z detekcijo goljufov . . . . . . . . . . . . . 45

5.3.1 Uporabljene funkcije . . . . . . . . . . . . . . . . . . . . . . . 45

5.3.2 Implementacijski detajli . . . . . . . . . . . . . . . . . . . . . 46

5.4 Rabinov IDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.4.1 Uporabljene funkcije . . . . . . . . . . . . . . . . . . . . . . . 48

5.4.2 Implementacijski detajli . . . . . . . . . . . . . . . . . . . . . 49

Page 10: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.5 Aplikacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.5.1 Priprava podatkov . . . . . . . . . . . . . . . . . . . . . . . . 50

5.5.2 Opis aplikacije . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

6 Rezultati 53

7 Sklep 61

Literatura 63

Page 11: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 1

Uvod

Dandanes je vse okrog nas ogromno podatkov. Ti so postali eden od najvecjih virov

napredka, inovacij in hkrati tudi prihodka v razvitih drzavah. Zaradi tega je zelo

pomembno, kako jih varujemo in upravljamo. V tem magistrskem delu se bomo

ukvarjali z metodami deljenja skrivnosti, ki omogocajo varno porazdelitev skrivnosti

po vec lokacijah na tak nacin, da skrivnost ni ogrozena, ce izgubimo enega ali vec delov

skrivnosti. Metode samostojno niso namenjene varovanju velikih kolicin podatkov.

Kljub temu jih lahko uporabimo za ta namen, ceprav to ni priporoceno, ampak je

bolje, da podatke zakodiramo na drug nacin (na primer AES) in nato uporabimo

poljubno metodo za deljenje skrivnosti nad kljucem.

Namen dela je raziskati metode deljenja skrivnosti, jih podrobneje preuciti in

nato implementirati. Hkrati je pomembno, da proucimo matematicna orodja, ki

omogocajo ucinkovito in varno implementacijo metod. Pri implementaciji bomo upo-

rabili knjiznico OpenSSL. Proucili bomo obstojeco dokumentacijo, ki pa ne vsebuje

vseh podrobnosti, zato bomo morali pregledati tudi kodo knjiznic. Implementirali

bomo tri metode deljenja skrivnosti: metodo z uporabo celicnih avtomatov in kitaj-

skega izreka o ostankih, metodo deljenja skrivnosti z detekcijo goljufov in Rabinov

algoritem za razprsevanje informacij. Implementacije metod bomo tudi testirali, pri-

merjali, kako ucinkovite so, in porocali o tem, katera je primernejsa za doloceno vrsto

podatkov. Uporabo metod bomo nato predstavili s preprosto spletno aplikacijo za

shranjevanje in deljenje skrivnosti. Pri tem moramo omogociti varno komunikacijo in

prenos skrivnosti na razlicne lokacije ter zagotoviti, da je celoten sistem zanesljiv in

ucinkovit.

Najprej bomo v poglavju 2 na kratko opisali matematicna osnove, ki jih potrebu-

jemo za boljse razumevanje predlaganih metod deljenja skrivnosti v izbranih clankih.

Za implementacijski del je se posebej pomembno, da poznamo Galvajeva polja in

aritmeticne operacije v njih. Nato bomo v poglavju 3 pregledali zgodovino metod

deljenja skrivnosti in osnovne metode, ki so se prve pojavile in so aktualne se danes.

1

Page 12: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

2 Uvod

V poglavju 4 bomo predstavili algoritme, ki smo jih implementirali v sklopu tega dela.

Teoreticni opis metod bomo razdelili v stiri podpoglavja, pri cemer bo eden izmed

algoritmov (Asmuth-Bloomova metoda) del vecje metode, kjer bomo zdruzili uporabo

dveh metod. Poglavje 5 bo vsebovalo opis knjiznic OpenSSL in implementacije metod

za deljenje skrivnosti. Opisali bomo uporabo knjiznic libcrypto in libssl, njune poseb-

nosti in vkljucitev v nas projekt. Pri implementacijah metod bomo opisali uporabo

glavnih funkcij, s katerimi izracunamo deleze in rekonstruiramo skrivnosti, obliko za-

pisa delezev in dodatne stvari, na katere moramo paziti pri uporabi. Na koncu bomo

v podpoglavju 5.5 opisali aplikacijo, v kateri bomo zdruzili implementirane metode in

uporabljene tehnologije. Nato bomo v poglavjih 6 in 7 predstavili izmerjene rezultate

in podali ugotovitve.

Page 13: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 2

Matematicne osnove

2.1 Grupe

Koncept grupe nam pomaga zdruziti veliko matematicnih struktur, ki na prvi pogled

izgledajo nepovezane. Teorija grup je postala zelo pomembna v kriptografiji, saj lahko

vsaka dovolj velika koncna grupa predstavlja kriptografski sistem [18].

2.1.1 Splosna definicija grupe

Definicija 2.1.1 (Grupa). Mnozica G, skupaj z binarno operacijo *: G×G→ G, je

grupa, ce:

1. za vse a, b, c ∈ G velja

(a ∗ b) ∗ c = a ∗ (b ∗ c) (asociativnost),

2. obstaja tak e ∈ G, da za vsak g ∈ G velja

e ∗ g = g ∗ e,

3. za vsak g ∈ G obstaja tak g ∈ G, da velja:

g ∗ h = e = h ∗ g.

Grupo G, skupaj z operacijo *, bomo na kratko zapisovali kot (G, ∗).

Opomba 2.1.1. Element e iz 2. tocke zgornje definicije bomo na kratko imenovali

enota, element h iz 3. tocke omenjene definicije pa inverz elementa g. Seveda je

element h odvisen od izbire elementa g.

3

Page 14: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4 Matematicne osnove

Za nas bosta pomembni samo dve vrsti grup, zato ju bomo na tem mestu tudi

predstavili:

• Grupo Zn dobimo tako, da mnozico celih stevil (Z) opremimo z operacijo

sestevanja po modulu n.

• Grupo Z∗n dobimo tako, da mnozico celih stevil opremimo z operacijo mnozenja

po modulu n.

2.2 Polja

Definicija 2.2.1 (Polje). Mnozici F , skupaj z binarnima operacijama + : F×F → F

in ∗ : F × F → F , recemo polje, ce velja:

1. za vsaka a, b ∈ F je a + b = b + a (tej lastnosti recemo komutativnost

sestevanja),

2. za vse a, b, c ∈ F je a+ (b+ c) = (a+ b) + c (tej lastnosti recemo asociativnost

sestevanja),

3. obstaja tak element 0 ∈ F , da za vsak a ∈ F velja a+ (−a) = (−a) + a = 0,

4. za vsak element a ∈ F obstaja element b ∈ F , da velja a+ b = b+ a = 0,

5. za vsaka a, b ∈ F je a · b = b · a (tej lastnosti recemo komutativnost mnozenja),

6. za vse a, b, c ∈ F je a · (b · c) = (a · b) · c (tej lastnosti recemo asociativnost

mnozenja),

7. obstaja tak element 1 ∈ F , da za vsak a ∈ F velja a · 1 = 1 · a = a,

8. za vsak neniceln element a ∈ F obstaja element b ∈ F , da velja a · b = b · a = 1,

9. za vse a, b, c ∈ F velja a · (b+ c) = a · b+ a · c (tej lastnosti pravimo distribu-

tivnost).

Lastnosti 1-4 pomenijo, da je F grupa z operacijo sestevanja, lastnosti 5-7 pa, da

je F tudi grupa z operacijo mnozenja [18].

Page 15: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

2.3 Polinomi 5

Za vsako prastevilo p je podmnozica celih stevil Zp = 0, 1, 2, ..., p − 1, skupaj

z operacijo sestevanja, po modulu p, ⊕ : Zp × Zp → Zp definirana kot

a⊕ b = (a+ b) (mod p),

in operacijo mnozenja, po modulu p, : Zp × Zp → Zp, definirana kot

a b = (a · b) (mod p)

polje. To polje je koncno in ima natanko p elementov. V literaturi stevilo p imenujejo

tudi kardinalnost polja Zp.

2.3 Polinomi

Naj F oznacuje polje. Vsak izraz

f(x) =n∑i=0

aixi,

kjer je ai ∈ F , oznacuje polinom preko polja F . Spremenljivka n je poljubno pozitivno

celo stevilo, ki ji recemo stopnja polinoma f in je najvecja potenca spremenljivke x,

ki se pojavi v polinomu[18].

Zapis lahko poenostavimo, saj vedno velja x1 = x in x0 = 1 za vsa kompleksna

stevila x:

f(x) = anxn + an−1xn−1 + ...+ a2x

2 + a1x+ a0.

Definirajmo operaciji sestevanja in mnozenja polinomov. Imejmo polinoma

f(x) =k∑i=0

aixi g(x) =

m∑i=0

aixi

stopenj k in m, da velja k ≥ m. Sestevanje je potem definirano na naslednji nacin:

f(x) + g(x) =k∑i=0

(ai + bi)xi,

Page 16: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

6 Matematicne osnove

ko je i vecji od stopnje polinoma g, pa predpostavimo, da je bi = 0. Mnozenje

izvedemo tako, da med seboj pomnozimo vse clene polinomov:

f(x)g(x) =k+m∑i=0

i∑j=0

(ajbi−j)xi.

2.4 Galvajeva polja

Polju, ki ima koncno mnogo elementov, recemo koncno polje. Oznaka Zp oznacuje

mnozico celih stevil s p elementi 0, 1, ..., p− 1. Ce je p prastevilo, lahko definiramo

tudi polje s pm elementi, kjer je m poljubno stevilo.

Tej posebni skupini koncnih polj recemo Galvajeva polja (angl. Galois Field) in

jih oznacimo z oznako GF (pm). Prastevilom p recemo tudi karakteristike Galvajevega

polja. Ta so sestavljena iz polinomov stopnje m− 1 nad poljem Zp in imajo naslednji

predpis:

am−1xm−1 + ...+ a1x

1 + a0x0,

kjer imajo koeficienti ai vrednosti iz mnozice 0, 1, ..., p− 1 [20].

V racunalnistvu so najpogosteje uporabljena Galvajeva polja, kjer je p = 2,

koeficienti a0, ..., am−1 pa imajo lahko samo binarno vrednost 0 ali 1.

Primera Galvajevih polj sta:

GF (51) = 0x0, 1x0, 2x0, 3x0, 4x0 = 0, 1, 2, 3, 4,

ki vsebuje 5 elementov, polinomov stopnje nic, medtem ko polje

GF (23) = 0x2 + 0x1 + 0x0, 0x2 + 0x1 + 1x0,

0x2 + 1x1 + 0x0, 0x2 + 1x1 + 1x0,

1x2 + 0x1 + 0x0, 1x2 + 0x1 + 1x0,

1x2 + 1x1 + 0x0, 1x2 + 1x1 + 1x0

vsebuje 23 = 8 elementov in je vsak element polinom stopnje najvec 2. Koeficiente z

vrednostjo 0 pri zapisu ponavadi izpustimo.

V literaturi se pojavlja tudi zapis, v katerem se spremenljivka x nadomesti s

Page 17: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

2.4 Galvajeva polja 7

karakteristiko polja p, tj. GF (23) = 0, 20, 21, 21 + 20, ..., 22 + 21 + 20, oziroma

polinome nadomestimo s celimi stevili, kjer posamezni bit predstavlja koeficiente

polinoma: GF (23) = 000b = 0, 001b = 1, 010b = 2, ..., 111b = 8. Predstavitev s

celimi stevili se pogosto uporablja v programskih aplikacijah, tudi v nasih algoritmih

in knjiznicah OpenSSL.

2.4.1 Aritmetika v Galvajevih poljih

Najprej si poglejmo, kako je v Galvajevih poljih GF (pn) definirana operacija

sestevanja. Naj bosta f(p) in g(p) poljubna polinoma iz GF (pn). Oznacimo z

A = an−1an−2...a1a0 koeficiente polinoma f(p), z B = bn−1bn−2...b1b0 koeficiente

polinoma g(p) in s C = cn−1cn−2...c1c0 koeficiente polja h(p), pri cemer naj velja

h(p) = f(p) + g(p). Ce so ak, bk in ck koeficienti polinomov f(p), g(p) in h(p), ki

stojijo pred vodilnim clenom pk, potem za vsak k = 0, 1, ..., n− 1 velja enakost:

ck = ak + bk (mod p).

Za uporabo v racunalnistvu je najbolj primerno polje GF (28), kjer so elementi

lahko predstavljeni kot zlogi. Ce koeficienta ak in bk predstavljata k-ti bit v zlogu in

ju sestejemo, potem k-ti bit ck v vsoti dobimo po enacbi:

ck = ak + bk (mod 2). (2.1)

Ker je 0 + 1 = 1 + 0 = 1 ≡ 1 (mod 2), 1 + 1 = 2 ≡ 0 (mod 2) in 0 + 0 = 0 ≡0 (mod 2), lahko sestevanje nadomestimo z operacijo XOR. V primeru, ko sta obe

vrednosti enaki, operacija XOR vrne 0, v primeru, ko sta razlicni, pa vrne vrednost

1. Zaradi lastnosti sestevanja v Galvajevem polju GF (28) vsota dveh zlogov nikoli ne

preseze vrednosti 11111111 = 255.

Page 18: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

8 Matematicne osnove

Zgled:

Denimo, da obravnavamo Galvajevo polje GF (28). S pomocjo enacbe 2.1 izracunajmo

vsoto 83 + 249.

83 + 249 = (26 + 24 + 21 + 20) + (27 + 26 + 25 + 24 + 23)

= 27 + 2 · 26 + 25 + 2 · 24 + 23 + 21 + 2 · 20

= 27 + 25 + 23 + 21

= 169

Operacijo lahko zapisemo tudi v binarni obliki kot:

83 + 249 = 01010011

+ 11111001

= 10101010

= 169.

2.4.2 Mnozenje in multiplikativni inverz v Galvajevih poljih

Mnozenje v Galvajevih poljih je zahtevnejsa operacija. Definiramo jo na naslednji

nacin [6]:

Naj bosta f(p) in g(p) poljubna polinoma iz GF (pn) in naj bo m(p) poljuben

nerazcepni polinom (angl. irreducible polynomial) nad poljem GF (pn) stopnje vsaj

n. Pri tem bomo pod frazo ”m(p) je nerazcepni polinom nad poljem F”razumeli, da

polinoma m(p) ne moremo zapisati kot produkt dveh nekonstantnih polinomov s

koeficienti iz polja F . Da ob mnozenju polinomov f(p) in g(p) ne presezemo najvecje

mozne vrednosti n-bitnega stevila, pri izbiri polinoma m(p) pazimo, da je stopnje

vsaj n. Na primer, za n = 8 je ta vrednost 11111111 = 255, saj je produkt hranjen

kot zlog. Ce s h(p) oznacimo produkt polinomov f(p) in g(p), potem velja:

h(p) ≡ (f(p) · g(p)) (mod m(p)).

Za multiplikativni inverz polinoma f(p), ki ga oznacimo kot a(p), velja naslednja

zveza:

(f(p) · a(p)) ≡ 1 (mod m(p)).

Page 19: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

2.4 Galvajeva polja 9

Da lahko izracunamo produkt dveh polinomov, moramo reducirati njune koeficiente

po modulu p, da lahko izracunamo multiplikativni inverz nekega polinoma, pa mo-

ramo reducirati njegove koeficiente po modulu m(p). Izkaze se, da je za izracun

multiplikativnega inverza najbolje uporabiti t. i., razsirjen Evklidov algoritem [8].

Za vsak n obstaja vec moznih nerazcepnih polinomov. Te moramo izbrati pre-

vidno, saj je od njih odvisna operacija mnozenja, ki je ze sama po sebi pocasna. Z

izbiro polinoma, ki ima veliko nenicelnih koeficientov, njeno casovno zahtevnost se

povecamo. Pri n = 8 uporabimo kar polinom, ki se uporablja tudi v AES [9]. Za

ostale n moramo polinome poiskati sami, za kar moramo implementirati zahtevne

algoritme [15]. Izracunani in prosto dostopni so polinomi za vse n do vkljucno 10000,

kar je za potrebe nasih metod, ki jih bomo predstavili v nadaljevanju, dovolj [16].

Zgled:

Denimo, da racunamo v GF (28). Naj bo m(p) = p8 + p4 + p3 + p1 + p0 izbran

nerazcepen polinom. Produkt 182 · 83 izracunamo v vec korakih. Stevili zapisemo

kot polinoma, izracunamo produkt polinomov in reduciramo njegove koeficiente po

modulu 2.

1. 182 · 83 = ((27 + 25 + 24 + 22 + 21) · (26 + 24 + 21 + 20))

= (213 + 2 · 211 + 210 + 29 + 28 + 27 + 2 · 26 + 25 + 24 + 23 + 2 · 22 + 21)

≡ (213 + 210 + 29 + 28 + 27 + 25 + 24 + 23 + 21) (mod m(p))

2. r(2) = 25 · (m(p)) = (213 + 29 + 28 + 26 + 25)

t(2) = 22 · (m(p)) = (210 + 26 + 25 + 23 + 22)

V tem koraku si pripravimo polinoma, produkta nerazcepnega polinoma s

polinomom poljubne stopnje. Polinoma r(2) in t(2) nato pristejemo zgoraj

izracunanemu polinomu. Rezultat je reduciran polinom, ki je stopnje najvec 7.

3. (213 + 210 + 28 + 27 + 25 + 24 + 23 + 21) + r(2) ≡ (210 + 26 + 24 + 23 + 21) (mod 2)

4. (210 + 26 + 24 + 23 + 21) + t(2) ≡ (25 + 24 + 22 + 21) (mod 2)

Koncni rezultat je tako 25 + 24 + 22 + 21 = 54.

Zdaj pa za stevilo 83 izracunajmo se multiplikativni inverz.

Page 20: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

10 Matematicne osnove

Ostanek Kvocient Pomozna spremenljivka

28 + 24 + 23 + 21 + 20 0

26 + 24 + 21 + 20 20 = 1

22 22 + 1 22 + 20

21 + 20 24 + 22 26 + 22 + 1

20 2 + 1 27 + 26 + 23 + 21

V prvih dveh vrsticah sta nerazcepni polinom in polinom, katerega inverz zelimo

izracunati. Pomozni spremenljivki sta tukaj vedno 0 in 20 = 1. Z dolgim deljenjem

polinomov v vrsticah n − 1 in n − 2 dobimo nov ostanek in kvocient v vrstici n.

Postopek ponavljamo, dokler ostanek ni enak 20. Pomozno spremenljivko v n-ti vrstici

dobimo tako, da sestejemo pomozno spremenljivko v vrstici n−2 in produkt kvocienta

ter pomozne spremenljivke v vrstici n− 1. Koncna vrednost pomozne spremenljivke

je multiplikativni inverz. Za stevilo 83 je ta vrednost 27 + 26 + 23 + 21 = 202.

Page 21: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 3

Osnove deljenja skrivnosti

Nekateri podatki, kot na primer kljuci RSA, podatki o bancnih racunih, so tako po-

membni, da predstavljajo ’skrivnost’. Ce skrivnost porazdelimo po prevec lokacijah,

tvegamo, da bo ukradena, ce jo porazdelimo po premalo lokacijah, pa lahko podatke

izgubimo ali se po nesreci unicijo.

Leta 1979 sta, neodvisno drug od drugega, Adi Shamir in George Blakley prva

razvila t. i. metodo deljenja skrivnosti (angl. secret sharing method) ([17], [7]).

Gre za kriptografsko metodo, ki skrivnost razdeli med udelezence tako, da lahko do nje

dostopa vsaka dovolj velika podskupina. Njuna zacetna motivacija je bila varovanje

kriptografskih kljucev pred izgubo, kasneje pa so dobili stevilne druge aplikacije, kot

na primer nadzor dostopa, odpiranje sefov, porazdeljeno racunanje itd.

Osnovni primer teh metod je (k, n)-shema, kjer sta k in n celi stevili in velja 1 ≤k ≤ n. V ospredju obstaja zaupanja vredna organizacija, ki jo bomo imenovali delivec

(angl. dealer). Ta iz zacetne skrivnosti izracuna n delezev in jih varno porazdeli med

n udelezencev. Skrivnost lahko rekonstruira vsaka podmnozica udelezencev, ki skupaj

pozna k ali vec delezev skrivnosti, medtem ko katera koli druga skupina, ki pozna

samo k − 1 ali manj delezev, ne more rekonstruirati skrivnosti.

V shemi so lahko vsi udelezenci enako pomembni, lahko pa nekaterim dode-

limo vecjo odgovornost/pomembnost. Ce to zapisemo bolj formalno, imamo mnozico

udelezencev U = 1, 2, ..., n in delivca D. Naj bo 2U (uporablja se tudi oznaka P(U))

potencna mnozica udelezencev U . Podmnozici Γ ⊆ 2U recemo dostopna struktura

(angl. access structure), ce zanjo velja naslednji pogoj:

ce je X ∈ Γ in X ⊆ Y, potem je Y ∈ Γ. (3.1)

Temu pogoju recemo monotona lastnost in odraza zahtevo po tem, da ce neka skupina

udelezencev pozna skrivnost, potem jo tudi vsaka njena nadskupina. Ta struktura je

11

Page 22: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

12 Osnove deljenja skrivnosti

javna in jo poznajo vsi uporabniki. Skupini udelezencev, ki pozna skrivnost, recemo

avtorizirana zdruzba (angl. authorized coalition).

Naj bo Γ ⊆ 2U dostopna struktura. Zdruzba C ∈ 2U je minimalna avtorizirana

zdruzba, ce je avtorizirana in nobena njena pravilna podmnozica ni avtorizirana. Za-

radi monotone lastnosti (3.1) je dostopna struktura popolnoma definirana z mnozico

njenih minimalnih avtoriziranih zdruzb Γmin.

Predvidevamo, da je vsak udelezenec del vsaj ene minimalne avtorizirane

zdruzbe, saj v nasprotnem primeru ne prinasa nobenih koristnih informacij k nobeni

zdruzbi uporabnikov in je tako odvec.

Zgled: (k, n)-shema je sestavljena iz vseh podmnozic mnozice 2U , ki vsebujejo k

ali vec udelezencev. Za zgled vzamimo (2, 3)-shemo, kjer imamo tri udelezence

U = 1, 2, 3 in Γmin = 1, 2, 1, 3, 2, 3. Vidimo, da so vsi udelezenci enako po-

membni, saj lahko katera koli dva udelezenca rekonstruirata skrivnost. Ce pa imamo

na primer enako mnozico U = 1, 2, 3 in je Γmin = 1, 2, 1, 3, damo udelezencu

1 veliko vecjo pomembnost kot preostalima udelezencema, saj brez njega rekonstruk-

cija skrivnosti ni mogoca. Hkrati pa udelezenec 1 ni vsemogocen, saj mora sodelovati

vsaj se z enim drugim udelezencem.

Metoda deljenja skrivnosti je popolna, ce je velikost vsakega deleza vecja ali

enaka velikosti zacetne skrivnosti. V primeru, ko sta ti dve velikosti enaki, je metoda

idealna in za hranjenje posameznega deleza ne potrebujemo vec prostora, kot bi ga

potrebovali za hranjenje originalne skrivnosti.

Pogledali si bomo Shamirjevo metodo, ki temelji na polinomski interpolaciji, in

Blakleyevo metodo, ki temelji na afinih hiperravninah.

Poleg metod bomo predstavili tudi kitajski izrek o ostankih in celicne avtomate,

ki sta postopka, na katerih temeljijo nekatere metode deljenja skrivnosti.

3.1 Shamirjeva metoda

Metoda, ki jo je razvil Shamir [17], temelji na interpolaciji polinomov (glej 3.1.1).

Recimo, da je nasa skrivnost pozitivno celo stevilo s. Ker je to (k, n)-shema, bomo

v nadaljnje crki k in n uporabljali izkljucno za ponazoritev teh dveh spremenljivk.

Izberemo si prastevilo p, ki je vecje od s in n. S tem zagotovimo, da je polje Zp dovolj

Page 23: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

3.1 Shamirjeva metoda 13

veliko, da s pripada polju Zp in da ni nevarnosti, da bi z lahkoto uganili skrivnost s.

Pri tej metodi skrivnost razdelimo na n delov z naslednjim postopkom:

1. Generiramo k − 1 nakljucnih koeficientov t1, ..., tk−1 ∈ Zp, prostemu clenu pa

nastavimo vrednost t0 = s.

2. Iz generiranih koeficientov tvorimo polinom p(x) =k−1∑i=0

tixi.

3. Uporabniku i nato damo delez skrivnosti, ki je predstavljen s parom stevil

(i, p(i)), za vsak i = 1, ..., n.

Da lahko rekonstruiramo skrivnost, moramo poznati k delezev, postopek rekon-

struiranja pa je naslednji:

1. z uporabo polinomske interpolacije, kot je na primer Lagrangeova interpolacija

3.1.1, izracunamo koeficiente polinoma p(x),

2. iskana skrivnost s je vrednost prostega clena polinoma p(x).

Na kratko opisimo postopek Lagrangeove interpolacije.

3.1.1 Lagrangeva interpolacija

Lagrangeve polinome uporabljamo za polinomsko interpolacijo. Ce poznamo mnozico

medsebojno razlicnih tock αi in poljubnih stevil βi, potem je Lagrangeov polinom, po-

linom najnizje stopnje, ki za vsako vrednost αi zavzame ustrezno vrednost βi (funkciji

v teh tockah sovpadata) [18].

Naj bo F poljubno polje in naj bodo α1, ..., αk medsebojno razlicni elementi polja

F in β1, ..., βk poljubni elementi polja F. Potem obstaja samo en polinom:

f(x) =k∑i=0

βi(x− α0)...(x− αi−1)(x− αi+1)...(x− αk)

(αi − α0)...(αi − αi−1)(αi − αi+1)...(αi − αk)(3.2)

s stopnjo najvec k, da velja f(αi) = βi za i = 0, 1, ..., k.

Page 24: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

14 Osnove deljenja skrivnosti

Zgled:

Naj bo s = 55 izbrana skrivnost, ki jo razdelimo na stiri dele, za njeno rekonstrukcijo

pa zahtevamo, da sodelujejo trije udelezenci. Parametri deljenja skrivnosti so torej:

s = 55

k = 3

n = 4

Izberemo poljuben polinom stopnje k, ki ima prosti clen enak s = 55: p(x) =

55 + 23x + 42x2. Za vsak 1 ≤ i ≤ n izracunamo vrednost polinoma v tej tocki:

p(1) = 120, p(2) = 269, p(3) = 502, p(4) = 819. Delez je predstavljen z

urejenim parom, kjer je prva koordinata namenjena i, druga pa vrednosti p(i):

(1, 120), (2, 269), (3, 502), (4, 819). V naslednjem koraku rekonstruiramo skriv-

nost. Iz poljubnih treh delezev izracunamo zacetni polinom z uporabo Lagrangeove

interpolacijo 3.2:

(1, 120) (3, 502) (4, 819)

i = 0→ x− 3

1− 3· x− 4

1− 4=

1

6(x2 − 7x+ 12)

i = 1→ x− 1

3− 1· x− 4

3− 4= −1

2(x2 − 5x+ 4)

i = 2→ x− 1

4− 1· x− 3

4− 3=

1

3(x2 − 4x+ 3)

1

6· 120− 1

2· 502 +

1

3· 819 = 55 = s

3.2 Blakleyeva metoda

Blakley se je deljenja lotil z drugacnim pristopom kot Shamir. Navdih je nasel v

teoriji hiperravnin. Za podano (k, n)-shemo je osnovna ideja Blakleyjeve metode

naslednja: najprej vsak izmed n udelezencev dobi enacbo hiperravnine, ki lezi v

k-dimenzionalnem prostoru in se razteza preko koncnega polja GF (p), kjer je p

Page 25: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

3.2 Blakleyeva metoda 15

prastevilo, vse ravnine pa potekajo skozi tocno doloceno tocko. Nato izracunamo

presecisce omenjenih k hiperravnin, dobljena tocka pa je iskana skrivnost [7].

Sledi postopek generiranja delezev v tridimenzionalnem prostoru, pri cemer je

lahko prostor poljubno razsezen.

1. Izberemo si prastevilo p in vsi nadaljnji izracuni potekajo v polju GF (p).

2. Ustvarimo tocko Q(x0, y0, z0), v kateri:

• x0 predstavlja skrivnost,

• y0, z0 pa sta poljubni nakljucni stevili, izbrani v polju Zp.

3. Za vsakega izmed n udelezencev izracunamo vrednost konstantnega clena c po

enacbi 3.3:

c ≡ z0 − ax0 − by0 (mod p), (3.3)

kjer sta a in b nakljucni stevili iz polja Zp.

4. Dobimo ravnino z = ax+ by + c.

Za rekonstruiranje skrivnosti v tridimenzionalnem prostoru moramo poznati tri

deleze aix + biy − z ≡ −ci (mod p). Omenjene deleze lahko zapisemo z matricno

enacbo:a1 b1 −1

a2 b2 −1

a3 b3 −1

x0y0z0

≡−c1−c2−c3

(mod p)

Rekonstrukcija je mozna, ce determinanta matrike ni 0, saj v tem primeru lahko

poiscemo njen inverz. Pri iskanju inverza matrike si lahko pomagamo z Gaussovo

eliminacijo, Kramerjevim pravilom ali kaksnim drugim znanim postopkom za iskanje

inverzov.

Zgled:

1. Izberemo prastevilo p. V tem zgledu naj bo 73.

Page 26: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

16 Osnove deljenja skrivnosti

2. Izberemo tocko Q(x0, y0, z0), da je x0, skrivnost, y0, z0 pa sta poljubni stevili.

Naj bo na primer Q(42, 29, 57).

3. Deleze izracunamo po postopku, opisanem v podpoglavju 3.2.

4. Dobimo naslednje deleze:

• A: z = 4x+ 19y + 68

• B: z = 36x+ 65y + 18

• C: z = 34x+ 19y + 49

5. Deleze A, B, C zapisemo v matriko: 4 19 −1

52 27 −1

36 65 −1

x0y0z0

≡−68

18

49

(mod 73)

6. Izracunamo inverz zgornje 3× 3 matrike po modulu 73:17 0 56

31 27 15

72 2 71

7. Inverz pomnozimo z vektorjem (−68, 18, 49) in kot rezultat dobimo zacetno

tocko, kjer je njena prva koordinata razdeljena skrivnost: (x0, y0, z0) =

(42, 29, 57).

V primerjavi s Shamirjevo shemo, pri kateri hranimo samo eno stevilo, moramo

tu hraniti vse koeficiente ravnine, zato ta shema zasede vec prostora. Rekonstrukcija

se izvaja na matrikah, ki lahko glede na dimenzijo prostora, v katerem smo razdelili

skrivnost, postanejo zelo velike in neucinkovite za izracun.

3.3 Kitajski izrek o ostankih

Kitajski izrek [10] o ostankih je izrek teorije stevil, ki pravi, da za paroma tuja naravna

stevila n1, n2, ..., nk in poljubna cela stevila c1, c2, ..., ck velja, da ima sistem linearnih

Page 27: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

3.3 Kitajski izrek o ostankih 17

kongruenc:

x ≡ c1 (mod n1)

x ≡ c2 (mod n2)

...

x ≡ c3 (mod nm)

natanko eno resitev po modulu n = n1n2...nk.

3.3.1 Postopek resevanja

Naj bo n = n1n2...nk in naj bo se za vsak i = 1, ..., k Ni = nni

= n1...ni−1ni+1...nk. Ker

so n1, ..., nk paroma tuja stevila, velja gcd(Ni, ni) = 1, za vsak i = 1, ..., k. Funkcija

gcd izracuna najvecji skupni delitelj dveh stevil. Linearna kongruenca

Nix ≡ 1 (mod ni) (3.4)

je zato resljiva za vsak i.

Naj bo sedaj za vsak i ∈ 1, ..., k xi neka resitev linearne kongurence Nix ≡1 (mod ni). Pokazimo, da je stevilo x definirano kot

x := N1x1c1 +N2x2c2 + ...+Nkxkck, (3.5)

dejanska resitev zacetnega sistema. Za poljubni i ∈ 1, ..., k potem veljata naslednji

dve trditvi:

• ker je Nixi ≡ 1 (mod ni), je Nixici ≡ ci (mod ni),

• za vsak j 6= i stevilo ni deli stevilo Nj, zato velja Njxjcj ≡ 0xjcj ≡ 0 (mod ni).

Iz zgornjih dveh trditev tako sledi enakost: x ≡ ci (mod ni) za vsak i ∈1, 2, ..., k. S tem smo dokazali, da je x resitev zacetnega sistema linearnih kon-

gruenc.

Page 28: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

18 Osnove deljenja skrivnosti

Zgled:

Resimo naslednji sistem linearnih kongruenc:

x ≡ 2 (mod 3)

x ≡ 3 (mod 5)

x ≡ 2 (mod 7)

Iz podanega sistema enacb preberemo naslednje parametre: c1 = 2, c2 = 3, c3 =

2, n1 = 3, n2 = 5, n3 = 7. Module ni pomnozimo in dobimo stevilo N = 3 ·5 ·7 = 105.

Resitev sistema je zato v prostoru ZN . Za vsak modul nato izracunamo vrednosti Ni:

N1 = Nn1

= 35, N2 = Nn2

= 21, N3 = Nn3

= 15.

Vemo, da je najvecji skupni delitelj stevil Ni in ni enak 1. Za vsak i, kjer je

i = 1, 2, 3, resimo linearno kongruenco 3.4. Poiscimo x1:

N1x ≡ 1 (mod ni)

35x ≡ 1 (mod 3)

−x ≡ 1 (mod 3)

x ≡ 2 (mod 3)

Kot resitev dobimo vrednost x1 = 2. Postopek ponovimo se za x2 = 1 in x3 = 1.

Resitev sistema nato izracunamo po enacbi 3.5:

x = N1x1c1 +N2x2c2 + ...+Nkxkck ⇒

70× 2 + 21× 3 + 15× 2 = 140 + 63 + 30 = 233⇒

x ≡ 23 (mod 3× 5× 7)⇒

x ≡ 23 (mod 105).

V mnozici Z dobimo neskoncno resitev 23+105×k, k ∈ Z. V mnozici Z105 pa obstaja

samo ena resitev, 23.

Page 29: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

3.4 Celicni avtomati 19

3.4 Celicni avtomati

3.4.1 Zgodovina

Zanimanje in raziskovanje celicnih avtomatov (angl. celullar automata) (krajse

CA) [13] se je pojavilo v treh obdobjih. Koncept sta prva osnovala Stanislaw Ulam

in John von Neumann. Slednji se je zanimal za moznost ustvarjanja avtomaticnih

strojev, ki bi bili zmozni ustvariti kopijo samega sebe, in je na koncu sledil predlogu

Ulama, ki je menil, da bi bil za prikaz delovanja takega avtomata boljsi konceptualni

matematicni model.

Novo zanimanje, tudi izven akademskega sveta, je sprozila Conwayeva igra

zivljenja [1]. Gre za dvodimenzionalni celicni avtomat, kjer ima vsaka celica dve

mozni stanji, pogosto imenovani kar zivo in mrtvo. Stanje posamezne celice je

odvisno od njenih 8 sosednjih celic in dolocenih pravil.

Kasneje je Stephen Wolfram zacel sistematicno raziskovati enodimenzionalne

celicne avtomate, predhodno omenjeni raziskovalci pa so se omejili na raziskovanje

enega samega pravila, ceprav so vedeli, da jih je lahko neskoncno mnogo. Wolfram

pa se je odlocil pregledati veliko stevilo pravil in jih klasificirati glede na to, kaksno

je njihovo dolgorocno obnasanje. Razdelil jih je v naslednje stiri razrede [21]:

• Razred 1: Skoraj vsa zacetna stanja se hitro razvijejo v stabilna in homogena.

Kakrsna koli nakljucnost zacetnega stanja izgine.

• Razred 2: Skoraj vsa zacetna stanja se hitro razvijejo v stabilne ali nihajoce

vzorce. Nekaj nakljucnosti se filtrira, nekaj pa je ostane. Lokalne spremembe

zacetnega stanja ponavadi ostanejo omejene lokalno.

• Razred 3: Skoraj vsa zacetna stanja se razvijajo kaoticno ali psevdo-nakljucno.

Kakrsne koli stabilne strukture, ki se pojavijo med razvijanjem, hitro unici

okoliski sum. Lokalne spremembe zacetnega stanja se sirijo v neskoncnost.

• Razred 4: Skoraj vsa zacetna stanja se razvijejo v stanja, ki se obnasajo kom-

pleksno, na zanimive nacine, tvorijo se lokalne strukture, ki lahko prezivijo dlje

casa. Cez cas se lahko razvijejo v vzorce drugega razreda, vendar je stevilo

korakov, potrebnih za to, lahko zelo veliko, tudi ce je zacetno stanje preprosto.

Lokalne spremembe zacetnega stanja se sirijo v neskoncnost.

Page 30: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

20 Osnove deljenja skrivnosti

Pravilo 30 = 000111102 je, zaradi njegove nepredvidljive narave, predlagal za

psevdo-nakljucni generator bitov. Za tem se je pojavilo veliko kriptografskih metod,

ki temeljijo na CA, za besedilo in tudi slike.

3.4.2 Enodimenzionalni binarni celicni avtomati

Enodimenzionalni koncni celicni avtomat je diskretni sistem, sestavljen iz enodimen-

zionalnega polja z n identicnimi celicami. Stanje celice je v danem trenutku lahko 0

ali 1. Celico na i -tem mestu oznacimo z 〈i〉, njeno stanje v casu t pa z a(t)i . Celicni

avtomat se razvija deterministicno v diskretnih casovnih korakih in spremeni stanja

vseh svojih celic v skladu z lokalno prehodno funkcijo. Nova stanja celic so odvisna

od predhodnih vrednosti sosednjih celic in tudi predhodne celice na lokaciji za katero

racunamo novo vrednost. Za to metodo uporabimo simetricno sosedstvo z radijem r.

Enacba take prehodne funkcije je:

a(t+1)i = f(a

(t)i−r, ..., a

(t)i , ..., a

(t)i+r) za 0 ≤ i ≤ n− 1. (3.6)

Vektorju C(t) = (a(t)0 , ..., a

(t)n−1) recemo konfiguracija celicnega avtomata v casu

t, kjer je C(0) zacetna konfiguracija celicnega avtomata. Stevilo celic v celicnem

avtomatu je koncno, zato moramo dolociti nekaj pravil, da ohranimo dobro dinamiko.

Za to metodo sprejmemo periodicne robne pogoje: ce je i ∼= j (mod n), potem je

a(t)i = a

(t)j . Globalna funkcija celicnega avtomata je linearna transformacija ω : δ → δ,

kjer je δ mnozica vseh moznih konfiguracij celicnega avtomata. Transformacija nam

da novo konfiguracijo v naslednjem casovnem koraku evolucije celicnega avtomata. To

lahko ponazorimo s preprosto enacbo C(t+1) = Ω(C(t)). Za to metodo je pomembno,

da lahko po razvoju CA pridemo tudi nazaj v zacetno stanje. Takemu celicnemu

avtomatu recemo reverzibilni, linearna transformacija Ω pa mora biti bijektivna, da

obstaja njen inverz Ω−1.

Vzemimo sedaj mnozico celicnih avtomatov s simetricnim sosedstvom radija r.

Njihova lokalna prehodna funkcija ima naslednjo obliko:

at+1i =

r∑j=−r

αja(t)i+j (mod 2), za 0 ≤ i ≤ n− 1. (3.7)

Takim celicnim avtomatom recemo linearni celicni avtomati reda r. V sime-

tricnem sosedstvu je tako 2r + 1 celic in obstaja 22r+1 linearnih celicnih avtomatov,

Page 31: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

3.4 Celicni avtomati 21

tj. celih stevil, ki jim recemo pravila celicnega avtomata. Definirana so z naslednjim

predpisom:

ω =r∑

j=−r

αj2r+j, 0 ≤ ω ≤ 22r+1 − 1. (3.8)

Stanja celic v casu t+ 1 so odvisna od nekaj celic (sosedstva celice), v casu t. To

trditev pa lahko razsirimo tudi na vecjo mnozico stanj celic v casih t − 1, t − 2, ...

Takim celicnim avtomatom recemo spominski celicni avtomati. Za metodo deljenja

skrivnosti uporabimo poseben tip spominskih celicnih avtomatov, ki mu recemo line-

arni spominski celicni avtomat (LMCA) k -tega reda (vzamemo k predhodnih stanj).

Uporabimo vec lokalnih prehodnih funkcij in jih zdruzimo v novo stanje (glej enacbo

3.9):

at+1i = f1(V

(t)i ) + f2(V

(t−1)i ) + ...+ fk(V

(t−k+1)i ) (mod 2). (3.9)

3.4.3 Deljenje skrivnosti s celicnimi avtomati

Imejmo (k, n)-shemo, zato je LMCA k-tega reda. Skrivnost S, ki jo hocemo deliti, je

zacetna konfiguracija LMCA, S = C(0). Nadaljnjih k − 1 komponent C(1), ..., C(k−1)

pa generiramo nakljucno. Vseh k vektorjev je enake bitne dolzine kot S. Delnice, ki

jih delimo z udelezenci, so n koncnih zaporednih konfiguracij evolucije LMCA.

Metoda je razdeljena v tri faze. To so faza nastavitve, kjer se definirajo zacetna

stanja celicnega avtomata, faza deljenja, v kateri izracunamo deleze in jih porazdelimo

med udelezence, in faza obnovitve, kjer iz k delezev udelezencev izracunamo zacetno

skrivnost.

Faza nastavitve

1. Izberemo nakljucno stevilo r, da velja 0 ≤ r ≤ bl/2c − 1, kjer je l bitna dolzina

skrivnosti S. Stevilo r predstavlja radij sosedstva LMCA.

2. Generiramo k − 1 celih stevil: ω1, ..., ωk−1, da velja 0 ≤ ωi ≤ 22r+1 − 1, s

kriptograficno varnim generatorjem nakljucnih stevil. Ta stevila predstavljajo

pravila linearnega celicnega avtomata.

Page 32: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

22 Osnove deljenja skrivnosti

3. S temi podatki lahko ustvarimo reverzibilni LMCA k-tega reda z lokalno pre-

hodno funkcijo, sestavljeno iz predhodno generiranih pravil:

a(t+1)i = fω1(V

(t)i ) + ...+ fωk−1

(V(t−k+1)i ) + a

(t−k+1)i (mod 2).

4. Skrivnost, ki jo bomo delili, predstavlja zacetno konfiguracijo, ostalih k − 1

konfiguracij pa izberemo nakljucno, z varnim generatorjem nakljucnih stevil.

Faza deljenja

1. Izberemo celo stevilo m, da je m ≥ k. Ta pogoj izberemo, da preprecimo, da bi

se koncni delezi prekrivali z zacetno konfiguracijo.

2. Iz zacetne konfiguracije razvijemo LMCA do (n+m+ 1)-te evolucije in dobimo

naslednjo mnozico delezev

C(0), ..., C(k−1), C(k), ..., C(m), ..., C(m+n−1).

3. Med udelezence razdelimo zadnjih n izracunanih konfiguracij:

S1 = C(m), ..., Sn = C(n+m−1).

Faza rekonstrukcije

1. Da rekonstruiramo skrivnost, C(0), potrebujemo k zaporednih delezev oblike

C(m+α), ..., C(m+α+k−1), 0 ≤ α ≤ n− k.

2. Te deleze vzamemo kot novo zacetno konfiguracijo in (m + α + k − 1)-krat

iteriramo z inverznim LMCA, da dobimo skrivnost C(0).

Zgled:

Recimo, da imamo (3, 4)-shemo za 16-bitne skrivnosti. Predpostavimo, da je r = 1.

Za razvoj celicnega avtomata uporabimo pravili ω1 = 7 in ω2 = 5. Lokalna prehodna

Page 33: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

3.4 Celicni avtomati 23

funkcija je tako dolocena z naslednjim predpisom:

a(t+1)i = f7(V

(t)i ) + f5(V

(t−1)i ) + a

(t−2)i (mod 2), za 0 ≤ i ≤ n− 1.

Za izbrana pravila se enacba razvije v naslednji zapis:

a(t+1)i = a

(t)i−1 + a

(t)i + a

(t)i+1 + a

(t−1)i−1 + a

(t−1)i+1 + a

(t−2)i

Za skrivnost, ki jo bomo delili, izberemo stevilo S = 22222, ki ga v binarnem zapisu

predstavimo kot

S = 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0,

za tem pa z nakljucnim generatorjem stevil inicializiramo se k−1 konfiguracij celicnega

avtomata. V tem zgledu generiramo dve stevili

C(1) = 18431 = 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

C(2) = 63339 = 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1.

Naj bo sedaj m = 5. Po enacbi 3.9 razvijemo LMCA.

C(3) = 3716 = 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0,

C(4) = 47880 = 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0,

C(5) = 44461 = 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1,

C(6) = 34262 = 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0,

C(7) = 12085 = 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1,

C(8) = 30940 = 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0.

Med udelezence nato razdelimo deleze C(5), C(6), C(7) in C(8).

Za rekonstrukcijo potrebujemo katere koli tri deleze, ki jih sortiramo po njihovih

pripadajocih indeksih in nato k + m + α-krat razvijemo LMCA z inverzno lokalno

prehodno funkcijo:

a(t+1)i = f5(V

(t)i ) + f7(V

(t−1)i ) + a

(t−2)i (mod 2), za 0 ≤ i ≤ n− 1.

Page 34: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 4

Predstavitev implementiranih

algoritmov

V tem poglavju bomo predstavili tri metode, ki smo jih implementirali v sklopu magi-

strskega dela. Prva dva algoritma temeljita na ze opisanih metodah (glej 3). Metoda

deljenja skrivnosti z detekcijo goljufov uporablja Shamirjevo metodo, ki ji doda kon-

trolno stevilo (angl. checksum), da lahko zaznamo spremembe v delezih skrivnosti.

Druga metoda zdruzuje kitajski izrek o ostankih in linearne spominske celicne avto-

mate. Osnovni kitajski izrek o ostankih smo tu nadomestili z naprednejso metodo,

ki temelji na njem. Zadnja metoda, Rabinov algoritem za razprsitev informacij, ni

osnovana na do sedaj omenjenih metodah.

4.1 Metoda Asmuth-Bloomova

Metoda Asmuth-Bloom je metoda deljenja skrivnosti, ki temelji na kitajskem izreku

o ostankih in za deljenje uporablja posebne sekvence naravnih stevil.

4.1.1 Opis algoritma

Faza deljenja

Recimo, da hocemo razdeliti skrivnost d med n udelezencev. Potem je postopek

naslednji:

• Izberemo n + 1 paroma tujih stevil m0 < m1 < ... < mn, kjer je m0 > d

prastevilo, da velja:

k∏i=1

mi > m0

k−1∏i=1

mn−i+1. (4.1)

24

Page 35: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4.1 Metoda Asmuth-Bloomova 25

• Naj M predstavlja∏k

i=1mi. Delivec izracuna enacbo:

y = d+ am0, (4.2)

kjer je a pozitivno naravno stevilo, ki ga nakljucno izberemo tako, da enacba

izpolnjuje pogoj 0 ≤ y < M .

• Za vsak i = 1, ..., n za delez i-tega udelezenca velja enakost yi = y mod mi.

Faza rekonstrukcije

Predpostavimo, da je S mnozica k udelezencev, ki zelijo rekonstruirati skrivnost.

Oznaka MS naj predstavlja produkt vseh izbranih stevil mi, tj. MS =∏i∈S

mi.

• S pomocjo kitajskega izreka o ostankih v polju ZMSresimo sistem kongruenc

y ≡ y1 (mod m1), y ≡ y2 (mod m2), ... y ≡ yk (mod mk). (4.3)

• Skrivnost nato izracunamo po enacbi 4.4

d = y (mod m0). (4.4)

Vrednost y lahko na podlagi kitajskega izreka enolicno dolocimo v prostoru ZMS.

Velja tudi y < M ≤MS, zato je resitev enolicna tudi v polju ZM .

Zgled:

Recimo, da zelimo razdeliti skrivnost s = 42 s parametroma k = 3 in n = 4. Po-

trebujemo mnozico paroma tujih stevil, ki so vsa vecja od s in izpolnjujejo pogoj

4.1. V tem zgledu vzamimo mnozico c = 263, 389, 397, 401, 409. Ko izracunamo

produkta iz pogoja 4.1, dobimo neenakost 43134367 < 61927633, zato pogoj velja in

lahko nadaljujemo.

Izberemo si nakljucno stevilo a = 51 in nato po enacbi 4.2 izracunamo y. Iz y in

Page 36: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

26 Predstavitev implementiranih algoritmov

preostalih izbranih paroma tujih stevil nato izracunamo deleze skrivnosti:

y = s+ a ∗ c0 = 42 + 51 ∗ 263 = 13455

yi = y (mod ci), za 1 ≤ i ≤ n

y1 = 229

y2 = 354

y3 = 222

y4 = 367

Poleg vsakega deleza hranimo tudi pripadajoc modul, s katerim smo ga izracunali.

Recimo, da za rekonstrukcijo vzamemo prve tri deleze (229, 389), (354, 397), (222, 401).

Delezi so zapisani v obliki (si,mi). Potem dobimo naslednji kongruencni sistem:

x ≡ 229 (mod 389)

x ≡ 354 (mod 397)

x ≡ 222 mod 401)

Iz modulov izracunamo M = 389 · 397 · 401 = 61927633, nato pa za vsak mi

izracunamo Mmi

in dobimo vrednosti 159197, 155989, 154433. Iz teh izracunamo

modularne inverze po modulu mi in njihove vrednosti shranimo v vektor x =

77, 62, 259.

Skrivnost nato izracunamo po naslednji enacbi:

s =k∑i=0

xi ·M

mi

· si (mod M),

ki pa se ni edinstvena, saj je nasa skrivnost v polju Z263. Koncna skrivnost je tako:

S = 13455 (mod 263) = 42.

4.1.2 Varnost

Metoda Asmuth-Bloom je popolna metoda deljenja. Recimo, da je S ′ mnozica t− 1

udelezencev in y′ ∈ ZMSenolicna resitev kongruencnega sistema 4.3. Glede na enacbo

4.1 dobimo neenakost MMS′

> m0, zato je stevilo y′+jMS′ manjse od stevila M za vsak

j < m0. Ker je najmanjsi skupni delitelj stevil m0 in MS′ enak ena, so vse vrednosti

Page 37: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4.2 Metoda deljenja skrivnosti s celicnimi avtomati in metodoAsmuth-Bloom 27

(y′ + j ·MS′) (mod m0) razlicne za vse 0 ≤ j < m0 in jih je m0 mnogo. To pomeni,

da je d lahko katero koli naravno stevilo iz Zm0 in mnozica udelezencev S ′ ne dobi

nobene informacije o skrivnosti d.

4.2 Metoda deljenja skrivnosti s celicnimi avto-

mati in metodo Asmuth-Bloom

Prva raziskana metoda je opisana v clanku [12]. Sestavljena je iz dveh metod, ki ju

lahko tudi samostojno uporabimo za deljenje skrivnosti, linearni celicni avtomat in

kitajski izrek o ostankih. Obe metodi smo ze opisali v poglavju 3. Metoda je, podobno

kot vse ostale, (k, n)-shema, kjer zaupanja vreden delivec izracuna n delezev in jih

varno porazdeli med udelezence.

Osnovno metodo na podlagi kitajskega izreka o ostankih smo v implementaciji

zamenjali z metodo Asmuth-Bloom. Postopek algoritma se pri tem ne spremeni, le

zacetnih m podskrivnosti dobimo na drugacen nacin, nato pa jih, podobno kot prej,

razdelimo se z metodo LMCA.

4.2.1 Opis algoritma

Predlagana metoda [12] zdruzuje celicne avtomate in kitajski izrek o ostankih. Po-

stopek je naslednji:

1. Izberemo m razlicnih prastevil q1, q2, ...qm, za katera velja pogoj q1 < q2 < ... <

qm.

2. Izracunamo naslednje kongruencne enacbe in s tem skrivnost razdelimo na pod-

skrivnosti:

S1 ≡ S (mod q1)

S2 ≡ S (mod q2)

...

Sm ≡ S (mod qm)

.

3. Na vsaki podskrivnosti nato uporabimo metodo z linearnim celicnim avtomatom

(predstavljena v poglavju 3) in deleze razdelimo med udelezence.

Page 38: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

28 Predstavitev implementiranih algoritmov

Rezultat tega postopka je m delezev, ki so naslednje oblike:Delez1 : lmca11, lmca21, ..., lmcak1

...

Delezm : lmca1m, lmca2m, ..., lmcakm

,

kjer lmcaij predstavlja deleze, pridobljene s postopkom LMCA in n = m.

4.2.2 Slabosti in prednosti

Metodi se dobro dopolnjujeta. Samostojno ima metoda LMCA omejeno uporabnost,

saj za rekonstrukcijo skrivnosti zahteva k zaporednih delezev. Recimo, da imamo

(3, 4)-shemo in za izracun delezev uporabimo samo metodo LMCA. Minimalni avtori-

zirani zdruzbi sta potem samo C = 1, 2, 3, 2, 3, 4, saj z mnozico delezev 1, 3, 4skrivnosti ne moremo rekonstruirati. Vidimo, da udelezenca s svojima delezema 2 in

3 nastopata v obeh zdruzbah, zato bi v primeru izgube katerega od teh delezev iz-

gubili celotno skrivnost. Iz oblike delezev, ki smo jo predstavili v opisu algoritma, je

razvidno, da imamo vedno na voljo k zaporednih delezev, pridobljenih s postopkom

LMCA za rekonstrukcijo, ne glede na to, kateri udelezenci zdruzijo svoje deleze.

Slaba stran uporabe obeh metod je, da obe vrneta deleze, ki so enake velikosti

kot zacetna skrivnost. Recimo, da imamo skrivnost S, katere velikost predstavimo s

|S|. Vsak delez, ki ga vrne metoda Asmuth-Bloom, je torej prav tako velikosti |S|,nato pa ga razdelimo se z metodo LMCA, ki zopet vrne deleze velikosti |S|. Vsaj

koncni delez D je tako velikosti |D| = k · |S|.

Metoda LMCA je zaradi operacij nad biti stevil in casovne kompleksnosti O(n3)

pocasna (odvisno od nakljucnih parametrov oz. njihovih omejitev in bitne dolzine

stevil), izvesti pa jo moramo vsaj m-krat.

4.3 Metoda deljenja skrivnosti z detekcijo goljufov

Martin Tompa in Heather Woll [19] sta raziskovala Shamirjevo metodo za deljenje

skrivnosti in ugotovila, da ze en goljuf v mnozici udelezencev lahko zavede vse ostale.

Dve osnovni lastnosti Shamirjeve metode, kjer S razdelimo na n delezev, sta:

Page 39: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4.3 Metoda deljenja skrivnosti z detekcijo goljufov 29

1. ce poznamo k delezev, lahko ucinkovito rekonstruiramo S in

2. ce poznamo samo k − 1 delezev, ti ne dajo nobene informacije o vrednosti

skrivnosti S.

Ker je metoda namenjena za zlonamerno okolje, je zazeleno tudi, da obstaja

samo majhna verjetnost ε > 0, da lahko k − 1 udelezencev ponaredi svoje deleze

in da zavedejo k-tega udelezenca. Zavesti tu pomeni, da je rekonstruirana skrivnost

veljavna, vendar napacna.

To je se posebej ocitno v primeru, ko je k = 2, saj lahko goljuf pridobi pravo

skrivnost, hkrati pa drugega udelezenca zavede, saj ta dobi napacno rekonstruirano

skrivnost.

Tompa in Woll sta ugotovila, da je Shamirjeva metoda ranljiva pri takih napadih.

Recimo, da je q = S, kjer je q prastevilo, ki tvori koncno polje v Shamirjevi metodi.

Potem so vse rekonstruirane skrivnosti veljavne. Vendar pa tudi, ce izberemo q, ki

je dosti vecji od S, in s tem zmanjsamo moznost, da je rekonstrukcija veljavna, ne

zagotovimo varnosti pred goljufanjem.

Recimo, da k udelezencev, ki jih oznacimo z i1, i2, ..., ik, zdruzi svoje deleze.

Udelezenec i1, ki se odloci goljufati, uporabi interpolacijo, da izracuna polinom ∆(x)

stopnje najvec k−1, za katerega velja ∆(0) = −1 in ∆(i2) = ∆(i3) = ... = ∆(ik) = 0.

Goljuf svoj delez, oznacen z D1, nadomesti z laznim delezem D1 + ∆(i1). Interpo-

lacijski teorem zdaj zagotovi, da k udelezencev rekonstruira polinom q(x) + ∆(x),

katerega konstantni del je q(0) + ∆(0) = D− 1. Goljufanje tako ni zaznano, razen ce

je originalna skrivnost S = 0.

Ena resitev je, da imamo enega delivca, ki sprejme vse deleze in nato sporoci

rekonstruirano skrivnost. V tem primeru goljuf ne zmore sam rekonstruirati originalne

skrivnosti. Vendar pa imamo lahko obstojec sistem, v katerem to ni mozno, na primer

pri porazdeljenem racunanju. V tem primeru lahko Shamirjevo nadgradimo metodo

z dodatnim preverjanjem.

4.3.1 Opis algoritma

Predlagana metoda iz clanka [11] ima naslednje lastnosti:

• je varna na podlagi modela OKS,

Page 40: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

30 Predstavitev implementiranih algoritmov

• lahko zagotavlja varnost, ko je skrivnost element koncnega polja GF (2m).

Model OKS je eden izmed modelov deljenja skrivnosti z goljufi. Predpostavlja, da

goljufi nikoli ne dobijo dostopa do celotne skrivnosti. Prednost pred drugimi modeli

je manjsa velikost delezev, zahteva pa, da so enakomerno porazdeljeni.

Lastnost, da podpira elemente polja GF (2m), je pomembna zato, ker je vecina

racunalniskih podatkov v obliki bitnega niza. Prav tako je primerna tudi za imple-

mentacijo, medtem ko je vecina drugih metod, ki podpirajo bitne nize, prezahtevna

za implementacijo, saj v primeru, da je velikost skrivnosti 1024 bitov, zahtevajo

racunanje preko polja GF (21024). Casovna zahtevnost za take racune je previsoka za

realno uporabo pri vecjih skrivnostih.

Podobno kot ostale metode je tudi ta (k, n)-shema. V primerjavi z navadnimi

metodami deljenja je izhod algoritma za rekonstrukcijo skrivnosti prirejen, lahko nam

vrne rekonstruirano skrivnost ali pa poseben simbol, ki nam pove, da je vsaj en izmed

delezev ponarejen.

Metoda je skoraj optimalna, (k, n, εOKS) varna in primerna za implementacijo

[11]. Pri tem za uspesnost goljufov velja enacba Uspesnost(shema,G) ≤ ε, pri cemer

z G oznacimo goljufa. Velikost posameznega deleza je skoraj optimalna, torej ni veliko

vecja od skrivnosti.

Osnovna ideja metode je, da skrivnost bitno razgradimo. Recimo, da je skrivnost

s element polja GF (2mN). Potem jo lahko razgradimo na N podnizov s1, s2, ..., sN ∈GF (2m). Stevilo delitev mora biti sodo, saj v sklopu metode uporabljamo funkcijo

A(s1, s2, ..., sN) = s1×s2+...+sN−1×sN za generiranje kontrolnega stevila. Skrivnost

velikosti 1024 bitov lahko na primer razdelimo na 8 delov velikosti 128 bitov.

Generiranje delezev

Metoda temelji na Shamirjevi [17] metodi deljenja skrivnosti. Vhod je skrivnost

s ∈ F2mN .

1. Generiramo nakljucni polinom fs(x) s koeficienti iz polja F2mN , stopnje k− 1 in

prostim clenom s, tj. f(0) = s.

2. Generiramo N bitnih nizov s1, ..., sN z dekompozicijo s, kjer je N poljubno sodo

stevilo.

Page 41: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4.3 Metoda deljenja skrivnosti z detekcijo goljufov 31

3. Generiramo kontrolno stevilo a = A(s1, ..., sN) = s1 · s2 + ...+ sN−1 · sN .

4. Generiramo nakljucni polinom fa(x) s koeficienti iz polja F2m , stopnje k − 1 in

prostim clenom a, tj. fa(0) = a.

5. Izracunamo deleze vi = (fs(i), fa(i)), za vsak i = 1, ..., n, in jih distribuiramo.

Rekonstrukcija skrivnosti

Za rekonstrukcijo mora svoje deleze zdruziti vsaj k udelezencev. Potek rekonstruira-

nja skrivnosti je naslednji:

1. Iz delezev vi1, ..., vij z uporabo Lagrangeove interpolacije rekonstruiramo poli-

noma f ′s(x) in f ′a(x).

2. Ce je deg(f ′s) > k − 1 ali deg(f ′a) > k − 1, potem vrnemo, da je zaznano

goljufanje.

3. Izracunamo s′ = (s′1, ..., s′N) = f ′s(0) in a′ = f ′a(0).

4. Ce se kontrolno stevilo rekonstruirane skrivnosti ujema z rekonstruiranim kon-

trolnim stevilom, potem vrnemo skrivnost, v nasprotnem primeru pa vemo, da

je zaznano goljufanje.

4.3.2 Prednosti in slabosti

Metoda podeduje vse prednosti Shamirjeve metode. Operacije v GF (2m) je mogoce

implementirati s pomocjo pregledne tabele (angl. lookup table) in tako zelo pohi-

triti algoritem, ceprav to ni potrebno, saj so te operacije zelo dobro implementirane

v knjiznicah OpenSSL.

Omejeni smo pri bitni dolzini skrivnosti, ki je lahko dolzine najvec 10000 bitov.

To resujemo tako, da vecje skrivnosti razdelimo na dele (na primer 1 kilozlog) in

metodo uporabimo nad temi, deleze pa zdruzujemo v vecji skupek, ki nato predstavlja

koncni delez.

Predlagana metoda za izracun kontrolnega stevila ni zagotovo varna. Izracune

izvajamo v koncnem polju in samo z operacijama mnozenja in sestevanja. Zgodi

se lahko, da imata dve razlicni skrivnosti enako kontrolno vrednost oziroma lahko

Page 42: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

32 Predstavitev implementiranih algoritmov

nekaj delezev pokvarimo tako, da vrnejo pravilno kontrolno stevilo pri rekonstrukciji.

Izracun takih delezev je zelo casovno zahteven in poznati moramo kontrolno stevilo

skrivnosti. Kljub temu bi algoritem lahko nadgradili z drugacno zgoscevalno funkcijo

(na primer SHA256), ki bi hkrati zagotovila konstanto velikost delezev kontrolnega

stevila.

4.4 Rabinov IDA

Leta 1989 je Michael O. Rabin objavil clanek [14] na temo razprsitve podatkov in

paralelnega izracuna delezev. Algoritem, znan kot algoritem za razprsitev infor-

macij (angl. information dispersal algorithm), razdeli datoteko F , dolzine L = |F |,na n kosov Fi, 1 ≤ i ≤ n, dolzine |Fi| = L/k, da vsakih k kosov zadostuje za rekon-

strukcijo originalne datoteke.

Algoritem je namenjen predvsem deljenju skrivnosti, vendar spada tudi v ka-

tegorijo kod za popravljanje napak (ang. error correction codes), kjer sporocilu

dodamo dodatne bite. Tako lahko v primeru, ko se med prenosom sporocila pojavijo

napake, tega se vedno rekonstruiramo.

4.4.1 Opis algoritma

Imamo datoteko F = b1, b2, ..., bN in recimo, da jo zelimo razprsiti za nadaljnjo

hrambo ali varen prenos.

Vsak znak bi je lahko poljubno celo stevilo iz dolocenega obmocja 0 ≤ bi ≤ B.

Najpogosteje so to 8-bitne vrednosti, torej iz obmocja 0 ≤ bi ≤ 255. Nato si izberemo

prastevilo, za katero velja B < p. Za 8-bitne vrednosti zadostuje izbrati p = 257,

ce pa so vse vrednosti iz datoteke dovolj majhne, lahko izberemo stevilo, ki je vecje

samo od najvecje vrednosti bi v datoteki F . Pri p = 257 deljenje tudi ni popolno,

saj dobimo presezek enega bita, zato za racunanje ponavadi uporabimo koncno polje

GF (2s), kjer je s bitna dolzina znakov. Tako datoteka F predstavlja niz ostankov

mod p. Vsi nadaljnji izracuni so opravljeni v polju Zp.

Izberemo si celo stevilo k, ki mora biti manjse ali kvecjemu enako n. Od izbire teh

dveh stevil je odvisna tudi prostorska zahtevnost delezev, saj se z vecanjem vrednosti

ulomka nk

poveca tudi velikost posameznega deleza. Zato je pomembno, da ta dva

parametra izberemo tako, da velja nk

= 1 + ε za cim manjsi ε.

Page 43: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4.4 Rabinov IDA 33

Datoteko nato razdelimo v nize dolzine k:

F = (b1, ..., bk), (bk+1, ..., b2k), ...

Vsak niz oznacimo z Si = (b(i−1)·k+1, ..., bi·k), za i = 1, ..., n, in iz njih tvorimo

matriko M = [S1, ..., Sn].

Nato izberemo n vektorjev ai = ai1, ..., aik ∈ Zkp, 1 ≤ i ≤ n, ki morajo biti

medsebojno neodvisni. Iz izbranih vektorjev tvorimo matriko An×k = [a1, ..., an].

Z matricnim mnozenjem dobimo n delezev Fi, i = 1, ..., n, velikosti |Fi| = |F |/k:

A ·M =

a1

a2

. .

an

·[S1 S2 ... SN/k

]

=

a1 · S1 a1 · S2 ... a1 · SN/ka2 · S1 a2 · S2 ... a2 · SN/k... ... ... ...

an · S1 an · S2 ... an · SN/k

=

F1

F2

...

Fn

.

Rekonstrukcija skrivnosti

Skrivnost lahko rekonstruiramo, ce poznamo k delezev F , F1, ..., Fk. Vsakemu delezu

pripada tudi vektor ai, del matrike A, s katero smo izracunali deleze skrivnosti. Naj-

prej iz vektorjev sestavimo matriko A = [a1, ..., ak]′ velikosti k × k. Vemo, da velja:

A ·

b1...

bk

=

c11...

ck1

in posledicno:

b1...

bk

= A−1 ·

c11...

ck1

.

Vektor, ki predstavlja i-to vrstico A−1, naj bo αi1, ..., αik. Nato lahko za 1 ≤

Page 44: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

34 Predstavitev implementiranih algoritmov

m ≤ N/k rekonstruiramo skrivnost po enacbi:

bj = αi1c1m + ...+ αikcmk, 1 ≤ j ≤ N,

kjer je i = j mod k in m = dj/ke. Za rekonstrukcijo moramo torej izracunati inverz

matrike A. Racunanje inverza lahko pohitrimo z dobro izbiro vektorjev a1, ..., an,

koeficiente pa lahko izberemo glede na Cauchyevo ali Vandermondovo matriko.

Cauchyeva matrika

Cauchyeva matrika je n× k matrika, ki jo izracunamo po spodaj opisanem postopku.

Za tvorbo matrike generiramo dva vektorja (x1, ..., xn) in (y1, ..., yk), s koeficienti iz

polja Zp, ki morata izpolnjevati naslednje pogoje:

xi + yj 6= 0; i 6= j → xi 6= xj; yi 6= yj ∀i, j,

kar posledicno zahteva, da je n+ k < p. Posamezni vektor definiramo z enacbo:

ai = (1

xi + y1, ...,

1

xi + yk), 1 ≤ i ≤ n. (4.5)

Velja tudi, da je vsaka podmatrika Caucheyjeve matrike tudi Cauchyeva matrika.

Zgled:

Recimo, da hocemo razdeliti datoteko F = 1, 42, 3, 4, 5, 6, 7, 8. Dolocimo k = 2 in

n = 4. Vse operacije se izvajajo v GF (28). Najprej nakljucno izberemo vrednosti za

polji x in y ter iz njiju generiramo Cauchyevo matriko po enacbi 4.5.

x = 132, 155, 238, 218

y = 241, 139

Dobimo matriko A:

A =

33 153

114 187

218 175

122 129

Page 45: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

4.4 Rabinov IDA 35

Datoteko F pretvorimo v matriko s k vrsticami in n stolpci. Rezultat je matrika

F2×4.

F =

[1 42 3 4

5 6 7 8

]

Ko imamo pripravljene podatke, matriki A in F pomnozimo ter dobimo novo

matriko S4×4. Vrstice te matrike predstavljajo deleze skrivnosti. Vsakemu dodamo

tudi pripadajoco vrstico matrike A.

S =

234 102 129 32

19 44 154 124

255 244 21 74

201 251 36 151

Ce hocemo rekonstruirati skrivnost, vzamemo na primer prvi dve vrstici matrike

A in prvi dve vrstici matrike S, nato z Gaussovo eliminacijo izracunamo inverz nove

podmatrike A2×2. Na tem mestu opomnimo, da druge (hitrejse) numericne metode

ne delujejo v polju GF (2m).

A−1 =

[33 153

114 187

]−1=

[119 217

11 52

]

Nato podmatriko S2×4 pomnozimo z inverzom matrike A in dobimo rekonstrui-

rano skrivnost.

A−1 × S2×4 =

[119 217

11 52

[234 102 129 32

19 44 154 124

]=

[1 42 3 4

5 6 7 8

]

4.4.2 Prednosti in slabosti

Algoritem je zelo intuitiven in preprost za implementacijo, ker izvajamo samo ma-

tricne operacije in mnozenje matrik, vendar pa so operacije nad matrikami zelo zah-

tevne – reda O(n3). Parametra k in n sta do neke mere odvisna od velikosti skrivnosti,

saj jo moramo celotno porazdeliti po matriki Fn×k. Pri vecjih skrivnostih lahko para-

metra minimiziramo z izbiro vecjega parametra m za polje GF (2m) in tako povecamo

samo posamezni element v matriki.

Page 46: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 5

Implementacije

5.1 Projekt OpenSSL

OpenSSL je odprtokodni projekt, ki nudi robustna orodja z veliko funkcionalnostmi za

protokola TLS (angl. Transport Layer Security) in SSL (angl. Secure Sockets Layer).

Vsebuje tudi splosno namensko kriptografsko knjiznico, ki je licencirana tako z licenco

OpenSSL kot tudi z SSLeay. Obe omenjeni licenci omogocata, da lahko to kripto-

grafsko knjiznico uporabljamo za komercialne in nekomercialne namene. Pri tem pa

moremo upostevati nekaj preprostih licencnih pravil [5]. Izvorna koda knjiznice, ki jo

moramo prevesti sami, je dostopna na GitHubu [2]. Ce je ne zelimo prevajati sami,

lahko najdemo tudi neuradne, prevedene knjiznice.

5.1.1 Uporaba knjiznice

V tem projektu bomo uporabljali novejso razlicico OpenSSL 1.1.0, ki pa zaradi vecjih

sprememb v knjiznici ni kompatibilna s starejsimi razlicicami OpenSSL. OpenSSL

vsebuje knjiznici libssl in libcrypto. V libssl sta implementirana protokol TLS in

aplikacijski vmesnik zanj, v knjiznici libcrpyto pa so implementirani razlicni kripto-

grafski algoritmi, podatkovne strukture in druge funkcionalnosti. Uporabljajo jih im-

plementacije OpenSSL, implementacije protokolov, implementacija OpenSSH, orodje

za podpisovanje e-poste OpenPGP in drugi kriptografski standardi. Za implementa-

cijo algoritmov bomo uporabljali naslednje funkcionalnosti omenjenih knjiznic:

• podatkovna struktura BIGNUM za delo s poljubno velikimi stevili,

• implementacija aritmetike v GF (2m),

• generiranje prastevil,

36

Page 47: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.1 Projekt OpenSSL 37

• generiranje kriptografsko varnih nakljucnih stevil.

Poleg knjiznice libssl in knjiznice libcrypto moramo na operacijskem sistemu

Windows v projekt, zaradi funkcionalnosti knjiznice libcrypto, vkljuciti tudi knjiznico

crpyt32 – v njej je namrec Microsoftova implementacija CryptoAPI ([3]) in ws2 32

(winsock knjiznica [4]).

5.1.2 Struktura BIGNUM

Stevilo hranimo kot polje celostevilskih vrednosti d. Velikost elementa v tem polju

je odvisna od nastavitve BITS2 v datoteki openssl/bn.h. Nastavi se glede na

vrsto procesorja, za katerega prevajamo knjiznice. V spremenljivki dmax struktura

hrani, koliko pomnilnika je rezerviranega za polje d, spremenljivka top pa, koliko

ga uporabljamo, saj ni nujno, da je zapolnjeno celotno polje. Stevilo je lahko tudi

negativno. V tem primeru spremenljivko neg nastavimo na 1. Za dodatne parametre

obstaja se spremenljivka flags.

typedef struct bignum_st BIGNUM;

struct bignum_st

BN_ULONG *d; /* Kazalec na polje zlogov. */

int top; /* Indeks, ki kaze na zadnji uporabljen

element polja d. */

int dmax; /* Velikost polja d. */

int neg; /* Ce je stevilo negativno je vrednost neg = 1 */

int flags;

;

Za ustvarjanje objektov BIGNUM in inicializacijo uporabimo funkcijo BN_

new(). Funkcija BN_init() inicializira obstojeci neinicializiran objekt.

BIGNUM *BN_new(void);

void BN_init(BIGNUM *);

Pomnilnik, ki je rezerviran za objekt BIGNUM, moramo sprostiti sami. Za to

se uporabi funkcija BN_free(). Ce smo v objektu BIGNUM hranili obcutljive

podatke, jih pobrisemo s funkcijo BN_clear(), ki rezerviran pomnilnik prepise z 0.

Obe funkcionalnosti sta zdruzeni v funkciji BN_clear_free().

Page 48: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

38 Implementacije

void BN_clear(BIGNUM *a);

void BN_free(BIGNUM *a);

void BN_clear_free(BIGNUM *a);

Ce ustvarjanje objekta ne uspe, se v pomnilnik zapise napaka. Zadnjo napako

lahko preberemo s klicem funkcije ERR_get_error(). Ta vrne napako kot celo

stevilo. Tega lahko nato podamo kot parameter funkciji ERR_error_string(),

ki vrne razumljiv opis napake. Da jo lahko uporabimo, moramo najprej poklicati

funkcijo ERR_load_crypto_strings() in z njo naloziti nize napak knjiznice

libcrpyto. Ko nizov napak ne potrebujemo vec, jih s klicem funkcije ERR_free_

strings() pocistimo iz pomnilnika.

unsigned long ERR_get_error(void);

char *ERR_error_string(unsigned long e, char *buf);

void ERR_load_crypto_strings(void);

void ERR_free_strings(void);

Veliko funkcij, ki izvajajo aritmeticne operacije, zahteva dodatni parameter ctx

- objekt strukture BN_CTX. Ta struktura hrani zacasne spremenljivke BIGNUM, ki

jih uporabljajo funkcije knjiznice, saj je dodelitev pomnilnika za objekte BIGNUM

pocasna operacija, se posebej pri pogostih klicih teh funkcij.

BN_CTX *BN_CTX_new(void);

void BN_CTX_free(BN_CTX *c);

Novi objekt ustvarimo s klicem funkcije BN_CTX_new(), ki v primeru napake

vrne vrednost NULL. Kodo napake lahko pridobimo s klicem funkcije ERR_get_

error().

Funkcija BN_CTX_free() sprosti rezerviran pomnilnik za vse zacasne spremen-

ljivke in objekt.

Uporabljali bomo tudi funkcije za pretvorbo in predstavitev objektov BIGNUM.

Med pomembnejsimi je funkcija BN_bn2bin(), ki strukturo BIGNUM pretvori v

polje zlogov. Funkciji podamo objekt BIGNUM in kazalec na polje, ki mora imeti

rezerviranega dovolj pomnilnika. Ta podatek dobimo s klicem funkcije BN_num_

bytes(a), ki vrne stevilo zlogov, potrebnih za zapis objekta BIGNUM v binarno

obliko.

Iz binarnega zapisa lahko rekonstruiramo BIGNUM s funkcijo BN_bin2bn().

Podamo ji polje zlogov in dolzino polja, vrne pa nam BIGNUM, preko parametra

Page 49: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.1 Projekt OpenSSL 39

ret.

Ostale funkcije pretvorijo stevilo v decimalni ali sestnajstiski zapis in obratno.

Uporabne so za branje objektov BIGNUM iz tekstovnih datotek, preko konzole ipd.

int BN_bn2bin(const BIGNUM *a, unsigned char *to);

BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);

char *BN_bn2hex(const BIGNUM *a);

char *BN_bn2dec(const BIGNUM *a);

int BN_hex2bn(BIGNUM **a, const char *str);

int BN_dec2bn(BIGNUM **a, const char *str);

V implementacijah predstavljenih metod objekte BIGNUM pogosto zapisujemo

kot nize zlogov. Pri tem moramo vedeti, kje se zapis objekta BIGNUM zacne in kje

konca. V ta namen implementiramo funkciji bignum_to_bytes() in bytes_to_

bignum(), ki opravljata pretvorbo v in iz vektorja zlogov.

int bignum_to_bytes(const BIGNUM* a, std::vector<BYTE>& bytes,

const int offset);

int bytes_to_bignum(const std::vector<BYTE>& bytes,

const int offset, BIGNUM* a);

Binarni zapis objektov BIGNUM je naslednji (v nadaljevanju bo ta zapis oznacen

kot ”Binarni BIGNUM”):

Znaka ’BN’

Glava

4 zlogi

Velikost objekta

BN num bytes(objekt) zlogov

Zlogi objekta BIGNUM

5.1.3 Aritmetika v GF(2m)

Knjiznica vsebuje funkcije za izvajanje aritmeticnih operacij nad objekti BIGNUM,

ki jih bomo podrobneje opisali v podpoglavjih 4.3 in 4.4. Za izvajanje aritmeticnih

operacij moramo podati svoje nerazcepne polinome v obliki polja ali objekta BI-

GNUM. V polje zapisemo vse tiste potence polinoma, ki imajo nenicelni koeficient.

Tako na primer polinom x8 + x4 + x3 + x zapisemo kot p[ ] = 8, 4, 3, 1, 0,−1. Na

koncu moramo dopisati stevilo −1, da funkcija ve, kje se zapis polinoma konca. S

funkcijo BN_GF2m_arr2poly() lahko tako polje prevedemo v zapis z objektom

BIGNUM in obratno. Vsak objekt BIGNUM lahko prevedemo v polje celih stevil

Page 50: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

40 Implementacije

s funkcijo BN_GF2m_poly2arr(). Zgoraj omenjen polinom je ze predstavljen v

celostevilskem zapisu.

Funkcije imajo definicije za obe vrsti podajanja polinoma, vendar ga najprej

prevedejo v obliko, v kateri ga potrebujejo. Ob veliko klicih takih funkcij se casovna

zahtevnost se poveca, zato moramo v glavi datoteke (openssl/bn.h) preveriti, ka-

tera funkcija je osnovna za doloceno operacijo in katera je samo ovoj osnovne funkcije.

Tak primer sta funkciji BN_GF2m_mod_div(), ki zahteva polinom v obliki objekta

BIGNUM, in BN_GF2m_mod_mul_arr(), ki zahteva polje (glej parameter p).

int BN_GF2m_poly2arr (const BIGNUM *a, int p[], int max)

int BN_GF2m_arr2poly (const int p[], BIGNUM *a)

int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,

const BIGNUM *p, BN_CTX *ctx);

int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,

const int p[], BN_CTX *ctx);

Spodaj je zapisanih nekaj nerazcepnih polinomov, ki se uporabljajo v polju

GF (2m). Polinome do stopnje 10000 smo nasli v [16].

8,4,3,1

16,5,3,1

32,7,3,2

64,4,3,1

128,7,2,1

256,10,5,2

...

5.2 Metoda deljenja skrivnosti s CA in kitajskim

izrekom o ostankih

V clanku [12] ni tocno opisana uporaba kitajskega izreka o ostankih, zato bomo

najprej uporabili metodo Asmuth-Bloom, s katero bomo skrivnost razdelili na m

delezev, nato pa bomo vsak delez dodatno razdelili se z metodo LMCA.

Za metodo Asmuth-Bloom potrebujemo mnozico paroma tujih stevil, kjer je

njihov najvecji skupni delitelj enak ena. Najucinkoviteje je, ce za to uporabimo

Page 51: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.2 Metoda deljenja skrivnosti s CA in kitajskim izrekom o ostankih 41

mnozico prastevil, saj nam tako ni treba preverjati tega pogoja. Zaradi varnosti je

pomembno tudi, da so ta stevila zelo velika. Programski jezik C++ ne omogoca

uporabe stevil, ki so vecje bitne dolzine kot 64, brez uporabe dodatnih knjiznic, ali

pa jih implementiramo sami. Pri kriptografskih metodah je se posebej pomembna

varnost, zato je boljse, da uporabimo knjiznice, ki so dobro preizkusene in se pogosto

posodabljajo. Prav zaradi teh razlogov smo izbrali knjiznico OpenSSL. Vec o tipu

BIGNUM in funkcionalnostih/podrobnostih knjiznice smo opisali v podpoglavju 5.1,

zdaj pa si poglejmo definicije funkcij, ki jih potrebujemo za trenutno metodo.

int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe,

const BIGNUM *add, const BIGNUM *rem, BN\_GENCB *cb);

BN_generate_prime_ex() je najpomembnejsa funkcija za metodo Asmuth-

Bloom. Z njo generiramo mnozico prastevil, ki se uporabljajo za deljenje s kitajskim

izrekom o ostankih. Poglejmo si uporabo funkcije in njene vhodne ter izhodne para-

metre.

• Prastevilo se shrani v parameter ret, ce ta ni NULL.

• S parametrom bits, dolocimo minimalno koliko bitno mora biti generirano

prastevilo.

• Ce je vrednost parametra safe enaka true, potem je to prastevilo p, tako

imenovano ”varno prastevilo”, hkrati pa vemo, da je tudi (p− 1)/2 prastevilo.

• Poljubna parametra add in rem dolocata dodatne pogoje za prastevilo, in sicer

mora za prastevilo p veljati p % add == rem. Ce je rem enako NULL, potem

se vrednost nadomesti z 1.

• Poljubni parameter cb kaze na strukturo BN_GENCB, v kateri se hrani callback

funkcija, ki jo klicemo v razlicnih stopnjah generiranja stevila: ko je stevilo

generirano, ko se testira ali je prastevilo in ko najdemo prastevilo.

int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);

Funkcija BN_rand_range() generira kriptografsko varno nakljucno stevilo v

obmocju 0 ≤ rnd < range in rezultat shrani v parameter rnd.

int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);

Page 52: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

42 Implementacije

Funkcija BN_add() sesteje stevili a in b ter rezultat shrani v r.

int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN\_CTX *ctx);

Funkcijo BN_mul() uporabljamo za mnozenje velikih stevil. Pomnozimo a in b

ter rezultat shranimo v r. Argument ctx je struktura, ki hrani zacasne spremenljivke,

ki jih potrebujejo funkcije knjiznice.

int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,

const BIGNUM *d, BN\_CTX *ctx);

Funkcija BN_div() se uporablja za deljenje stevila m s stevilom d. Rezultat

deljenja se shrani v parameter dv, ostanek pri deljenju pa v parameter rem. Oba

parametra sta poljubna in imata lahko vrednost NULL.

int BN_cmp(const BIGNUM *a, const BIGNUM *b);

S funkcijo BN_cmp() primerjamo stevili a in b. Ce sta enaki, funkcija vrne 0,

ce je stevilo a manjse od b, vrne -1, drugace pa 1.

BIGNUM *BN\_mod\_inverse(BIGNUM *ret, const BIGNUM *a,

const BIGNUM *n, BN\_CTX *ctx);

Funkcija BN_mod_inverse() izracuna modularni inverz stevila a po modulu

n, ki ga potrebujemo pri rekonstrukciji skrivnosti s kitajskim izrekom o ostankih.

Rezultat se shrani v ret. Ce je ta NULL, se ustvari novo stevilo.

V naslednjem koraku nad vsakim dobljenim delezem uporabimo se metodo z li-

nearnim spominskim celicnim avtomatom. Tudi tukaj moramo uporabiti strukturo

BIGNUM, saj delamo nad vrednostmi, dobljenimi z metodo Asmuth-Bloom. Pre-

tvarjanje stevil v bitne nize, tudi pri stevilih manjsih bitnih dolzin, bi bilo pocasno

in bi zahtevalo veliko pomnilnika, zato si pomagamo z bitnimi operatorji in bitnimi

maskami. Pri strukturi BIGNUM jih ne moremo uporabiti neposredno, so pa na voljo

naslednje funkcije.

int BN_is_bit_set(const BIGNUM *a, int n);

int BN_clear_bit(BIGNUM *a, int n);

int BN_set_bit(BIGNUM *a, int n);

Z njimi lahko preverimo vrednost n-tega bita stevila a, pocistimo ali pa posta-

vimo bit na ena.

Page 53: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.2 Metoda deljenja skrivnosti s CA in kitajskim izrekom o ostankih 43

int ab_calculate_shares(const int method,

const int k, const int n, const std::vector<BYTE>& secret_bytes,

std::vector<std::vector<BYTE>>& shares_bytes)

int ab_recover_secret(const int method,

const int k, const int n,

const std::vector<std::vector<BYTE>>& shares_bytes,

std::vector<BYTE>& secret_bytes);

int ab_share_to_bytes(const BIGNUM* share, const BIGNUM* coprime,

const BIGNUM * copr0, std::vector<BYTE>& share_bytes);

int ab_bytes_to_share(const std::vector<BYTE>& share_bytes,

BIGNUM* share, BIGNUM* coprime, BIGNUM* copr0);

Funkcija, s katero lahko delimo podatke z metodama Asmuth-Bloom in LMCA,

je ab_calculate_shares(). S parametri lahko nastavimo vrednosti k in n. Bi-

tna dolzina je odvisna od velikosti skrivnosti, vpliv bitne dolzine pa je predstavljen v

poglavju 6. Skrivnost podamo preko parametra secret_bytes, podatkovna struk-

tura vector pa hkrati poskrbi, da poznamo velikost skrivnosti. Preko parametra

method podamo, katero metodo zelimo uporabiti za deljenje skrivnosti. Vrednost 1

pomeni, da uporabimo samo metodo Asmuth-Bloom, vrednost 2 pa, da uporabimo

se metodo LMCA.

Deleze skrivnosti vrnemo, kot vektor n vektorjev zlogov, preko izhodnega pa-

rametra share_bytes. Vektorju moramo predhodno rezervirati pomnilnik za n

vektorjev, ki so lahko prazni, saj koncnih velikosti delezev ne poznamo, dokler se

algoritem ne izvede.

Naslednja funkcija je ab_recover_secret(), s katero skrivnost rekonstrui-

ramo. Spet moramo podati metodo, s katero je bila skrivnost razdeljena, parametra

k in n ter vsaj k delezev. Funkcija potem glede na uporabljene metode rekonstruira

skrivnost in jo zapise v izhodni vektor secret_bytes.

Naslednji dve funkciji, ab_share_to_bytes() in ab_bytes_to_share(),

se uporabljata za pretvorbo delezev v binarno obliko in nazaj, da jih lahko zapisemo

v datoteko. Pri metodi Asmuth-Bloom je vsak delez sestavljen iz vrednosti deleza,

pripadajocega prastevila in prastevila, ki omejuje polje, v katerem je skrivnost. Oblika

deleza v binarni obliki je naslednja:

Page 54: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

44 Implementacije

Binarni BIGNUM

Delez

BIN BN

Prastevilo

BIN BN

Omejitev

Uporaba metode LMCA je podobna. S funkcijo lmca_calculate_shares()

izracunamo deleze skrivnosti in jih zapisemo v vektor shares_bytes. Funkcija zah-

teva tudi dodaten parameter bitlen, preko katerega podamo bitno dolzino skrivno-

sti.

int lmca_calculate_shares(const uint32_t k, const uint32_t n,

const int bitlen, const std::vector<BYTE>& secret_bytes,

std::vector<std::vector<BYTE>>& shares_bytes);

int lmca_recover_secret(const uint32_t k, const uint32_t n,

const std::vector<std::vector<BYTE>>& shares_bytes,

std::vector<BYTE>& secret_bytes);

int lmca_share_to_bytes(const uint32_t m, const uint32_t r,

const uint32_t idx, const int bitlen, const BIGNUM* share,

const std::vector<BIGNUM*>& rules, std::vector<BYTE>& share_bytes);

int lmca_bytes_to_share(const std::vector<BYTE>& share_bytes,

const int read_start, uint32_t& m, uint32_t& r, int& bitlen,

lmca_share& share, std::vector<BIGNUM*>& rules);

int lmca_bytes_split(const std::vector<BYTE>& share_bytes,

const int read_start, std::vector<BYTE>& split_bytes);

Skrivnost rekonstruiramo s funkcijo lmca_recover_secret(). Podati ji

moramo vsaj k zaporednih delezev preko vektorja shares_bytes, rekonstruirano

skrivnost pa zapise v izhodni parameter secret_bytes. Bitne dolzine skrivnosti

tu ne potrebujemo, saj je ze shranjena v delez.

Podatke pretvorimo v binarno obliko in nazaj s funkcijama lmca_bytes_to_

share() in lmca_bytes_to_share(), oblika binarnih podatkov pa je naslednja:

4 zlogi

Dolzina deleza

4 zlogi

Indeks

4 zlogi

Parameter m

4 zlogi

Parameter r

· · ·

4 zlogi

Bitna dolzina

4 zlogi

St. pravil

Stevilo pravil × Binarni BIGNUM

Pravila

Ko uporabljamo obe metodi, Asmuth-Bloom in LMCA, dobimo koncni delez,

Page 55: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.3 Metoda deljenja skrivnosti z detekcijo goljufov 45

v katerem je veliko manjsih delezev metode LMCA, ki jih je treba lociti. V ta na-

men smo na zacetek vsakega deleza zapisali njegovo dolzino. Tako lahko uporabimo

funkcijo lmca_bytes_split(), ki loci deleze. Preko parametra read_start po-

damo, kje naj zacne z branjem. Na tem polozaju potem prebere dolzino deleza, ga

shrani v izhodni parameter split_bytes in nato vrne dolzino deleza. V naslednji

iteraciji tako vemo, kje zaceti z branjem naslednjega deleza.

5.3 Metoda deljenja skrivnosti z detekcijo goljufov

Metoda deljenja skrivnosti z detekcijo goljufov deluje v polju GF (2m). Aritmeticne

operacije v tem polju nam ponuja knjiznica OpenSSL, ce podamo primerne nerazce-

pne polinome, ki so potrebni za mnozenje. V nadaljevanju bomo opisali uporabljene

funkcije in implementacijske podrobnosti te metode.

5.3.1 Uporabljene funkcije

BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);

int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);

int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);

int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,

const int p[], BN_CTX *ctx);

int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,

const int p[], BN_CTX *ctx);

Funkcija BN_copy() se uporablja za kopiranje stevila b v stevilo a. Ob

uspesnem kopiranju vrne stevilo a oz. NULL, v primeru, ko pride do napake.

S funkcijo BN_rand() generiramo nakljucna stevila. Generirano stevilo se

zapise v rnd. S parametrom bits dolocimo najmanjso dovoljeno bitno dolzino

stevila. Nastavimo lahko tudi vrednost najpomembnejsega bita (angl. Most Si-

gnificant Bit) s top. Ce je ta –1, bit nastavimo na 0. Ce je top enak 0, bit nastavimo

na 1 in ce je top enak 1, potem nastavimo dva najpomembnejsa bita na 1, tako da je

produkt dveh takih stevil vedno dvakratne bitne dolzine faktorjev.

S funkcijo BN_GF2m_add() sestejemo stevili a in b ter rezultat shranimo v r.

Pri sestevanju ne potrebujemo nerazcepnega polinoma, saj rezultat nikoli ne preseze

bitne dolzine sestevancev.

Page 56: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

46 Implementacije

S funkcijo BN_GF2m_mod_mul_arr() zmnozimo stevili a in b ter rezultat

shranimo v r. Funkcija kot parameter prejme nerazcepni polinom p, ki ga moramo

podati v obliki celostevilskega polja, in kontekstno spremenljivko ctx, v kateri so

shranjene zacasne spremenljivke, ki jih omenjena funkcija potrebuje.

Funkcija BN_GF2m_mod_exp_arr() se uporablja za potenciranje stevila a na

potenco b. Pri tem se znotraj funkcije uporablja zgoraj opisano mnozenje ali kvadri-

ranje. Podobno moramo tudi tukaj podati nerazcepni polinom p in ctx. Rezultat

zapisemo v r.

Po uspesno izvedeni operaciji, funkcije vrnejo vrednost 1, ob napaki pa vrednost

0.

5.3.2 Implementacijski detajli

Glede na clanek [11] lahko v teoriji vzamemo poljubno veliko skrivnost, vendar pa je

to dokaj tezko implementirati. Iskanje nerazcepnih polinomov za m = 232, v primeru,

ko zelimo razdeliti datoteko velikosti 4 GB, in tvorjenje takega polja je zelo zahtevna

operacija. Kljub temu pa je implementirano metodo preprosto razsiriti z dodajanjem

poljubnih nerazcepnih polinomov.

Ker imamo omejen nabor nerazcepnih polinomov, se odlocimo za prirejeno im-

plementacijo te metode. Uporabimo od 128- do 8192-bitne besede datoteke, ki jo

razdelimo in postopek ponovimo za celotno datoteko, dokler ne obdelamo vseh njenih

delov. Ce imamo za izbrano bitno dolzino premalo podatkov, manjkajoce podatke

nadomestimo z nakljucnimi zlogi, generiranimi z metodo RAND_bytes() – ti so

kriptografsko varni.

Page 57: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.3 Metoda deljenja skrivnosti z detekcijo goljufov 47

void cd_calculate_shares(const int k, const int n, const int N,

const std::vector<BYTE>& secret_bytes,

std::vector<std::vector<BYTE>>& shares_bytes);

int cd_reconstruct_secret(const int k, const int n, const int N,

const std::vector<std::vector<BYTE>>& shares_bytes,

std::vector<BYTE>& secret_bytes);

void cd_shares_to_bytes(const int& k, const int& n, const int& N,

const int& idx, const int& bitlen, const BIGNUM * secret_share,

const BIGNUM * chksum_share, std::vector<BYTE>& share);

int cd_bytes_to_shares(const std::vector<BYTE>& share,

BIGNUM* secret_share, BIGNUM* chsum_share,

int& share_idx, std::vector<int>& params);

int cd_calc_checksum(const int& N,

const std::vector<BYTE>& secret_bytes,

const int* irr_poly, BIGNUM* checksum);

Za izracun delezev se uporablja funkcija cd_calculate_shares(). Vlogo

parametrov k in n ze poznamo, funkcija pa sprejme se dodaten parameter N, ki nam

pove, na koliko delov razdelimo skrivnost pri izracunu kontrolnega stevila. Skriv-

nost podamo preko parametra secret_bytes, funkcija pa nam vrne deleze preko

izhodnega parametra shares_bytes.

Za rekonstrukcijo skrivnosti imamo na voljo funkcijo cd reconstruct se-

cret(). Podati ji moramo k delezev preko parametra shares_bytes. Metoda

nato rekonstruira skrivnost in jo zapise v izhodni parameter secret_bytes, ki je

vektor zlogov.

Deleze pretvorimo v binarno obliko s funkcijo cd_shares_to_bytes() in

dobimo vektor zlogov, ki je naslednje oblike:

2 zloga

Glava

4 zlogi

Bitna dolzina

4 zlogi

Indeks deleza

· · ·

Binarni BIGNUM

Delez skrivnosti

Binarni BIGNUM

Delez kontrolnega stevila

Vektor zlogov pretvorimo nazaj v obliko, ki jo potrebuje algoritem s funkcijo

cd_bytes_to_shares().

Page 58: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

48 Implementacije

Posebej je implementirana tudi funkcija za izracun kontrolnega stevila cd_

calc_checksum(), ker jo potrebujemo pri racunanju delezev in pri preverjanju

rekonstruirane skrivnosti. Sprejme parameter N in vektor zlogov, ki ga razdeli na

N delov. Binarne podatke pretvori v objekte BIGNUM in nato iz njih izracuna

kontrolno stevilo, ki ga vrne preko izhodnega parametra checksum.

5.4 Rabinov IDA

5.4.1 Uporabljene funkcije

Pri tej metodi se uporabljajo funkcije za sestevanje, mnozenje in deljenje v GF (2m).

Prvi dve, BN_GF2m_add() in BN_GF2m_mul_arr(), smo ze opisali, nova pa je

funkcija BN_GF2m_mod_div(), s katero delimo stevili a in b ter rezultat shranimo

v r. Funkciji moramo podati parameter p, ki je BIGNUM predstavitev nerazcepnega

polinoma za doloceno Galvajevo polje. Funkcija potrebuje se kontekstni parameter

ctx.

int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,

const BIGNUM *p, BN_CTX *ctx);

Page 59: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.4 Rabinov IDA 49

5.4.2 Implementacijski detajli

int ida_calculate_shares(const int k, const int n, const int gf_m,

const std::vector<BYTE>& secret_bytes,

std::vector<std::vector<BYTE>>& shares_bytes);

int ida_recover_secret(const int k, const int n, const int gf_m,

const std::vector<std::vector<BYTE>>& shares_bytes,

std::vector<BYTE>& recovered_secret);

int ida_share_to_bytes(const int k, const int n, const int idx,

const std::vector<BIGNUM*>& mat_s, const std::vector<BIGNUM*>& mat_a,

std::vector<BYTE>& share_bytes);

int ida_bytes_to_share(const int k, const int n,

const int curr_share_idx, const std::vector<BYTE>& share_bytes,

int& idx, std::vector<BIGNUM*>& mat_s, std::vector<BIGNUM*>& mat_a);

int ida_mul_matrix(const std::vector<BIGNUM*>& mat_a,

const std::vector<BIGNUM*>& mat_b, std::vector<BIGNUM*>& mat_res,

int rows1, int cols1, int cols2, int* irr_poly);

int ida_invert_matrix(std::vector<BIGNUM*>& mat,

std::vector<BIGNUM*>& inv, const int n, const int* irr_poly);

int ida_generate_cauchy_matrix(std::vector<BIGNUM*>& mat,

const int rows, const int cols, const int* irr_poly, const int gf_m);

Deleze skrivnosti z metodo IDA izracunamo s funkcijo ida calculate sha-

res(). Podati moramo vrednosti k, n in parameter m za polje GF (2m) – vrednost

predstavlja tudi bitno dolzino posameznega elementa v matriki F, ki smo jo omenili pri

opisu algoritma 4.4. Skrivnost podamo preko parametra secret_bytes, funkcija

pa vrne deleze preko izhodnega parametra shares_bytes. Skrivnost lahko nato

rekonstruiramo s funkcijo ida_recover_secret().

Deleze v binarno obliko in nazaj pretvorimo s funkcijama ida_share_to_

bytes() in ida_bytes_to_share(). Iz parametrov k, n in idx (indeks deleza)

izracunamo polozaj elementov v matriki S, ki jih moramo zapisati, dodati pa moramo

se celotno pripadajoco vrstico matrike A. Oblika zapisa je naslednja:

4 zlogi

Indeks

n × Binarni BIGNUM

Vrstica matrike S

k × Binarni BIGNUM

Vrstica matrike A

Page 60: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

50 Implementacije

Poleg teh funkcij imamo se tri dodatne za izvajanje operacij nad matrikami. S

funkcijo ida_generate_cauchy_matrix() lahko generiramo poljubno Cauchey-

jevo matriko. S funkcijo ida_mul_matrix() lahko pomnozimo dve matriki. Podati

moramo stevilo vrstic in stevilo stolpcev prve matrike preko parametrov rows1 in

cols1 in stevilo vrstic druge matrike preko parametra cols2. Rezultat je nova

matrika z dimenzijami rows1×cols2. Za izracun inverzne matrike imamo funkcijo

ida_invert_matrix(). Matrika, katere inverz racunamo, mora biti kvadratna.

Paziti moramo tudi na to, da funkcija pokvari vrednosti matrike mat med racunanjem

inverza, zato moramo pred racunanjem narediti kopijo matrike, ce jo se potrebujemo.

5.5 Aplikacija

V tem poglavju bomo opisali aplikacijo, v kateri smo uporabili predstavljene knjiznice

metod za deljenje skrivnosti in pretvorbo ter pripravo podatkov za vhod v metode.

5.5.1 Priprava podatkov

Pri implementaciji metod zahtevamo, da so podatki v obliki polja oziroma vektorja

zlogov. Zaradi velikega stevila datotecnih formatov je najpreprosteje prebrati dato-

teko, ki jo zelimo razdeliti kot polje zlogov v pomnilnik. Druga opcija je da podpremo

dolocene formate, odstranimo glavo datoteke in preberemo samo relevantne podatke.

To bi povecalo kompleksnost implementirane knjiznice in omejilo uporabo na samo

nekaj dolocenih datotecnih tipov. S tem bi zmanjsali velikost skrivnosti, vendar se

za to moznost nismo odlocili in raje izbrali od podatkov neodvisno metodo. Polje

zlogov tako brez tezav pretvorimo v BIGNUM objekt, na katerem delujejo metode, s

funkcijo BN_bin2bn().

Iz razlogov, ki smo jih ze predstavili (glej 2.4.2), metode podpirajo podatke samo

dolocenih velikosti (v razponu od 1 do 10000 zlogov). Ce opravljamo deljenje vecjih

datotek, jih razdelimo na manjse podskrivnosti in deleze izracunamo iz teh. Koncni

vecji delez je zato skupek manjsih delezev.

Za doloceno izbrano velikost podskrivnosti nam lahko pri koncni podskrivnosti

zmanjka podatkov. V tem primeru jih nadomestimo s kriptografsko varnimi zlogi,

pridobljenimi s funkcijo RAND_bytes() knjiznice libcrypto, in v skupnem delezu

hranimo stevilo generiranih zlogov, da jih potem lahko odstranimo. V podatkih se

Page 61: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

5.5 Aplikacija 51

lahko pojavijo tudi zlogi z vrednostjo 0. Ce se ti zlogi pojavijo na zacetku podskriv-

nosti jih pri rekonstrukciji izpustimo. Za vsak delez podskrivnosti zato hranimo tudi,

koliko zlogov z vrednostjo 0 je v predponi podskrivnosti.

Poseben primer je metoda IDA, pri kateri se velikost podskrivnosti izracuna kot

k × n×m, ki so njeni vhodni parametri.

5.5.2 Opis aplikacije

Aplikacija je sestavljena iz dveh delov, preprostega spletnega uporabniskega vmesnika

in streznika, ki opravlja deljenje skrivnosti in hranjenje delezev na razlicnih lokacijah.

Streznik opravlja vec vlog, je delivec skrivnosti ali pa odjemalec, ki mu posljemo delez

skrivnosti. Aplikacija je implementirana v Node.js, ki omogoca izvajanje Javascripta

na strezniski strani. Implementiranih je veliko uporabnih modulov, ki nam olajsajo

delo, hkrati pa podpira dodatke, napisane v programskem jeziku C++, v katerem je

napisana tudi nasa knjiznica.

Sistem lahko predstavimo z naslednjo shemo:

Uporabnik

Delivec

Streznik zjavnimi kljuci

Odjemalec1

Odjemalec2

. . . Odjemalecn

Uporabnik si mora pri ustvarjanju racuna izbrati mocno geslo, ki ga za shranje-

vanje zgostimo z algoritmom Argon2 ali bcrypt. Ko je racun ustvarjen, se lahko upo-

rabnik vpise v svoj racun in ga nato preusmerimo na njegov profil. V uporabniskem

profilu lahko uporabnik ustvari seznam streznikov, po katerih bo delivec porazdelil

skrivnosti. Recimo mu seznam zaupanja.

Page 62: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

52 Implementacije

Pri deljenju skrivnosti so na voljo tri metode, ki smo jih opisali v podpoglavjih

4.2, 4.3 in 4.4. Podati moramo parametre, ki jih posamezna metoda zahteva, in izbrati

streznike, na katere bomo prenesli deleze. Ce skrivnost razdelimo na vec delov, kot je

izbranih streznikov, se smatra, da jih bomo prenesli rocno. Tudi za izbrane streznike

se lahko nastavi rocni prenos, pri cemer se generira kljuc s podatki o delezu, ki se nato

poslje na streznik. Preko spletne aplikacije lahko nato delez, ce imamo pripadajoc

kljuc, posljemo na streznik s kaksno drugo napravo, na primer mobilnim telefonom,

drugim racunalnikom ipd.

Skrivnost lahko podamo kot datoteko in jo nato poljubno analiziramo, ce ne

vemo, kateri algoritem bi bil najbolj primeren za deljenje. Pri analizi se upostevajo

velikost datoteke in koncnih delezev, hitrost deljenja, itd.

Ko vnesemo vse potrebne parametre, lahko skrivnost razdelimo s pritiskom na

gumb ”Deli”. Najprej se na strezniski strani validirajo parametri, nato pa se izvede

deljenje skrivnosti. Po deljenju se na spletni strani prikazejo delezi, ki jih lahko

prenesemo ali posljemo na streznike. Hkrati se generira tudi kljuc, ki identificira

razdeljeno skrivnost in se shrani v zbirko razdeljenih skrivnosti v uporabnikovem

profilu. Delezem lahko dodamo tudi kljucne besede, ki opisujejo skrivnost.

Komunikacija poteka neposredno med uporabnikom in streznikom, ki mu

posiljamo delez. Vsako sporocilo med odjemalcem in streznikom zakodiramo z

algoritmom AES, pri cemer uporabimo nakljucno generiran kljuc. Kljuc nato zako-

diramo s prejemnikovim javnim kljucem in vse skupaj posljemo prejemniku. Seznam

javnih kljucev vzdrzuje poseben streznik. Ta nam pove, ce je kateri od streznikov

spremenil svoj kljuc in preveri, ce je ta streznik res tisti, za katerega se izdaja.

Skrivnost rekonstruiramo tako, da podamo identifikacijski kljuc skrivnosti ali

pa za njo poizvedemo s kljucnimi besedami. Nato se od uporabnikovih streznikov

zahteva k delezev skrivnosti, s katerimi nato aplikacija rekonstruira skrivnost.

Page 63: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 6

Rezultati

V tem poglavju porocamo o tem, kako razlicni parametri vplivajo na case izracuna

delezev in rekonstrukcijo skrivnosti. Za vsako zbirko parametrov smo opravili 100

testov in izracunali povprecni cas izvajanja v milisekundah. Testi so bili izvedeni na

procesorju Intel i5-4690 @ 3.9GHz, knjiznica pa je bila prevedena s prevajalnikom

MSVC++ 14.1 (del razvojnega okolja Visual Studio 2017).

Metode, implementirane v knjiznici, smo testirali z razlicnimi parametri. Pri vseh

metodah potrebujemo parametra k in n. Posamezne metode imajo nato se dodatne

parametre, ki so specificni zanje. Testirali smo tudi, kako je cas izvajanja odvisen

od velikosti skrivnosti ter podskrivnosti, ki sta v tabelah podani v zlogih. Velikost

skrivnosti predstavlja celo dolzino skrivnosti, ki jo razdelimo na manjse podskrivnosti,

na katerih potem izvedemo deljenje skrivnosti. Izhod je torej zbirka delezev.

Najprej bomo testirali metodi Asmuth-Bloom + LMCA. Vidimo, da se metodi

ne izkazeta najbolje, zaradi zelo visokih casov pri izracunu delezev.

V tabeli 6.1 so izmerjeni casi izvajanja za samostojno metodo Asmuth-Bloom.

Izkaze se, da je pri nizkih vrednostih k in n metoda se uporabna, potem pa se njena

casovna zahtevnost zelo poveca. Glavni razlog za to je naiven nacin iskanja prastevil,

kar je razvidno iz tabele 6.2. Vidimo, da so povprecni casi iskanja mnozic primernih

stevil visoki ali pa nam jih pri vecjih parametrih sploh uspe najti, saj se program

zaplete v neskoncno zanko.

Parametrik n Velikost skrivnosti

(v zlogih)Velikost podskrivno-sti (v zlogih)

Povprecni cas izvaja-nja (ms)

3 4 256 8 326,0066 8 1024 8 1336673 4 1024 32 2734,93

Tabela 6.1: Povprecni casi izracuna delezev z metodo Asmuth-Bloom.

53

Page 64: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

54 Rezultati

Parametrik n Velikost skrivnosti (v zlogih) Povprecni cas izvaja-

nja (ms)3 4 8 13,0273 4 64 414,1176 8 8 1299,886 8 32 7483,4714 15 4 14935,3

Tabela 6.2: Povprecni casi generiranja prastevil za metodo Asmuth-Bloom prirazlicnih parametrih.

Rekonstrukcija skrivnosti je veliko bolj ucinkovita (glej tabelo 6.3) in primerljiva

z ostalimi implementiranimi metodami.

Parametrik n Velikost skrivnosti

(v zlogih)Velikost podskriv-nosti (v zlogih)

Povprecni cas izvaja-nja (ms)

3 4 256 8 0,950956 8 1024 8 7,193373 4 1024 32 3,32248

Tabela 6.3: Povprecni casi rekonstrukcije skrivnosti z metodo Asmuth-Bloom.

Enake teste izvedemo se na metodi, v kateri smo zdruzili metodi Asmuth-Bloom

in LMCA. Iz tabel 6.4 in 6.5 je razvidno, da metoda LMCA zelo upocasni tako izracun

delezev kot tudi rekonstrukcijo skrivnosti. Za oboje pri dokaj majhnih vrednostih

parametrov potrebuje tudi do nekaj minut. Metodi bi bili se vedno lahko uporabni v

primeru, ko imamo majhno stevilo lokacij za hranjenje delezev (priblizno 3–4).

Parametrik n Velikost skrivnosti (v zlogih) Velikost podskriv-

nosti (v zlogih)Povprecni cas izva-janja (ms)

3 4 256 8 22470,46 8 1024 8 5888703 4 1024 32 149855

Tabela 6.4: Povprecni casi izracuna delezev z metodama Asmuth-Bloom + LMCA.

Page 65: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

55

Parametrik n Velikost skrivnosti (v zlogih) Velikost podskriv-

nosti (v zlogih)Povprecni cas izva-janja (ms)

3 4 256 8 20373,66 8 1024 8 4208683 4 1024 32 135602

Tabela 6.5: Povprecni casi rekonstrukcije skrivnosti z metodama Asmuth-Bloom +LMCA.

Naslednjo smo testirali metodo deljenja skrivnosti z detekcijo goljufov. Izmerjeni

casi izracuna delezev so v tabeli 6.6. Na casovno zahtevnost ima pricakovano najvecji

vpliv velikost skrivnosti. Nekoliko jo lahko zmanjsamo s tem, da povecamo vrednost

parametra N , ki podskrivnost razdeli na manjse dele in so izracuni kontrolnega stevili

hitrejsi (zmanjsamo bitno dolzino in s tem parameter m v GF (2m)). To izboljsavo

opazimo le pri velikih skrivnostih (glej 6.1, delili smo 128 kilozlogov veliko skrivnost).

Poglejmo cas izracuna delezev 512 kilozlogov velike skrivnosti, ki jo razdelimo

na 1 kilozlog velike podskrivnosti. Metoda je deleze izracunala v pol sekunde, kar je

zelo dober rezultat. Kriptografski kljuci bi bili ponavadi velikosti 4–8 kilozlogov; v

tem razponu so rezultati se boljsi.

Page 66: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

56 Rezultati

Parametrik n N Velikost skrivnosti

(v zlogih)Velikost podskriv-nosti (v zlogih)

Povprecni cas izvaja-nja (ms)

3 4 8 1024 256 0.343566 8 8 1024 256 0.73518 15 8 1024 256 1.519676 8 8 8192 1024 4.824186 8 8 32768 1024 19.19026 8 8 65536 1024 38.366 8 8 131072 1024 76.90018 15 8 131072 1024 154.4918 15 16 131072 1024 144.5138 15 32 131072 1024 139.5878 15 64 131072 1024 137.2748 15 32 524288 = 1024 ×

5121024 558.01

18 21 32 4096 1024 13.118418 21 128 4096 1024 13.007218 21 128 4096 512 14.627

Tabela 6.6: Povprecni casi izracuna delezev z metodo deljenja skrivnosti z detekcijogoljufov.

V tabeli 6.7 so rezultati za rekonstrukcijo skrivnosti. Po pricakovanjih je tu pov-

precni cas izvajanja visji zaradi Lagrangeve interpolacije, ki ima casovno zahtevnost

O(n2). Vecanje casa izvajanja v odvisnosti od velikosti podskrivnosti je prikazano

na grafu 6.2. V optimalnem razponu (4–8 kilozlogov) so rezultati se vedno dobri,

kljub temu pa metode ni priporocljivo uporabljati, ce moramo skrivnosti pogosto

rekonstruirati.

Page 67: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

57

8 16 32 64120

130

140

150

160

Vrednost parametra N

Cas

izva

janja

(s)

Slika 6.1: Cas izracuna delezev z metodo deljenja skrivnosti z detekcijo goljufov vodvisnosti od parametra N

Parametrik n N Velikost skrivnosti

(v zlogih)Velikost podskriv-nosti (v zlogih)

Povprecni cas izvaja-nja (ms)

3 4 8 1024 256 11.54276 8 8 1024 256 55.3658 15 8 1024 256 226.1346 8 8 8192 1024 1653.546 8 8 32768 1024 6616.16 8 8 65536 1024 13033.46 8 8 131072 1024 26085.98 15 8 131072 1024 1069118 15 16 131072 1024 1060698 15 32 131072 1024 1054488 15 64 131072 1024 10589918 21 32 4096 1024 7403.3718 21 128 4096 1024 7362.918 21 128 4096 512 4505.85

Tabela 6.7: Povprecni casi rekonstrukcije skrivnosti z metodo deljenja skrivnosti zdetekcijo goljufov.

Zadnja implementirana metoda je Rabinov IDA, rezultati testiranja pa so podani

v tabelah 6.8 in 6.9. Rezultati pri tej metodi so najboljsi izmed vseh treh implemen-

tiranih metod, tako pri izracunu delezev kot tudi pri rekonstrukciji skrivnosti. S

povecevanjem velikosti skrivnosti se cas izracuna delezev veca sorazmerno linearno.

Page 68: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

58 Rezultati

64 128 256 512 10240

2

4

6

8

Velikost podskrivnosti

Cas

izva

janja

(s)

Slika 6.2: Cas rekonstrukcije z metodo deljenja skrivnosti z detekcijo goljufov v od-visnosti od velikosti podskrivnosti.

Podoben vpliv ima tudi parameter m, katerega vrednost je priporocljivo izbrati cim

manjso, zaradi izracunov v GF (2m) in delno tudi zaradi tega, ker pri tej metodi na

podlagi tega parametra izracunamo velikost podskrivnosti (glej 6.3 – izmerjeno pri

1 megazlogu veliki skrivnosti). Tudi pri rekonstrukciji skrivnosti opazimo podobno

obnasanje.

Parametrik n m Velikost skrivnosti

(v zlogih)Velikost podskriv-nosti (v zlogih)

Povprecni cas izvaja-nja (ms)

5 8 256 66560 1280 46.70575 8 256 262400 1280 183.8255 8 256 524800 1280 368.4675 8 256 1049600 1280 734.1358 15 256 69120 3840 61.10848 15 256 264960 3840 234.1028 15 256 526080 3840 466.8548 15 256 1052160 3840 929.3248 15 512 1052160 7680 1471.018 15 1024 1059840 15360 2666.648 15 2048 1075200 30720 5215.2518 21 128 12096 6048 9.24064

Tabela 6.8: Povprecni casi izracuna delezev z Rabinovo metodo IDA.

Page 69: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

59

256 512 1024 20480

2

4

6

Vrednost parametra m

Slika 6.3: Cas izracuna delezev z metodo IDA v odvisnosti od parametra m.

Presenetljivo je, da so casi izvajanja rekonstrukcije nizji od izracuna delezev, saj

pri tem racunamo inverz matrike, ki je zahtevna operacija.

Parametrik n m Velikost skrivnosti

(v zlogih)Velikost podskriv-nosti (vzlogih)

Povprecni cas izvaja-nja (ms)

5 8 256 66560 1280 21.41545 8 256 262400 1280 84.00145 8 256 524800 1280 168.1055 8 256 1049600 1280 335.9128 15 256 69120 3840 28.13678 15 256 264960 3840 107.8528 15 256 526080 3840 214.4858 15 256 1052160 3840 428.3328 15 512 1052160 7680 685.2148 15 1024 1059840 15360 1261.618 15 2048 1075200 30720 2472.6118 21 128 12096 6048 9.20383

Tabela 6.9: Povprecni casi rekonstrukcije skrivnosti z Rabinovo metodo IDA.

Za konec si poglejmo se velikosti posameznega deleza pri razlicnih metodah in

parametrih. Rezultate najdemo v tabeli 6.10. Pri metodi IDA so delezi manjsi od

velikosti skrivnosti. Tu vemo, da je velikost vsakega deleza skrivnosti S enaka Sk.

Pri metodi z detekcijo goljufov vidimo, da so delezi priblizno od 5 do 10 odstotkov

Page 70: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

60 Rezultati

vecji od skrivnosti, velikost koncnega deleza pa je nekoliko odvisna od izbire velikosti

podskrivnosti. Razlog za to je, da pri vecjih podskrivnostih manjkrat racunamo

deleze nad celotno skrivnostjo in s tem zmanjsamo velikost dodatnih parametrov,

ki jih moramo zapisati v posamezni delez. Metodi Asmuth-Bloom in LMCA vrneta

deleze, ki so nekajkrat vecji od velikosti skrivnosti.

ParametriMetoda Velikost skrivno-

sti (v zlogih)Velikost podskriv-nosti (v zlogih)

Velikost enegadeleza (v zlogih)

IDA 36288 6048 5170IDA 66528 6048 9482IDA 133056 6048 18962z detekcijo goljufov 4096 256 4480z detekcijo goljufov 8192 256 8960z detekcijo goljufov 8192 512 8608z detekcijo goljufov 8192 1024 8432Asmuth-Bloom 256 8 1420Asmuth-Bloom +LMCA

256 8 16339

Tabela 6.10: Povprecna velikost deleza pri razlicnih metodah.

Page 71: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Poglavje 7

Sklep

V magistrskem delu smo raziskovali metode deljenja skrivnosti. Najprej smo proucili

njihove osnove, nato pa pogledali izboljsave, ki so se pojavile kasneje. Tri izmed njih

smo podrobneje opisali v delu in jih tudi implementirali. V veliko pomoc je bila

OpenSSL knjiznica libcrypto, ceprav je slabo dokumentirana, saj bi morali brez nje

implementirati veliko vec funkcionalnosti, ki lahko postanejo sibke tocke aplikacije.

Zelo pomembno je, da je implementacija varna.

Vse metode smo na koncu testirali z razlicnimi parametri in razlicnimi velikostmi

skrivnosti. Ugotovili smo, da sta uporabni dve metodi, Rabinova IDA in metoda

deljenja z detekcijo goljufov. Pri zadnji, ki je zdruzitev dveh drugih metod, pa se je

izkazalo, da ima precej slabosti. S testiranjem smo poskusali najti tudi omejitve, ki bi

jih morali postaviti pri uporabi knjiznice v spletni aplikaciji, in optimalne parametre

za razlicne metode. Aplikacija sluzi kot prakticni primer uporabe deljenja skrivnosti

in zdruzuje tehnologije, ki poskrbijo za se vecjo varnost nasih podatkov. Do neke

mere uporaba tehnologije Node.js v spletni aplikaciji poskrbi tudi za paralelizacijo,

saj se koda izvaja asinhrono in nam ni treba cakati na izracun delezev ene skrivnosti,

da lahko zazenemo novega. Ceprav lahko do spletne aplikacije dostopamo preko

mobilnega telefona, bi lahko za te naprave razvili mobilno aplikacijo, ki bi omogocala

lazji rocni prenos delezev skrivnosti.

Zavedati se moramo, da so to kriptografske metode, ki se morajo izkazati za

varne z dolgotrajnim testiranjem, pregledati pa jih morajo tudi drugi raziskovalci.

Trenutna implementacija je zasnovana tako, da je lazje poiskati in popraviti napake

v kodi oziroma dodati kaksno funkcionalnost. Zaradi tega koda se ni optimizirana,

kljub temu pa se metode dobro izkazejo za namen deljenja skrivnosti. Njihov primarni

namen je deljenje manjsih datotek.

Clanki, v katerih so opisane metode, ponavadi vsebujejo samo neko osnovno

matematicno predstavitev problema, zato smo morali nekatere implementacijske de-

tajle in format za hranjenje delezev dolociti sami, pri cemer so se mozne izboljsave.

61

Page 72: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

62 Sklep

Teme, ki se ukvarjajo s kriptografijo, so zaradi razlicnih metodologij in uporabe ma-

tematicnih orodij zelo zanimive in zelo obsirno podrocje, v katerem je mogoce se dosti

razviti. V sklopu tega magistrskega dela smo spoznali veliko novih konceptov, orodij

in tehnologij, ki bodo uporabni se v nadaljnjih projektih.

Page 73: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

Literatura

[1] Conwayeva igra zivljenja. http://web.archive.org/

web/20170626234630/http://ddi.cs.uni-potsdam.de/

HyFISCH/Produzieren/lis_projekt/proj_gamelife/

ConwayScientificAmerican.htm. [2017-06-26].

[2] Github: Tls/ssl and crypto library. https://github.com/openssl/

openssl. [2017-09-05].

[3] Microsoft cryptoapi. https://msdn.microsoft.com/en-us/library/

ms867086.aspx. [2017-09-05].

[4] Microsoft winsock. https://msdn.microsoft.com/en-us/library/

windows/desktop/ms738545(v=vs.85).aspx. [2017-09-05].

[5] Openssl license. https://github.com/openssl/openssl/blob/

master/LICENSE. [2017-09-05].

[6] Christoforus Juan Benvenuto. Galois field in cryptography. University of Wa-

shington, 2012.

[7] G. R. BLAKLEY. Safeguarding cryptographic keys. Proc. AFIPS 1979 National

Computer Conference, pages 313–317, 1979.

[8] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.

Introduction to Algorithms. The MIT Press, 2009.

[9] Joan Daemen and Vincent Rijmen. The design of rijndael: Aes — the advanced

encryption standard. Journal of Cryptology, 4(1):3–72, 1991.

[10] Cunsheng Ding, Dingyi Pei, and Arto Salomaa. Chinese remainder theorem:

applications in computing, coding, cryptography. World Scientific, 1996.

[11] H. Hoshino and S. Obana. Cheating detectable secret sharing scheme suitable

for implementation. In 2016 Fourth International Symposium on Computing and

Networking (CANDAR), pages 623–628, Nov 2016.

63

Page 74: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek

64 LITERATURA

[12] D. Lu, Y. Wang, X. Zhang, and L. Ji. A threshold secret sharing scheme based

on lmca and chinese remainder theorem. 2:439–442, Dec 2016.

[13] Harold V McIntosh. One Dimensional Cellular Automata. Luniver Press, 2009.

[14] Michael O. Rabin. Efficient dispersal of information for security, load balancing,

and fault tolerance. J. ACM, 36(2):335–348, April 1989.

[15] Michael Scott. Optimal irreducible polynomials for gf (2m) arithmetic.

[16] Gadiel Seroussi. Table of low-weight binary irreducible polynomials. Hewlett-

Packard Laboratories, 1998.

[17] Adi Shamir. How to share a secret. Commun. ACM, 22(11):612–613, November

1979.

[18] Arkadii Slinko. Algebra for Applications - Cryptography, Secret Sharing, Error-

Correcting, Fingerprinting, Compression. Springer undergraduate mathematics

series. Springer, 2015.

[19] Martin Tompa and Heather Woll. How to share a secret with cheaters. Journal

of Cryptology, 1(3):133–138, Oct 1989.

[20] James Westall and James Martin. An introduction to galois fields and reed

solomon coding. School of Computing Clemson University Clemson, 2010.

[21] Stephen Wolfram. Cellular automata and complexity: collected papers, volume 1.

Addison-Wesley Reading, MA, 1994.

Page 75: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek
Page 76: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek
Page 77: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek
Page 78: Matej Trop Metode deljenja skrivnostiMetode deljenja skrivnosti Klju cne besede: deljenje skrivnosti, kriptogra ja, varnost, hranjenje podatkov UDK: 004.08:512.624.95(043.2) Povzetek