Newsgroup: it.cultura.linguistica.italiano
Titolo: [OT] Unicode

Vista la miriade di post su problemi riguardanti unicode, cerco di 
chiarire il problema una volta per tutte.
 
I caratteri in unicode sono numerati da 0 a 0x10ffff.
In ASCII ogni carattere è un singolo byte (8 bit), ma con unicode questo 
non è più possibile.
E' quindi necessario rappresentare questi valori come una sequenza di byte.
Esistono varie codifiche (= rappresentazioni) tra cui UTF-8 e UTF-16.
Oggi lo standard più usato è UTF-8, ma linguaggi come Java usano lo UTF-16.
 
Questo ha portato alla nascita a schifezze ibride come lo UTF-8 
"modificato". Per es. consideriamo la sequenza
   \xed\xa0\xbd\xed\xb8\x82
apparsa in un post di IdP (\xNN rappresenta il byte NN).
 
Questa non è né UTF-8 standard, né UTF-16, bensì un ibrido: [usare passo 
fisso]
 
  e    d    a    0    b    d
1110 1101 1010 0000 1011 1101
 
  e    d    b    8    8    2
1110 1101 1011 1000 1000 0010
 
Questi sono 2 "caratteri" UTF-8. La sequenza di bit "1110" iniziale 
indica che seguono 3 byte, cioè la codifica è
 
[1110 xxxx] [10xx xxxx] [10xx xxxx]
 
I byte che seguono iniziano sempre con "10" e le "x" contengono 
l'informazione da estrarre. Il resto è meta-informazione (come gli 
header di un msg email).
 
Quindi otteniamo
 
  e     d     a     0     b     d
1110 [1101] 10[10 0000] 10[11 1101]
 
  e     d     b     8      8    2
1110 [1101] 10[11 1000] 10[00 0010]
 
cioè
 
1101 1000 0011 1101
1101 1110 0000 0010
 
Solitamente questi sarebbero due caratteri unicode separati, ma in 
questo caso si tratta di una coppia surrogata di UTF-16!
 
UTF-16 usa normalmente due byte (16 bit, appunto), anche quando ne 
basterebbe uno solo, come per i "caratteri ASCII". Ci sono però valori 
Unicode che richiedono più di 2 byte, come le emoticons che vanno da 
0x1f600 a 0x1f64f. In questo caso, UTF-16 usa una coppia surrogata, cioè 
due sequenze di 16 bit.
Lo schema è questo:
 
   [1101 10xx] [xxxx xxxx]
   [1101 11xx] [xxxx xxxx]
 
Questa è esattamente la forma che abbiamo ottenuto sopra:
 
   1101 10[00 0011 1101]
   1101 11[10 0000 0010]
 
che quindi contiene l'informazione
 
   0000 1111 0110 0000 0010
    0    f    6    0    2
 
Visto che la coppia surrogata si usa solo per valori più lunghi di due 
byte, cioè in [0x10000, 0x10ffff], l'"1" iniziale non viene 
rappresentato, quindi lo riaggiungiamo:
    1f602
 
https://www.isthisthingon.org/unicode/index.phtml?glyph=1F602
 
 
Un sistema UTF-8 standard avrebbe rappresentato 1f602 usando 
direttamente la codifica UTF-8 anziché passare per UTF-16. Facciamolo:
 
    1    f    6    0    2
   0001 1111 0110 0000 0010
 
Per questo ci servono 4 byte quindi la sequenza UTF-8 deve iniziare con 
4 "uno" seguiti da uno 0, cioè "11110":
 
   1111 0xxx  10xx xxxx  10xx xxxx  10xx xxxx
 
Sono 21 bit ma noi ne abbiamo 20 quindi aggiungiamo uno 0 iniziale:
 
    1    f    6    0    2
0 0001 1111 0110 0000 0010
 
In definitiva abbiamo:
 
   1111 0[000]  10[01 1111]  10[01 1000]  10[00 0010]
    f    0       9     f      9     8      8     2
 
che è esattamente la codifica mostrata al link sopra.
 
In parole povere, tutti questi problemi nascono dal fatto che ognuno fa 
un po' come gli pare (v. MS, Oracle, ecc...) e chi scrive software deve 
non solo conformarsi agli standard ma anche ai non-standard e ai vari 
errori commessi da grandi aziende.
 
Aggiungo, come aneddoto, che ultimamente mi sto interessando seriamente 
al mondo del web e ho scritto un MITM proxy per intercettare tutti i msg 
tra browser e server. La parte più delicata è la falsificazione dei 
certificati, necessaria visto il proxy deve far credere al browser di 
essere il server e al server di essere il browser (Cloudflare è molto 
furbo, ma ormai ce l'ho in pugno).
All'inizio ho seguito le RFC (specifiche ufficiali di internet) ma un 
numero non trascurabile di siti web risultavano inaccessibili, così, 
alla fine, mi sono arreso e ho dovuto riparare agli errori degli altri 
nel mio software e ho scoperto che i browser lo fanno da sempre in modo 
per lo più silenzioso.
 
Tra l'altro, ho scoperto che chi costruisce middleware (router 
soprattutto) ha messo controlli troppo stringenti portando a problemi 
piuttosto gravi.
Per es. il protocollo HTTPS non è altro che normale HTTP su una 
connesione TLS criptata. Il browser si connette al server mediante 
connessione TCP normale, poi esegue un handshaking per stabilire una 
connessione TLS e finalmente può comunicare in HTTP.
Il problema è che i router interni a internet hanno iniziato a 
"whitelist"are valori alla cazzo (scusatemi, ma ci sta) e quindi per es. 
il TLS 1.3 deve spacciarsi per TLS 1.2 o addirittura 1.0 perché 
altrimenti viene bloccato.
 
Per evitare ciò, oggi le RFC invitano a inserire campi volutamente 
sconosciuti ma "sintatticamente" corretti all'interno dei vari msg in 
modo che chi costruisce router non possa più fare il whitelisting di 
campi specifici al TLS 1.3 creando poi problemi alle versioni future.
 
Vogliamo parlare poi degli antivirus che bucano i browser (avendo i 
permessi di sistema) per intercettare il traffico aprendo così la strada 
agli hacker? Praticamente, l'antivirus diventa un bel cavallo di Troia.
 
Dovevo restarmente in accademia, altro che, invece ho deciso 
d'interessarmi all'hacking (etico)... Mah... almeno è interessante, ma è 
un mondo di pazzi.
Scusate lo sfogo.
 
-- 
Kiuhnm
 
(che sta scavando un tunnel per superare
  il TLS fingerprinting di Cloudflare)

 browser e server. 
 
Questo sì che è interessante. Vuoi hackerare conti bancari? :D

Quindi, in questo caos, volendo approfittare della tua consulenza 
esperta... a gratis,  cosa ci consigli per la sicurezza? Voglio dire se 
hai qualche dritta che non si trova di solito nei vademecum, al di là 
di non accettare caramelle da sconosciuti, non cadere come perecotte 
nel phishing, non installare la qualunque, non aprire allegati 
inattesi, non usare versioni sw/fw antidiluviane, non fidarsi troppo di 
cineserie iot, usare un doppio fattore di autenticazione per account 
sensibili, non usare la password "pippo" per tutto e non lasciarla 
scritta su post-it, eccetera eccetera.
Come anti-cattivoni per esempio su Win ho il Defender (o come si chiama 
ora) di fabbrica più MBAM pro, e UAC a tutto spiano.
Come modem-router ahimè sto usando un coso technicolor passato da TIM.

> ahimè 
 
O ahimé.
 
https://www.treccani.it/vocabolario/ahime/
 

 
https://www.treccani.it/vocabolario/ahime/
 
 
Io pronuncio ahimè, ma effettivamente, estendendolo ad ahité,
può tornare  :-)

 il problema una volta per tutte.
 
Non certo chiarire ad uno come me, che, su quanto hai poi aggiunto, non 
ci capisco una cippalippa   :D

 Come modem-router ahimè sto usando un coso technicolor passato da TIM.
 
Le cose più importanti sembrano essere:
- tenere il software aggiornato
- non usare vecchi sistemi operativi
- disinstallare software che non si usa
- disinstallare software non più manutenuto
- usare il buon senso
 
Per le password si possono usare i sistemi a password unica tipo KeePass.
Gli ad blocker aiutano.


 d'intelligenza artificiale.
 
 
Sicurezza scarsa, intelligenza da verificare, si potrebbe dire in certi 
casi. Per esempio, disconnettendomi da un servizio online della 
Pubblica ammministrazione con accesso SPID livello 1, leggo: "Logout 
competed successfully"... o forse no, vattelappesca, vedi messaggio qui 
sotto! In effetti *non* mi aveva davvero disconnesso e sono potuto 
rientrare senza fornire credenziali.
 
Global Logout
Status of Global Logout: Logout completed successfully.
 
If the message above indicates success, you have been logged out of all 
the applications and systems that support the logout mechanism.
 
Regardless of the outcome, it is strongly advised that you close your 
browser to ensure that you complete the logout process.

 browser to ensure that you complete the logout process.
 
Prima di fare operazioni bancarie disabilito sempre tutte le estensioni 
installate e ripulisco cache, cookie, ecc..., poi, a operazioni finite, 
ripulisco di nuovo tutto e riabilito le estensioni.
Non c'è da fidarsi tanto.


 Non c'è da fidarsi tanto.
 
Comunque, senza voler assolutamente sminuire l'importanza del debugging 
informatico, l'anello debole spesso è umano prima ancora che 
informatico. Ti chiamano dal numero della banca e pensi che sia la 
banca, invece è il truffatore...

 Scusate lo sfogo.
 
Se oltre a cercare (eticamente) vulnerabilità, vi interessate anche di 
comprendere gli attacchi informatici, posso intuire che ci saranno 
momenti di concitazione pazzeschi

 operazioni finite, ripulisco di nuovo tutto e riabilito le estensioni.
 
non e' sufficiente girare in una "private window" ?
 
In ogni caso da me i cookies se ne vanno tutti a fine sessione del 
browser, e (grazie a una estensione) anche dopo un breve timeout da 
quando chiudo il tab che li aveva generati

 "Grazie!" con nome del lettore che ha scovato l'errore.
 
Il paragone mi lascia allibito, sinceramente.


 non e' sufficiente girare in una "private window" ?
 
Solo se nessuna estensione può girare nella private window e comunque 
potresti aver apportato modifiche ai settaggi. Meglio resettare. In 
Firefox basta usare il Troubleshoot mode (help -> troubleshoot mode). 
Attenzione a scegliere "Restart" e NON "Reset Firefox" però.
Neanche a dirlo, è meglio immettere l'url della banca a mano e poi 
controllare i certificati per scongiurare eventuali man in the middle.


After serious thinking Kiuhnm wrote :

Infatti non era un paragone ma l'idea di estendere ad altri campi un 
meccanismo virtuoso, la "taglia" per chi scova errori. Ovvio che un 
errore in un libro non è la stessa cosa di una falla di sicurezza in un 
software, ma il meccanismo incentivante può funzionare allo stesso 
modo.
L'idea non è neanche originale:
 
Knuth reward checks are checks or check-like certificates awarded by 
computer scientist Donald Knuth for finding technical, typographical, 
or historical errors, or making substantial suggestions for his 
publications. The MIT Technology Review describes the checks as "among 
computerdom's most prized trophies".[1]
...
https://en.wikipedia.org/wiki/Knuth_reward_check
 
 
A volte vale più il riconoscimento che il denaro:
 
Very few of these checks were actually cashed, even the largest ones. 
More often they have been framed and kept as "bragging rights".[5][6]

 controllare i certificati per scongiurare eventuali man in the middle.
 
Nel caso qualcuno scavi un tunnel... non etico! :D


In realtà nell'hacking bisogna prima scovare le vulnerabilità e poi 
costruire gli attacchi veri e propri. Senza una prova che l'attacco 
funzioni veramente non si viene pagati.
 
Comunque dimentica la figura dell'hacker dei film. Fare hacking non 
richiede grandi doti di dattilografia e quello che nei film richiede 5 
minuti nella realtà richiede mesi.



Esatto :)
 
In realtà il tunnel mi serve solo per collegarmi a siti protetti da 
Cloudflare senza un browser.


 minuti nella realtà richiede mesi.
 
 
Tutto corretto. Senza contare che, nella maggior parte dei casi, gli 
hackers hanno successo quando un pirlotto casualmente apre una email che 
non dovrebbe aprire, e poi apre un allegato che non dovrebbe aprire ... 
etc. etc.
Bepe


Se non ti prendono di mira. Se invece ti prendono di mira e sanno il 
fatto loro il discorso cambia completamente.
Se gli vuoi rendere la vita difficile puoi usare qualcosa come Qubes OS, 
ma la sicurezza assoluta non c'è mai.


 la sicurezza assoluta non c'è mai.
 
Ma siete certificati? Tipo "WhiteJar"? :D


Se ti avvali di piattaforme tipo hackerone, il tuo nome appare in una 
leaderboard e più guadagni più sali in classifica. L'hacking a questi 
livelli è come uno sport agonistico. Le certificazioni tradizionali 
dicono poco. Diciamo che la tua posizione in classifica diventa la tua 
certificazione.


 Diciamo che la tua posizione in classifica diventa la tua certificazione.
 
Dall'uscita dell'Hacker Report 2019 due anni fa, la comunità di 
HackerOne è raddoppiata, superando il milione di hacker registrati.
No, dai, non è possibile 8-o

 Cloudflare senza un browser.
 
Sì, sì, dicono tutti così!
;)
(scherzo!)


Visto che chiunque può iscriversi ci sarà tantissima zavorra. Molti sono 
attirati da facili guadagni (che poi non arrivano).
