Crittografia | NEXT chapters | ||
Il problema: A vuole inviare un messaggio a B, ma desidera essere certo che quel messaggio venga letto esclusivamente da B. Ha due opzioni a disposizione: o si reca da B e gli comunica il messaggio direttamente all'orecchio, oppure deve affidare il suo messaggio ad un qualche mezzo di trasmissione: una lettera, un telefono, un qualsiasi mezzo elettronico. Se sceglie questa seconda opzione, un mezzo di trasmissione, A deve partire da un presupposto certo: durante la trasmissione, qualcuno, che non è B ( per esempio: C ), intercetterà e leggerà quel suo messaggio, soprattutto se avrà utilizzato un mezzo elettronico, quale un computer, un telefono cellulare, oppure un tablet. Che fare? Semplice: occorre fare in modo che quel messaggio risulti illeggibile a chichessia, eccetto che al suo destinatario. Questo è il compito dei sistemi di crittografia. Un testo come il seguente, difficilmente potrà avere una qualche utilità, per chiunque riuscisse ad intercettarlo:
Questo è un messaggio cifrato. Un sistema crittografico completo ed efficiente deve garantire:
Normalmente, tutti questi servizi vengono implementati da algoritmi specifici: la crittografia garantisce la confidenzialità del messaggio, l'impronta digitale ( o fingerprint, oppure digest, oppure checksum ) ne garantisce l'integrità, il certificato digitale, abbinato alla firma digitale dell'ente che lo ha emesso, attesta l'identità dei soggetti coinvolti nella transazione e garantisce il non disconoscimento delle azioni svolte nel corso della transazione stessa. La crittografia è una scienza che, attraverso la matematica, crea gli algoritmi per criptare e decriptare i messaggi, così da garantirne la confidenzialità. Un algoritmo di crittografia funziona grazie all'applicazione di una "chiave" al testo originale. Una "chiave" può essere una qualsiasi stringa alfanumerica. Applicando chiavi differenti allo stesso testo, un stesso algoritmo produce differenti testi cifrati ( ciphertext ). Prendiamo, come esempio, il semplice cifrario di Cesare, il cui algoritmo prevede di spostare di N posizioni la lettera da cifrare. Il numero di posizioni, N, quindi, diventa la chiave del cifrario di Cesare. Dovendo cifrare il nome Cesare, per esempio, con chiave 3, si otterrà:
mentre, con chiave 4, si otterrà:
In crittografia, per modificare il messaggio originale ( plaintext ), esistono due diversi procedimenti: lo spostamento e la sostituzione , usata nel nostro ultimo esempio. Il primo metodo prevede il semplice spostamento delle stesse lettere appartenenti al messaggio originale ( anagramma ), mentre il secondo prevede la sostituzione delle lettere originali con lettere o numeri o simboli differenti. Per ottenere una codifica del messaggio originale tramite sostituzione, vengono elaborati veri e propri alfabeti cifrati, nei quali si creano le corrispondenze tra le singole lettere del messaggio originale e le lettere dell'alfabeto cifrato. Il quadrato di Playfair ( 1854 ), di Sir Charles Wheatstone, per esempio, utilizza una tabella, composta da 5 righe e 5 colonne, contenente tutte le lettere dell'alfabeto ( inglese ):
Quando si utilizza una chiave di codifica, le lettere della chiave devono sostituire le prime lettere della tabella. Nessuna lettera deve essere duplicata. Quindi, per seguire l'esempio di L. Lo Russo, E. Bianchi, Crittografia bellica, se la parola chiave fosse "SEGRETO", la tabella diventerebbe la seguente:
Questa tabella, quindi, rappresenta l'alfabeto cifrato, per la chiave "SEGRETO", nel sistema di cifratura di Sir Charles Wheatstone. Sir Charles Wheatstone, ovviamente, stabilì anche le regole di conversione, dal testo in chiaro ( originale ) al testo cifrato. Non è detto che a ciascuna lettera dell'alfabeto originale debba corrispondere una sola lettera dell'alfabeto cifrato. Nel quadrato di Playfair, per esempio, una lettera dell'alfabeto originale avrà una corrispondenza nell'alfabeto cifrato che dipenderà dalla lettera alla quale verrà affiancata, in fase di suddivisione del messaggio originale in bigramma. La lettera F, per esempio, verrà sostiutita dalla lettera H, se seguita da una lettera che si trovi sulla sua stessa riga della tabella ( H I J K ), oppure dalla lettera L, se seguita da una lettera che si trovi sulla sua stessa colonna della tabella ( SOLU ), oppure da una lettera differente, nel caso la lettera successiva non si trovi nè sulla stessa sua riga, nè sulla sua stessa colonna della tabella. È possibile, quindi, far corrispondere più simboli dell'alfabeto cifrato ( simboli omofoni ) ad una stessa lettera dell'alfabeto originale. Oppure, è possibile affiancare più alfabeti cifrati, che verranno utilizzati a rotazione. Questo accade nei sistemi polialfabetici, diversamente da quanto accade nei sistemi monoalfabetici. Con l'avvento dell'elettronica, le sostituzioni dei simboli originali può essere effettuata a livello di singolo bit, oppure su blocchi predeterminati di bit o di byte, sui quali diventa possibile eseguire più trasformazioni in periodi di tempo molto ristretti. Fondamentalmente, è possibile suddividere gli algoritmi di crittografia digitale in due grandi classi:
Sistemi di crittografia simmetrici, asimmetrici e ibridi L'algoritmo e la chiave di codifica utilizzati dal mittente devono essere noti anche al destinatario del messaggio. In caso contrario, il destinatario non sarà in grado, probabilmente ( quanto meno con algoritmi un pochino più complessi del cifrario di Cesare ), di decriptare il messaggio e di leggerlo. Se mittente e destinatario utilizzano la stessa chiave di codifica / decodifica, come nel caso del cifrario di Cesare, siamo di fronte ad un algoritmo a chiave simmetrica. Se, al contrario, il mittente utilizza una chiave di codifica, mentre il destinatario utilizza una chiave di decodifica differente, siamo di fronte ad un algoritmo a chiave asimmetrica:
Ipotizziamo che A debba inviare a B un messaggio. In un sistema di crittografia simmetrico, il messaggio di A viene criptato utilizzando una chiave ( una sequenza di caratteri che, in qualche modo, modifica il messaggio originale ) e decriptato, da B, utilizzando la stessa chiave. Questo sistema di crittografia è semplice, sicuro e poco impegnativo, per il processore. Il solo problema che pone, di difficile soluzione, è come permettere lo scambio della chiave tra A e B, senza che un soggetto terzo la intercetti. Se A desidera che B possa decriptare il suo messaggio, deve trovare un modo per inviargli la chiave usata per la codifica. Qualsiasi mezzo A usi per inviare questa chiave a B, mai potrà essere scongiurato il rischio di vedersela intercettare. Il solo modo per evitare che una chiave di codifica venga intercettata è: non spedirla mai. E qui, entra in gioco il sistema di crittografia asimmetrico, detto anche "a chiave pubblica". Quando A decide di inviare a B il suo messaggio, utilizza, come chiave di codifica, la chiave pubblica di B. Precedentemente, infatti, B si era dotato di una coppia di chiavi, intrinsecamente e matematicamente collegate tra loro: una chiave privata ed una chiave pubblica. Le due chiavi sono state create nel computer di B. La chiave privata non ha mai lasciato il computer di B, mentre la chiave pubblica è stata trasmessa da B a tutti i suoi possibili interlocutori. Ciascun interlocutore di B sa che potrà utilizzare la chiave pubblica di B per inviare messaggi criptati a B, ben sapendo che B potrà decriptare i messaggi ricevuti, grazie alla sua chiave privata, che solo lui possiede. Quindi, A invia il suo messaggio a B, criptandolo con la chiave pubblica di B, mentre B decripta il messaggio di A, utilizzando la propria chiave privata. E, se B volesse rispondere ad A, inviandogli un messaggio criptato? In teoria, potrebbe criptare il proprio messaggio, utilizzando la propria chiave privata, sapendo che A potrà decriptarlo, usando la sua ( di B ) chiave pubblica, già usata per criptare il primo messaggio. In un sistema a chiave pubblica, infatti, quando si cripta un messaggio con la chiave pubblica, lo si può decriptare, utilizzando la corrispondente chiave privata, mentre quando si cripta un messaggio con la chiave privata, lo si può decriptare con la corrispondente chiave pubblica. Questo meccanismo, però, sarebbe meno sicuro, visto che chiunque potrebbe possedere la chiave pubblica di B, visto che è stato B stesso a divulgarla. La soluzione più semplice, invece, è che anche A si doti di una propria coppia di chiavi, intrinsecamente e matematicamente collegate tra loro: una chiave privata ed una chiave pubblica. Se B conosce la chiave pubblica di A, può inviare il proprio messaggio di risposta ad A, utilizzando, per criptarlo, la chiave pubblica di A, in modo che A possa decriptarlo, usando la sua propria chiave privata. Questo significa che, in mondo perfetto, ciascuno di noi dovrebbe dotarsi di una propria coppia di chiavi, una pubblica ed una privata, e fare in modo che la chiave privata non lasci mai il proprio computer. Il sistema di crittografia a chiave pubblica è semplice, sicuro, ma molto impegnativo, per il processore. Il sistema di crittografia simmetrico, invece, è altrettanto semplice, molto meno impegnativo, per il processore, ma, anche, meno sicuro, visto che prevede la trasmissione della chiave utilizzata per la codifica dei dati. Come al solito, la via più efficace ed efficiente è la via di mezzo. Per ridurre il carico di lavoro del processore, infatti, la soluzione è il cosiddetto sistema di crittografia ibrido: A crea, al volo, una chiave di codifica simmetrica, con la quale cripta il messaggio da inviare a B, per poi criptare la stessa chiave di codifica simmetrica, usando la chiave pubblica di B, ed allegando la chiave simmetrica criptata al messaggio. B, al momento della ricezione del messaggio di A, dovrà decriptare la chiave simmetrica, usando la propria chiave privata, per poi usare la chiave simmetrica decriptata per decriptare l'intero messaggio di A. In questo modo, il sistema crittografico asimmetrico viene applicato alla sola chiave simmetrica, mentre all'intero messaggio verrà applicato il più snello sistema simmetrico. "Le chiavi non sono altro che numeri molto grandi che vengono usati dagli algoritmi di cifratura, per produrre specifici testi criptati. Le dimensioni di una chiave vengono espresse in bit. Il numero che rappresenta una chiave di 1024 bit è dannatamente grande. Nella crittografia a chiave pubblica, più è grande la chiave, più è sicuro il testo cifrato. Tuttavia, le dimensioni di una chiave pubblica non hanno alcuna relazione con le dimensioni di una chiave segreta convenzionale di un sistema simmetrico. Una chiave segreta convenzionale a 80 bit è equivalente, in termini di affidabilità, ad una chiave pubblica a 1024 bit. Una chiave segreta convenzionale a 128 bit è equivalente ad una chiave pubblica a 3000 bit. Più è grande la chiave, più è sicura. Ma i due algoritmi utilizzati ( simmetrico ed asimmetrico ) sono completamente diversi, rendendo impossibile qualsiasi comparazione. Pur essendo correlate matematicamente tra loro, la chiave privata e la chiave pubblica, è davvero difficile risalire alla chiave privata, a partire da quella pubblica. Difficile, ma non impossibile. E' questione di tempo e di potenza di calcolo. Ecco perchè è importante scegliere una chiave con la giusta dimensione: abbastanza grande per essere sicura, abbastanza piccola per poter essere utilizzata velocemente" ( An Introduction to Cryptography, Phil Zimmermann ). Abbiamo detto che, nei sistemi a chiave pubblica, le due chiavi, di codifica e di decodifica ( pubblica e privata ), devono essere intrinsecamente e matematicamente collegate tra loro. La sicurezza di simili sistemi, quindi, deve fondarsi sull'utilizzo di funzioni matematiche relativamente facili da calcolare ma molto difficili da invertire. L'algoritmo RSA, per esempio, utilizza il prodotto di due numeri primi molto grandi: con 1024 bit a disposizione, per esempio, si hanno numeri composti da circa 300 cifre! Se moltiplicare due numeri primi tra loro è un'operazione sufficientemente semplice, risalire ai numeri primi di origine, a partire dal prodotto finale ( fattorizzazione ) è un'operazione molto più complessa. L'algoritmo più rapido conosciuto, per la fattorizzazione, il General Number Field Sieve, o GNFS, impiegherebbe, su un numero a 1024 bit, un migliaio di anni, pur eseguendo un milione di test al secondo ( Michal Zalewski, Silence on the Wire, 2005 ). Una esauriente spiegazione dell'algoritmo RSA è reperibile alla pagina Cifrario RSA: il metodo, a cura del Liceo Ginnasio "M.Foscarini" di Venezia. Se criptare un messaggio, utilizzando la propria chiave privata non ha senso, in termini di confidenzialità della comunicazione, visto che chiunque potrebbe essere in grado di decriptarlo, utilizzando la nostra stessa chiave pubblica, qualsiasi documento criptato, utilizzando la chiave privata della propria coppia di chiavi ( pubblica e privata ), è una firma digitale. Infatti, se B riceve da A un messaggio criptato con la chiave privata di A, B potrà decifrare il messaggio di A, utilizzando la chiave pubblica di A. Se la chiave pubblica di A permette a B di leggere il messaggio criptato di A, B può essere certo che quel messaggio sia stato criptato da A, il solo detentore della sua ( di A ) chiave privata. Grazie a questo meccanismo, è possibile, quindi, garantire l'autenticità del mittente. L'impronta digitale ( o fingerprint, oppure digest, oppure checksum ) L'impronta digitale ( o fingerprint, oppure digest, oppure checksum ) non è una firma digitale. Una firma digitale, come abbiamo visto, è un testo criptato, utilizzando la chiave privata del mittente, in modo da garantire, al destinatario, l'autenticità del mittente stesso. Il destinatario del messaggio sarà sempre in grado di decodificare la firma digitale ( messaggio ), utilizzando la chiave pubblica del mittente. La creazione di un'impronta digitale non prevede alcuna codifica dei dati, ma una loro trasformazione in una entità differente, dalla quale non sarà mai più possibile tornare al messaggio originale. Un digest ( o checksum ) di un testo, di un documento, di un file è il risultato della riduzione del testo, del documento, del file, ad un'unica stringa numerica, composta da un numero prefissato di bit ( 128, di solito ). "Prendete un file composto da molti byte. Dividetelo in pezzi più piccoli, tutti della stessa dimensione, in byte ( aggiungendo byte casuali, nell'eventualità che un pezzo, come l'ultimo, non raggiunga le dimensioni stabilite ). A questo punto, trattando ciascuno dei pezzi come un numero, eseguite la somma. Ecco una forma molto semplice di funzione di hash, il cui risultato è un digest" ( David E. Ross, Pretty Good Privacy ). Il digest è il risultato finale di una serie di operazioni eseguite ripetutamente sul documento: l'insieme di queste operazioni rappresenta la funzione di hash. Un documento, un testo, un file, quando sottoposto ad una stessa funzione di hash, restituisce sempre la stessa stringa numerica. Un documento, un testo, un file differente, quando sottoposto alla stessa funzione di hash, restituirà, invece, una stringa numerica differente, sempre. Questa peculiarità dell'impronta digitale viene sfruttata per assicurarsi dell'integrità di un messaggio. Quando A invia un documento, un testo, un file a B, invia, contemporaneamente, il risultato della funzione di hash eseguita su quel documento, testo, file. Se il documento, il testo, il file è stato modificato, anche in minima parte, durante il viaggio, la funzione di hash restituirà una stringa numerica completamente differente: sarà sufficiente, quindi, rieseguire la funzione di hash sul messaggio ricevuto e confrontare il digest ottenuto con quello inviatomi da A, insieme al messaggio: se i due digest coincidono, il documento è integro. Il risultato della funzione di hash ( checksum o digest o fingerprint o impronta digitale ), quindi, garantisce che il documento, il testo, il file che ho appena ricevuto da A è lo stesso documento, testo, file che A conserva nel suo computer ( integrità del messaggio ). Spesso, l'impronta digitale viene utilizzata come firma digitale, al fine di evitare l'inutile ed oneroso compito di criptare un intero documento: del documento viene calcolata l'impronta digitale, così da garantirne l'integrità, l'impronta digitale viene, poi, criptata con la chiave privata del mittente, così da garantire al destinatario l'identità del mittente. Questa tecnica è il fondamento dei certificati digitali. Gli algoritmi crittografici di hashing più diffusi sono: MD5 ( Message Digest algorithm 5 ), SHA-1 ( Secure Hash Algorithm ), SHA-2 ( SHA-224, SHA-256, SHA-384 e SHA-512 ), SHA-3. Programmi quali PGP utilizzano il digest di un messaggio e la chiave privata del mittente per generare la firma digitale. Un certificato digitale è un documento, contenente alcune informazioni su una entità ( persona fisica o società ), firmato digitalmente dall'entità stessa: il documento, o una parte di esso, viene criptato, utilizzando la chiave privata dell'entità di cui il certificato digitale trasporta le informazioni. In questo modo, chiunque potrà leggere le informazioni contenute nel certificato digitale, utilizzando la chiave pubblica dell'entità mittente. Una chiave pubblica, per esempio, viene conservata in un certificato digitale. Ma, il certificato digitale svolge, anche, un altro compito importantissimo: garantisce che il mittente, del quale il certificato contiene alcune informazioni, sia chi dice di essere. Il problema: A vuole inviare a B un messaggio criptato. A chiede a B la sua chiave pubblica. B invia ad A la sua chiave pubblica. A cripta il messaggio da inviare a B, utilizzando la chiave pubblica di B. In questo modo, A è certo che B potrà decriptare il messaggio, usando la sua propria ( di B ) chiave privata. Se un intruso, diciamo C, conoscesse la chiave pubblica di B, cosa potrebbe fare? C potrebbe inviare ad A una sua propria ( di C ) chiave pubblica, facendo credere ad A che si tratti della chiave pubblica di B. A questo punto, A cripterebbe il messaggio da inviare a B con la chiave pubblica di C. C intercetterebbe il messaggio di A, lo decodificherebbe e lo ricodificherebbe, utilizzando, questa volta, la vera chiave pubblica di B. C invierebbe, quindi, il messaggio ricodificato a B. In questo modo, B sarebbe in grado di decodificare correttamente il messaggio criptato di A. Ne A, ne B potrebbero mai sospettare che qualcun altro, C, abbia aperto e decodificato il messaggio originale. Il solo modo per evitare questo tipo di frode è affidarsi ad un'autorità terza ( la CA, Certification Authority ) che mi garantisca che la chiave pubblica che sto utilizzando appartenga al soggetto, azienda, organizzazione, sito web, al quale desidero inviare il messaggio criptato. Una Certification Authority rilascia ad un soggetto, azienda, organizzazione, sito web, un certificato digitale che contiene la chiave pubblica ed i dati identificativi del soggetto, criptati usando la chiave privata della Certification Authority stessa, legando indissolubilmente la chiave pubblica e i dati del soggetto nella firma digitale della Certification Authority, firma digitale che potrà essere verificata da chiunque, usando la chiave pubblica della Certification Authority. Un'autorità di certificazione, apponendo la sua firma digitale al certificato digitale di un terzo, garantisce al mondo la correttezza delle informazioni contenute nel certificato. Premessa indispensabile di questo meccanismo è la fiducia riposta nell'autorità di certificazione ( CA ), da parte del destinatario. In nome di questa fiducia, il destinatario riterrà validi tutti i certificati, non scaduti, emessi da una specifica autorità di certificazione. Ovviamente, tutto questo ha un costo ed il costo è, spesso, anche piuttosto elevato. Per questo motivo, è anche possibile creare un certificato digitale per il proprio sito web o la propria azienda e autocertificarlo ( self-signed certificate ). Naturalmente, questo tipo di certificazione potrebbe essere insufficiente per le grandi organizzazioni, mancando il controllo di una parte terza, ma può rivelarsi una buona soluzione per siti web ed entità di piccole dimensioni. I certificati PGP, i più diffusi tra i "self-signed certificate", possono contenere più firme digitali, poichè chiunque può attestare l'identità del possessore di un certificato digitale, apponendovi la propria firma digitale. In alcuni casi, un certificato PGP può contenere una chiave pubblica, abbinata a più etichette, ciascuna delle quali attesta la veridicità di alcune informazioni relative al proprietario della chiave pubblica. Ciascuna etichetta sarà firmata da un singolo soggetto, il quale attesta la veridicità di quella singola etichetta. Un meccanismo di delega dell'autorità è previsto anche nel caso delle Certification Authority ( CA ). Una Certification Authority ( CA ), infatti, può anche essere un " meta-introducer ", un ente che conferisce non solo validità ad una chiave pubblica, ma anche la possibilità di esprimere, a soggetti terzi ( o trusted introducer ), la propria approvazione ad una chiave pubblica. I " trusted introducer " ( o " subordinate Certification Authorities ", in linguaggio X.509 ) vengono selezionati dal " meta-introducer " ( o " root Certification Authority ", in linguaggio X.509 ). Una volta che la " root Certification Authority " ha apposto la sua firma digitale al certificato digitale di una " subordinate Certification Authority ", qualsiasi certificato digitale emesso dalla Certification Authority verrà ritenuto convalidato. La catena di queste certificazioni viene chiamata " certification path " o " certification chain ". Tornando ai certificati PGP, chiunque può svolgere il ruolo di autorità certificatrice. Quando un utente appone la propria firma digitale ad una chiave pubblica di un altro, diventa " introducer " di quella chiave pubblica. Naturalmente, la firma digitale verrà riconosciuta solo dai soggetti che conoscono l'autore della firma digitale: in questo caso, l'utente che appone la propria firma digitale ad una chiave pubblica di un altro diventa un " trusted introducer ", almeno per tutti coloro che lo conoscono e che si fidano di lui. L'insieme di queste firme digitali definisce il cosiddetto " web of trust ". Per conoscere la struttura di un certificato digitale, vai alla traduzione italiana della guida SSL Certificates HOWTO. Quando A ha bisogno di conoscere la chiave pubblica di B, per potergli inviare un messaggio criptato, potrà richiedere, via internet, il certificato digitale di B, se esistente, dal quale potrà estrarre la sua ( di B ) chiave pubblica. A chi dovrà rivolgersi A per ottenere il certificato di B? Esiste un sistema di server, collegati tra loro, i cosiddetti key-server o certificate server, dove chiunque può inviare il proprio certificato digitale ( per renderlo disponibile al mondo intero ) e dove chiunque può trovare il certificato digitale di un soggetto, ente, azienda, organizzazione o sito, qualsiasi. Anche ciascuna Certification Authority può mettere a disposizione uno o più key-server, ma, il più delle volte, i key-server di una Certification Authority offrono servizi supplementari, quali la emissione di nuovi certificati, la revoca di un certificato, etc.. In questo caso, si parla, quindi, di un vero e proprio sistema di gestione dei certificati: il PKI ( Public Key Infrastructures ). La crittoanalisi è la scienza che, attraverso l'analisi dei testi cifrati, tenta di decriptarli, cercando di individuare sia l'algoritmo applicato al testo originale, sia la chiave utilizzata. Il tutto in tempi ragionevoli. Una chiave, in particolare, sarà sempre, prima o poi, individuabile ( basta avere il tempo per provare tutte le chiavi possibili ). Lo spartiacque, tra un buon algoritmo ed un cattivo algoritmo, tra una buona chiave di codifica ed una cattiva chiave di codifica, è il tempo necessario alla loro individuazione. Il programma PGP ( Pretty Good Privacy ) è il sistema di crittografia più usato al mondo. Fu sviluppato da Phil Zimmermann nel 1991. Nel 1997, IETF ( Internet Engineering Task Force ) accettò la proposta di PGP Inc. di creare, sulla base del programma PGP, uno standard: OpenPGP. Oggi, i prodotti PGP sono rilasciati da Symantec. Il programma GPG, o GnuPG ( GNU Privacy Guard ), è stato sviluppato dalla Free Software Foundation, è completamente compatibile con lo standard OpenPGP di IETF, è Open Source e viene rilasciato con licenza GNU General Public License ( GPL ). Sostituisce egregiamente il programma PGP. Il programma OpenSSL ( Open Secure Sockets Layer ) è l'implementazione open source dei protocolli SSL e TLS ( Transport Layer Security ). I protocolli SSL ( Secure Sockets Layer ) e TLS ( Transport Layer Security ) "permettono una comunicazione sicura dal sorgente al destinatario ( end-to-end ) su reti TCP/IP ( come ad esempio Internet ) fornendo autenticazione, integrità dei dati e cifratura" ( Wiki ). Gli algoritmi di cifratura usati sono sia algoritmi a chiave asimmetrica ( RSA, DSA, ECDSA ), sia algoritmi a chiave simmetrica ( RC4, DES, Triple DES, AES, IDEA ). Il protocollo SSH ( Secure shell ) "è un protocollo di rete che permette di stabilire una sessione remota cifrata tramite interfaccia a riga di comando con un altro host di una rete informatica" ( Wiki ).
|
|||
Crittografia | The .bit guides: original contents |