IRC je mrtev, ať žije SILC

29. 11. 2004
Doba čtení: 7 minut

Sdílet

Mnoho lidí k online diskusi v reálním čase používá nejrůznější klienty, protokoly. Většina z nich trpí bezpečnostními nedostatky, např. posílá uživatelovo heslo v plain-textu nebo je omezena už ze své podstaty (designu), např. IRC. Představíme si SILC (Secure Internet Live Conferencing) jakožto bezpečnou a moderní alternativu k IRC/IM.

Úvod

SILC – Secure Internet Live Conferencing – je open source projekt a nový internetový protokol navržený pro konferenční služby v reálném čase pro velké množství uživatelů s maximální bezpečností. SILC zabezpečuje pomocí šifrování jak spojení mezi klientem a serverem či dvěma servery, tak i vlastní zprávy odesílané uživatelem jinému uživateli nebo na kanál. Během používání SILC není možné cokoliv poslat plain-textově, vše je transparentně šifrováno.

SILC klienti

Situace se SILC klienty se jeví podle toho, z jaké strany se na to díváte :) Jste-li unixový a ještě k tomu konzolový user, máte skvělého silc-clienta postaveného na irssi. Je li vám libo grafického klienta, je jasnou volbou Gaim, velmi daleko v závěsu Silky.

gaim a silc v akci

Všechny tři zmiňovaní klienti potěší i uživatele Windoze, jen je pro smysluplné použití silc-clienta lepší mít Cygwin (i zde něco) a pro použití Gaim se SILC je třeba použít (k 10. 11. 2004) neoficiální SILC plugin. Mac uživatelé mohou využít Colloguy.

Teorie

Nebudeme příliš zabíhat do podrobností, i když je to velmi zajímavé. Ne každého zajímá, co stojí za tím, že pošle pár zpráv atd. :) Případní zájemci nechť navštíví specifikace SILC projektu.

Topologie SILC sítě

SILC síť se skládá z klientů, serverů a routerů. Klient se připojuje k SILC serveru; v případě, že je v SILC síti více serverů, nejsou, jak je tomu u IRC, všechny spojeny, ale spojují se právě pomocí zminěných routerů.

topologie silc sítě

Nicknames

Zajímavostí SILC protokolu je možnost více stejných nicků. Díky správnému designu jsou známé „nickname collisions“ nemožné.

[19:41] *** jirib@silc.icore.at (jirib@adslplus-???????-???-???-???.provider.cz)
[19:41] ***  nickname    : jirib (jirib@adslplus)
[19:41] ***  realname    : Jiri B.
[19:41] ***  idle        : 15 seconds
[19:41] ***  fingerprint : 901B F190 EED5 2D8C 9F6B  22A5 26EA DEF3 DF13 B796
[19:41] *** jirib@silc.icore.at (jirib@adslplus-???????-???-???-???.provider.cz)
[19:41] ***  nickname    : jirib (jirib)
[19:41] ***  realname    : Jiri B.
[19:41] ***  idle        : 5 seconds
[19:41] ***  fingerprint : 901B F190 EED5 2D8C 9F6B  22A5 26EA DEF3 DF13 B796 

Jak je možné vidět z výpisu příkazu /whois jirib, jsem připojen dvakrát na stejný server silc.icore.at pod stejným nickem. Rozlišit uživatele můžete právě podle fingerprintu. V případě, že by například existoval jiný uživatel se stejným nickem, měl by jiný fingerprint – otisk veřejného klíče. Je to stejně jako v případě fingerprintů u PGP.

Kanály

Stejně jako např. u IRC nebo u jabberu je u SILC možnost diskuse vetšícho množství lidí na tzv. kanálech. Rozdíl mezi kanálem u IRC a SILC je, že SILC protokol nepožaduje # před jménem kanálu. Tedy #root.cz a root.cz budou dva odlišné kanály. Dále je u SILC možné mít permanentní kanály, které nezaniknou ani v případě, že je opustí poslední uživatel. To je dáno možností nastavit kanálufounder mode  (+f).

Typy uživatelů

CHANNEL FOUNDER (pouze v případě kanálu) – ten, kdo založí kanál, je automaticky channel founder – zakladetel. Jako channel founder má na kanále nejvyšší privilegia, je tedy nadřazen i případným channel operators – kanálovým operátorům.

CHANNEL OPERATOR (pouze v případě kanálu) získává od zakladatele kanálu/jiného operátora privilegia pro správu kanálu.

SILC OPERATOR je administrátor silc routeru, jeho privilegiem je spravovat silc router. Dále může odstranit určitého klienta ze sítě pomocí /kill.

OPERATOR – tzv. server operator, administrátor silc server. Jeho činností je správa silc serveru.

USER – jedná se tedy normalního uživatele, který nemůže takové věci jako měnit módy kanálu, vyhazovat lidi atd.

Praxe

Takže pustíme se do prvního připojeni se silc-clientem. Tento klient určite bude k dispozici pro vaši platformu. Silc-client vychází z irssi.

Při prvním spuštění silc-clienta budete vyzvání k zadání hesla, které bude chránit váš soukromý silc klíč. Následně budou vygenerovány silc klíče.

% silc
Running SILC for the first time
Private key passphrase: vaše-skryté-heslo
Retype private key passphrase: Generating RSA Public and Private keys, might take a while...
Finding p: ...............................................
Finding q: ............
Keys generated successfully.
Public key has been saved into `/home/sshusers/test2/.silc/public_key.pub'.
Private key has been saved into `/home/sshusers/test2/.silc/private_key.prv'.
Press <Enter> to continue... 

Můžete dále pokračovat stisknutím Enter nebo ukončit aplikaci a vyladit si $HOME/.silc/silc.conf. Není to však nijak zvlášť nutné. Připojíme se tedy např. na tento server:

% silc -c silc.icore.at 

Po zadání hesla k odemčení našeho soukromého silc klíče můžeme vidět, že se nás silc server ptá, jestli hodláme souhlasit s přijetím jeho veřejného klíče – podobně jako při používání SSH. Paranoidní uživatelé (nebo ti správní uživatelé?) mají již předem buď poznamený fingerprint serverového klíče, nebo přímo uložený serverův publickey v $HOME/.silc/serverkeys. Ten můžete v tomto případě získat na silc.icore.at. V případě jakékoliv pochybnosti o důvěryhodnosti klíče je třeba dbát, stejně jako u ssh, zvýšené opatrnosti.

-------------------- ------------------- -------------------
Irssi v1.0.1 (Irssi base: 0.8.6+ - SILC base: SILC 1.0.1) - http://irssi.org/help/
-------------------- ------------------- -------------------
[21:04] *** Irssi: Looking up silc.icore.at
[21:06] *** Irssi: Connecting to silc.icore.at [62.99.220.126] port 706
[21:06] *** Irssi: Connection to silc.icore.at established
[21:06] *** Received silc.icore.at public key
[21:06] *** Fingerprint and babbleprint for the server key are
[21:06] ***  972E C6E5 3DF3 2E97 BE13  723B 0125 B1C6 5CA5 528F
[21:06] ***  xohod-vecav-hozyz-ferun lazec-fisof-rubyd-hases kalip-hegem-zoxax

-------------------- ------------------- -------------------
[21:06] [jirib] [1:silc (change with ^X)]
-------------------- ------------------- -------------------
Would you like to accept the key (y/n)? y
-------------------- ------------------- ------------------- 

Dále následuje motd serveru, stejně jako u IRC.

Základní operace jsou velmi podobné jako u IRC. Jestliže neznáte ani to, pak /help budiž vaším rádcem. Pakliže jste zaskočeni trochu jiným lookandfeel, podívejte se na nastavení vašeho klienta, změny můžete provádět např. pomocí /set klíč hodnota, případné info na dokumentační stránkce k irssi nebo i v dokumentaci k silc-clientu.

Je tedy na čase osvojit si základní příkazy jako /join kanál  – vstoupit na kanál, /leave a.k.a /part  – opustit kanál atd. My se vrhneme na to zajímější, co dělá SILC silným – šifrování a bezpečnost.

Co skvělého SILC umí?

U SILC nejde jen o nějakou obdobu IRC via SSL. Jak už bylo řečeno, vše je transparentně šifrováno. Mimo jiné přenos souborů, ke kterému je využit sftp. SILC umí tedy:

  • Podepisovat zprávy uživateli a na kanál veřejným klíčem (podobně jako u PGP)
  • Omezit vstup na kanál pouze pro uživatele, jejichž veřejný klíč je v channel public key list
  • Omezit vstup na kanál pouze pro uživatele znalé hesla
  • Chránit zprávy kanálu pomocí private channel key aka mezi uživateli předem dohodnutého hesla. Jedná se o lokální záležitost klientů, serverem vygenerované channel keys nejsou použity. Je rovněž možné mít více private channel keys.
  • Šifrovat zprávy přímo mezi dvěma uživateli pomocí jejich veřejných/sou­kromých klíčů.
  • Přenášet šifrovaně přímo mezi dvěma uživateli soubory.
  • Permanentní kanály bez speciálních dodatečných triků
  • Detachování klienta na serveru.

Podepisování zpráv na kanál/uživateli pomocí veřejného klíče

To je velmi vhodné. Např. protože SILC dovoluje použití stejných nicků, může být snadné nechat se zmást pravou identitou určitého uživatele. V případě používání podepsaných zpráv budeme jasně informováni, zdali je nám uživatel známý, či nikoliv. K ověřování podpisů potřebujeme samozřejme veřejné klíče uživatelů.

Na třech odešlých zprávách od pepy na kanál test zadaných v řádku klienta (první normálně, další dvě podepsané) získáme ukázku toho, jak se zobrazení zpráv bude lišit. Mezi 2. a 3. získá jirib veřejný klíč odesílatele.

[test] nepodepsana zprava
[test] /smsg * podepsana zprava
[test] /smsg * podepsana a pozitivne overena zprava 

Na kanále test u uživatele jirib:

[04:03] < pepa> nepodepsana zprava
[04:03] <[?] pepa> podepsana zprava 

jirib vidí [?] u zprávy, což značí neověřený podpis, proto získá pepíkův klíč:

[test] /getkey pepa
[test] Would you like to accept the key (y/n)? y

[04:19] *** Received client public key
[04:19] *** Fingerprint and babbleprint for the client key are
[04:19] ***  8D9F A501 5C5F 0C0A 506C  FAFA 45ED B852 F4AC 54AC
[04:19] ***  xofen-zenab-calyh-zifib pogok-sovuz-pociv-tavah detop-syhep-saxox
[04:20] *** Verified successfully user pepa's cached public key 

Získaný klíč bychom měli ověřit oproti nějakému zdroji, např. oproti www stránce, vizitce nebo signature v emailu. Před samotným akceptování klíče si jej ještě můžeme prohlédndout pomocí /whois pepa. Získané klientské klíče vypíšeme /listkeys -clients. Nyní se nám tedy poslední odeslaná zpráva od pepy ukáže takto:

bitcoin školení listopad 24

[04:26] <[S] pepa> podepsana a pozitivne overena zprava 

Jak již bylo řečeno, je možné, že se nám připojí jiný pepa. V případě, že je silc server nakonfigurován jako anonymní, tj. aby zakódoval hostname klienta, nemůžeme se spoléhat na pepa@znama_cast_hostname, proto je dobré podepisovat zprávy a také ověřovat klienty pomocí  /whois nick:

[04:37] [10] *** pepa@silc.example.org (xirek@gyhof.pona.silc)
[04:37] [10] ***  nickname    : pepa (pepa)
[04:37] [10] ***  realname    : Unknown
[04:37] [10] ***  channels    : test
[04:37] [10] ***  modes       :  [anonymous]
[04:37] [10] ***  idle        : 11 minutes
[04:37] [10] ***  fingerprint : 8D9F A501 5C5F 0C0A 506C  FAFA 45ED B852 F4AC 54AC
[04:37] [10] *** pepa@silc.example.org (xodaf@tenuf.lini.silc)
[04:37] [10] ***  nickname    : pepa (pepa@tenuf)
[04:37] [10] ***  realname    : Unknown
[04:37] [10] ***  channels    : test
[04:37] [10] ***  modes       :  [anonymous]
[04:37] [10] ***  idle        : 4 minutes
[04:37] [10] ***  fingerprint : 8ECA 1A06 2832 C57E 5339  5C13 CB9C 9799 C5F0 1F2E 

Toť prozatím vše. Mnoho dobrého SILCování. Případní zájemci nechť si vylistují případné kanály. Naleznete zde např. kyberia, colloguy, unix, bsd.cz nebo samozřejmě silc. SILCnet zatím nemůže počtem uživatelů konkurovat IRC sítím, záleží tedy na vás!

Autor článku