Ho una scarsa conoscenza nel mondo della crittografia, sto appena iniziando a impararlo quindi sono un principiante:)
Come progetto per entrare nel campo della crittografia, voglio scrivere un programma client \ server che possa inviare e ricevere dati in modo sicuro ( i crittografato).
Diciamo che voglio crittografare il traffico tra un client e un server o tra due client. Il servizio che sto utilizzando può parlare solo con il server o un altro client (che funge anche da server) su una porta conosciuta, il server ascolta sostanzialmente una connessione su un lato su una porta predefinita.
Voglio che quei servizi siano in grado di comunicare tra loro senza la possibilità che una terza parte che sta ascoltando sulla rete sia in grado di decrittografare il contenuto della conversazione o provare a imitare un servizio.
Non sto cercando un nuovo modo per scambiare le chiavi (o dovrei?), posso avere le chiavi salvate in modo sicuro nei servizi così quando x invia un messaggio a y e di nuovo, saranno gli unici in grado di decodificare il contenuto e la risposta (fuori rotta, solo per un servizio verificato ).
- nota a margine, la chiave può essere salvata nel programma - hardcoded o può essere generato da una combinazione di elementi (ad es. IP, nome-computer, nome utente o qualsiasi altra combinazione di costanti) che può essere trasmesso al client in modo che sia in grado di generare la chiave (diciamo che sto passando l'IP, il nome del computer e un seme casuale, ci sarà una formula conosciuta per creare la chiave da quei valori).
Ho bisogno di utilizzare una chiave simmetrica per la crittografia, ma forse posso provare a utilizzare due chiavi pre-generate come fa SSL.
So che se uso sempre la stessa chiave, una terza persona può annusare il traffico e ottenere la chiave (matematica al meglio, come è fatta?), più dati raccoglierà, più più facile diventa (?).
Quindi, cosa dovrei fare per promettere che nessuno sarà in grado di ottenere la chiave di crittografia (eventualmente leggendo i dati)? Quale cifra dovrei usare? Cos'altro ho bisogno di sapere prima di iniziare il mio viaggio?