9. října 2008

Vaše data? Místy oblačno.

Máme s kamarádem Jirkou takovou hru, jmenuje se tříbení názorů. Aniž bychom mohli (nebo snad chtěli) jeden druhého přesvědčovat o své pravdě, pouštíme se opakovaně do diskuse na určitá známá témata. Odměnou za zdánlvě promrhaný čas je nám většinou nějaký nový nápad, jenž společně vykřešeme.

Jedním takovým evergreenem našich debat jsou webové aplikace. Když jsem dopsal odpověď na Jirkův blogpost, napadlo mě, že jsem narazil na zajímavé vedlejší téma, takový malý nugetek, který volá po podrobném rozpracování, totiž: Jsem přesvědčen o tom, že nastupuje věk webových aplikací, jistě. Co ovšem při bližším zkoumání vypadá jako hlavní brzda rozvoje SaaS, clouds, atd. (říkejte si tomu, jak chcete), jsou uživatelova data uložená na serveru provozovatele aplikace. Zkrátka prima materiál pro pozdější zpracování.
I přikryl jsem nugetek opět hlušinou a věnoval se jiným věcem.

A jako už mnohokrát předtím, byl jsem okraden. Po mém nápadu sáhl Stallman, svatý muž z pravoslavné odnože církve Opravdu Svobodného Software. Jakousi podivnou synchronicitou se stalo, že zveřejnil úvahy, které zaměstnávaly mé podvědomí -- naplno se do toho obul a uživatele označil za tmel v rukou autorů webových aplikací.
Užuž jsem se chtěl tématu vzdát -- co vzmůžu proti Stallmanovu pěstěnému charismatu? Ale pak mi to došlo: ono to totiž není vůbec jednoduché.

Předně: Výtky kritiků oblačného počítání s uživatelskými daty se dají rozdělit do dvou velkých skupin. První z nich je:

Ztráta a nedostupnost dat

Zde jde o to, že se ke svým datům občas nedostanete, když je potřebujete. Příčiny mohou být různé, nejčastěji jde o selhání webové aplikace nebo technický problém toho, kdo aplikaci hostuje. Obecně je možno říci, že čím větší korporace, tím větší pozor si na výpadky dává -- i když výhrady jsou na místě. Úplná ztráta dat je spíše výjimečná a většinou souvisí i s úplným odchodem autora aplikace ze scény.
Pokud existuje k webové aplikaci slušně napsané API, má (pokročilý) uživatel k dispozici více či méně komfortní možnost svá data pravidelně lokálně zálohovat. Je pochopitelně rozdíl mezi pasivní datovou zálohou a fungující aplikací, nicméně je dobré vědět, že máme, po určitém úsilí, vždy nějakou nenulovou šanci svá data oživit jinde.

Pro webové aplikace mluví skutečnost, že z pohledu fyzického uložení dat není příliš rozdíl mezi plotnou disku na pracovní stanici a plotnou v diskovém poli poskytovatele aplikace. Naopak, ať už jde o pouhý RAID nebo o jiné technologie datového úložiště (např. GFS), je váš bajt lépe a s vyšší redundancí zapsán spíše na cizím disku než na vašem vlastním -- pokud si to nemyslíte, měli byste se sami sebe zeptat, jak často a na jak spolehlivá média zálohujete důležitá data ze svého počítače nebo mobilu.

Doposud jsem se zabýval jen tou méně zajímavou polovinou celého problému. Tou podstatnou je samozřejmě:

Datové soukromí a autorita

Důležitější, než důvěra v to, že data přečteme my, kdykoliv se o to pokusíme, je jen víra v to, že je nepřečte někdo jiný, ať už se o to bude snažit sebevíc.

Soukromí našich dat v rukou provozovatelů webové služby je většinou zaručeno slovně, přesněji řečeno v jazyce zvaném právničtina. V textech, s nimiž vždy souhlasíme, aniž bychom se namáhali je číst, stojí psáno, že poskytovatel vynaloží nemalé úsilí, aby naše data nikomu neukázal -- tedy, pokud k tomu nebude donucen, třeba soudem. Ovšem v případě, že se veškerá snaha držet jazyk za zuby mine účinkem, nebudeme ho za to, chudáka, nijak popotahovat, třebas před soudem.
Stručně: texty tohoto typu jsou bezcenné, protože nám nepomohou v situacích, kdy už si je opravdu musíme přečíst. Jakou mám záruku, že se má citlivá data nedostanou do nepovolaných rukou -- třeba jen vinou hloupé chyby v klauzuli databázového dotazu? Klidu mi nepřidá, když tuším, že leží v té samé tabulce jako záznamy mého konkurenta, jen jde o jiný řádek.

Nabízejí se analogie s bankou: máte raději své peníze pod matrací nebo v rukou spolehlivých finančních institucí? Důvěra v banky nebyla vždy tak samozřejmá jako dnes (já vím, teď se nabízí příležitost k aktuálním vtipům na účet bankovního sektoru, kterou nevyužiji). Pro účely přirovnání je dobré si uvědomit, že důvěra v banku, jakož i důvěra v poskytovatele webové aplikace, se opírá o autoritu instituce.

Důvěra v takovou autoritu je značně asymetrický vztah: Na jedné straně spotřebitel / zákazník / klient / uživatel -- prostě človíček s omezenými možnostmi obrany, na straně druhé silně se tvářící instuituce, která chce, aby jí bylo věřeno (přestože všichni víme, že každá instituce je utvořena z normálních, tj. náladových, chybujících, případně i zkorumpovatelných človíčků).
Zde se Stallmanem souhlasit mohu. Spolehneme-li se na slovní záruky autorit, budeme vždy jen tvárnou konzumní hmotou v rukou institucí -- bank nebo IT korporací.

Datové soukromí a technologie

Nexistují jiné záruky? Zdá se, že zatím příliš ne. Problém uživatelských dat si lidé uvědomují, o tom žádná. Pokud považujeme zajištění dat založené na důvěře v instituce za nedostatečné, není možné řešení založit na důvěře v technické prostředky?

Příklady by tu byly: Jediný bezpečný způsob, jak uložit autorizační heslo na serveru, je -- neukládat ho vůbec. Zadá-li uživatel při prvním přihlášení heslo, je toto nejprve převedeno z otevřeného tvaru do zašifrované podoby (hashed) a teprve v tomto tvaru je uloženo. Způsob převodu by měl zajistit, že získat otevřený tvar hesla z jeho zašifrované podoby je prakticky neproveditelné a že opakovaným šifrováním stejného hesla získáme vždy stejnou šifrovanou podobu. Pokud později potřebujeme uživatele autorizovat, postačí porovnávat šifrovanou podobu nově zadaného hesla s jeho dříve uloženou verzí. I když se pak někdo zmocní šifrovaných hesel na serveru, moc mu nepomůže ani to, že má k dispozici šifrovací algoritmus.

Je jasné, kam směřuji: Šifrování je celé založeno na obecně přijatelném předpokladu, že dobrý šifrovací algoritmus je veřejně přístupný a jediné, co je třeba udržet v tajnosti, je heslo, jímž jsou data šifrována. Čím více očí kryptologů vidí do toho, jak šifrovací systém funguje, tím je daný systém bezpečnější, protože jeho potenciální slabiny jsou pod veřejnou kontrolou.
Je tedy možné, aby datové soukromí webových aplikací bylo založeno na podobné technologické transparenci?

Představme si takovou podporu aplikace v prohlížeči, jež zajišťuje, že citlivá data vůbec neopustí uživatelův počítač. Server webové aplikace pak může pracovat pouze s daty, jejichž zneužití útočníkovi nepřináší velkou výhodu.
Samozřejmě, že taková architektura je o poznání složitější než to, co známe v oblasti webových aplikací dnes a vyžaduje obecně rozšířený prohlížeč s dobře propracovanou podporou uložení dat. Také je nutné, aby vzniklo více různých implementací této datové podpory, navíc se standardizovaným aplikačním rozhraním (JavaScript API), jinak hrozí klasický vendor lock-in (neboli: ''Jo tak vy nemáte nainstalovaný tohlencto naše rozšíření? Jak si to pak představujete, že vám naše aplikace poběží?").

(Vsuvka pro C++ programátory: Vedle šifrování se k lokálnímu úložišti nabízí se ještě jedna analogie, sice ve smyslu funkcionálního programování. Ten, kdo zkusil použít šablonovou knihovnu STL, pravděpodobně narazil na koncept tzv. iterátoru, oddělujícího datový kontejner od algoritmu. Osobně považuji tento koncept za jednu z největších výhod STL. Omlouvám se neprogramátorům za ztíženou čitelnost článku na tomto místě.)

Smrt "nativních" aplikací?

Ano, můžeme namítnout, že navrhované rozšíření o lokální úložiště dat prohlížeč více přibližuje nativním aplikacím, tak, jak je známe. Proč tedy nepsat rovnou nativní aplikace? Nebo -- proč nedat zákazníkovi rovnou do rukou kromě klienta i server aplikace?
Ještě jednou tedy a stručně -- proto, že webové aplikace na serveru poskytovatele jsou pružnější, praktičtější a zkrátka životaschopnější než všechny ostatní varianty. Jistě, že budou existovat odůvodněné vyjímky a stále bude vznikat určité nezanedbatelné procento nativních aplikací. Probírat všechny aspekty nehodlám, kdo dnes zpochybňuje jeden z nejviditelnějších trendů současného vývoje IT, asi by mé argumenty stejně nepřijal.
Soukromí uživatelových dat zkrátka vnímám jako nejvíce oprávněnou výhradu proti používání webových aplikací. Důsledné oddělení uživatelových dat od kódu aplikace na serveru -- i když jeho provedení může být složité -- tuto výhradu odstraňuje.

V rukou programátora zcela budiž algoritmus, protože jen programátor dovede zařídit, aby byl algoritmus k užitku. V rukou uživatele budiž data, protože jen uživatel ví, jak cenná data jsou.