lunedì 27 aprile 2020

La crittografia


La parola crittografia deriva dal greco kryptòs “nascosto” e graphía “scrittura”, quindi tratta letteralmente delle “scritture nascoste”, ovvero dei metodi per rendere un messaggio non comprensibile a persone non autorizzate a leggerlo.

Tale messaggio si chiama crittogramma e i metodi usati per renderlo “non comprensibile” sono detti tecniche di cifratura.

Un cifrario è un algoritmo utilizzato per eseguire operazioni di cifratura (e decifratura), ovvero la procedura da seguire per rendere oscuro, non comprensibile semanticamente, il messaggio.

Le due tipologie di metodi che vengono applicati in crittografia sono la cifratura e la codifica.
La cifratura lavora sulle lettere "individuali" di un alfabeto. 
La codifica lavora ad un livello semantico più elevato (significato), come può essere una parola o una frase. 
I sistemi di cifratura possono lavorare per trasposizione, o per sostituzione, o una combinazione di entrambi: 
La trasposizione (o permutazione) mescola i caratteri di un messaggio in un nuovo ordine (es. anagramma). 
La sostituzione scambia un carattere con un altro carattere seguendo una regola specifica. 
La combinazione di trasposizione e sostituzione è chiamata cifratura composta. Quest’ultima tecnica è più sicura delle due precedenti.
La crittografia si basa su un algoritmo e su una chiave.
L’algoritmo è costituito dalle regole, seguendo una procedura passo passo, che servono a codificare e decodificare. 
La chiave, combinata con il testo “in chiaro” (non ancora crittografato), passato attraverso l'algoritmo, ci fornisce il testo “codificato”. 
In ogni moderno sistema di crittografia si deve assumere che l'algoritmo sia conosciuto dai potenziali “nemici”, quindi la sicurezza del sistema dipende solo ed esclusivamente dalla segretezza della chiave. 
In ambito informatico, è possibile distinguere tra due tipi di crittografia: la crittografia simmetrica (o a chiave privata) e la crittografia asimmetrica (o a chiave pubblica).

Negli algoritmi a chiave simmetrica, o a chiave privata, la stessa chiave, segreta, è usata sia per la cifratura che per la decifratura del messaggio. Esempi: DES, AES.
Il mittente ed il destinatario del messaggio devono conoscere entrambi la chiave segreta e quindi devono essere in possesso di un sistema sicuro per potersela scambiare senza che questa possa essere intercettata da altri. Il mittente usa questa chiave per la cifratura del messaggio mentre il destinatario la usa per decifrarlo.
Nella crittografia asimmetrica o a chiave pubblica vengono usate due chiavi diverse, una pubblica e una privata, per la cifratura e la decifratura. Esempio: RSA, PGP.
La chiave pubblica è di pubblico dominio ed è utilizzata da chiunque voglia cifrare un messaggio mentre la chiave privata è nota solo al destinatario del messaggio e viene da lui utilizzata per ottenere il testo in chiaro.
Si potrebbe pensare che la crittografia sia nata recentemente in quanto è legata alla sicurezza informatica. Invece questa particolare tecnica affonda le proprie radici in epoche lontane della storia, possiamo arrivare sino alle tribù eremitiche dell’antica Palestina. 
Oggi la crittografia è indispensabile in campo informatico. 
Contro le tecniche di hackering e di phishing in rete si devono utilizzare sistemi crittografici sempre più complessi per assicurare la sicurezza informatica. 
Vediamo ora alcuni dei cifrari che sono passati alla storia.
Il cifrario di Cesare, di tipo monoalfabetico, è uno dei più antichi. 
Ogni lettera del testo in chiaro viene sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell'alfabeto. 
La sostituzione avviene lettera per lettera, scorrendo il testo dall’inizio alla fine. Infatti è detto anche cifrario a sostituzione o scorrimento. Il numero di posti dello scorrimento è la chiave.
Un'evoluzione del cifrario di Cesare è il cifrario di Vigenere, di tipo polialfabetico, nel quale si considera la prima lettera del messaggio e la prima lettera della chiave. Sulla tavola di Vigenère queste due lettere si usano come coordinate cartesiane che individuano rispettivamente la riga che inizia con la prima lettera e la colonna che inizia con la seconda lettera. All’incrocio si trova la lettera da sostituire nel messaggio da cifrare. E poi si procede così per tutte le lettere successive del messaggio.
Per Shannon, il padre della teoria dell'informazione, l'unico cifrario teoricamente inviolabile, ovvero perfetto, è quello che usa una chiave segreta "usa-e-getta" (che non deve essere mai riutilizzata), casuale e lunga quanto il messaggio da cifrare. 
L'esempio perfetto è il cifrario di Vernam, che è un cifrario di Vigenere con una chiave lunga quanto il messaggio da cifrare e di tipo ‘usa e getta’ ovvero utilizzabile una sola volta. 
Questo tipo di sistema viene chiamato One Time Pad (OTP), letteralmente "taccuino monouso”.

Proviamo a fare un'attività pratica e costruiamo con del cartoncino un cifrario di Cesare: si costruiscono due dischi circolari, uno più grande e uno più piccolo, entrambi con un foro al centro ed entrambi suddivisi in 26 spicchi dove scrivere le 26 lettere dell'alfabeto internazionale. Nel foro introduciamo un fermacampioni. Il disco più piccolo, posto sopra, deve poter ruotare su quello più grande, posto sotto. Se lo faccio ruotare di una posizione ottengo il cifrario in chiave 1, di due posizioni in chiave 2 e così via.





NOTA 
Hackering/Hacking: metodi, tecniche e operazioni che servono a conoscere, accedere e modificare un sistema informatico, hardware e software, con utilizzo/accesso non autorizzato. 
Phishing: truffa effettuata su Internet attraverso la quale un malintenzionato cerca di ingannare la vittima convincendola a fornire informazioni personali, dati finanziari o codici di accesso, fingendosi un ente affidabile, usando mezzi per la comunicazione di tipo digitale, es. mail. 
Sniffing: intercettazione passiva dei dati che transitano in una rete informatica.

Date un'occhiata al mio video su youtube:

venerdì 3 aprile 2020

Sequenze, sottosequenze e programmazione dinamica

In questo post parleremo di sequenze numeriche, sottosequenze e programmazione dinamica.
Iniziamo a dare qualche definizione:
Una sequenza numerica è semplicemente una lista di numeri interi.


Esempio:[15,6,12,18,9,8,10,20,8,4,7]
Possiamo definire lunghezza di una sequenza o di una sottosequenza il numero dei suoi elementi.
Quella dell’esempio di partenza è quindi lunga 11 (sono 11 i numeri presenti nella lista).
Una sottosequenza è una lista che contiene una parte degli elementi della sequenza di partenza, posti nello stesso ordine. Semplicemente alcuni elementi vengono eliminati dalla lista di partenza ma, attenzione, tutti gli altri restano nella stessa posizione di partenza!
Alcuni esempi di sottosequenze della lista precedente:
[15,6,12,18,7], [9,8,10, 8,4,7]
Non è invece una sottosequenza della lista precedente la seguente:
[15,18,12,9,8,20,10,4]
perché gli elementi non compaiono nello stesso ordine di quella di partenza (es. 18 e 12 oppure 20 e 10).
Data una sequenza, è poi interessante determinare le sue sottosequenze che hanno proprietà particolari. Quelle comunemente più rilevanti sono le seguenti:

MASSIMA SOTTOSEQUENZA CRESCENTE/DECRESCENTE ovvero la sottosequenza più lunga (strettamente) crescente/decrescente.
'strettamente' significa che non ci sono elementi ripetuti
Di queste sottosequenze possono essercene anche più di una!
NB come già detto, gli elementi devono mantenere lo stesso ordine di quella di partenza! Non dobbiamo riordinarli noi!

Per una sequenza di n elementi esiste un numero di distinte sottosequenze pari all'n-ma potenza di 2. L'algoritmo che permette di risolvere problemi con sequenze e sottosequenze ha una complessità esponenziale.

In informatica la programmazione dinamica è una tecnica di progettazione di algoritmi basata sulla divisione del problema in sottoproblemi e sull'utilizzo di sottostrutture ottimali (es. grafo, matrice…).
Il processo di risoluzione prevede 3 passi:
1. suddividere il problema in sottoproblemi più piccoli;
2. risolvere questi problemi in modo ottimale, utilizzando in modo ricorsivo questo processo a tre passi;
3. usare queste soluzioni ottimali per costruire una soluzione ottimale al problema originale.
La programmazione dinamica si usa quindi nei casi in cui esista una definizione ricorsiva del problema.
L’algoritmo che ne deriva genera un programma di complessità esponenziale a causa del calcolo ripetuto sugli stessi sottoinsiemi di dati da parte delle diverse chiamate ricorsive.
A questo punto sorgono spontanee le seguenti domande: cosa significa algoritmo? E cosa significa ricorsione?
Un algoritmo è un procedimento o programma che risolve un determinato problema attraverso un numero finito di istruzioni elementari, chiare e non ambigue.
Un algoritmo ricorsivo è un algoritmo espresso in termini di se stesso (es. una funzione che richiama se stessa più volte nella sua implementazione).

Questo tipo di argomento non è semplicissimo ma sono sicura che sulle sequenze e sottosequenze numeriche tutti gli amanti della matematica, anche i più piccini, possano sbizzarrirsi nella risoluzione di problemi.
Spero invece di aver stimolato la curiosità dei più grandi con i concetti di algoritmo, ricorsione e programmazione dinamica!

Date un'occhiata al mio video su youtube:

Esercizi con sequenze e sottosequenze

Proviamo a risolvere qualche semplice esercizio su sequenze e sottosequenze.
Nel video del mio canale youtube troverete alcuni semplici problemi svolti su una lavagna interattiva:
https://youtu.be/ErA3LdxSgH4

Dopo aver studiato la teoria e aver visto il video con la mia spiegazione su esercizi semplici, vi consiglio di esercitarvi un pò da soli.

In particolare potrete trovare molti problemi da risolvere sul sito delle Olimpiadi di Problem Solving, ai link sotto riportati.
Per la scuola primaria:
https://www.olimpiadiproblemsolving.it/web/archivio-prove-primaria.php
Per la scuola secondaria di primo grado:
https://www.olimpiadiproblemsolving.it/web/archivio-prove-sec-primo-grado.php
Per la scuola secondaria di secondo grado:
https://www.olimpiadiproblemsolving.it/web/archivio-prove-sec-secondo-grado.php

E' sufficiente che all'interno delle prove dei diversi anni andiate a cercare i problemi sulle sottosequenze.
Buon lavoro!

mercoledì 1 aprile 2020

Esercizi con i grafi


Dopo aver parlato della teoria dei grafi, siamo adesso pronti a risolvere qualche semplice esercizio.
Nel video del mio canale youtube troverete alcuni semplici esercizi svolti su una lavagna interattiva:
https://youtu.be/JmIEAVjg4-M

Dopo aver studiato la teoria e aver visto il video con la mia spiegazione su esercizi semplici, vi consiglio di esercitarvi un pò da soli.

In particolare potrete trovare molti problemi da risolvere sul sito delle Olimpiadi di Problem Solving, ai link sotto riportati.
Per la scuola primaria:
https://www.olimpiadiproblemsolving.it/web/archivio-prove-primaria.php
Per la scuola secondaria di primo grado:
https://www.olimpiadiproblemsolving.it/web/archivio-prove-sec-primo-grado.php
Per la scuola secondaria di secondo grado:
https://www.olimpiadiproblemsolving.it/web/archivio-prove-sec-secondo-grado.php

E' sufficiente che all'interno delle prove dei diversi anni andiate a cercare i problemi sui grafi.
Buon lavoro!




martedì 31 marzo 2020

Cosa è un GRAFO

Un grafo in informatica è una particolare figura geometrica, costituita da dei punti o cerchietti, detti nodi (o vertici), e da segmenti che collegano i nodi, detti archi.
Gli archi possono essere non orientati oppure orientati, e in quest’ultimo caso sono frecce con direzione e verso, ovvero ci dicono da quale nodo partire e a quale nodo arrivare.


Inoltre i grafi possono essere non pesati o pesati e in quest’ultimo caso sopra ogni arco viene riportato un numero (che è appunto il peso).








I grafi si usano in informatica per rappresentare situazioni e risolvere problemi di vario tipo: ad es. per schematizzare un programma, un circuito, una rete di computer, la mappa di un sito. Ma possono anche essere usati per fare l'astrazione di
una carta geografica.




Un grafo in informatica è detto anche albero.
Un albero è un grafo non orientato nel quale due vertici qualsiasi sono connessi da uno e un solo cammino (grafo non orientato, connesso e privo di cicli).
Ad esempio si può usare per schematizzare un albero genealogico oppure dei corsi d’acqua, con sorgente e affluenti.

Come possiamo rappresentare testualmente un grafo?
Ad esempio potremmo descrivere ogni suo arco nel seguente modo:
arco(<nodo1>,<nodo2>,<lunghezza>)

Questa espressione ci dice di un arco quali nodi unisce e quale è il suo peso, o lunghezza.


Esempio: 

arco(n1,n2,3) 

arco(n1,n3,4) 

arco(n3,n4,2) 

arco(n1,n5,8) 

arco(n4,n5,1)







Quale è il percorso più breve per andare da n2 a n5?

E' il percorso 2, nonostante attraversi un numero maggiore di nodi, infatti:

percorso1=3+8=11
percorso2=3+4+2+1=10
Il mondo dei grafi è sicuramente affascinante e infatti, non a caso, è proprio a loro che ho dedicato questo mio blog!

Date un'occhiata al mio video su youtube:

lunedì 30 marzo 2020

L'Architettura di Von Neumann

Chi era Von Neumann? Una delle più grandi personalità scientifiche del XX secolo, nato a inizio '900, ungherese e naturalizzato statunitense. Ha dato enormi contributi nei campi della matematica e dell'informatica.

In particolare ha steso l'architettura dei sistemi di elaborazione.
Cosa è un sistema di elaborazione? Un qualsiasi sistema intelligente in grado di fare calcoli e compiere elaborazioni di vario tipo in modo autonomo, programmabile. Un esempio per tutti: il PC.
Alla base della sua architettura ci sono gli input (periferiche e dati di ingresso), il sistema di elaborazione (composto da CPU, ovvero il processore, e le memorie con cui questo dialoga, sia volatili che di massa), gli output (periferiche e dati di uscita, informazioni elaborate) e i bus di dati, controllo e indirizzo, ovvero i canali di comunicazione attraverso i quali le periferiche di input/output, la CPU e le memorie si scambiano le informazioni ovvero dialogano.
Sul bus dati viaggiano le informazioni vere e proprie, appunto i dati; sul bus degli indirizzi viaggiano gli indirizzi dei destinatari ai quali quelle informazioni sono destinate; sul bus di controllo viaggiano delle informazioni di controllo che fanno capire se le informazioni scambiate sono corrette oppure c'è stata corruzione e c'è quindi necessità di un ripristino dell'informazione corretta.
Questa architettura, rivoluzionaria per l'epoca, è a tutt'oggi ancora valida!

Date un'occhiata al mio video su youtube:


domenica 29 marzo 2020

Il Problem Solving: l'arte, tutta informatica, di risolvere i problemi!

Letteralmente Problem Solving significa 'risolvere problemi' ma cosa c'entra con l'informatica? Noi tutti ci troviamo quotidianamente a risolvere problemi, più o meno complessi, di natura pratica o teorica, a scuola, nel lavoro, quando studiamo, se facciamo sport o semplicemente dobbiamo organizzare un viaggio o una pizza con gli amici.
La capacità di astrazione, di organizzazione, di precisione e ordine, di applicazione logica, è caratteristica dell’approccio informatico alla risoluzione di problemi complessi.
Questo favorisce lo sviluppo del pensiero critico e del pensiero logico-matematico, ovvero più propriamente del pensiero computazionale (termine formalizzato dalla psicologa Americana Jeanette Wing nel 2006): insieme dei processi mentali coinvolti nella comprensione, formulazione, e risoluzione di un problema. L’esecuzione vera e propria del sistema di soluzione ideato dall’uomo può poi anche avvenire tramite l’uso di macchine, se troppo complessa.
Alla base del pensiero computazionale ci sono tre diverse fasi, ripetibili iterativamente:
1. Astrazione: comprensione e formulazione del problema
2. Automazione: espressione della soluzione tramite algoritmi
3. Esecuzione e Analisi: esecuzione della soluzione e valutazione dei risultati
Il pensiero computazionale è l’insieme dei processi mentali usati per modellare una situazione (dati iniziali o input) e specificare i modi (con algoritmi che implementano la soluzione) mediante i quali un elaboratore di informazioni potrà poi operare per giungere alle conclusioni (dati finali o output).
Quante frasi difficili! E quindi? Semplice: saper riconoscere un problema, studiare per risolverlo e trovare una soluzione che poi può anche essere successivamente riusata in altri casi, questo è problem solving. E laddove si parla di risoluzione di problemi effettuata con metodo, implementando algoritmi, allora si parla di informatica!

Il Ministero dell’Istruzione, dell’Università e della Ricerca ogni anno scolastico promuove le competizioni di informatica denominate “Olimpiadi di Problem Solving” (OPS), rivolte agli alunni del primo e del secondo ciclo delle scuole italiane.

Citando testualmente quanto riportato nel sito ufficiale delle OPS, queste competizioni 
"si propongono di:
- stimolare la crescita delle competenze di problem solving e valorizzare le eccellenze presenti nelle scuole;
- favorire lo sviluppo e la diffusione del pensiero computazionale;
- promuovere la diffusione della cultura informatica come strumento di formazione nei processi educativi (metacompetenze);
- sottolineare l’importanza del pensiero computazionale come strategia generale per affrontare i problemi, come metodo per ottenere la soluzione e come linguaggio universale per comunicare con gli altri;
- stimolare l’interesse a sviluppare le capacità richieste in tutte le iniziative attivate per la valorizzazione delle eccellenze;
- integrare le esperienze di coding, makers e programmazione in un riferimento metodologico più ampio che ne permetta la piena valorizzazione educativa."

Personalmente faccio partecipare tutti gli anni i miei studenti a queste competizioni.
Vi riporto il sito ufficiale delle OPS per acquisire maggiori informazioni:

venerdì 27 marzo 2020

Articolo vintage: come è fatto un PC, l'HW e il SW


In questo articolo parliamo di un argomento un pò vintage: come è fatto un PC, quali sono i suoi principali componenti e cosa significa hardware (HW) e software (SW).
Perchè vintage? Perchè è un argomento da Generazione X, quella generazione che, come me, ha contribuito a crearla la tecnologia informatica. I Millennials e la Generazione Z non sono interessati a questo argomento, il PC è pari a un qualsiasi elettrodomestico. Quando chiedo a uno dei miei studenti se è interessato a scoprire come è fatto un PC, cosa c'è dentro, come funziona, quando chiedo di essere un pò curiosi, mi rispondono puntualmente: "Prof. non ci interessa, basta che funzioni!".
Proverò comunque a stuzzicare un pò la curiosità dei nerd, grandi e piccini, che come me amano la tecnologia e nutrono ancora una sana curiosità sul 'com'è fatto'.

E allora iniziamo con un pò di pillole di informatica: PC significa Personal Computer, ovvero calcolatore personale. Personale in che senso? Il calcolatore è divenuto personale dal momento che è diventato di dimensioni ridotte, così da poter entrare nelle case di tutti, con prezzi accessibili. Questa rivoluzione è iniziata nei tardi anni '70 quando Bill Gates e Steve Jobs iniziavano a lavorare nei loro garage... Quindi con 'personale' non intendiamo tanto 'privato' quanto piuttosto 'popolare'.
In un PC l'hardware (abbreviato comunemente con HW) è la parte fisica, elettrica, elettronica, meccanica, che è possibile 'toccare con mano'. La parte software (abbreviato comunemente con SW) è invece la parte logica, l'insieme dei programmi, dal sistema operativo alle app, che permettono di usare l'hardware e ci offrono dei servizi fondamentali nell'uso quotidiano: dalla scrittura di un documento alla navigazione in rete, dalla messaggistica istantanea in stile whatsapp alla stampa di un documento.

Ma vediamo di fare qualche esempio di HW. Nel PC alcune delle parti principali sono: la scheda madre, ovvero quella scheda elettronica che rappresenta il sistema principale, dove sono collocati tutti gli altri sottosistemi e che li fa colloquiare grazie a segnali che trasportano informazioni; il processore (CPU), ovvero il cervello del PC, quel sistema che legge le istruzioni del programma e le esegue, scrivendo e leggendo in memoria; la memoria volatile RAM (Random Access Memory, memoria ad accesso casuale) che viene usata dal processore e si ripulisce periodicamente; la memoria di massa come l'hard disk, dove andiamo a memorizzare tutti i nostri files.


Se parliamo di SW invece, troviamo principalmente il sistema operativo (es. Linux, iOS, Windows), che interagisce con l'HW e fa da tramite con gli utilizzatori e le applicazioni (es. browser web, programmi di scrittura, programmi di messaggistica).
Il SW può essere libero, se non è coperto da copyright, oppure di tipo proprietario, coperto da brevetti e licenza commerciale d'uso.
Le immagini sono volutamente vintage!

Date un'occhiata al mio video su youtube: