Zamenjaj kolizijo s trkom

This commit is contained in:
Martin Vuk 2026-01-14 13:17:50 +01:00
parent 65af0b39b0
commit 7c1bce0c99
2 changed files with 17 additions and 17 deletions

View file

@ -130,14 +130,14 @@ zgoščevalne funkcije \(H(b)\) pravimo \emph{zgostitev} vsebine \(b\)
vsebine. Kaj pa če imata dve različni vsebini isto zgostitev? Funkcija
\(H\) ni injektivna, saj je množica nizov, bistveno večja od množice
zgostitev. To pomeni, da imata lahko dve različni datoteki enako
zgostitev. Če se to zgodi, rečemo, da pride do \emph{kolizije
zgostitve}. V primeru kolizije zgostitve bi Git shranil le eno datoteko,
zgostitev. Če se to zgodi, rečemo, da pride do \emph{trka
zgostitve}. V primeru trka zgostitve bi Git shranil le eno datoteko,
za drugo pa bi predpostavil da je že shranjena. Zato je funkcija \(H\)
izbrana tako, da sprememba enega samega bita v besedilu \(b \in B\)
spremeni vrednost \(H(b)\) in je porazdelitev vrednosti \(H(b)\) čim
bližje enakomerni porazdelitvi. To pomeni, da so vse vrednosti \(H(b)\)
približno enako verjetne. Na ta način zmanjšamo verjetnost kolizije(
glej \hyperref[sec_kolizije]{{[}sec\_kolizije{]}}). Verjetnost kolizije
približno enako verjetne. Na ta način zmanjšamo verjetnost trka(
glej \hyperref[sec_trk]{{[}sec\_trk{]}}). Verjetnost trka
je izjemno majhna, zato Git lahko predpostavi, da je niz \(b\) enolično
določen z njegovo zgostitvijo \(H(b)\).
@ -279,8 +279,8 @@ objekta določena z njegovo zgostitvijo. To pomeni, da lahko enostavno
preverimo verodostojnost vsebine, ki je shranjena v Gitu. Git hrani
skladišče objektov v mapi \texttt{.git/objects}.
\section{Kolizije zgostitev in rojstnodnevni
paradoks}\label{sec_kolizije}
\section{Trki zgostitev in rojstnodnevni
paradoks}\label{sec_trk}
Git hrani datoteke pod imeni, ki so enaka zgostitvi vsebine. Če imata
dve datoteki z različno vsebino isto zgostitev, Git shrani le eno
@ -288,7 +288,7 @@ datoteko in pride do izgubil podatkov. Git se zanaša na to, da je
verjetnost za to izjemno majhna. Kako bi ocenili to verjetnost?
Koliko datotek bi morali shraniti v Git, da bi z znatno verjetnostjo
prišlo do kolizije? Vprašanje je povezano z rojstnodnevnim problemom.
prišlo do trka? Vprašanje je povezano z rojstnodnevnim problemom.
Kako velika naj bo skupina ljudi, da bo vsaj \(50\%\) verjetnost, da
imata dve osebi na isti dan rojstni dan? Velikost skupine je
presenetljivo majhna(23), zato rojstnodnevnei problem imenujemo tudi
@ -312,7 +312,7 @@ Za vrednosti \(1 \ll n \ll h\) je \(1 - e^{- \frac{n^{2}}{2h}}\) tudi
dobra aproksimacija za \(p(n,h)\).
Da bi odgovorili kako odporna je zgoščevalna funkcija na morebitne
kolizije, moramo rešiti obratno nalogo: največ koliko števil \(n(p,d)\)
trka, moramo rešiti obratno nalogo: največ koliko števil \(n(p,d)\)
lahko izberemo, da bo verjetnost pojava dveh enakih števil manjša od
\(p \in \lbrack 0,1\rbrack\)? Natančen odgovor na to vprašanje ni tako
preprost \cite{brink_probably_2012}. Lahko pa uporabimo oceno
@ -328,10 +328,10 @@ Funkcija \(\sqrt{\log(\frac{1}{1 - p})}\) zelo počasi narašča, ko se
\(p\) približuje \(1\), zato jo lahko zanemarimo. Če je zgoščevalna
funkcija \(160\) bitna, kot na primer SHA1, je
\(n \approx \sqrt{2^{160}} \approx 2^{80}\). Znatna verjetnost, da pride
do kolizije zgostitev, bi se pojavila, ko bi shranili \(2^{80}\)
do trka zgostitev, bi se pojavila, ko bi shranili \(2^{80}\)
različnih verzij datotek v Git. Raziskovalci, ki so razvili napad
\emph{SHAttered}, so se posebej potrudili in so potrebovali ``zgolj''
približno \(2^{63}\) primerov, da so prišli do kolizije.
približno \(2^{63}\) primerov, da so prišli do trka.
\section{Zgodovinski graf sprememb}