Endurnýtanleiki kóða gagnvart slysni

Ein af svakalegustu, samkvæmisgagnrýndu gögnum (CVE-2018–17144) hefur nýlega fundist í Bitcoin Core hugbúnaðinum, sem áður en þessi tímapunktur átti nánast hreinn sögu. Jimmy Song hefur skrifað frábæra sundurliðun á þessum galla.

Stutta samantektin á villunni er sú að það eru 4 tilvik þar sem Bitcoin Core hugbúnaðurinn þarf að athuga hvort hann sé tvískiptur. Öll 4 tilvikin deildu upphaflega sama flæði með framkvæmd kóða. Eftir nokkrar fíngerðar endurtekningar á kóðanum í nokkur ár var sleppt af einu af fjórum tilvikum („single-tx-double-spend-in-a-block“), sem myndi leyfa námuverkamanni mögulega að plata suma hnút til að samþykkja reit sem blæs upp framboði af Bitcoin.

Eðli þessa galla minnir mig á stöðug átök á milli:

(a) þörf fyrir endurnýtanleika kóða og hagræðingu

(b) hættu á að falla vegna þess sem ég kalla óviljandi samfélag: hluti sem eru svipaðir ekki eftir hönnun, heldur af slysni

Slysasamfélag skapar frjóan jarðveg til að endurgera martraðir og hugsanlega galla eins og CVE-2018–17144.

Slysavarna samfélag

Einhver bakgrunnur, ef þú þekkir ekki hugbúnaðarverkfræði:
 
Í hugbúnaði er þessi stórkostlega sýn að hugbúnaðaríhlutir eru fullkomlega mát - svipað og vinnufélaga í eðlisfræði. Það er góð ástæða fyrir því að þú þarft ekki að vera með aðra gerð hleðslutækja eða USB vír hvert sem þú ferð.

Svo það hefur alltaf verið ýtt undir endurnýtanleika kóða. Það er oft hrikalegt að skrifa óþarfi kóða. Af hverju að vinna sömu vinnu tvisvar þegar þú getur gert það einu sinni?

Það er líka löng saga að finna upp hjólið aftur í hugbúnaði sem veitir endurnýtanleika kóða jafnvel hærri forgang á forgangslistanum. Endurnýtanleiki kóða er oft talinn einn af „bestu starfsháttum“ iðnaðarins. Hugsanlegur yngri hugbúnaðarframleiðandi gæti haft tilhneigingu til að halda að það sé núll galli við endurnýtanleika kóða.

En það er falin hætta - og ég trúi ekki að þetta efni sé nokkru sinni kennt almennilega í skólum - um mikla endurnýtanleika kóða.

Öflug notkunarkóða þýðir að fella saman tvo svipaða kóða kóða í einn, óháð notkunartilfellum þeirra og upphaflegri áform.

Sem margoft endar með kóða sem hefur óviljandi tengsl.

Það gæti ekki verið augljóst af hverju slysni er slæm, en maður þarf aðeins að viðhalda nægilega stóru hugbúnaðarverkefni í langan tíma til að skilja af hverju.

Það er slæmt vegna þess að kröfur um vörur breytast og hugbúnaður er sífellt að þróast, aldrei alveg fullunnin vara.

Þetta vandamál með stöðugt áhrifamikið markmið er eitthvað einstakt við hugbúnað. Ef þú ert mannvirkjagerð er ekki gert ráð fyrir að þú breytir húsi í 20 hæða hæð eða bíl í fljúgandi skál. Samt í hugbúnaði gerum við þetta stöðugt.

Þegar kröfur um vöru og notkun mála breytast gætu undirliggjandi forsendur sem hugbúnaðurinn var skrifað í upphafi ekki lengur átt við.

Svo að stoltur hluti sameiginlegs kóða sem þú endurgerð (en hefur nú alveg gleymt) virkar ekki lengur eins og þú heldur að það myndi gera.

Ég hef misst fjölda af hve mörgum sársaukafullum endurgerðarverkefnum eða viðbjóðslegum pöddum sem ég hef séð sem eru bein afleiðing af ótímabærri hagræðingu eða óviljandi samskiptum - að því marki þar sem ég forðast nú hluti eins og erfðir eins og plága.

Hlutir sem hafa óviljandi tengsl munu fljótt leiða í ljós muninn á þeim þegar þeir þróast út fyrir upphafsástandið. Einhver stífni í samskiptum við kóða væri stórfelld bani til að losna við.

Því fleiri lög sem eru af slysni í samfélaginu eru í kóðanum, því meira af námusviði er að sigla. CVE-2018–17144 er fullkomið dæmi um það.