Odpovědět na komentář
Diskrétní sdílení textů
Uživatelé občas potřebují sdílet texty s ostatními (nebo si je jen uložit pro sebe) a ne každý si kvůli tomu chce hned pořizovat vlastní server nebo web či blog. Proto existují různé „pastebin“ služby – člověk jednoduše vloží svůj text do formuláře, odešle a obdrží URL, na kterém bude jeho text přístupný.
Problém
Většina těchto služeb funguje tak, že její provozovatel si může dané texty číst. Jedna stará dobrá bezpečnostní poučka říká, že každý by měl mít jen taková práva, jaká nezbytně nutně potřebuje ke své činnosti.
Poskytovatel ale naše texty číst nepotřebuje. My od něj chceme pouze trochu diskového prostoru (pro texty stačí málo) a adresní prostor (URL), ve kterém budou texty přístupné.
Řešení
Řešením je šifrování – pokud by provozovateli někdo ukradl/zabavil disky, nic si z nich nepřečte. Šifrování ale bohužel hodně běžných uživatelů nerozumí, přijde jim nepohodlné a nevědí, jak si vyměňovat klíče. Takže často nešifrují.
V následujícím textu se podíváme na jedno elegantní řešení, které je pohodlné a „blbuvzdorné“ a zároveň relativně bezpečné.
Jak to funguje
Naším cílem tedy je zašifrovat vkládaný text ještě na straně uživatele (JavaScriptem v prohlížeči) a odeslat na server. Čtenáři si daný text budou stahovat šifrovaný a k dešifrování dojde opět až v jejich prohlížeči.
Jediné, co zbývá, je zajistit přenos šifrovacího klíče od autora textu ke čtenářům. K tomu využijeme vlastností URL a HTTP protokolu.
URL může obsahovat tzv. fragmentový identifikátor:
http://www.example.com/index.xhtml#identifikator
Ten se běžně používá k odkázání na určitou část stránky – např. máme dlouhý článek a můžeme chtít odkázat na jednu kapitolu uprostřed stránky (příslušnému nadpisu nastavíme XML atribut id="něco"
a pak odkazujeme na #něco
).
Pro nás jsou důležité dvě vlastnosti:
- identifikátor se neposílá v rámci HTTP požadavku na server (ten ho k ničemu nepotřebuje, důležitý je jen pro klienta)
- identifikátor je přístupný z JavaScriptu – takže když někomu pošleme odkaz s identifikátorem, skript na dané stránce si ho může přečíst a dále s ním pracovat
Identifikátor za # v URL tudíž můžeme použít k předání klíče – URL vložíme třeba do nějaké diskuse, mikroblogu, pošleme e-mailem nebo předáme třeba na papírku. Příjemce ho zadá do prohlížeče, ze serveru mu přijde šifrovaný text a v prohlížeči se dešifruje.
K dešifrovanému textu se nedostane ani provozovatel služby, ani různé proxy servery nebo MITM útočnici po cestě. Pokud si někdo bude číst logy, najde v nich jen URL bez #šifrovacíhoKlíče, a nebude si tak publikovaný text moci přečíst.
Utajení textu stojí na utajení odkazu (obsahujícího klíč). Nicméně i když odkazy nebudou tajné (např. se budou vyskytovat ve veřejně přístupných diskusních fórech), má útočník značně ztíženou práci, protože musí nejdříve posbírat odkazy a pak dešifrovat texty – nestačí si jednoduše přečíst/prohledat databázi na serveru poskytovatele „pastebin“ služby.
ZeroBin
Jednou implementací výše popsaného principu je ZeroBin – jednoduchá aplikace napsaná v jazyce PHP, svobodný software (zdrojové kódy).
Zajímavé vlastnosti:
- používá 256 bitovou AES šifru
- má minimální závislosti (PHP 5.2.6 a vyšší + GD) a nepotřebuje ani databázi – používá soubory
- u vkládaných textů lze povolit diskusi – komentáře se také šifrují
- diskutující můžou přispívat anonymně, nebo se podepsal libovolnou přezdívkou – pak se u nich zobrazuje avatar vygenerovaný na základě jejich IP adresy (tzv. vizuální hash, který by nemělo jít přeložit zpět na IP adresu)
Aplikace je zatím velmi mladá, autor ji označuje jako alfa-verzi, nicméně už teď vypadá použitelně.
Prostor pro zlepšení
Jelikož se JavaScript stahuje ze serveru, musí mu uživatel důvěřovat. A pokud se nepoužívá HTTPS, musí důvěřovat i všem síťovým prvkům po cestě. Potenciální útočník by totiž mohl do prohlížeče poslat pozměněný JavaScript, který by se choval na první pohled stejně, ale data by před odesláním nešifroval, nebo je šifroval slabým či vždy stejným klíčem.
Uživatel si kód běžící v prohlížeči může zkontrolovat např. FireBugem, ale to není zrovna pohodlné a dělat to pokaždé je otrava a ztráta času.
Bylo by tedy dobré, kdyby existovala desktopová aplikace, které bude moci uživatel důvěřovat a která se postará o zašifrování a odeslání na server.
i1984.cz/paste
ZeroBin si můžete provozovat na vlastním serveru nebo využít nějakou jeho již existující instanci. Jednu jsme pro vás zprovoznili na adrese: https://i1984.cz/paste/
A takto vypadá vložený text: https://i1984.cz/paste/?6d3a7c43f4770e67#ZLqRePX5vM6KY…NDlKkWKIQ=
6d3a7c43f4770e67
je identifikátor daného textuZLqRePX5vM6KYc8CmQXfb9aG9IisijNBYYNDlKkWKIQ=
je šifrovací klíč
Pamatujte prosím, že software je v poměrně dost raném stádiu vývoje a není zaručeno, že služba na výše uvedené adrese tu bude navěky. Pokud byste v aplikaci našli chybu, nahlaste ji prosím nám i autorovi programu.