Closed martin-nohava closed 2 years ago
Hlavně to chce udělat do přehledného výstižného diagramu. Bude se moct rovnou použít ve studii a dokumentaci. Diagramy budou dva, jeden pro symetrickou a druhý pro asymetrickou kryptografii.
Asymetrickou navrhují udělat tak že si klient požádá o autentizaci inicializační zprávou která bude obsahovat i identifikaci konkrétního uživatele který žádá o autentizaci. Server pošle nonce, ten klient podepíše soukromím klíčem a pošle zpět. Server pak ověří podpis veřejným klíčem. Tím je klient autentizován a může se vytvořit session s daným klientem. To ještě nevím jak bych dělal.
Symetrickou verzi nějak podobně jen budou muset mít predsdileny sym. klíč a nonce se nebude podepisovat ale šifrovat. Server pokud dokáže dešifrovat zprávu obsahující serverem zaslané nonce tak ví ze muselo být zašifrováno odpovídajícím klíčem, tedy klient vlastní tajemství. Autentizace úspěšná => vytvoření session.
V tomto návrhu jsem se snažil především zaměřit na reálné použití, aby nebylo potřeba přepisovat například hash hesla do serveru a nebo dělat podobné nepraktické kroky, které by při reálném nasazení programu byly velmi uživatelsky nepřívětivé.
1) Inicializace serveru – vytvoření páru veřejný a privátní klíč serveru RSA 2) Registrace uživatele administrátorem na serveru – zadání jména a hesla, vytvoří se automaticky hash hesla a symetrický klíč pro AES. Vše se uloží do databáze. 3) Žádost o rsa.pub – klient požádá server o veřejný klíč pokud jej nemá 4) Přihlášení uživatele – zašle žádost o ser-nonce (username, usr-nonce), šifruje pomoci veřejného klíče serveru. Server odpoví s (ser-nonce, usr-nonce) šifrováný pomocí uloženého uživatelského hesla. Klient dvojici rozšifruje pomocí hesla zadaného uživatelem do konzole klienta a pomoci veřejného klíče serveru opět zašifruje a odešle. Server ověří správnost ser-nonce a zpátky zašle klíč pro AES uložený v databázi pro daného uživatele, šifruje opět jeho heslem a přidává key-nonce pro jedinečnost každé zprávy. Od této chvíle má klient i server klíč pro symetrické šifrování, které jak autentizuje uživatele tak šifruje přenášená data.
Vypadá dobře. Jen mě trochu trápí, se nebude ten klíč pro sym. kryptografii měnit a bude furt stejný. Mohly bychom tam přidat nějaké promíchávání se solí nebo s těma nonce.
To by jsme mohli vyřešit solením no. Klíč bych neměnil.
Tento typ autentizace byl kompletně implementován v lehce modifikované podobě commitem 7796098c6e9c24334ce19909ce3b08cf24d8458e. (Modifikace: Žádost šifrovaná dle diagramu [Komunikace] + přenášena přes TLS spojení. Datová část komunikace šifrována již pouze pomocí TLS.)
Pro další úpravy systému autentizace a optimalizace budou otevřeny samostatné Issues.
Je zapotřebí navrhnout proces autentizace uživatele, strany, protokol, kryptografické prostředky apod.
Implementace dílčích částí: