Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Appunti lezioni Informatica di base, Appunti di Fondamenti di informatica

Trasposizione delle slide proposte dal professore durante la lezione

Tipologia: Appunti

2023/2024

In vendita dal 07/06/2024

emma-schiavon-2
emma-schiavon-2 🇮🇹

1 documento

1 / 38

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Teoria dell’informatica
Computer Science: è lo studio dei fondamenti teoretici dell’informazione e della sua
elaborazione e delle implementazioni che ne derivano. Questa disciplina include
svariati argomenti, fra i quali gli algoritmi, i linguaggi di programmazione e le
architetture degli elaboratori.
Information Technology: è un campo nel quale si utilizzano computer, software e
altre tecnologie con lo scopo di elaborare e trasmettere informazioni. Ne fanno parte,
ad esempio, lo sviluppo hardware/software, l’amministrazione di architetture di rete e
la cybersecurity.
Pascal, 1641: Macchina per addizioni.
Hilbert, 1928: Congresso internazionale dei matematici.
1944: Primo computer digitale.
1958: Nascita dei circuiti integrati.
1975/1976: Fondazione Microsoft e Apple.
Berners-Lee, 1989: Nascita del World Wide Web.
Albori: Svariati strumenti meccanici vengono creati per eseguire somme e calcoli di altro
tipo.
Blaise Pascal, 1641: Il filosofo e matematico Blaise Pascal inventa una macchina
meccanica per svolgere addizioni. Nello stesso periodo Leibniz studia il sistema binario per
eseguire calcoli.
1820, Charles Babbage: Lavora su dei prototipi di macchine per svolgere i calcoli.
1848, Ada Lovelace: Scrive il primo programma, diventa così il primo programmatore della
storia.
1890, Herman Hollerith: Crea una macchina tabulatrice per il censimento della
popolazione. Fonderà successivamente l’IBM.
1936, Alan Turing: padre fondatore dell’informatica, costruisce il primo modello formale
della Macchina di Turing per rispondere al terzo quesito di Hilbert. Esistono quindi problemi
non risolvibili dalla macchina.
1945, John von Neumann: descrive per la prima volta la cosiddetta architettura di von
Neumann, che ancora oggi è valida.
1957/8,Fortran, Lisp, Algol: Nascita di svariati linguaggi di programmazione.
1975, Microsoft: Bill Gates e Paul Allen fondano Microsoft, un’azienda specializzata nello
sviluppo software.
1976, Apple: Steve Jobs e Steve Wozniak fondano Apple con lo scopo di rivoluzionare il
mondo dei pc.
1989, Tim Berners-Lee, WWW: Prende vita l’idea del World Wide Web con l'obiettivo di
condividere automaticamente e velocemente le informazioni tra scienziati, università e altre
istituzioni. Nel 1991 viene pubblicato il primo sito Internet, sempre ad opera di Tim Berners-
Lee.
1990: Corsa allo sviluppo di browser, motori di ricerca e applicazioni che usano il web.
2000: Periodo di espansione, della nascita dei social media e della comunicazione online.
2010: Sviluppo delle intelligenze artificiali, del machine learning, del cloud computing e lo
sviluppo di tecnologie mobile.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Anteprima parziale del testo

Scarica Appunti lezioni Informatica di base e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

Teoria dell’informatica

Computer Science : è lo studio dei fondamenti teoretici dell’informazione e della sua elaborazione e delle implementazioni che ne derivano. Questa disciplina include svariati argomenti, fra i quali gli algoritmi, i linguaggi di programmazione e le architetture degli elaboratori. ● Information Technology : è un campo nel quale si utilizzano computer, software e altre tecnologie con lo scopo di elaborare e trasmettere informazioni. Ne fanno parte, ad esempio, lo sviluppo hardware/software, l’amministrazione di architetture di rete e la cybersecurity. Pascal, 1641: Macchina per addizioni. Hilbert, 1928: Congresso internazionale dei matematici. 1944: Primo computer digitale. 1958: Nascita dei circuiti integrati. 1975/1976: Fondazione Microsoft e Apple. Berners-Lee, 1989: Nascita del World Wide Web. Albori : Svariati strumenti meccanici vengono creati per eseguire somme e calcoli di altro tipo. Blaise Pascal, 1641 : Il filosofo e matematico Blaise Pascal inventa una macchina meccanica per svolgere addizioni. Nello stesso periodo Leibniz studia il sistema binario per eseguire calcoli. 1820, Charles Babbage : Lavora su dei prototipi di macchine per svolgere i calcoli. 1848, Ada Lovelace : Scrive il primo programma, diventa così il primo programmatore della storia. 1890, Herman Hollerith : Crea una macchina tabulatrice per il censimento della popolazione. Fonderà successivamente l’IBM. 1936, Alan Turing : padre fondatore dell’informatica, costruisce il primo modello formale della Macchina di Turing per rispondere al terzo quesito di Hilbert. Esistono quindi problemi non risolvibili dalla macchina. 1945, John von Neumann : descrive per la prima volta la cosiddetta architettura di von Neumann, che ancora oggi è valida. 1957/8,Fortran, Lisp, Algol : Nascita di svariati linguaggi di programmazione. 1975, Microsoft : Bill Gates e Paul Allen fondano Microsoft, un’azienda specializzata nello sviluppo software. 1976, Apple : Steve Jobs e Steve Wozniak fondano Apple con lo scopo di rivoluzionare il mondo dei pc. 1989, Tim Berners-Lee, WWW : Prende vita l’idea del World Wide Web con l'obiettivo di condividere automaticamente e velocemente le informazioni tra scienziati, università e altre istituzioni. Nel 1991 viene pubblicato il primo sito Internet, sempre ad opera di Tim Berners- Lee. 1990 : Corsa allo sviluppo di browser, motori di ricerca e applicazioni che usano il web. 2000 : Periodo di espansione, della nascita dei social media e della comunicazione online. 2010 : Sviluppo delle intelligenze artificiali, del machine learning, del cloud computing e lo sviluppo di tecnologie mobile.

Adesso : Sviluppo dell’IoT(Internet of Things), rivoluzione della Blockchain, quantum computing ed estremi passi avanti nell’intelligenza artificiale.

Codifica dell’informazione

Data un’informazione, si necessita di un modo condiviso(possibilmente univoco) di rappresentarla: ● Immagini: ❖ Insieme di colori ❖ Scala di grigi ● Suoni: ❖ Insieme di note

Sistema binario

Il sistema binario è un sistema di numerazione che utilizza solo due simboli per rappresentare i numeri(solitamente 0 e 1). Il sistema binario è la base del sistema di numerazione utilizzato in informatica ed elettronica, dove ogni informazione digitale viene codificata in sequenze di 0 e 1, chiamati bit. Un vero e proprio sistema binario è stato sviluppato per la prima volta nel XIX secolo dal matematico e filosofo inglese George Boole, che si basò sui precedenti lavori di Leibniz. Il sistema binario è stato poi ulteriormente sviluppato da Claude Shannon, un matematico americano, negli anni ‘40 e ‘50 del XX secolo. Shannon ha dimostrato che qualsiasi tipo di informazione può essere rappresentata utilizzando un sistema binario, aprendo la strada alla creazione di dispositivi di elaborazione dati digitali.

Sistema esadecimale

La codifica esadecimale è un sistema di numerazione che utilizza 16 simboli , solitamente le cifre da 0 a 9 e le lettere dalla A alla F , per rappresentare i numeri. Questo sistema viene

Con N numero di bit, x il valore da rappresentare.

Completamento a 2

Anche in questa codifica, i l bit significativo rappresenta il segno, con valore 0 che rappresenta i numeri interi positivi e 1 quelli negativi. I restanti n-1 bit rappresentano il modulo: ● Per i numeri positivi, il modulo corrisponde al valore binario indicato. ● Per i numeri negativi, si complementano/invertono tutti i bit, poi si somma 1. Ne consegue che i numeri positivi saranno rappresentati in maniera identica al completamento a 1, e lo zero otterrà un’unica rappresentazione. Come sempre è necessario definire il numero di bit con i quali verrà rappresentato il numero. Nello specifico, con questa codifica avremo i seguenti limiti: Con N numero di bit, x il valore da rappresentare.

Offset/Eccesso-k

Questa codifica prevede di aggiungere un valore costante(chiamato valore di bias) al valore assoluto del numero da rappresentare, prima di convertirlo in binario. In questo modo, il bit del segno non è necessario, poiché il valore di bias assicura che tutti i numeri rappresentati saranno positivi. Ad esempio, consideriamo la codifica in eccesso 3 del numero 7. Il valore di bias è 3, quindi dobbiamo aggiungere 3 a 7, ottenendo 10. Convertiamo quindi 10 in binario, ottenendo 1010, che rappresenta il numero 7 nella codifica in eccesso 3. Come sempre, è necessario definire il numero di bit con i quali verrà rappresentato il numero. Nello specifico, con questa codifica avremo i seguenti limiti. Con N numero di bit, x il valore da rappresentare.

Rappresentazione numeri non interi

Finora ci siamo occupati di rappresentare solo i numeri interi. Dobbiamo, però, prendere in considerazione anche i numeri con la virgola.

Virgola fissa

La scelta più semplice ricade sulla notazione a virgola fissa. Con questo metodo, dato il numero di bit disponibili per la rappresentazione, si decide quanti rappresentano la parte intera e quanti la parte decimale. A questo punto, tutto funziona come i numeri binari in un solo modulo. Le potenze di due della parte decimale continueranno a decrescere a partire dell'esponente

Virgola mobile

La rappresentazione in virgola mobile è un modo per rappresentare numeri reali in binario basato sulla notazione scientifica, in cui un numero è scritto come prodotto di un mantissa e una potenza di 2, il tutto moltiplicato per un segno (+/-). Il segno è rappresentato da un singolo bit(il primo), che indica se il numero è positivo o negativo. L’esponente è rappresentato da un certo numero di bit e indica la posizione della virgola rispetto alla mantissa. In particolare, l’esponente rappresenta il valore dell’esponente decimale in base 10 ed è solitamente in notazione offset/eccesso-k. La mantissa rappresenta il valore del numero in sé. La mantissa è spesso normalizzata, ovvero deve iniziare sempre con un bit 1 ed essere seguito da una sequenza di bit che rappresenta la parte frazionaria del numero. La rappresentazione in virgola mobile ha la possibilità di rappresentare numeri molto grandi o molto piccoli, ma ha una precisione limitata. Inoltre, il numero di bit utilizzati per rappresentare l’esponente e la mantissa può variare a seconda della precisione richiesta e della rappresentazione utilizzata.

Overflow

In informatica, il termine overflow indica una situazione in cui un calcolo produce un risultato che supera la capacità di rappresentazione del sistema utilizzato per il calcolo stesso. In altre parole, si verifica un overflow quando il risultato di un’operazione matematica supera il valore massimo che può essere rappresentato nel sistema utilizzato. Ad esempio, su un sistema che utilizza 8 bit per rappresentare gli interi con la codifica modulo e segno, i valori rappresentabili sono compresi fra - 127 e +127. Se proviamo ad

Digitalizzazione

Il mondo che ci circonda può essere descritto in termini di grandezze fisiche come la temperatura, la pressione, la velocità, la posizione, l’immagine e il suono. Per rappresentare queste grandezze, è possibile utilizzare due tipi di segnali: ● Analogici ● Digitali Normalmente, le grandezze a cui siamo abituati sono continue.

Segnale analogico

Un segnale analogico è una rappresentazione continua di una grandezza fisica. Ad esempio, una forma d’onda audio analogica descrive la pressione dell’aria in funzione del tempo, in modo continuo. Un’immagine analogica può essere rappresentata da una superficie continua, dove la posizione di ogni punto corrisponde alla luminosità o al colore di quell’area dell’immagine. La temperatura su un termometro è l’ esatto punto in cui si ferma il liquido.

Segnale digitale

Il segnale digitale, invece, rappresenta una grandezza fisica mediante un insieme di numeri discreti, cioè una serie di valori numerici distinti il cui successore è definito. Ad esempio, un segnale audio digitale rappresenta la pressione dell’aria mediante un insieme di valori numerici registrati a intervalli regolari. Un’immagine digitale può essere rappresentata da un insieme di pixel, ciascuno dei quali rappresenta un valore numerico che indica la luminosità o il colore del pixel. La temperatura può essere un valore numerico a due cifre letto su un display. La differenza principale tra i segnali analogici e digitali è la loro rappresentazione. I segnali analogici sono rappresentati in modo continuo , mentre i segnali digitali sono rappresentati in modo discreto. Un aspetto importante è la manipolazione dei segnali. I segnali analogici sono suscettibili a variazioni di qualità durante la manipolazione, come ad esempio l’effetto del rumore, della distorsione e dell’attenuazione del segnale. I segnali digitali, al contrario, possono essere elaborati in modo preciso, utilizzando algoritmi di elaborazione digitale,senza compromettere la qualità. I segnali digitali possono essere memorizzati e trasmessi in modo più efficiente rispetto ai segnali analogici. I segnali digitali digitali possono essere compressi e decompressi, il che consente di ridurre la dimensione del file e accelerare la trasmissione senza perdita di qualità. Al contrario, i segnali analogici richiedono spesso una trasmissione in tempo reale e una maggiore larghezza di banda per trasmettere la stessa quantità di informazione.

Nella tecnica, conversione di grandezze analogiche in informazioni digitali, effettuata mediante un dispositivo, detto digitalizzazione o convertitore analogico-digitale. La digitalizzazione è il processo di conversione che, applicato alla misurazione di un fenomeno fisico, ne determina il passaggio dal campo dei valori continui a quello dei valori discreti. La digitalizzazione è il processo di conversione di informazioni o dati analogici in formato digitale, in cui le informazioni vengono rappresentate sotto forma di numeri binari(0 e 1). Questa rappresentazione binaria consente alle informazioni di essere manipolate, elaborate e trasmesse in modo più efficiente rispetto ai segnali analogici. In sintesi, la differenza tra analogico e digitale sta nella modalità di rappresentazione del segnale. In un sistema di registrazione analogico, il suono viene catturato su una superficie fisica, come un disco in vinile, sotto forma di onde sonore continue. Nel momento in cui il suono viene riprodotto, la forma d’onda originale viene ricostruita dalla superficie fisica e riprodotta in modo continuo. In un sistema di registrazione digitale, il suono viene invece campionato e convertito in un formato digitale. In questo processo, il suono viene catturato a intervalli regolari e la forma d’onda viene approssimata a una serie di numeri. Questi numeri vengono quindi salvati come file digitale e possono essere riprodotti da un sistema informatico.

Quantizzazione

Nel processo di digitalizzazione, la quantizzazione è il processo di approssimazione di un segnale analogico continuo a un segnale digitale discreto. La quantizzazione consiste nell’assegnare un valore numerico discreto al valore continuo di un segnale analogico in un determinato istante di tempo. Questo avviene tramite la suddivisione del range di valori possibili del segnale analogico in intervalli discreti di ampiezza uguale, chiamati "livelli di quantizzazione”. E’ importante tenere presente che la quantizzazione introduce un errore di quantizzazione, ovvero la differenza tra il valore del segnale analogico originale e il valore digitale approssimato. L’errore di quantizzazione può causare una perdita di informazioni e una degradazione della qualità del segnale digitale.

Campionamento

Il campionamento è il processo di cattura del segnale analogico a intervalli regolari di tempo , noto come frequenza di campionamento. La frequenza di campionamento determina la qualità della rappresentazione digitale del segnale analogico. La frequenza di campionamento, espressa in Hertz (Hz), rappresenta il numero di campioni acquisiti per ogni secondo di tempo. La frequenza di campionamento deve essere scelta in modo tale da poter riprodurre il segnale originale con una buona precisione, ma senza eccessivo spreco di memoria. Il numero di pixel che viene acquisito durante la scansione dell’immagine dipende dalla risoluzione dell’immagine, ovvero della quantità di dettagli che si vuole catturare. Maggiore è la risoluzione dell’immagine, maggiore sarà il numero di pixel acquisiti e maggiore sarà la

  1. Comunicazioni : gli algoritmi di compressione risultato fondamentali per la trasmissione di informazioni attraverso le reti di comunicazione, in quanto consente di ridurre la quantità di informazioni da trasmettere. Di conseguenza vengono ridotti e ottimizzati i tempi di trasmissione e il consumo di banda.
  2. Multimedia : la compressione dei dati è fondamentale per la gestione dei contenuti multimediali, come immagini, video e audio. Consente, infatti, di ridurre la dimensione dei file, diminuendo la quantità di memoria richiesta per la loro archiviazione e migliorando la loro fruizione.
  3. Archiviazione : la compressione consente di ridurre la dimensione dei file di archiviazione, riducendo la quantità di memoria richiesta per la loro conservazione. Ciò consente, a parità di dimensione del supporto, di archiviare maggiori quantità di dati.
  4. Analisi dei dati : la compressione può essere d’aiuto per semplificare l'analisi di grandi quantità di dati. Aggregando e riducendo la dimensione delle informazioni, possono essere ridotti i tempi di elaborazione e migliorare la scalabilità dell'analisi.
  5. Sicurezza : la compressione può essere utilizzata per aumentare la sicurezza di informazioni crittografate, rendendo la crittografia meno vulnerabile a certi tipi di attacco. Infatti, la compressione tende a rimuovere le ridondanze all’interno dei dati e dell’informazione, riducendo così la possibilità di riconoscere pattern all’interno dell’informazione cifrata.

Lossless

La compressione lossless è una tecnica di compressione dati che non comporta la perdita di parti di informazione originale durante la fase di compressione/decompressione. In altre parole, la compressione lossless cerca di ridurre le dimensioni del file rimuovendo e isolando i dati ridondanti senza intaccare la qualità finale dell’informazione trattata. Gli algoritmi di compressione lossless cercano di identificare pattern ripetitivi nei dati per sostituirli con codici più brevi. In questo modo, la quantità di informazioni viene ridotta senza alcuna perdita di informazioni. Di conseguenza, una volta decompressi, i dati finali saranno esattamente gli stessi dei dati iniziali.

Vantaggi Svantaggi

Nessuna perdita di dati Minore efficienza Sicurezza Maggiore complessità

Lossy

La compressione lossy è una tecnica di compressione dati che prevede l’eliminazione di dati che non contribuiscono significativamente al risultato finale. In pratica, la compressione lossy può portare alla perdita di parte dell’informazione originale durante la fase di compressione/decompressione dei dati che la rappresentano, andando a deteriorare l’informazione originale.

Gli algoritmi di compressione lossy lavorano cercando di identificare le parti di dato che possono essere rappresentate in modo approssimato, evitando però di perdere molte informazioni. Ciò può ridurre significativamente la dimensione dei dati e quindi il tempo di trasmissione o l’occupazione di spazio di archiviazione.

Vantaggi Svantaggi

Maggiore efficienza Perdita di informazioni Adatto per alcuni tipi di dati Limitazioni Non reversibile Esempi di algoritmi di compressione: ● Run-length encoding (lossless) ● Dictionary/Substitution encoding(lossless) ● Deflate/Inflate(lossless) ● Discrete cosine transform/DCT(lossy)

Run-length encoding(RLE)

Il metodo di compressione Run-length encoding(RLE) è una tecnica di compressione lossless che cerca di ridurre la quantità di dati da memorizzare rappresentando le ripetizioni di simboli in una sequenza di dati. Questo metodo di compressione è particolarmente utile per le sequenze di dati in cui un singolo simbolo si ripete molte volte consecutivamente, ad esempio in immagini in bianco e nero o in dati audio in cui un suono viene ripetuto per un certo periodo di tempo. RLE analizza la sequenza di dati e sostituisce le ripetizioni di simboli con una coppia di numeri: il simbolo e il numero di volte in cui il simbolo appare consecutivamente nella sequenza. Per esempio, la sequenza A A A B B C C C C C potrebbe essere compressa in 3A 2B 5C. L'algoritmo RLE è semplice e veloce da implementare, e non richiede molte risorse di elaborazione. Tuttavia, la compressione RLE può essere inefficace su dati non ripetitivi, o su dati che presentano solo poche ripetizioni, e in alcuni casi può anche aumentare la dimensione dei dati se non vi sono sequenze ripetute.

Dictionary coder

L'algoritmo di compressione Dictionary coder utilizza un dizionario di sequenze di dati già incontrate (o comunque in uso) all'interno del file da comprimere. Inizialmente il dizionario contiene solo una serie di simboli singoli (ad esempio i singoli caratteri di un testo), ma poi vengono aggiunte sequenze di dati più lunghe man mano che l'algoritmo analizza il file da comprimere. L'algoritmo Dictionary coder rimpiazza poi le sequenze di dati ripetute nel file originale con delle etichette che fanno riferimento alle sequenze salvate nel dizionario. Le sequenze nel file da comprimere vengono sostituire con l'etichetta corrispondente. In questo modo,

Elenco non esaustivo dei formati audio:

Formato Lossy/Lossless/Entrambi

MP3 Lossy AAC Lossy WAV Lossless FLAC Lossless OGG(container) Entrambi

Elenco non esaustivo dei formati video:

Formato Lossy/Lossless/Entrambi

MPEG-4/MP4 Lossy AVI Entrambi FLV Entrambi Alcuni formati possono essere sia lossy che lossless a seconda delle impostazioni di compressione utilizzate. Inoltre, alcuni formati possono supportare diverse varianti di algoritmi di compressione, con differenti livelli di perdita di informazione.

Crittografia

La crittografia è la pratica di proteggere informazioni sensibili attraverso l’uso di algoritmi matematici che trasformano i dati originali in una forma illeggibile, nota come testo cifrato. L’obiettivo della crittografia è garantire che solo le persone autorizzate possano accedere e comprendere le informazioni sensibili. Le tecniche di crittografia utilizzate oggigiorno, infatti, sono spesso basate su problemi che riteniamo essere difficili (o addirittura impossibili) da risolvere in una quantità di tempo “accettabile”. La crittografia risulta essere una parte essenziale del mondo che ci circonda, in quanto trova svariati campi di applicazione, come ad esempio: ● Protezione di dati sensibili ● Garanzia dell’integrità dei dati ● Firma digitale ● Identificazione e autenticazione La crittografia è utilizzata sin dall’antichità per proteggere informazioni soprattutto di carattere militare. Data la scarsa capacità computazionale dell’epoca, che spesso si limitava all’intuito e all’intelletto degli esseri umani, questi algoritmi risultano spesso molto semplici da “rompere”.

La "rottura" di un algoritmo crittografico si riferisce alla capacità di decifrare un messaggio cifrato senza conoscere la chiave di cifratura utilizzata. In pratica, è l'abilità di svelare il messaggio originale senza possedere le informazioni necessarie per farlo, come la chiave di decifrazione o il metodo di cifratura utilizzato. La scitala è una tecnica di crittografia utilizzata dagli Spartani nel V secolo a.C. per proteggere le loro comunicazioni militari. La Scitala era un bastone cilindrico su cui veniva avvolta una striscia di pergamena, sulla quale veniva scritto il messaggio in modo trasversale. Solo coloro che avevano un bastone simile potevano decifrare il messaggio avvolgendovi intorno alla pergamena. Per rompere questa tecnica è sufficiente avvolgere la pergamena attorno a due piccoli bastoni e continuare a distanziarli finché non compaiono parole di senso compiuto. Risulta quindi molto semplice e poco dispendioso leggere i messaggi cifrati con questa tecnica. Il cifrario di Cesare è un metodo di crittografia utilizzato da Giulio Cesare per proteggere le sue comunicazioni militari. Si tratta di un cifrario a sostituzione monoalfabetica, dove ogni lettera dell'alfabeto viene sostituita con un'altra lettera a una distanza fissa, detta "passo" o "scostamento".

Brute force attack

L'attacco brute force è una tecnica di attacco informatico utilizzata per violare un sistema di crittografia mediante la prova di tutte le possibili chiavi di cifratura, una per una, fino a trovare quella corretta. L’attaccante prova ogni possibile combinazione di chiavi finché non riesce a trovare quella giusta per decifrare il messaggio cifrato. Questo tipo di attacco può richiedere molto tempo e risorse computazionali, ma è ancora utilizzato per violare sistemi crittografici con chiavi deboli o troppo corte. Il cifrario di Vigenère utilizza una password per cifrare il testo in chiaro. La chiave viene ripetuta per tutta la lunghezza del testo in chiaro e viene utilizzata per cifrare ogni singolo carattere in modo diverso, a seconda della posizione nella chiave.

Crittoanalisi

La crittoanalisi è la disciplina che studia i metodi e le tecniche per analizzare e rompere i sistemi crittografici, al fine di ottenere informazioni protette senza conoscere la chiave di cifratura corrispondente. La crittoanalisi si occupa di individuare le vulnerabilità nei sistemi di crittografia, scoprire le chiavi di cifratura, decifrare i messaggi criptati e violare la sicurezza dei dati.

Crittografia moderna

Dopo aver visto come la crittografia sia stata sviluppata nel tempo, ci focalizziamo sulla crittografia moderna, sviluppatasi grazie agli sviluppi matematici e tecnologici della prima metà del secolo scorso. Le due principali tecniche presenti oggigiorno si dividono in due categorie: ● Crittografia simmetrica ● Crittografia asimmetrica

La decryption è il processo di convertire dati cifrati, noti come ciphertext, in dati originali o leggibili, chiamati plaintext, utilizzando una chiave crittografica e un algoritmo di decifratura. In sostanza, è l'operazione inversa della encryption. Perché il processo di decryption sia applicabile devono valere alcune condizioni: ● L’algoritmo di encryption deve essere noto ● L’algoritmo di encryption deve essere invertibile ● Bisogna essere in possesso della chiave di decryption

One Time Pad

One Time Pad è un metodo di crittografia estremamente efficace che prevede l’utilizzo di una chiave (segreta) della stessa lunghezza del plaintext per codificare l’informazione. Come dice il nome stesso, questa chiave deve essere utilizzata una sola volta. È stato dimostrato come, sotto determinate condizioni, questo metodo sia inattaccabile. Le condizioni affinché questo metodo realizzi veramente la perfect secrecy sono le seguenti: ● La chiave deve essere lunga almeno quanto il plaintext ● La chiave deve essere generata in maniera perfettamente casuale ● La chiave non deve mai essere riutilizzata nè per intero, nè in parte ● La chiave deve essere mantenuta completamente segreta Il funzionamento è il seguente: ● Generazione della chiave(lunga quanto il plaintext) ● Cifratura del plaintext utilizzando l’operazione di XOR tra la chiave e il plaintext La procedura di encryption ed decryption sono algoritmicamente molto semplici, in quanto, data la chiave, basta mettere in XOR quest’ultima con il plaintext. Nonostante a livello teorico questo metodo sia molto potente, si deve scontrare con le limitazioni che trova nella realtà: ● Generazione di numeri realmente casuali ● Scambio della chiave stessa ● Chiave estremamente lunga ● Eliminazione reale della chiave dopo l’uso

Crittografia simmetrica

La crittografia simmetrica è un tipo di crittografia che prevede l'utilizzo di una singola chiave per cifrare e decifrare i dati. Quindi, la stessa chiave viene utilizzata sia dal mittente che dal destinatario per proteggere e accedere ai dati cifrati. La chiave utilizzata per cifrare i dati deve essere mantenuta segreta, in quanto la sua divulgazione ad un terzo soggetto potrebbe compromettere la sicurezza dei dati. La crittografia simmetrica è solitamente utilizzata per proteggere grandi quantità di dati, ad esempio file di grandi dimensioni, in quanto la sua implementazione è meno complessa rispetto alla crittografia asimmetrica. Tuttavia, la gestione delle chiavi può essere un problema se il numero di utenti che necessitano di accedere ai dati è elevato. Inoltre, la

chiave deve essere trasmessa in modo sicuro dal mittente al destinatario, altrimenti un terzo soggetto potrebbe ottenere la chiave e accedere ai dati protetti.

Cifratura

  1. Generazione di una chiave segreta : Inizialmente, il mittente deve generare una chiave segreta, che sarà utilizzata sia per la cifratura che per la decifratura del messaggio.
  2. Cifratura del messaggio : il mittente utilizza la chiave segreta per cifrare il messaggio originale. Il processo di cifratura trasforma il testo in chiaro in un testo cifrato, rendendolo incomprensibile a chiunque non abbia la chiave segreta.
  3. Invio del messaggio cifrato : il mittente invia il messaggio cifrato al destinatario.

Decifratura

  1. Ricezione del messaggio cifrato: il destinatario riceve il messaggio cifrato del mittente.
  2. Decifratura del messaggio: il destinatario utilizza la stessa chiave segreta utilizzata dal mittente per decifrare il messaggio. Il processo di decifratura trasforma il testo cifrato in testo chiaro.
  3. Lettura del messaggio decifrato: il destinatario legge il messaggio decifrato.

Crittografia simmetrica

Vantaggi Svantaggi

Velocità Scambio di chiavi Efficienza Gestione delle chiavi Sicurezza Difficoltà nell’argomento della chiave Implementazione semplice Non adatta per la crittografia a lungo termine Alcuni esempi di algoritmi di crittografia simmetrica includono: ● Data Encryption Standard(DES) ● Advanced Encryption Standard(AES) ● ChaCha

DES

DES (Data Encryption Standard) è un algoritmo di cifratura simmetrica a blocchi utilizzato per proteggere i dati. È stato sviluppato negli anni '70 dal National Institute of Standards and Technology (NIST) e utilizza una chiave di cifratura di 64 bit (effettivi sono 56 in realtà). L'algoritmo DES opera su blocchi di dati di 64 bit e utilizza una serie di trasposizioni e sostituzioni per cifrare i dati. L'algoritmo utilizza una chiave di 56 bit, ma in realtà la chiave effettiva utilizzata è di 64 bit, poiché ogni ottavo bit viene utilizzato per il controllo di parità.

Vantaggi Svantaggi

Scambio sicuro delle chiavi Prestazioni inferiori Firma digitale Chiavi lunghe Sicurezza migliore Maggiore complessità Suscettibile ad attacchi In generale, la crittografia asimmetrica è una scelta migliore per i casi in cui la sicurezza è la massima priorità. Tuttavia, per le applicazioni che richiedono prestazioni elevate o chiavi più brevi, la crittografia simmetrica può essere una scelta migliore. Alcuni esempi di algoritmi di crittografia asimmetrica includono: ● RSA ● DSA(Digital Signature Algorithm) ● Diffie-Hellman

RSA

Il protocollo RSA è diventato, nel tempo, quasi sinonimo di crittografia a chiave asimmetrica data la sua ampissima diffusione. RSA ci permette di scambiare messaggi in maniera sicura tra due utenti. RSA e basato sull'aritmetica modulo n. L’aritmetica in modulo sfrutta il concetto di classi di resto per “raggruppare” più numeri, diversi fra loro, in classi di equivalenza. La notazione x mod n significa semplicemente il resto di x quando viene diviso per n; quindi, ad esempio, 19 mod 5 = 4. È importante tenere sempre presente che un messaggio non è altro che un insieme di bit, e ogni insieme di bit può essere rappresentato in modo univoco da un numero intero. Pertanto, cifrare un messaggio con RSA è equivalente a cifrare il numero intero unico che rappresenta il messaggio. RSA è formato da due componenti strettamente correlati fra loro: ● La scelta della chiave pubblica e della chiave privata ● L’algoritmo di crittografia e decrittografia La sicurezza di RSA si basa sul fatto che non esistono algoritmi noti per fattorizzare rapidamente un numero, in questo caso il valore n nei suoi fattori primi p e q. Se si conoscessero p e q, allora, dato il valore e (pubblicamente noto), si potrebbe facilmente calcolare la chiave segreta, d.

Diffie-Hellman

Il protocollo di Diffie-Hellman è un algoritmo a chiave pubblica che permette lo scambio sicuro di una chiave segreta tra due parti in una rete non sicura. Il protocollo si basa sulla difficoltà computazionale del problema del logaritmo discreto.

Il pregio principale del protocollo Diffie-Hellman è che consente lo scambio di una chiave segreta su una rete pubblica senza dover inviare la chiave stessa, rendendo più difficile la decifrazione dei messaggi. Il protocollo è relativamente facile da implementare, ma è anche vulnerabile ad attacchi di tipo man-in-the-middle, in cui un attaccante intercetta e modifica la comunicazione tra le due parti per ottenere la chiave segreta. Fasi:

  1. Scelta dei parametri : le due parti (Alice e Bob) devono scegliere due parametri pubblici, un numero primo p e un generatore g. Questi due parametri non devono necessariamente essere segreti, ma possono essere condivisi pubblicamente sulla rete.
  2. Generazione delle chiavi pubbliche : sia Alice che Bob generano una chiave pubblica, calcolando g elevato alla loro chiave privata (un numero casuale), modulo p. Questa chiave pubblica viene quindi inviata all'altra parte.
  3. Scambio delle chiavi pubbliche : Alice e Bob scambiano le loro chiavi pubbliche tra loro.
  4. Calcolo della chiave segreta : Alice e Bob usano le chiavi pubbliche ricevute per calcolare la chiave segreta. In particolare, Alice calcola g elevato alla sua chiave privata, elevato alla chiave pubblica di Bob, modulo p. Allo stesso modo, Bob calcola g elevato alla sua chiave privata, elevato alla chiave pubblica di Alice, modulo p. Poiché entrambi condividono lo stesso p e lo stesso g, questo calcolo produce lo stesso risultato per entrambi, ovvero la chiave segreta.
  5. Utilizzo della chiave segreta : la chiave segreta può quindi essere utilizzata da entrambi per cifrare e decifrare i messaggi scambiati tra loro. Questa non è mai stata inviata sulla rete, né in chiaro, né cifrata.

Generazione pseudocasuale di numeri

La generazione di numeri pseudocasuali è un problema fondamentale per la crittografia. Un algoritmo di crittografia sicuro richiede numeri casuali, ma i computer non sono in grado di generare numeri realmente casuali. Invece, utilizzano algoritmi matematici per generare numeri pseudocasuali, che sembrano casuali, ma in realtà sono deterministici e prevedibili. L'obiettivo è creare una sequenza di numeri che sembrano casuali, ma che possono essere riprodotti da chi conosce l'algoritmo utilizzato ed una determinata chiave. Se la chiave di generazione dei numeri pseudocasuali viene scoperta, un attaccante può usare questa conoscenza per decifrare i messaggi cifrati. Per garantire la sicurezza crittografica, i numeri pseudo-casuali devono avere determinate proprietà, come la casualità , l’ uniformità e l’ indipendenza.

Generatore pseudocasuale di numeri-LCG

L’algoritmo LCG(linear congruential generator) è un metodo per generare numeri pseudocasuali. Si basa su una semplice equazione matematica che, dato un valore di partenza chiamato seme(o seed), genera una serie di numeri che sembrano casuali. La funzione che genera i numeri è la seguente: