Off-the-Record Messaging (OTR) je kryptografický protokol pro systémy rychlého zasílání zpráv, který v roce 2004 vytvořili Nikita Borisov a Ian Goldberg .
Autoři vytvořili knihovnu distribuovanou pod licencí GNU Lesser GPL , která se používá k podpoře OTR klientů systémů pro rychlé zasílání zpráv. Také na základě této knihovny autoři vytvořili plugin pro Pidgin .
EFF doporučuje použití OTR pro odposlechy [ 1] .
První verzi protokolu OTR a jeho implementaci představili v roce 2004 Nikita Borisov a Ian Goldberg [2] [3] . V roce 2005 byl zveřejněn útok na první verzi protokolu OTR a navržen revidovaný autentizační protokol [4] . V témže roce představili vývojáři OTR druhou verzi protokolu s opravou autentizačního protokolu a dále jej vylepšili [5] .
V roce 2007 Olivier Goffart zveřejnil modul mod_otr [6] pro server ejabberd , který umožňuje automatické útoky typu man-in-the-middle proti uživatelům OTR, kteří si navzájem neověřují otisky veřejného klíče. Vývojáři pak vylepšili OTR pomocí řešení Socialist Millionaire , které umožňuje dvěma uživatelům autentizaci bez výměny klíčů nebo otisků prstů, pokud znají sdílené tajemství [7] .
Protokol OTR byl vyvinut za účelem zajištění soukromí jednání, podobně jako jednání bez použití telekomunikací [8] [9] . Za tímto účelem byly do vyvinutého protokolu předloženy následující požadavky:
Některé z těchto funkcí jsou implementovány v systémech jako PGP a Trillian SecureIM. OTR se liší v tom, že implementuje všechny tyto funkce v jediném protokolu [10] .
Chcete-li odesílat zprávy pomocí OTR, musí účastníci protokolu vytvořit sdílený tajný klíč. K tomu se používá protokol Authenticated Key Exchange , založený na protokolu Diffie-Hellman [11] .
Na začátku protokolu účastníci používají protokol Diffie-Hellman k vytvoření tajného klíče potřebného k přenosu první zprávy. Členové A a B si vyberou prvočíslo a generátor skupin . A vybere náhodné číslo a pošle B výsledek výpočtu . B vybere náhodné číslo a pošle A výsledek výpočtu . Účastníci pak používají sdílený efemérní klíč , kde je kryptografická hashovací funkce SHA-1 [12] .
Aby bylo zajištěno dokonalé dopředné utajení , uživatelé během výměny zpráv neustále obnovují klíč [13] [14] . Když je odeslána první zpráva, jedna ze stran (například strana A) zašifruje zprávu pomocí funkce šifrování s klíčem , vybere náhodné číslo a pošle B dvojici hodnot . Klíč se používá k zašifrování další zprávy . V budoucnu s každou zprávou A změní číslo a B změní číslo a klíč se aktualizuje.
V praxi se zprávy nedostanou okamžitě, takže po odeslání zprávy z A do B a aktualizaci klíče na straně A může A stále přijímat zprávu od B zašifrovanou starým klíčem [15] . Účastník A si může být jistý, že B aktualizoval klíč pouze tehdy, když obdrží od B zprávu zašifrovanou novým klíčem. Proto A uchovává dostatek starých klíčů, aby mohl dešifrovat všechny zprávy, které ještě nedorazily. Aby byly klíče aktualizovány dostatečně často, strana, která nemá žádné zprávy k odeslání, čas od času posílá prázdné zprávy [16] .
Autoři článku „Secure Off-the-Record Messaging“ kritizovali schéma obnovy klíče používané v OTR, protože neposkytuje dodatečné zabezpečení [17] . V případě kompromitace dosud používaného efemérního klíče tedy strana provádějící útok typu man-in-the-middle bude moci upravit všechny následující zprávy a používané efemérní klíče [18] . Také použití protokolu Diffie-Hellman může vyžadovat značné zdroje (například pro zařízení napájená bateriemi) [19] . Místo toho bylo navrženo použít stejné schéma jako pro klíč , nebo výpočetně méně náročné schéma založené na hashování [20] .
Autentizace všech dočasných klíčů kromě , se provádí společně s autentizací zprávy a je popsána dále [21] . K autentizaci klíče se používají dlouhodobé klíče . První verze OTR používala nezabezpečené autentizační schéma, které bylo následně změněno [22] .
Původní verze protokoluV první verzi protokolu OTR strany podepisují příslušné zprávy protokolu Diffie-Hellman [23] k ověření počátečního klíče . Také v těchto zprávách si strany předávají své dlouhodobé veřejné klíče.
Zde jsou digitální podpisy a a veřejné klíče stran A a B.
Tato verze protokolu obsahuje známou zranitelnost [24] [25] . Strana E, která provádí útok typu man-in-the-middle , se může autentizovat se stranami A a B současně, přičemž předstírá, že je jednou ze stran (například B) jako druhá strana (například A) , Jak je ukázáno níže.
Poté E nemůže číst zprávy, protože jsou zašifrovány klíčem známým pouze A a B, ale B si myslí, že mluví s E, ačkoli ve skutečnosti mluví s A [26] .
Při implementaci první verze protokolu OTR byly zvažovány bezpečnější protokoly, jako je SKEME , ale místo toho byl implementován proprietární protokol, jak je popsáno výše [27] .
Druhá verze protokoluAutoři článku Secure Off-the-Record Messaging navrhli změnit protokol pro vyjednávání a ověřování klíčů na některý z již známých protokolů jako SIGMA , SKEME a HMQV [28] . Také v těchto zprávách si strany předávají své dlouhodobé veřejné klíče.
Varianta protokolu SIGMA , nazvaná SIGMA-R, funguje následovně [29] :
Zde A a B jsou identifikátory a jsou digitální podpisy a jsou veřejnými klíči stran A a B, v tomto pořadí, a jsou kryptografickou hashovací funkcí.
Autoři OTR použili modifikaci protokolu SIGMA ve druhé verzi OTR [30] . Ve srovnání s navrhovaným protokolem SIGMA vývojáři OTR ochránili veřejné klíče před pasivním útokem (odposlechem). Za tímto účelem jsou veřejné klíče přenášeny přes zabezpečený kanál vytvořený pomocí protokolu Diffie-Hellman [31] . Také modifikace protokolu SIGMA používaného v OTR je komplikovaná kvůli omezení velikosti zprávy v některých protokolech ( například ]]32[)IRC .
Na rozdíl od systémů, jako je PGP , OTR nepoužívá digitální podpisy k autentizaci zpráv, protože neposkytují možnosti odmítnutí autentizace [36] . Místo toho se používá HMAC [37] .
Pro autentizaci zprávy se používá klíč K, získaný hašováním klíče použitého k zašifrování zprávy [38] .
Když strana A pošle zprávu M jiné straně B, odešle spolu se zprávou hodnotu veřejného klíče HMAC(M, K) [39] . Strana B po přijetí zprávy může také vypočítat HMAC(M, K). Pokud se shoduje s přijatou hodnotou, pak strana B ví, že zprávu odeslala buď strana A nebo strana B, ale protože strana B ví, že zprávu neodeslala, může si být jistá, že zpráva byla skutečně odeslána stranou. A Současně použití HMAC poskytuje popření: ani odhalením klíče K nemůže B prokázat třetí straně, že zpráva byla odeslána stranou A. Zpráva může být také zfalšována stranou B a kteroukoli stranou, která ví klíč K.
Klíče používané pro šifrování jsou neustále aktualizovány , jak je popsáno výše . Protože klíče používané pro autentizaci jsou získávány hašováním klíčů používaných pro šifrování, jsou také aktualizovány.
Staré klíče, které již nebudou používány, mohou být zničeny. Ale autentizační klíče mohou být také nejen zničeny, ale také vyzrazeny. Autoři OTR přidali prozrazení starého klíče: starý autentizační klíč je odeslán spolu se zprávou, pokud je známo, že již nebude používán [40] . Toto rozhodnutí je vysvětleno požadavky na popření protokolu OTR [41] [42] .
Práce Secure Off-the-Record Messaging poukazuje na to, že prozrazení autentizačních klíčů zbytečně komplikuje protokol a může být negativně nezabezpečené jako nestandardní metoda pro kryptografii [43] . Autor protokolu TextSecure založeného na OTR, alias Moxie Marlinspike , také poukazuje na složitost a neefektivnost odhalování autentizačních klíčů pro zajištění popření [44] .
K šifrování zpráv se používá algoritmus AES v režimu čítače [45] . Použití proudové šifry vytvořené tímto způsobem poskytuje tvárné šifrování . To znamená, že kdokoli, kdo zachytí zprávu, bude moci selektivně změnit jakékoli bity ve zprávě. Zejména, jakmile se zpráva stane známou, může být změněna na jakoukoli jinou zprávu stejné délky [46] .
Aby bylo zajištěno, že je šifrování popřeno, je vyžadováno kontroverzní šifrování [47] . S pochybným šifrováním mohou účastníci protokolu OTR tvrdit, že některá z přenášených zpráv byla pozměněna třetí stranou.
Protokol OTR je navržen pro použití pouze dvěma stranami. Nelze jej tedy použít v kanálech IRC , konferencích XMPP atd.
OTR nelze jednoduše rozšířit na případ více reproduktorů kvůli použitým kryptografickým primitivům. Například ověřovací kódy zpráv neposkytují autentizaci zdroje zpráv v případě více uživatelů [48] .
Existují rozšíření protokolu, která umožňují používat protokol více uživatelům [49] [50] [51] .
Jedno rozšíření protokolu OTR nazvané GOTR (Group OTR) je založeno na myšlence vytvoření „virtuálního serveru“ [52] . Jeden z účastníků je jmenován jako „virtuální server“, vyměňuje si klíče s ostatními účastníky a v budoucnu se přes něj zasílají všechny zprávy mezi účastníky konference. Nevýhodou protokolu GOTR je, že „virtuální server“ může měnit obsah zpráv, přidávat a mazat zprávy, takže mu musí věřit všichni účastníci konference [53] .
Později Ian Goldberg a další autoři navrhli protokol mpOTR [51] . Na rozdíl od protokolu GOTR protokol mpOTR funguje bez vyhrazeného centrálního serveru [54] .
libotr | |
---|---|
Typ | Knihovna |
Autor | Ian Goldberg [d] a Nikita Borisov [d] |
Vývojář | Vývojový tým OTR |
Zapsáno v | C |
Hardwarová platforma | multiplatformní |
Nejnovější verze | 4.0.2 ( 9. března 2016 ) |
Stát | Aktuální |
Licence | GNU Lesser General Public License verze 2 [55] |
webová stránka | otr.cypherpunks.ca/index… |
Hlavní implementací OTR je knihovna libotr vytvořená vývojovým týmem OTR. Na jeho základě stejní vývojáři vytvořili plugin pro klienta Pidgin , který umožňuje používat OTR s kterýmkoli z protokolů podporovaných tímto klientem. Existují také implementace protokolu v Go , Java , JavaScript , Python , Scheme [56] .
Následující klienti mají nativní podporu protokolu OTR [57] .
Pro klienty, kteří podporují protokol AIM / ICQ , vývojový tým OTR vyvinul balíček otrproxy, což je lokální proxy server [71] . Umožnil použití OTR u klientů, kteří neměli nativní podporu OTR. V současné době tento balíček není podporován, vývojáři doporučují používat klienty s podporou OTR.