Kees Cook, endine kernel.org'i peamine süsteemiadministraator ja Ubuntu turvameeskonna juht, demonstreeris võimalust luua commit, mille lühendatud identifikaator kattub varasema Linuxi kerneli commitiga. Eksperiment viidi läbi, et tõestada 16-täheliste lühendatud commitide identifikaatorite ülemineku otstarbekuse vajadust Linuxi kerneli jaoks, millest oli arutatud kerneli arendajate meililistis, kuid mille heakskiitu ei andnud Linus Torvalds.
Lühendatud commitide identifikaatorid moodustatakse SHA-1 hash'i (160 bitist 48 bitti) esimest 12 sümbolit säilitades. Kuna kerneli madala taseme objektide arv, mida identifitseeritakse SHA-1 hash'i kaudu, on ületanud 13 miljoni piiri, on 12-tähelise prefiksi kasutamisel kollisioonide tekkimine küsimus ainult ajast. Näiteks on näidatud juba kerneli lisatud objekte, kellel on ühtsed 11-tähelised identifikaatorid. Samuti mainiti, et 12-täheliste identifikaatorite ühtesattumine on juba oktoobris tuvastatud, kuid enne patši saatmist tuvastas selle utiliit checkpatch.
Lühendatud ID-sid kasutatakse lühikeste linkide avaldamisel commit-idele ning neid esitatakse ka siis, kui saadetakse muudatusi тегi «Fixes» all, viidates commit’ile, kus probleem, mille suhtes muudatus tehti, lahendati saadetud patch’is (näiteks «Fixes: e21d2170f366»). Kokkukuuluvuse tekkimine, mille käigus mitmed erinevad muudatused on seotud ühe lühendatud ID-ga, võib häirida tööriistade tööd, mis analüüsivad ja kontrollivad muudatusi, arvestades «Fixes» tagide sisu. Näiteks arvestatakse neid tage check_fixes töötlejas, mida kasutatakse linux-next harus, ja ka haavatavuste parandamise analüüsiskripte ning patch’ide elutsükli jälgimise tööriistu.
Linus Torvalds suhtus skeptiliselt ettepanekusse suurendada lühendatud identifikaatorite minimaalset suurust, kuna tegelikult on repository's komiteede arv märkimisväärselt väiksem kui objektide arv (umbes 1/8). Tõenäoliselt, isegi kui juhuslikud kattuvused tekivad, on need komiteede ja mõne muu tüüpi objekti (näiteks blob'i või haru) vahel. Tema arvates on lühendatud identifikaatorid mõeldud olema selged, loetavad ja lihtsalt tsiteeritavad, ning nende suuruse suurendamiseks ei ole hetkel objektiivseid eeltingimusi.
Üks arendajatest soovitas saavutada suuruse vähenemise, suurendades märkimisväärsete bittide arvu, kasutades uut formaati, mis põhineb Base36 kodeeringul (znakud 0-9a-z) selle asemel, et kasutada kuhexpressioonide numbreid. Linuse arvates tekitab selline muudatus rohkem probleeme, kui lahendab. Näiteks tuleb olemasolevatesse utiliitidesse lisada uue formaadi tugi ja sisestada formaadi identifikaator, et eristada vana ja uut formaati.
Probleemi tõestamiseks, et lühendatud identifikaatorid ei ole hüpoteetilised ja nende lahendamist ei ole mõtet edasi lükata, koostas Case Cook dokumendi muudatuse tuuma kohta, mille lühendatud identifikaator (1da177e4c3f4) kattus tuuma haru 2.6.12-rc2 loomise commit'i identifikaatoriga. Kokkuvõtte oleks saanud leida 6 tunni arvutustes NVIDIA GeForce RTX 3080 GPU süsteemis.
Tuvastamine viidi läbi kasutades tööriista lucky-commit — sihitud patši tekstile lisati juhuslikke tühikuid, kuni 12-kohaline SHA-1 prefiks kattus tuumas juba olemasolevate commit'ide prefiksitega. Casey arvates pole probleemiks vaid juhuslikud kattumised, vaid ka lühendatud identifikaatorite kuritarvitamise võimalused pahatahtlikel eesmärkidel, näiteks mingite kontrollide möödumiseks.
Allikas: opennet.ru
