Charakteristika dobre sifry

  1. Mnozstvi prace vynalozene na sifrovani a desifrovani by melo byt umerne pozadovanemu stupnu utajeni.
  2. Sifrovaci algoritmus by nemel obsahovat zbytecna omezeni.
  3. Implementace algoritmu by mela byt co nejjednodussi.
  4. Chyby pri sifrovani by se nemely prilis sirit a ovlivnovat nasledujici komunikaci.
  5. Zpravy by se zasifrovanim nemely zvetsovat.

Zmateni (confusion) - nelze predikovat, jakou zmenu zasifrovaneho textu vyvola byt jen mala zmena otevreneho textu <=> slozita funkcni zavislost mezi zasifrovanym textem a parem klic - otevreny text.
Difuze(diffusion) - zmena otevreneho textu se promita do mnoha mist zasifrovaneho textu.
Bezpecny system - nelze ziskat otevreny text na zaklade znalosti odpovidajici sifry

kryptoanalytik hleda transformaci h : C->P, h nebyva jednoznacna

Efektivne bezpecny system - Prob(h(C) = P) < e.


Idealni stav

Perfektni utajeni (perfect secrecy) - mejme n moznych otevrenych textu, stejne mnozstvi klicu a moznych sifer.

ProbC1(h(C1) = P) = Prob(h(C1) = P) = Prob(P)

Redundance

pocet bitu nutny k reprezentaci vsech znaku abecedy A je horni cela cast z log2(k)
pocet vsech moznych zprav delky n = 2An, z toho 2Rn smysluplnych. R nazyvame rate jazyka. Redundance je definovana
D = A - R

Pokud algoritmus sifruje nekolik ruznych zprav, z nichz jedna je smysluplna, do stejne sifry, system muze byt bezpecny.

Public-key systemy (systemy s verejnym klicem)

pouzitii jednosmernych (trapdoor) funkci - snadno vycislitelna funkce, jejiz inversni funkci lze efektivne spocitat pouze se znalosti (maleho) mnozstvi dodatecnych informaci. Nezavisle na zprave.

kazdy uzivatel vlastni par klicu:

  • verejny (public) klic - znam vsem uzivatelum systemu, pouziva se k sifrovani zprav zasilanych tomuto uzivateli
  • tajny, soukromy (private) klic - uzivatel uchovava v tajnosti, pouziva jej k desifrovani doslych zprav
    tajny klic nelze efektivne odvodit ze znalosti odpovidajiciho verejneho klice

    vyhodou systemu s verejnymi klici je relativne male mnozstvi pouzivanych klicu, moznost vytvareni verejne overitelnych elektronickych podpisu, vetsi flexibilita spravy klicoveho materialu


    Merkle-Hellman system

    zalozen na problemu batohu, prenasena zprava je chapana jako vektor reseni, prenasena je vysledna suma - "hmotnost batohu"

    a1, a2, ... an - posloupnost celych cisel, T cilova suma = hmotnost batohu, hledame vektor v takovy, aby

    suma(AiVi) = T

    necht posloupnost a1, a2, ... an je superrostouci, problem nalezeni vektoru v je v tomto pripade zvladnutelny v linearnim case

    Konstrukce systemu

    zvolime superrostouci posloupnost s1, s2, ... sn, dale vybereme cislo w a modul m,
    w bereme nesoudelne s m, m > sn.

    Ze zvolenych hodnot sestavime jiz obecnou posloupnost

    hi = w*si mod m

    Posloupnost {si}i=1..n a cisla w a m utajime, dale budou slouzit jako soukromy klic.
    Posloupnost {hi}i=1..n zverejnime jakozto verejny klic.

    Sifrovani

    1. Otevreny text P rozdelime na bloky delky n bitu.
    2. Kazdy blok Pj nahradime sumou
      Cj = suma(PjiHi)
    3. Zasifrovany text C odesleme

    Desifrovani

    1. Autorizovany prijemce vypocita w-1 - z vlastnosti w a m urcite existuje.
    2. Pro kazdy blok Cj spocita Cj * w-1.
    3. Vyresi problem batohu se superrostouci posloupnosti {si}i=1..n pro vsechny hodnoty ziskane v predchozim bode.
    4. Konkatenaci reseni vznikne puvodni zprava P.

    Korektnost desifrovani

    w-1e(p) mod m = w-1(p1h1+p2h1+ ... +pnhn) mod m =
    = p1w-1h1+p2w-1h1+ ... +pnw-1hn mod m =
    = p1w-1ws1+p2w-1ws1+ ... +pnw-1wsn mod m =
    = p1s1+p2s1+ ... +pnsn mod m.

    Poznamky k implementaci

    Pro rozumne aplikace: Mozny zpusob vytvoreni superrostouciho batohu:
    1. vygenerujeme n nahodnych cisel ri z intervalu <0, 2200>
    2. si = 2200 + i - 1 + ri

    Analyza Merkle-Hellmanova systemu

    Zname-li m, je mozne odvodit prvky superrostouciho batohu.

    Polozme

    p = h0 / h1 mod m

    Pak ovsem plati

    p = (w*s0 )/(w*s1 ) mod m = s0 / s1 mod m

    Spocitame posloupnost

    D = {i * p mod m}i=1..2n

    Pro nejake k ovsem nastane

    k*p mod m = k*s0*1/s1 mod m = s0

    Lze ocekavat, ze s0 bude nejmensim prvkem d. Zname-li s0, lze spocitat w a tedy vsechny si.
    Hodnoty w a m je mozne odhadovat pouze z posloupnosti {hi}i=1..n. Hodnota m je vetsi nez libovolne hi. Budeme zkouset ruzne hodnoty pro w.

    Graf (w'<SUB>*</SUB>H1 mod n) a (w'<SUB>*</SUB>H2 mod n)
    Mozne spravne hodnoty w se nachazeji v prekryvajicich se bodech diskontinuity.

    K prolomeni Merkle-Hellmanova systemu tedy neni nutne vyresit obecny problem batohu, ale staci pouzit naznaceneho postupu, ktery je daleko rychlejsi. M-H system tedy neni vhodny k ochrane dulezitych informaci.


    Rivest-Shamir-Adelman kryptosystem

    uverejneny v roce 1977. Uvedeme modifikaci oznacovanou jako kod Herkules, jez je v soucasne dobe pouzivana Ministerstvem obrany USA pro prenos utajovanych informaci vysoke dulezitosti.

    Kryptoschema je zalozeno na Eulerove formuli

    a f(n) = 1 mod n           (1)

    kde f(n) je pocet cisel z intervalu 1,..,n, ktera jsou s n nesoudelna.

    Plati:

    f(n) = (p1 - 1)p1a1-1* (p2 - 1)p2a2-1*...* (pk - 1)pkak-1           (2)
    kde
    n = p1a1* p2a2*...* pkak           (3)
    je prvociselny rozklad cisla n.

    Sifrovani

    je treba znat cislo n a male prvocislo e.
    Otevreny text P prevedeme na posloupnost cisel modulo n.
    Kazdy blok Pj zasifrujeme dle vzorce
    C j = Pje mod n           (4)
    Spojenim vyslednych bloku Cj vznikne zasifrovany text.

    Desifrovani

    je treba znat cislo n, a cislo d.
    Kazdy z bloku Cj desifrujeme takto:

    P j = Cjd mod n           (5)

    Vypocet desifrovaciho klice d

    Musi platit
    ed = 1 mod f(n)           (6)

    Prvocislo e nesmi delit (f(n)). Nalezneme

    r = -f(n)e-2 mod e           (7)

    Ze (2) plyne f(e) = e-1, s pouzitim (1)

    rf(n) = -f(n)f(e) = -1 mod e           (8)

    Polozime tedy

    d = (rf(n)+1) / e           (9)

    Korektnost desifrovani

    S pouzitim (1) a (6) postupne dostavame

    Pjed = Pjed mod f(n) = Pj1 = Pj       (mod n)

    Vyber klicu, implementacni poznamky

    Verejny klic tvori par (n, e), soukromy klic par (n, d).
    cislo n musi byt velmi velke, nesmi mit male faktory. Pro realne pouziti priblizne 100 az 200 cislic.
    Necht n je soucinem prvocisel p a q. Klic e volime jako prvocislo vetsi nez (p - 1) a (q - 1).
    Pri teto volbe ma nepritel na vyber zhruba (n1/2/ln n) - (1050/100 ln 10) moznych prvociselnych cinitelu.

    Volba prvocisel

    1. Vygenerujeme nahodne liche cislo zvoleneho radu
    2. Otestujeme prvociselnost
    3. Neni-li prvocislo, pokracujeme bodem 1.
    Solovay-Strassenuv test prvociselnosti
    Pokud p je cislo, ktere zkoumame a r libovolne cislo, pak nutne
      nsd(p, r) = 1

    a zaroven

      J(r, p) = r p-1/2 mod p

    kde J(r, p) je Jacobiho funkce, definovana nasledovne
    / 1 pro r = 1
    J(r, p) = - J(r/2, p)*(-1)(p2-1)/8 pro r sude
    \ J(p mod r, r)*(-1)(r-1)(p-1)/4pro r liche

    Milleruv test prvociselnosti

    Dano testovane cislo p.

    1. Necht p - 1 = 2ls, pro nejake liche s
    2. Nahodne zvolime a z {1, 2, ... , p - 1}
    3. Spocitame q = as mod p. Pokud q = 1 mod p => konec, p je asi prvocislo.
    4. Pocitame q1, q2, ..., q2l, = ap-1 mod p. Pokud neni ap-1 = 1 mod p => konec, p nemuze byt prvocislo.
    5. Nalezeme nejvetsi k tak, ze q2k neni 1 (mod n). Pokud q2k = -1 mod p => konec, p je asi prvocislo
    6. p nemuze byt prvocislo.

    Analyza RSA

      Dodnes neni znama metodas vedouci k rozbiti tohoto algoritmu. Jedinou slabosti je hypoteticka moznost vytvorit elektronicky podpis zpravy bez znalosti desifrovaciho klice na zaklade zachyceni vhodnych predchozich zasifrovanych zprav.
      MdLd = (ML)d

    System LUC

    zalozen na Lucasovych funkcich, ktere lze chapat jako zobecneni mocnin

    Lucasovy funkce

    jsou prikladem linearnich rekurenci vyssiho radu. Necht P1, P2, P3, ... , Pm jsou cela cisla. Definujeme {Tn}:
    Tn = P1Tn-1 + P2Tn-2 + K + PmTn-m
    T0, T1, T2, ... Tm, dodefinujeme nezavisle.

    Obecna linearni rekurence druheho radu:

    Tn = PTn-1 - QTn-2        (1)

    P a Q nesoudelna cela cisla. Necht x1 a x2 jsou koreny rovnice

    x2 + Px + Q = 0        (2)

    Jsou-li c1 a c2 lib. cisla, plati pro posloupnost {c1x1n + c2x2n}
    P(c1an-1) + c2bn-1 - Q(c2an-2 + c2bn-2) = c1an-2(Pa - Q) + c2bn-2(Pb - Q) =
    = c1an-2a2 + c2bn-2b2 =
    = c1an + c2bn

    Zajimave linearni rekurence:
    Un = (an - bn) / (a - b),    (tedy c1 = -c2 = 1/(a - b) )
    Vn = an + bn,    (tedy c1 = c2 = 1 )

    Polozime-li U0 = 0, U1 = 1, V0 = 2, V1 = P jde o posloupnosti celych cisel, ktere nazyvame Lucasovymi funkcemi P a Q.

    Vlastnosti Lucasovych funkci

    D diskriminant (2), a a b koreny (2). Potom
    a + b = P,  ab = Q, a D = (a + b)2

    Dale plati
    V2n = Vn2 - 2Qn        (3)
    V2n-1 = Vn2Vn-12 - PQn-1        (4)
    V2n+1 = PVn2 - QVn2Vn-12 - PQn        (5)
    Vn2 = DUn2 + 4Qn        (6)
    2Vn+m = VnVm + DUnUm        (7)
    2QmVn-m = VnVm - DUnUm        (8)
    P nahradime Vk(P,Q) a Q nahradime Qk:
    Tn=Vk(P,Q)Tn-1 - QkTn-2.

    Koreny odpovidajici rovnice, a' a b', splnuji
    a' + b' = Vk(P,Q) = ak + bk     a     a'b' = Qk = akbk,
    tedy a' = ak a b' = bk (a vice versa). Muzeme ziskat

    Vn(Vk(P, Q), Qk) = (ak)n + (bk)n = a nk + b nk = Vnk(P, Q)

    Polozme Q = 1:

    Vn(Vk(P, 1), 1) = (ak)n + (bk)n = a nk + b nk = Vnk(P, 1)        (9)

    Dale budeme definovat Legendruv symbol:

    (D / p) = 0 prave kdyz p deli D, jinak
    = 1 pokud existuje cislo x tak, ze D = x2 mod p
    = -1 pokud zadne takove x neexistuje.
    Necht p prvocislo nedelici Q a D, a e je rovno [Legendruv symbol (D / p)]. Pak lze dokazat:
    Uk(p-e)(P, Q) = 0 mod p        (10)
    Vk(p-e)(P, Q) = Qk(1-e)/2 mod p        (11)
    pro libovolne cele k.
    Dale zavedeme Lehmerovu funkci pro cisla tvaru N = pq, p a q jsou prvocisla:
    T(N) = (p-[Legendruv symbol (D / p)])(q-[Legendruv symbol (D / q)])
    Neni nutny cely soucin.
    S(N) = NSN((p-[Legendruv symbol (D / p)]), (q-[Legendruv symbol (D / q)]))
    .

    S(N) je nasobkem (p-[Legendruv symbol (D / p)])   i   (q-[Legendruv symbol (D / q)]), N = pq, p a q jsou ruzna prvocisla nedelici D = P2 - 4, s pouzitim (10) a (11):
    UkS(N)(P, 1) = 0 mod p        (12)
    VkS(N)(P, 1) = 2 mod p        (13)
    pro libovolne cele k.
    Pokud navic e je libovolne cislo nesoudelne s S(N), d zvolime tak aby
    ed = kS(N) + 1 pro vhodne k, potom:
    Vd(Ve(P, 1), 1) = Vde(P, 1)   podle (9)
    = VkS(N)-1(P, 1)
    = PVkS(N)(P, 1) - VkS(N)-1(P, 1)   podle (1)
    = PVkS(N)(P, 1) - 1/2(VkS(N)(P, 1)V1(P, 1) - DUkS(N)(P, 1)U1(P, 1))   podle (8)
    = 2P - 1/2(2P - 0)) mod N   podle (12)(13)
    = P (14)

    LUC kryptosystem

    Zvolime N , e. N soucinem prvocisel p a q.
    e musi byt nesoudelne s (p - 1) (q - 1) (p + 1) (q + 1).
    M - zprava, mensi nez N, nesoudelna s N.

    Sifrovani

    fLUC(M) = Ve(M, 1) mod N
    Vysledkem je zasifrovana zprava M'.

    Desifrovani

    K desifrovani potrebujeme d splnujici:
    de = 1 mod S(N)
    kde
    S(N) = NSN((p-[Legendruv symbol (D / p)]), (q-[Legendruv symbol (D / q)]))
    . .
    Zde [Legendruv symbol (D / p)] a [Legendruv symbol (D / q)] jsou Legendrovy symboly pro D vzhledem k p a q .
    Predpokladame D je nesoudelne s N , tedy Legendrovy symboly jsou 1 nebo -1, e je nesoudelne s S(N) a tedy d existuje.

    Desifrovani odpovida sifrovani kde e nahradime d.

    Korektnost desifrovani

    Podle (14) lze overit:
    M = Vd(Ve(M, 1) mod N, 1) mod N
    © Tonda Benes, 1995
    S prevodem tohoto dokumentu do HTML pomahal ©Dan Lukes, 1995
    Toto je revision 1.0, 29.11.95