Newsgroup: it.comp.lang.visual-basic
Titolo: [OT?] Tecniche di crittazione

Crittazione? A me piace di più criptazione (o l'antico e fumettistico Nembo
Kid, moderno Superman, mi condiziona?)
Il topic sulle localizzazioni (beh, se proprio vogliamo dare a tutti i costi
una connotazione tecnica) di Google e altri recenti sulla crittazione di
informazioni, mi pongono una questione.
Premetto che non conosco la tecnica di hash che pare che vada per la
maggiore. Credo anche che con due o tre colpi di Goggle si trovi tutta la
documentazione sul metodo. Bene, dato questo e dato che ogni tecnica di
crittaggio debba disporre, per avere un senso, la corrispondente di
de-crittaggio, stavo considerando:
Per complicata che sia la tecnica, è evidente che, oltre la stringa
crittata, si debba disporre della sua chiave di decodifica, nota
all'utilizzatore o compresa (pur se nascosta) nella stringa codificata.
Ho riprovato una mia Function di crittaggio che consente di camuffare ogni
peso da 0 a 255 per un numero qualsiasi di caratteri. Il risultato, un pelo
più lungo dell'originale (ci sbatto dentro, camuffando pure quella, la
chiave di decodifica), è ogni volta e casualmente diverso e produce,
prevalentemente, caratteri diversi da A-Z (era stato studiato per rendere
"illeggibili" i parametri che seguono un URL).
La domanda è questa: Se la tecnica (per esempio, appunto, hash) è
universalmente nota, in quanto pubblica, perchè mai quel tipo di protezione
è (o tale viene considerato) più sicuro di quello (complicato, cervellotico
e sufficientemente perverso) che posso inventare io, tu o un altro? Che ne
pensate?

 pensate?
Ovviamente il mio, il tuo o quello di un altro non lo si racconta a nessuno.

 nessuno.
Semplice. Perché con le chiavi hash non puoi risalire alla chiave che ha
generato l'hash
stesso, mentre è garantito che una stessa chiave dato uno stesso algoritmo
di hashing darà
sempre lo stesso hash.
Con le funzioni hash però può capitare - a seconda della complessità
dell'algoritmo - che
due chiavi diverse diano lo stesso hash.
Questo viene normalmente chiamato "conflitto" di hash ed i modi per
risolverli sono
essenzialmente 3:
1) Ignorare il problema
2) Implementare un algoritmo che limiti i conflitti( ad esempio non usando
la lunghezza
della stringa come uno dei dati da interpolare )
3) Creare un buffer di output sufficientemente grande per contenere un hash
tale
da rendere i conflitti improbabili.
Andrea

 
La' fuori potrebbe esserci qualcuno "complicato, cervellotico e 
sufficientemente perverso" quanto te ... :-)
Inoltre tutti gli studiosi di crittografia affermano che sono piu' 
sicuri i sistemi di crittazione che possono essere sottoposti a 
peer-review. Ci sara' un motivo ...
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 sempre lo stesso hash.
Beh, cosa significa? La funzione di decodifica da qualche parte deve ben
partire, no?
E poi applicare un metodo.
La mia stringa codificata deve subire lo stesso trattamento, ma ha il
vantaggio (non sono presuntuoso, sto facendo pura teoria) che il mio metodo
non è noto...

 peer-review. Ci sara' un motivo ...
Beh, è chiaro che gli studiosi si basano su quanto viene diffuso. Il mio
metodo, o il tuo o quello dell'altro, non è studiato da nessuno. Chi può
dire che, proprio per questo (e, ribadisco, il vero mio dubbio sta tutto
qui) non sia ancor più sicuro?

 
Chi scopre i bachi dei tuoi programmi?
Ovvero, come fai ad essere sicuro che i tuoi programmi sono esenti da 
errori?


 errori?
Un po' io, in fase di test, di più gli utenti. Io so per certo che i miei
programmi (e quelli di chiunque altro) non sono esenti da errori. So per
certo anche che per decodificare una stringa occorre conoscerne il metodo di
codifica e la chiave. Non ti seguo.


Non esattamente.
Ad esempio puoi usare un metodo brute-force, oppure puoi analizzare la 
stringa decodificata e scoprire delle ricorrenze.
Questa e' la mia codifica di una parola: NSRM
Vediamo chi indovina per primo ...


 Vediamo chi indovina per primo ...
Non ci provo nemmeno. Anche perchè, come dicevo, se ti passo la mia dovrei
allegare un file binario.

 Vediamo chi indovina per primo ...
Invece ci provo, indicandoti solo il metodo, dimmi tu se corretto:
+2,-2,+2,-2 ;-)

 e sufficientemente perverso) che posso inventare io, tu o un altro?
Lungo discorso. Se mi mandi in mail un'indirizzo di posta (reale,
non e-mail :-)  ), ti spedisco questo:
http://www.andreamonti.net/it/index/book/codici.htm
Bye, G.


klfmxglcrq!!!
ciao giovane marmotta!


 
http://www.andreamonti.net/it/index/book/codici.htm
Oh, beh, non avrei problemi a mandarti un recapito fisico, ma perchè
spedirmelo?
Potrei comprarmelo, no?! O sono "cose" riservate a voi privilegiati?

 metodo non è noto...
Il tuo metodo si può rilevare con la crittoanalisi, ci sono programmi in
grado di scardinare
protezioni apparentemente molto complicate.
Andrea

 pensate?
I sistemi di crittazione non sono basati sulla segretezza della funzione di
decodifica, ma sulla natura DIFFICILMENTE INVERTIBILE delle funzioni su cui
si basano. Solitamente nel senso della codifica hanno una complessità
polinomiale, nel senso della decodifica hanno complessità esponenziale.
Detto questo, ritengo che per la maggior parte delle applicazioni, sia più
che sufficiente una codifica XOR oppure l'orologio delle Giovani Marmotte.

 spedirmelo?
Te lo spedisce in contrassegno! ;-)


 ciao giovane marmotta!
Vpqnrm hyegnc!
Ciao, vecchio lupo!

 grado di scardinare protezioni apparentemente molto complicate.
Non discuto, ma mi sto chiedendo quanto sia facile o, meglio, se non sia piů
difficile che i metodi documentati.

Nella mia infinita bontà ti faccio un minuscolo esempio di funzione hash.
Non ha la pretesa di essere la migliore possibile, è giusto un esempio, ed è
in pseudo
codice.
Funzione Hash( MiaChiaveStringa )
  Conta numero caratteri dispari
  Conta numero caratteri pari
  Metti in XOR i due valori
  Commento: questo formerà il primo operando
  Fai la media geometrica dei caratteri pari
  Fai la media geometrica dei caratteri dispari
  Metti in Xor il primo operando con la media dei caratteri pari
  Commento: questo è il primo valore
  Metti in xor la media geometrica dei caratteri dispari col primo operando
  Somma il numero dei caratteri pari a quello dei caratteri dispari
  Sottrai il valore ottenuto dallo xor con il valore precedente
  Commento: questo è il secondo valore
  Fai la media dei due valori ottenuti
  Addiziona quest'ultimo alla meta del primo valore + due terzi del secondo
  Commento: questo è il terzo valore
Fine funzione
Da una chiave lunga quanto ti pare hai ottenuto 3 caratteri, ma come fai a
recuperare
la password iniziale sapendo solo quei tre caratteri?
Non hai come fare, visto che in sostanza hai solo un dato, cioè i 2/3 di un
valore che
non puoi determinare.
Ci sei ora?
Ciao
Andrea

 Ci sei ora?
Oh, sì, ma da qualche parte ci deve essere il punto di partenza (chiave e/o
metodo) per la decodifica. No?!
Quindi è corretto dire che, in quel punto e momento, dispongo di tutte le
informazioni per la decodifica. A che è servito, quindi, camuffare/ridurre
la stringa originale? Solo per spezzare le informazioni che girano da quelle
che servono alla decodifica?

 informazioni che girano da quelle che servono alla decodifica?
NONEEEEEEEEEEEEEEEE!!!!!!!!!!!!
Tu non disponi MAI di tutti gli elementi per la decodifica
_contemporaneamente_ .
Tutto quello che hai in ogni momento sono solo valori CALCOLATI alla cui
origine non
puoi risalire!!!!!!!!!
E' per quello che non si puň decodificare!
Chiaro adesso?
Andrea

 Potrei comprarmelo, no?! O sono "cose" riservate a voi privilegiati?
Perché 1) costava 32 KLire, 2) io NON l'ho pagato ;-)  3) non so
se si trova facilmente in libreria, oltre che ordinandolo alla Apogeo,
che fino a Gennaio è ferma, e 4) se te lo mando poi diventi un
privilegiato anche tu :-)
Comunque se ti interessa ci dovrebbe essere qualcosa qui:
http://www.apogeonline.com/libri/00483/allegati/doc/algoritmi/
Ah, ci sono anche le FAQ dei gruppi sci.crypt e sci.crypt.research,
molto interessanti, ma lunghissime (sono spezzate in 10 post)
e in alcuni punti estremamente tecniche.
Bye, G.

 Bye, G.

 Chiaro adesso?
Va bene. Quello che chiarissimamente capisco dalle tue letterali parole è
che si codifica una stringa senza avere la possibilità di decodificarla.
Bene. Invento una codifica a prova di bomba: Codifico ogni stringa a "".

Grazie di tutto.

 
Ho l'impressione che stiate parlando di cose diverse ...
L'hash e' come una firma:
abcdef "hashato" diventa 13579
Tu firmi la stringa con lo hash.
Se io eseguo lo hash su quella stringa otterro' sempre 13579.
Se la stringa e' diversa otterro' un hash diverso (non sempre come si e' 
detto).
Un utilizzo puo' essere questo:
-io e te usiamo lo steso algoritmo di hash e la stessa parola chiave
-ti mando un messaggio ed anche il suo hash
-tu esegui l'algoritmo con la parola chiave sul messaggio e se ottieni 
lo stesso hash sei sicuro che il messaggio te lo ho mandato io ...
non sono esperto di crittografia e non mi potete citare per danni per 
cio' che ho appena scritto ... :-)
ciao


 Ho l'impressione che stiate parlando di cose diverse ...
Temo anch'io, almeno negli scopi del post iniziale: Tradurre e codificare
una cosa in modo abbastanza sicuro e poterla decodificare al momento del suo
utilizzo. Qui pare si parli di ottenere un risultato che dimostri la
validità di una stessa fonte, non di poter risalire alla fonte stessa dal
risultato codificato.

 Kid, moderno Superman, mi condiziona?)
Cut
Caro amico mio....son cose alte per noi!
Nel senso che sta roba, è roba per matematici....
nel senso che ci possiamo stare un anno e fare una cosa inattaccabile per
noi e  per il 99% della popolazione mondiale !
Però quell'1% di persone preparate ci ride in faccia!
Prendi (esco dallo specifico) una rivista come Linus che ha una rubrica (in
fondo) chiamata Wutki...beh fanno giochetti con le parole ed i numeri che
leggo affascinato come leggerei una bibbia originale scritta da Mosè in
persona...ossia non ci capisco un acca!
Attualmente quello che resiste agli attacchi ANCHE di criptoanalisi è il
Blowfish...lo hanno crakkato solo una volta perchè c'era un bug
nell'algoritmo con una serie particolare di numeri...sistemato il bug per
ora regge!
Non lo dico io eh....vai qui c'è il sorgente di tutti gli algoritmi (ove di
pubblico dominio) e la disamina degli attacchi alla criptatura...
Intendiamoci bene...che significa attacco?
Significa che tu mi dai un testo criptato ed io te lo rimetto in chiaro...!
Il sito:
http://www.enricozimuel.net/algoritmi.asp?Cat=1
secondo me ti conviene usare uno di questi algoritmi....a meno che tu non
sia un matematico...anzi un cripto-matematico!
Ti lascio con:
A25872A2DE99BAA00ADC112554A57BA36709A1A2ABF78D9DFCB7C36FDA6AD154
(l'ho scritto in Hex perchè i Char in post si potrebbero corrompere)
Generato con algoritmo Blowfish da VB:.....
Indizi:
a) Pw di 7 Car (provi un brute force?..auguri!)
b) NON resisterebbe ad un attacco base dizionario!...sopratutto dizionario
nomi NG writers!
;o)

 ogni stringa a "".
Allora.
Quando tu vuoi criptare un testo in chiaro, cosa fai?
1) Scegli un tuo algoritmo di codifica
2) Usi un algoritmo di codifica esistente e "collaudato"
Si pone il problema della chiave.
Se tu usi la chiave direttamente, puoi stare sicuro che i tuoi utenti
renderanno
QUALSIASI algoritmo facilmente attaccabile, perché - si sa - gli utenti
scelgono
sempre password bruttissime e facilmente recuperabili, in quanto
le scelgono CORTE e _sempre_ alfabetiche.
E questo è _MALE_ quando si parla di crittografia.
Puoi poi scegliere di usare un'hash.
In questo caso puoi stare un PO' più tranquillo, perché una
hash puoi farla lunga quanto ti pare, e quindi rendere il lavoro
dell'hacker _MOLTO_ più duro.
Personalmente, io uso una strada un pò diversa :)
Io in genere faccio un passaggio in 4 stadi:
1)  Inserimento di una password
2) Generazione di un "seriale" basato sulla password
3) Generazione di un'hash a partire dal seriale
4) Criptazione del file
Questo ti "garantisce" una _MAGGIORE_ sicurezza, poiché:
1) Questo seriale puoi renderlo alfanumerico
2) Puoi metterci i caratteri che vuoi dentro, e l'hacker
dovrà provare _TUTTI_ i caratteri, con conseguente perdita di tempo.
Poi prendi questo seriale, e generi un hash.
Personalmente non andrei _MAI_ per una criptazione seria con un'hash
al di sotto dei 100 caratteri.
100 caratteri corrispondono a 6400 bit, quindi direi che può bastare...
:))))
Con una chiave di criptazione di questo tipo, qualunque algoritmo
diventa abbastanza più complicato da gestire per un hacker, almeno nel
tentare un attacco a forza bruta.
Ricordati che gli hacker cercano di capire  prima con quale password è stato
_criptato_
il file, non qual'è la password che ha generato la chiave.
Se non ci riescono, provano con attacchi dizionario( spesso risolutivi  )
oppure con attacchi mirati, magari perché sanno come funzionano certe
organizzazioni.
Tutto sta, quindi, all'utente, scegliere una password complicata che non sia
possibile da determinare facilmente con un attacco dizionario.
Ed in Italia siamo ancora _MOLTO_ indietro in quwsto campo,
come anche in Europa.
Ci celiamo dietro ad un vacuo ottimismo che:
1) Nessun hacker sarà interessato ai nostri dati( FALSO! )
2) Cmq la sicurezza degli algoritmi è tale da farci _sentire_ al sicuro
(
FALSOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! )
My 2c,
Andrea

 tentare un attacco a forza bruta.... Ricordati che gli hacker cercano di
capire  prima con quale password
...
[CURIOSITA']
Ma perche' li chiamate Hacker ?
La figura da te descritta sopra , delinea il comportamento di un Lamer
Generico oppure dei Cracker in particolare !
per me la parola Haker rappresenta solo una persona con mente informatica
mooooolto evoluta in genere di pensare e fare tutto cio' che vuole con un pc
!
E' come paragonare un Ingegnere informatico a uno che ha aperto il vb per la
prima volta  e con il Wizard ha fatto un "Hello World"
Secondo me la parola hacker e' troppo generica e troppo spesso usata male
per identificare azioni scorrette da parte di informatici , ecco , a sto
punto io potrei usare allo stesso modo la frase " Uno che ha un pc" al posto
di "Lamer" o di "utente" o di "Programmatore" non credete ?

 pensate?
Perché non è detto che un sistema più perverso, complesso,
ecc... sia anche più sicuro. Pensa che l'unico sistema
*totalmente* sicuro ed *assolutamente* indecifrabile (il
cosiddetto one-time-pad), si basa su un semplicissimo xor tra la
stringa da "nascondere" e la chiave. 
Punti deboli? Sì! La chiave deve essere lunga quanto il
messaggio da codificare (un po' scomodo per messaggi lunghi),
deve essere univoca (non può mai essere riutilizzata) e deve
essere assolutamente casuale.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 credete ?
No.
Buon Natale

 di "Lamer" o di "utente" o di "Programmatore" non credete ?
Che è proprio così...consco tanti ragazzini che si apprestano o si sono
apprestati a fare l'ITIS informatica e le mamme a dire "E' proprio bravo con
il computer!" quando in realtà l'unica cosa che hanno è la
PlayStation...giuro che mi sento male quando sento queste cose...
Ale
---------------------------------------------------
BUON NATALE E FELICE ANNO NUOVO!
MERRY CHRISTMAS AND HAPPY NEW YEAR!

 Buon Natale
Anche a te ^_^
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 <Gigio2K>
Andrea

> Anche a te ^_^
Buon S.Stefano arriviamo al 2003 con questo 3ad ?
