Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

Kritická chyba OpenSSL aneb proč používat unit testy

Když jsem dnes narazil na zprávu o kritické chybě OpenSSL v Debianu (viz třeba tato novinka na rootu), nemohl jsem tomu uvěřit. Z prakticky neprolomitelných klíčů se silou 2128 se staly „pseudo-klíče“ o „síle“ zhruba 32 000 kombinací, což se zhruba rovná tomu, jako by žádné zabezpečení vůbec neexistovalo; tato chyba navíc zůstala neodhalena po neuvěřitelné 2 roky! Nevím jak vy, ale já se ode dneška na internetu cítím daleko méně bezpečně.

Na živě.cz, kde se novinka objevila dneska, se okamžitě rozjela diskuse o tom, jak se může něco podobného stát v Open Source kódu, který si každý může zkontrolovat (a já bych dodal, že třeba banka, která se rozhodne na knihovně typu OpenSSL postavit svůj business, by si ten kód měla zkontrolovat). Zcela typicky se navíc objevilo pár příspěvků na téma Open Source vs. Windows s tradičním průběhem – „ve Windows by se tohle stát nemohlo (nebo by se na to aspoň nepřišlo)“ versus „v odhalování chyb je právě síla open source a chyby jsou v každém typu software“.

Právě posledně vyslovený názor je zajímavý. V zásadě s ním souhlasím, ale jen tak se smířit s chybami a s tím, že budou postupem času odhaleny někým bystřejším, je prostě špatně. Na tomto místě musím říct, že do vývoje GNU/Linuxu nevidím, ale podle skutečnosti, že takto kritická chyba se 2 roky jen tak toulala po světě, soudím jediné – OpenSSL knihovna nemá unit testy. A pokud je náhodou má, tak jsou k ničemu.

Absence unit (nebo jiných) testů u kritických Open Source projektů mě osobně hodně vadí. Jaktože v OpenSSL neexistuje test na korektně nastavenou délku klíče, když právě s tím dnešní kryptografie stojí a padá? Jak je možné, že v PHP 5.2.XYZ najednou na IIS přestala fungovat naprosto zásadní konstanta PHP_SELF a tím pádem mnoho webů? Proč se vývojáři spoléhají na testování komunitou, když by podobné zásadní věci měly být testovány automaticky?

Omluva není. Testy nejsou něco, co se píše, až když zbude čas a chuť – protože to se pak testy nenapíší nikdy. Testy by měly být integrální součástí vývoje a osobně dokonce zastávám názor, že správnou metodikou je TDD, tedy psaní testů před psaním samotné funkčnosti.

Kdy už si to vývojáři důležitých OSS projektů uvědomí…

Zařazeno do kategorií |
Charlie (Po, 2008-05-26 10:53):

Doporučuji přečíst i poněkud kvalitnější zprávu o problému na Rootu. I v samotné diskusi na Živě je k dispozici několik smysluplných poznámek, které na problém vrhají poněkud odlišné světlo.

Vyvozovat z toho ihned, že OpenSource projekt nemá unit testy má potom dvojí důsledek – osočuje veškerý OpenSource (i když v tomto případě se jedná o konkrétní chybu distribucí založených na debianu, navíc způsobenou blbostí jednotlivce) a nahrává předpokladu, že neOpenSource projekty unit testy používají.

Borek (Po, 2008-05-26 11:57):

Ono podrobnější vysvětlení jsem četl a nic to nemění na mém názoru. Je chyba jednotlivce, že do kódu zavlekl kritickou chybu; je ale také chybou OpenSSL, že onomu „hloupému“ jednotlivci neposkytla unit testy, které by ho okamžitě upozornili na to, že dělá kravinu.

Já jakožto vývojář si přeji, aby mě software vždy považoval za totálně neschopného a chybu mi prostě nedovolil udělat. Nástroje a metodiky na to máme a tenhle případ krásně ukazuje, proč by je vývojářská komunita konečně měla začít brát vážně.

Borek (Po, 2008-05-26 12:05):

Jinak jsem rozhodně neměl v úmyslu navážet se specificky do OSS, jen je to tam viditelnější – zdrojový kód je všem dostupný (zatímco v případě closed source není jisté, zda testy existují nebo nikoliv) a navíc v prostředí webu jsou OSS technologie jaksi používanější, takže možná i proto se tam s chybami setkáváme častěji.

Obecně bych si samozřejmě přál unit testy ve všech systémech, ať už jsou otevřené nebo proprietární.

Aleš Roubíček (Po, 2008-05-26 13:58):

Ale ani Unit testy nejsou samospasitelné, je to jen další kus software, který může psát (a u OSS většinou i píše) úplně ten samý člověk, co píše testovaný kód. Pokud chybu zanese i do testu, vše vypadá vpořádku…

Borek (Po, 2008-05-26 14:19):

Při TDD se dokonce předpokládá, že testy bude psát ten samý člověk.

Obecně vzato máš pravdu, ovšem testovací kód je obvykle řádově jednodušší na pochopení a neobsahuje žádnou složitou logiku (pokud ano, celý návrh má asi nějaký problém). Kvalitní testy by měly být základem kvalitního software.

Aleš Roubíček (Po, 2008-05-26 17:33):

A špatné testy špatného software, tak už chodí :)

smoco (Út, 2008-05-27 21:52):

Chyba je len v debiane a nema nic spolocne s hlavou vetvou openssl. Debian je binarna distribucia takze nepredpokladam ze niekto okrem vyvojarov z debianu to kontroloval.

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.