Majhni popravki.

This commit is contained in:
Vuk, Martin 2026-01-09 07:10:30 +01:00
parent 947a36b036
commit 0e6a68fb0a
2 changed files with 1021 additions and 1012 deletions

File diff suppressed because it is too large Load diff

View file

@ -85,8 +85,8 @@ $
H: B -> {0, 1, dots, 2^(n)-1},
$
ki vsakemu besedilu $b$ priredi $n$-bitno vrednost $H(b)$. Vrednosti zgoščevalne funkcije $H(b)$ pravimo _zgostitev_ vsebine $b$.
Git hrani datoteke pod imeni, ki so enaka zgostitvi 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 _kolizije zgostitve_. V primeru kolizije 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. Zato Git lahko predpostavi, da je niz $b$ enolično določen z njegovo zgostitvijo $H(b)$. Več o tem v @sec_kolizije[poglavju].
Git hrani datoteke pod imeni, ki so enaka zgostitvi 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 _kolizije zgostitve_. V primeru kolizije 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 @sec_kolizije). Verjetnost kolizije je izjemno majhna, zato Git lahko predpostavi, da je niz $b$ enolično določen z njegovo zgostitvijo $H(b)$.
Git uporablja $160$ bitno zgoščevalno funkcijo _SHA1_. Funkcija SHA1 je posebna implementacija zgoščevalne funkcije, ki se je uporabljala v kriptografiji#footnote[Leta 2017 so raziskovalci
iz CWI Amsterdam in Google Research našli prvi praktični primer dveh različnih pdf datotek, ki imata isto SHA1 zgostitev#cite(<stevens_first_2017>). Opisan napad so poimenovali _SHAttered_. Git je zato z verzijo `v2.13.0`