Monday 21 July 2014

tNotice: è semplice e (non) funziona

Non ce n'è. Anche ammettendo che tNotice possa avere valore legale, sul versante tecnologico è indifendibile. E siccome nessuno ne ha ancora parlato per quello che è veramente, ovvero una tecnologia, ho deciso di farlo io.

Ecco un commento all'approfondimento tecnico che trovate sul loro sito (archiviato). Non entro nel merito delle considerazioni legali (non sono ferrato in materia) e salto direttamente ai tre paragrafi "tecnici". Pronti?

Sicurezza

Un aspetto centrale per un servizio che mira ad avere valore legale. Infatti:
tNotice utilizza nuove sofisticate tecnologie sia per la sicurezza del processo comunicativo che per la sicurezza dell’utente. Tra esse il nuovo algoritmo di crittografia SHA-7, più veloce e più sicuro di qualsiasi altra tecnologia di criptazione dei dati oggi conosciuta.
Criptazione. Certo! È già stato detto più e più volte: SHA è una algoritmo di hash, lo dice pure il nome: Secure Hash Algorithm. Non è un algoritmo di criptazione, qualsiasi cosa volessero intendere con quella parola (non mi soffermo sull'aspetto linguistico). Una buona funzione di hash è uno dei vari ingredienti di un crittosistema, ma da sola non cifra un bel niente.

Notare poi questo wild claim: "più veloce e sicuro di qualsiasi altra tecnologia". Sono curioso di sapere da dove salti fuori questa affermazione fuori contesto. Più veloce di cosa? In quali condizioni? Le stesse affermazioni fuori contesto saltano fuori nel post facebook (archiviato) in cui SHA-7 veniva annunciato al mondo:
Allo stato attuale ill metodo SHA-7, risulta essere l'algoritmo crittografico più sicuro e rapido nel mondo.
Naturalmente l' SHA-7 aderisce allo standard internazionale "Secure ha Standard" FIPS PUB 180-3 e RFC3174, introducendo una variante che può aumentare le permutazioni fino a 3,628,800 combinazioni di più di SHA-2, ma con un tempo di calcolo di soli 1.644 ms, che è quattro volte più veloce di SHA-2.
Se non avete capito niente non abbiate paura: non vuol dire niente.

Tornando al pezzo citato, una tecnologia non aderisce ad uno standard, o ne è parte o no. Non sono ammesse sfumature. SHA-7 tecnicamente non appartiene nemmeno alla famiglia SHA (che comprende SHA-0, SHA-1, SHA-2 e SHA-3) e comunque non è parte della specifica contenuta nel documento FIPS (che descrive SHA-1 e SHA-2) e nella RFC (per SHA-1) citate nel pezzo sopra, probabilmente nel tentativo di dare una parvenza di autorità al tutto. Non esiste alcun riferimento in letteratura per SHA-7, tantomeno una crittanalisi.

Chi ha una minima idea di come funziona la crittografia moderna, dovrebbe comprendere che questa mancanza è un fatto gravissimo.

Dalle poche informazioni disponibili, pare che SHA-7 non sia altro che uno SHA-1 i cui vettori di inizializzazione sono stati modificati -- peraltro senza alcuna giustificazione teorica. In pratica, potremmo chiamarlo SHA-1-sbagliato. Per questo cocktail/algoritmo mi aspetto un comportamento simile a quello di SHA-1, contro il quale purtroppo esiste già un attacco teorico. Insomma, SHA-1 e lo sbagliato hanno i giorni contati -- motivo per cui sono stati introdotti SHA-2 e SHA-3, del resto.

Per quanto possa avere un'alta considerazione /s del signore dietro SHA-7, dubito fortemente che abbia saputo lavorare meglio di tutti comitati che hanno proposto candidati SHA e della comunità crittografica mondiale che li esamina da anni. Del resto, le sue referenze non menzionano nulla che sia anche vagamente correlato alla crittografia. Non dico un titolo di studio, basta anche una solida esperienza pratica, ma di sicuro non ci si improvvisa crittografi.

Mi spiace, nel mondo della sicurezza informatica there's no trying. Qualsiasi errore, qualsiasi omissione apre un buco potenzialmente fatale. La crittografia è un terreno minato, meglio lasciarlo a chi sa come muoversi. Nessuno dei membri del team tNotice (archiviato) sembra avere competenze specifiche in materia, eppure hanno deciso di reinventare in barba alle best practices. Ecco che sventola una huge red flag. E no, competenze (generiche) di sviluppo web sono solo marginalmente correlate... Per caso vi fareste operare al cuore da un idraulico perché tanto "funziona come la pompa di una lavatrice"? No vero?

Andiamo avanti. A cosa servirebbe questa funzione di criptazione? Ce lo spiegano nel paragrafo successivo:
per proteggere la password dell’utente che con tale tecnologia non viene più salvata e conservata nel sistema.
Se interpreto bene, salvano l'hash (SHA-7 ovviamente) della password invece di salvarla in chiaro. Oh! Benvenuti nel futuro, finalmente, qualcuno che hasha le password! Magari tra 15 anni scopriranno anche il sale, chi lo sa. Sempre che sia questo il significato del paragrafo.

Non è finita!
Se la password non viene salvata non può essere violata, lasciando l’utente libero di scegliere anche una password semplice o breve, più facile da ricordare.
Ugh... nope? Questa affermazione è sbagliata per due motivi: 
  1. qualche informazione deve essere pur salvata, altrimenti come si fa a verificare la password che l'utente inserisce? Ammettiamo che venga salvato lo SHA-7 della password, quanto ci vuole a preparare delle rainbow tables?
  2. Quando la password è semplice, c'è una buona probabilità di indovinarla a tentativi. SHA-7 o meno. 
Diamo loro il beneficio del dubbio e supponiamo che siano adeguatamente attrezzati contro il bruteforcing con rainbow tables, qui stanno comunque confondendo due scenari ben distinti:
  1. attaccante che sottrae il database delle password introducendosi nel server. 
  2. attaccante che forza la password dall'interfaccia web, senza introdursi nel server. 
Eppure, devono essere stati parecchio fiduciosi nella loro tecnologia per non implementare TLS su http://beta.tnotice.com ... tanto ci pensa SHA-7, no?

E per finire: seriamente la funzione di criptazione è il pezzo forte della sicurezza di tNotice? Non implementano audit? Non hanno un threat model? Penso proprio di no, altrimenti lo avrebbero scritto.

Data mining

Il titolo promette bene e il paragrafo non delude le aspettative: non c'è una sola parola che rimandi vagamente al concetto di data mining -- e del resto non si capisce cosa c'entri il data mining con il servizio che offrono. La mia ipotesi? Hanno lanciato delle keyword a caso per dare più importanza alla cosa. Ma non bastava:
tNotice implementa una nuova tecnologia proprietaria per l’estrazione e la navigazione dei dati, utilizzando un nuovo tipo di cache senza scadenza, che si aggiorna in tempo reale solo e quando un dato al suo interno viene modificato.
premesso che non è chiaro a chi e a cosa serva questa "tecnologia di navigazione dei dati", la loro innovativa cache è... una normalissima cache. L'unica cosa che non quadra è la parte del "senza scadenza": visto che non si può avere memoria infinita, dovrà pure essere previsto un meccanismo per rimpiazzare le informazioni quando lo spazio finisce (ad esempio, scartando quelle meno usate o quelle non usate da più tempo).

Non contenti di ciò, si sono veramente superati:
Il risultato è un’esperienza di navigazione sul web ad una velocità fino ad ora mai raggiunta, anche in presenza di connessioni ad internet con pochissima banda disponibile.
Una tecnologia che da sola supera il digital divide presente in Italia per carenza di infrastrutture in banda larga.
Sì certo, magicamente la banda raddoppia, triplica! Addio al digital divide, a cosa serve la fibra ottica quando abbiamo la loro cache?!

Per chi non avesse ancora realizzato, una cache sul server permette di abbattere il tempo di risposta, ovvero il tempo che passa dal momento in cui aprite una pagina web al momento in cui il server inizia ad inviarla. Nella maggiorparte dei casi, questo tempo è trascurabile o almeno nello stesso ordine di grandezza del tempo di trasferimento, ovvero il tempo necessario affinché tutta la pagina sia scaricata. Il tempo di trasferimento dipende sostanzialmente dalla banda a disposizione e nessuna cache sui loro server può abbatterlo. Non si scappa.

Identity recognition

Non penso che sia necessario alcun commento introduttivo:
tNotice utilizza un algoritmo proprietario per l’identificazione dell’utente che, insieme all’interconnessione open-data con la Pubblica Amministrazione, riesce ad identificare al 95% se la persona è reale, la sua cittadinanza, provenienza e residenza, sesso, lingua, oltre a verificare in tempo reale l’effettiva esistenza degli indirizzi email utilizzati, se sono attivi, se vengono utilizzati e come vengono utilizzati, qualsiasi essi siano, in Italia e nel mondo, senza alcun intervento o azione richiesta da parte dell’utente.
mi auguro vivamente che questa tecnologia non esista. La ritengo assolutamente improbabile allo stato dell'arte in materia di identificazione digitale, ma se anche esistesse, diciamo per qualche "ragione di sicurezza nazionale" (come va di moda in questo periodo), spero proprio che non sia open!

Vi immaginate un servizio open data del genere? Il sogno di ogni stalker e serial killer! Comode API pubbliche per recuperare qualsiasi informazione sulle vostre vittime: a chi hanno scritto l'ultima e-mail, dove vivono, dove sono nate etc. Inquietante a dir poco.

E comunque sono curioso di sapere da dove abbiano tirato fuori quel 95% o, meglio, quali siano le caratteristiche del 5% che sfugge all'identificazione.

Conclusione

Anche a voler essere più che comprensivi sulla terminologia approssimativa, il documento è pieno di panzane ed errori grossolani che non fanno sperare nulla di buono riguardo alla qualità del servizio. Insomma, non si tratta di una descrizione in cui "i concetti ci sono, la forma un po' meno". È fuffa.

Cryptico is playing with fire

When I see this kind of things, I cry. I cry hard.

https://github.com/wwwtyro/cryptico/blob/9291ece634d37415e66396d749d38e612d66f935/api.js#L264

Basically, Cryptico is yet another Crypto lib, a collage of existing pieces of software preassembled for simple usage. Fair enough.

Generate RSA keys, encrypt, sign, calculate hashes blah blah. This time, with a twist:

  1. Deterministic RNG, seeded with a SHA-256 hash of the passphrase. Same passphrase? Same RSA key!
  2. No PKCS#1 padding, but RSA exponent 3 hardcoded. To be fair, the bundled library does support padding, but the API documentation never says that it exists or that you should use it. If you market yourself as "an easy-to-use encryption system", you'd better do optimal default choices from a security point of view. See this nice Cr.SE post.
  3. RSA keys and encrypted data serialized with a never-seen-before format. To be fair, this is not critical, altough it complicates cooperation with other crypto libraries.   

Dear author, I am not implying that you are a bad coder, you might be very skilled for what I know, but please, leave crypto code to people who know how to handle it. PLEASE.

Note: I contacted Cryptico author and gave him a month to either fix the issues or clearly mark the code as experimental/insecure. I did not receive any feedback.