Secure Shell (SSH)
Podrobnosti transportního protokolu
Po výměně identifikačních řetězců odešlou obě strany takto strukturované pakety:
- Délka paketu
- uint32 celé číslo bez znaménka, kódováno jako 4 bajty dává délku paketu bez této položky a MAC.
- Délka odsazení
- 1 bajt
- Data
- Libovolné datové bajty v množství "Délka paketu" - "Délka odsazení" - 1.
- Odsazení (padding)
- 4 až 255 bajtů. Zarovnává délku zprávy na násobk 8 bajtů. Mělo by se skládat z náhodných dat.
Důvod odsazení je ztížení případného pokusu o prolomení šifry.
Ve starších verzích protokolu bylo odsazení umístěno před daty a jeho délka byla 0-7 bajtů.
- MAC
- (Message autentication code) Autentizační kód zprávy.
Slouží k ověření neporušenosti došlých dat.
Délka paketu se také kóduje (narozdíl od starších verzí).
Program zjišťuje délku zprávy po rozkódování prvních 8 bajtů.
První čtyři položky po zřetězení musí mít délku dělitelnou 8 bajty nebo dělitelnou délkou bloku použité šifry.
Podle toho, co je delší.
Délka užitečných dat je maximálně 32768, délka celé zprávy 35000 bajtů.
Některé implementace mohou zvládat i delší pakety.
Komprese
Pokud je to vyžadováno, může být použita komprese.
Zadává se nezávisle pro každý směr.
Komprimují se pouze samotná data.
Následující pakety používají stejnou kompresní tabulku.
Mohou být použity libovolné metody komprese.
Například GNU ZLIB (LZ77).
Šifrování paketu
Protokol podporuje několik typů šifrování.
Během navazování spojení server posílá seznam všech podporovaných metod kódování a klient si jednu z nich vybírá.
Klient také vytváří 256 bitový klíč a posílá jej serveru.
Používá se nejméně 128 bitů.
Pro šifrování se paket skládá z posloupnosti bitů.
Kódované bloky jsou vždy následující části paketů.
Kóduje se jako by data tvořila nepřetržitý buffer.
Data z obou směrů se kódují nezávisle.
Podporované šifrovací metody jsou tyto:
- 3des-cbc
- Tato šifra je povinná pro všechny implementace.
Varianta Triple DESu zde použitá pracuje takto:
Jsou tři nezávislé DES-CBC šifry s nezávisle inicializovanými vektory.
Proud dat je nejprve zakódován první šifrou, pak rozkódován druhou šifrou a nakonec zakódován třetí šifrou.
Všechny tyto operace se provádí v CBC módu.
Klíč pro první šifru se vezme z prvních 8 bajtů klíče tohoto spojení, dalších 8 bajtů tvoří klíč pro další šifru a klíč pro třetí šifru je následujících 8 bajtů.
Je tedy potřeba 24 bajtů, z nich se použije 168 bitů.
Všechny tři inicializační vektory jsou nastaveny na nuly.
- blowfish-cbc
- Blowfish je bloková šifra s 8 bajtovými bloky.
Používá 128 bitový klíč.
Je doporučeno ji mít v SSH povolenou.
- arcfour
- Prvních 16 bajtů tvoří klíč pro kódování směru od serveru.
Dalších 16 bajtů se používá ke kódování dat od klienta.
Je to velmi rychlá proudová šifra.
Je kompatibilní s šifrou RC4 (registrovaná známka RSA Data Security Inc.)
- idea-cbc
- Klíč tvoří prvních 16 bajtů klíče spojení.
IDEA je použit v módu CBC.
Inicializační vektor je nastaven na nuly.
Patent patří firmě Ascom AG.
- cast-128
- Šifra CAST-128 použitá v CBC módu.
- none
- Bez šifrování.
Nedoporučuje se.
Používá se pro navázání spojení, než se počítače domluví na šifře a klíčích.
Integrita dat je chráněna autentizačním kódem zprávy (MAC),
který se počítá z tajného sdíleného čísla, pořadí zprávy a z obsahu paketu.
V první zprávě má MAC nulovou délku.
Pro každou další zprávu se zvyšuje pořadové číslo zprávy.
Nikdy se nepřenastavuje a neposílá po síti.
Délka MAC je daná zvoleným algoritmem.
- hmac-sha1
- Povinný algoritmus. Délka MAC je 20 bajtů.
- hmac-sha-96
- Prvních 96 bitů z HMAC-SHA1. Je doporučeno povolit.
- hmac-md5
- Algoritmus HMAC-MD5. Délka MAC je 16 bajtů.
- hmac-md5-96
- Prvních 96 bitů z HMAC-MD5. Délka 12 bajtů.
- none
- Bez MAC. Nedoporučuje se.
Neumožňuje zjistit, zda data nebyla během přenosu změněna.
Kódování různých typů dat
Datová část paketu obsahuje různá data.
Může obsahovat několik zřetězených položek (bez jakéhokoliv odsazování nebo zarovnávání).
Každý datový typ je ukládán následovně:
- 8 bitový bajt - byte
- Je uložen přímo jako samostatný bajt.
- 32 bitové celé číslo bez znaménka - uint32
- Uloženo ve 4 bajtech.
Nejvýznačnější bajt nejdříve.
- Řetězec libovolné délky - string
- První 4 bajty udávají délku (nepočítají se do délky).
Pak následuje samotný řetězec.
Konec se nijak neoznačuje.
- Celé číslo libovolné přesnosti - mpint
- První dva bajty udávají počet bitů.
Nejvýznačnější bajt nejdříve.
Například 0x00012345 bude mít 17 bitů.
Nulová hodnota má nula bitů.
Počet bitů je následován (bity + 7) / 8 bajty binárních dat určujících hodnotu (nejvýznamnější nejdříve).
Algoritmy veřejných klíčů
Momentálně jsou definovány tyto metody:
- ssh-dss
- Jednoduchý algoritmus Digital Signature Standard.
Jeho podpora je povinná.
- x509v3
- Certifikáty X.509v3 jsou doporučené, ale ne povinné.
- spki
- Certifikáty SPKI jsou volitelné.
- pgp
- Certifikáty OpenPGP jsou volitelné.
[<předchozí část<] [^obsah^] [>další část>]
xzarsky@fi.muni.cz