Archivi tag: Hack Time

Sul dare fiducia – Trusting Trust –

Ken_Thompson

Ken Thompson

In un mio articolo pubblicato sul numero 3 della rivista “Reputation Today” trattavo del dibattuto tema della catena di fiducia che si deve instaurare fra fornitore e committente al fine di garantire la sicurezza di una qualsiasi installazione informatica. Per chiarire il concetto citavo un famoso attacco informatico ideato da Kenneth Thompson, il “Trusting Trust Attack“.

Il primo a parlare di questo attacco fu lo stesso Thompson, in occasione del discorso che tenne,  nel  lontano 1983, quando ricevette il Turing Award, uno dei più ambiti premi nella comunità informatica. Da tempo girava voce che Ken, che era uno degli inventori dello Unix, uno dei più diffusi sistemi operativi per computer, potesse entrare in qualsiasi sistema a dispetto del fatto che non possedesse le credenziali di accesso. Per verificare ciò erano state messe in atto analisi anche molto approfondite, ma non si era approdati a nulla e Thompson continuava a sorridere sornione da dietro la sua barba incolta.

Quella sera, nella sala gremita di azzimati professori e di barbuti hacker con camicie a fiori alla moda californiana, Ken spiegò come attraverso un processo di apprendimento progressivo il software potesse inglobare informazioni al proprio interno annegandole in livelli più interni rispetto a quelli che una ordinaria analisi normalmente considera. Le affermazioni di Thompson svelavano, finalmente, come anni di ricerche sul codice sorgente dello Unix non avessero dato esito: semplicemente occorreva andare più a fondo. Ken stava dicendo che il software installato su di una macchina non è semplicemente l’ultimo livello di software installato, ma anche la memoria di tutto quanto si è fatto in precedenza.

Per molti anni da quel lontano ’83, l’attacco di Thompson o “Trusting Trust Attack” sarebbe rimasto senza reali ed effettive contromisure e ancora oggi rappresenta un paradigma concettuale con il quale confrontare la sensatezza dei nostri approcci alla sicurezza informatica.

Ma questi trenta e più anni di storia dell’attacco ci fanno capire che il messaggio di Thompson era forse ancora più sottile: egli ci ha infatti rivelato che il software, come la terra che calpestiamo, ricorda le nostre orme, anche se la pioggia sembra cancellarle. Ogni generazione di software porta con se i lasciti e le tracce di quelle precedenti… Thompson sembra dirci: “Attenzione. Chi è senza memoria è, spesso, anche senza protezione.”

Per una approfondita analisi sul “Trusting Trust Attack” si veda l’articolo “Reflections on Trusting Trust” di Ken Thompson.

Pierfrancesco Ghedini

Licenza Creative Commons
Quest’opera è distribuita con Licenza Creative Commons Attribuzione 3.0 Italia.

HP Prime – The missing command

HP Prime Calculator

HP Prime Calculator

The HP Prime Missing Command

Frequently I must inspect the values that a function takes in a list of points or I have to take some samples of the function in a neighborhood of a point X0.

With HP Prime I can enter the function in “Function App” and plot it. I can also inspect the numerical value it assumes by means of NUM, but it isn’t an easy way to do my job…

So I wrote down some lines of code to make my life easier. I write down – my – missing HP Prime command.

My missing command takes three forms: FORCALC, LISTCALC and FORCALCFORM

FORCALC and LISTCALC use the function stored in F0 function variable. in FORCALCFORM you can enter the function you want to sample directly in an input form.

FORCALC takes three parameters in input:

  • X_FR – X FROM Value; the start value of the interval to sample;
  • X_TO – X TO Value; the end value of the interval to sample;
  • X_STEP – the increment to add at each loop.

Usage: FORCALC(1,5,0.2)

Output: FORCALC samples the function stored in F0 variable from X=1,to X=5, 20 times (0.2 increment at each loop)

Source code:

EXPORT FORCALC(X_FR,X_TO,X_STEP)
BEGIN
LOCAL OUT={};
 FOR X FROM X_FR TO X_TO STEP X_STEP DO
 MSGBOX("X="+X+" F0="+F0(X));
 CONCAT(OUT,F0(X))▶OUT;
 END;
RETURN(OUT);
END;

LISTCALC takes one parameter in input:

  • LL – List of value to test. The list contains the points you want to sample.

Usage: LISTCALC({1.0, 1.5, 10.0})

Output: LISTCALC samples the function stored in F0 variable in tree points 1.0, 1.5, 10.0.

Source code:

EXPORT LISTCALC(LL)
BEGIN
LOCAL OUT={};
 FOR I FROM 1 TO SIZE(LL) DO
 MSGBOX("X="+LL(I)+" F0="+F0(LL(I)));
 CONCAT(OUT,F0(LL(I)))▶OUT;
 END;
RETURN(OUT);
END;

FORCALCFORM combines the two tools in one.

It takes no parameters in input, but it shows an input form:

SchermoPrime

In FN you have to input the function to sample, in X_FR the start value of the interval to sample, in X_TO the end value of the interval to sample, in X_STEP the increment to add at each loop. In POINT_LIST you can enter the list of points to sample. If you insert something different from {} in POINT_LIST, X_FR, X_TO, X_STEP will be ignored.

Source code:

EXPORT FORCALCFORM()
BEGIN
// Pay attention, it overwrites the variable F0
LOCAL OUT={};
LOCAL FN="";
LOCAL X_FR=0;
LOCAL X_TO=0;
LOCAL X_STEP=0;
LOCAL POINT_LIST={};
INPUT({FN,X_FR,X_TO,X_STEP,POINT_LIST});
 FN▶F0;
IF SIZE(POINT_LIST)==0 THEN
 FOR X FROM X_FR TO X_TO STEP X_STEP DO
 MSGBOX("X="+X+" F0="+F0(X));
 CONCAT(OUT,F0(X))▶OUT;
 END;
ELSE
 FOR I FROM 1 TO SIZE(POINT_LIST) DO
 MSGBOX("X="+POINT_LIST(I)+" F0="+F0(POINT_LIST(I)));
 CONCAT(OUT,F0(POINT_LIST(I)))▶OUT;
 END;
END;
RETURN(OUT);
END;

Simple and useful.

Enjoy.

You may find interesting also this post: http://informaticasanitaria.it/2014/12/06/hacking-hp-prime/

Pierfrancesco Ghedini

Licenza Creative Commons
Quest’opera è distribuita con Licenza Creative Commons Attribuzione 3.0 Italia.

Braitenberg e il mondo dei veicoli pensanti

 

 

Braitenberg Arena

Braitenberg Arena

Ricordo ancora l’estate del 1984. Fra un esame e l’altro mi recavo spesso in libreria in cerca di novità o solo per trovare una tregua momentanea alla calura. Quasi casualmente scovai un volumetto della Garzanti il cui titolo e il sottotitolo recitavano “I Veicoli Pensanti, Saggio di psicologia sintetica”, l’autore, un certo Valentino Braitenberg, non mi era noto. Lessi in quarta di copertina che era cofondatore e direttore del Max-Plank-Institut fur Biologische Kybernetik a Tubinga. Prometteva bene.

Sfogliai rapidamente il libro: il secondo capitolo si intitolava “Paura ed aggressività” ed era di sole tre pagine, schemi compresi. In esso si trovavano chiaramente illustrati tre modelli di veicoli di una semplicità stupefacente. Come era possibile che strutture così semplici potessero in qualche modo simulare comportamenti così complessi come la paura e l’aggressività animale, meno che meno l’aggressività umana, ammesso che esistesse una differenza.

Ero colpito e incuriosito. A quei tempi era assai di moda la discussione fra i fautori della cosiddetta IA Forte – Intelligenza Artificiale Forte – contrapposti a coloro che davano una interpretazione debole della IA. Gli uni – i fautori della IA forte – teorizzavano la possibilità che entità sintetiche potessero arrivare ad avere comportamenti intrinsecamente intelligenti, mentre i sostenitori della IA debole sostenevano che le entità sintetiche potevano solo simulare comportamenti intelligenti.

Ma non mi risultava che nessuno avesse mai detto che ciò sarebbe stato semplice.

Ricordo che lessi il volumetto tutto d’un fiato e tanto mi colpì che mi ripromisi di mettere mano al saldatore, non appena ne avessi avuto la possibilità, e di costruire con le mie mani un paio di veicoli.

Il playground

Sono passati trent’anni e non ho mai costruito un veicolo di Braitenberg saldatore alla mano, ma ho più volte riletto il suo volumetto, convincendomi sempre più che la semplicità, non è una qualità necessariamente in antitesi con la profondità. Credo, tuttavia, che solo i grandi riescano a giungere, talvolta, ad una sintesi così mirabile. Valentino Braitenberg, scomparso a Tubinga nel 2011, può essere annoverato fra di essi perché ci ha lasciato, oltre alle sue ricerche, anche un esempio e un monito prezioso quanto il rasoio di Occam: tutto il suo lavoro sembra infatti esortarci a non aver paura di cercare soluzioni semplici, perché esse spesso sono le più vere.

A tanti anni di distanza ho comunque trovato il tempo di lavorare un po’ sui suoi veicoli e confesso che lo stimolo principale che mi ha convinto a spendere un po’ del mio tempo è stata ancora la convinzione che la semplicità sia un valore.

Penso che lo sforzo fatto da Apple, in questi ultimi tempi, per sviluppare un linguaggio di programmazione che sia al contempo moderno ed espressivo, ma anche semplice ed intuitivo sia assolutamente degno di nota. Non solo, sono rimasto molto impressionato dal connubio fra il nuovo linguaggio SWIFT e un ambiente di esecuzione degli script che Apple chiama Playground.

In un playground si possono eseguire script anche complessi, ma con un elevato livello di interazione: è possibile visualizzare i valori che assumono le diverse variabili ed è possibile modificare il codice in diretta senza ricompilazioni o noie di altro tipo.

Non potevo non realizzare un qualche prototipo dei veicoli di Braitenberg in un ambiente così stimolante. Lo spirito sperimentale delle intuizioni dello studioso altoatesino, a mio avviso si sposa magnificamente con l’ambiente altamente interattivo e intuitivo messo a disposizione da Apple.

Ecco quindi un playground Braitenberg.playground, liberamente scaricabile, con il quale poter giocare e che, forse, vi farà anche un po’ pensare.

Buon divertimento.

Riferimenti utili a Valentino Braitenberg e ai suoi veicoli

http://en.wikipedia.org/wiki/Valentino_Braitenberg

http://en.wikipedia.org/wiki/Braitenberg_vehicle

Riferimenti ad Apple SWIFT ed esempi di playgrounds

https://developer.apple.com/swift/resources/

Video su Youtube che dà indicazioni su come eseguire il playground

http://youtu.be/e28lfn6rpa8

PG.

Licenza Creative Commons
Quest’opera è distribuita con Licenza Creative Commons Attribuzione 3.0 Italia.