Discussione:
VB & Crittografia
(troppo vecchio per rispondere)
Ottomano Nicola
2003-12-15 21:22:47 UTC
Permalink
Ho creato un algoritmo di crittografia in VB.
Vorrei sapere fino a che punto è sicuro (voi siete mille volte più esperti
di me nel campo) e a quanti bit è la crittografia (ancora non ho capito da
dove si calcolano).
La password in teoria può essere lunga fino a 2 miliardi di caratteri, ma
nel programma è "autolimitata" a 64 caratteri.
Avrete forse capito che in crittografia sono un mezzo niubbo.
Vi posto il codice che ho creato:


'Crittatura dati da inviare

Public Function CrittaDati(Stringa As String, Password As String) As String
Dim i As Long
Dim z As Integer
Dim Carattere, SommaPass As Integer
Dim StringaCritt As String

StringaCritt = ""
SommaPass = 0
For i = 1 To Len(Password)
SommaPass = SommaPass + Asc(Mid(Password, i, 1))
If SommaPass > 255 Then
SommaPass = SommaPass - 255
End If
Next


i = 1
z = 1
Do While i < Len(Stringa) + 1
If z > Len(Password) Then z = 1
Carattere = CInt(Asc(Mid(Stringa, i, 1))) + CInt(Asc(Mid(Password, z,
1))) + CInt(SommaPass)
If Carattere > 255 Then
Carattere = Carattere - 255
End If
StringaCritt = StringaCritt & Chr(Carattere)
z = z + 1
i = i + 1
Loop

CrittaDati = StringaCritt
End Function

'Decrittatura Dati Ricevuti

Public Function DecrittaDati(Stringa As String, Password As String) As
String
Dim z As Integer
Dim i As Long
Dim Carattere, SommaPass
Dim StringaDecritt As String

SommaPass = 0
For i = 1 To Len(Password)
SommaPass = SommaPass + Asc(Mid(Password, i, 1))
If SommaPass > 255 Then
SommaPass = SommaPass - 255
End If
Next

i = 1
z = 1
Do While i < Len(Stringa) + 1
If z > Len(Password) Then z = 1
Carattere = CInt(Asc(Mid(Stringa, i, 1))) - CInt(Asc(Mid(Password, z,
1))) - CInt(SommaPass)
If Carattere < 0 Then
Carattere = 255 + Carattere
End If
StringaDecritt = StringaDecritt & Chr(Carattere)
i = i + 1
z = z + 1
Loop

DecrittaDati = StringaDecritt
End Function


Il programma che critta i files invece potete scaricarlo, con i sorgenti
sotto licenza GPL, dal sito comune di VB www.it-lang-vb.net

Si chiama "FileSuite - Utilità Files"

bye
--
Esistono 10 tipi di persone: chi conosce il binario e chi no

web: http://www.nicolaottomano.it
Ottomano Nicola
2003-12-15 21:24:34 UTC
Permalink
ah dimenticavo. prima di crittare faccio un base64.

bye
--
Esistono 10 tipi di persone: chi conosce il binario e chi no

web: http://www.nicolaottomano.it
Lapo
2003-12-16 15:27:00 UTC
Permalink
Ottomano Nicola wrote:

| Ho creato un algoritmo di crittografia in VB.
| Vorrei sapere fino a che punto è sicuro (voi siete mille volte più esperti
| di me nel campo) e a quanti bit è la crittografia (ancora non ho capito da
| dove si calcolano).

Se il mio VB non è troppo arrugginito direi che quello che hai fatto è
un cifrario di Vigénère.

| La password in teoria può essere lunga fino a 2 miliardi di caratteri, ma

Un cifrario di Vigénère si può facilmente "sconfiggere" usando una
tecnica nota fin dal rinascimento (il primo testo che ne parla in modo
completo è stato scritto a Leon Battista Alberti, architetto nonché
crittanalista per il papato).

| nel programma è "autolimitata" a 64 caratteri.

Se la password fosse stata lunga quanto il testo in chiaro (e totalmente
casuale, e utilizzabile una sola volta) il cifrario di Vigénère sarebbe
diventato un cifrario di Vernam: l'unico cifrario esistente con
dimostrazine matematica di sicurezza.

Purtroppo i requisiti sulla password sono molto stringenti: se è più
cora o è usata anche solo due volte diventa irrimediabilmetne debole.
(ricade insomma nei casi "rotti fin dal rinascimento")

| Avrete forse capito che in crittografia sono un mezzo niubbo.

Non è questione di essere niubbi: più che altro nessuno al mondo è
capace di "inventare" un buon cifrario senza prima aver studiato e
praticato crittografia per tanti anni; da questo punto di vista siamo
tutti niubbi.
Gli stessi crittografi "professionisti" fanno ancora tanti errori.

Morale della favola: non usare mai un algoritmo che non sia "sotto
torchio" da parte della comunità dei crittografi da almeno qualche anno.

Altro problema è l'implementaizone: anchese in un ipotetico cifrario
"perfetto" è facilissimo renderlo "un colabrodo" per piccoli bug di
implementaizone.

Se ti interessa fare della critotgrafia "seria" ti consiglio di usare il
cifrario Rindael (standard AES - Advanced Encryption Standard), esistono
implementazioni in numerosi linguaggi, VB incluso:

Il sito ufficiale
<http://www.esat.kuleuven.ac.be/~rijmen/rijndael/index.html>
linka questa come possibile implementazione VB:
<http://www.esat.kuleuven.ac.be/~rijmen/rijndael/rijndaelvb.zip>

| Il programma che critta i files invece potete scaricarlo, con i sorgenti
| sotto licenza GPL, dal sito comune di VB www.it-lang-vb.net

Se l'algoritmo per crittare è quello che hai postato ti prego di
avvertire fin dalla descrizione l'utente della debolezza dell'algoritmo,
è vero che la licenza GPL ti toglie in teoria da ogni problema, ma non è
mai bello se qualcuno ti denuncia perché i suoi dati "crittati" sono
stati letti 0=)

Lapo

- --
L a p o L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
Ottomano Nicola
2003-12-16 16:35:30 UTC
Permalink
Innanzitutto grazie per il link che mi hai postato.
Vorrei specificare (per rendere partecipi anche coloro che non conoscono VB)
ciò che fa il mio algoritmo:

1-Somma i caratteri Ascii della password e ne ottiene uno solo (se la somma
supera i 255 ritorna a 0 e così via)
2-Somma al testo in chiaro la password
3-Somma al testo ottenuto la somma dei caratteri ascii

Per esempio

pippo 'testo in chiaro
pluto 'password

In ascii (a fianco ho tradotto in caratteri stampati)

112 105 112 112 111 + pippo
112 108 117 116 111 + pluto
054 054 054 054 054 = 66666
--------------------------
023 012 028 027 021 ???.§

Credi quindi che l'algoritmo sia molto vulnerabile?
Mi vergogno di pensare che mi hanno "scardinato" l'algoritmo già dal
rinascimento.. datemi il tempo di nascere almeno! :)

Cmq questo algoritmo (e relativo programma) li ho creati come tesina d'esame
di maturità (insieme all'algoritmo di codifica di huffmann, ma quella è
un'altra storia..) quindi mi servivano solo come esempi. (Ma mi riprometto
di avvisare chi scarica il mio programma).

Inoltre vorrei chiederti:
Ho un algoritmo Blowfish a 64Bit per VB.
E' abbastanza sicuro? (te lo chiedo perchè implementarlo nella mia
applicazione sarebbe una cosa praticamente immediata).

bye
--
Esistono 10 tipi di persone: chi conosce il binario e chi no

web: http://www.nicolaottomano.it
quaqo
2003-12-16 18:00:56 UTC
Permalink
Il Tue, 16 Dec 2003 17:35:30 +0100, Ottomano Nicola ha scritto:
[...]

E` molto simile a Vigénère... (invece delle varie cifrature
monoalfabetiche si sommano i valori ASCII).

Da quanto leggo nel sorgente (se anche il mio VB non e` arrug-
ginito) la password viene riutilizzata ciclicamente...

Quindi provando con la stringa `pippo topolino pippo', la pas-
sword verra` usata come `plutoplutoplutopluto'

Cioe`:

112 105 112 112 111 032 116 111 112 111 108 105 110 111 032 112 105 112 112 111 +
112 108 117 116 111 112 108 117 116 111 112 108 117 116 111 112 108 117 116 111 +
054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 =
----------------------------------------------------------------------------------
023 012 028 027 021 198 023 027 027 021 019 012 026 026 197 023 012 028 027 021

Il problema e`, come ti sarai accorto, che in questo modo, stes-
se parole,vengono crittate in modo uguale, se poste in posizioni
`particolari'... Cioe` ad una distanza multipla della lunghezza
della chiave (len(pluto)=5 e il secondo pippo inizia in posizio-
ne 15).

La crittoanalisi di Babbage (IX secolo) permette di decifrare il
crittogramma grazie a questa `falla'...

Saluti,
Federico
--
On the Net/MSN: quaqo <***@despammed.com> [X.509 available] ,''`.
Linux Reg. User #263663/NEW Machine: #216144 (Debian Sarge/SID) : :' :
On the Web: http://www.quagliata.eu.org - My GPG Key:0x5539D8E4 `. `'
On ICQ: 48618109 - On Jabber: ***@jabber.org/@jabber.linux.it `-
Ottomano Nicola
2003-12-16 19:40:56 UTC
Permalink
azz!

(l'espressione si commenta da sè) :-)
--
Esistono 10 tipi di persone: chi conosce il binario e chi no

web: http://www.nicolaottomano.it
Lapo
2003-12-16 21:17:23 UTC
Permalink
quaqo wrote:
| 112 105 112 112 111 032 116 111 112 111 108 105 110 111 032 112 105
112 112 111 +
| 112 108 117 116 111 112 108 117 116 111 112 108 117 116 111 112 108
117 116 111 +
| 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054 054
054 054 054 =
|
-
----------------------------------------------------------------------------------
|[023 012 028 027 021]198 023 027 027 021 019 012 026 026 197[023 012
028 027 021]
|
| La crittoanalisi di Babbage (IX secolo) permette di decifrare il
| crittogramma grazie a questa `falla'...

Babbage non mi ricordo, ma la tecnica descritta qualche secolo prima da
Leon Bttista Alberti era circa: trovare tutte le ripetizioni (come ad
esempio quei due "[023 012 028 027 021]" di cui parla quaqo) e farne il
massimo comun divisore: probabilmente sarà la lnghezza della chiave.

A quel punto, metti che la chiave è di 5 caratteri, fai l'analisi delle
frequenze su tutti i primi caratteri, poi su tutti i secondi... etc. etc..

Ovviamente per ognuna delle 5 "classi" applicherai la tecnica base
dell'analisi delle frequenze e via... (in breve: confronti la frequenza
"campionaria" dei simboli trovati e la frequenza "media" dell'itailano o
altre linghe, un po' come su "a simbolo uguale lettera uguale" della
setitmana enigmistica).

BTW: non ti preoccupare del fatto che il tuo algoritmo sia stato
"rotto", sperimetnare è l'unico modo per imparare
e ricorda che un attacco al tuo algoritmo non è mai (o almeno non
dovrebbe esserlo!) un attacco alla tua persona, perché anche i grandi
sbagliano quindi non c'è nessuna vergogna nel farlo ;-)
ogni cosa va benissimo finché è per divertirsi, per le cose "serie"
ovviamente conviene usare algoritmi "testati", ma quello è chiaro...

Ottomano Nicola wrote:
| Ho un algoritmo Blowfish a 64Bit per VB.
| E' abbastanza sicuro?

No, non lo è.
Mi spiego: blowfish è un buon algoritmo (nel senso che non si trovano a
oggi "scorciatoie" per aggirarlo) ma 64 bit di chiave oggi come gogi
sono irrimediabilmetne pochi. Anche la "strada lunga" (forza bruta
ovvero rovare le chiavi una ad una) con 64 bit di chiave è "fattibile".
BTW: dato che devi usare qualcosa di serio, usa AES e non blowfish.
e con chiave da almeno 128 bit.
e la chiave non è la password ma è l'hash (ripetuto MOLTE volte) della
password stessa.
(in caso ne parliamo in più dettaglio in un altro thread)

- --
L a p o L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
quaqo
2003-12-16 21:58:20 UTC
Permalink
Il Tue, 16 Dec 2003 22:17:23 +0100, Lapo ha scritto:

| La crittoanalisi di Babbage (IX secolo) permette di decifrare il
Post by Lapo
| crittogramma grazie a questa `falla'...
Babbage non mi ricordo,
Era quello delle macchine delle differenze, gli automi per il
calcolo poi ripresi da Alan Touring per le bombe migliorate. :)
Post by Lapo
ma la tecnica descritta qualche secolo prima da Leon Bttista Alberti
(snip)

Questo e` proprio quello che riporta lo studio di Babbage !!! Per
quanto ne so io (per sicurezza ho controllato anche sulla nostra
adorata Wikipedia :)) fu lui a decifrare Vigenere, non Alberti.

Quest'ultimo fu il precursore dal quale Vigenere prese ispirazione:
un suo trattato, del quale ora mi sfugge il nome, suggeriva di uti-
lizzare -durante la scrittura del crittogramma- due (o piu`) cifra-
ture monoalfabetiche.

Per fare questo in modo veloce aveva anche costruito il famoso
`disco cifrante', che si vede ancora in giro... :)

Dove hai saputo del contrario?

(snip)
Post by Lapo
(in caso ne parliamo in più dettaglio in un altro thread)
Mi aggrego e propongo anche un piccolo dibattito: Rijandael vs
Serpent? :)

Saluti,
Federico
--
On the Net/MSN: quaqo <***@despammed.com> [X.509 available] ,''`.
Linux Reg. User #263663/NEW Machine: #216144 (Debian Sarge/SID) : :' :
On the Web: http://www.quagliata.eu.org - My GPG Key:0x5539D8E4 `. `'
On ICQ: 48618109 - On Jabber: ***@jabber.org/@jabber.linux.it `-
Ottomano Nicola
2003-12-16 22:28:24 UTC
Permalink
Non posso far altro che ringraziarvi per l'interessamento al mio problema.
Se vi serve una mano su VB postate su it.comp.lang.visual-basic
Sono sempre a disposizione per suggerimenti [dovrei essere il vostro
equivalente nel mio campo...;-) ] .

Nicola Ottomano

PS L'algoritmo cmq mi serve per crittare alcuni dati di magazzino prima di
spedirli via winsock. Non sono dati sensibili ma la sicurezza non è mai
troppa...
--
Esistono 10 tipi di persone: chi conosce il binario e chi no

web: http://www.nicolaottomano.it
quaqo
2003-12-16 22:45:46 UTC
Permalink
Il Tue, 16 Dec 2003 23:28:24 +0100, Ottomano Nicola ha scritto:

[...]
Post by Ottomano Nicola
PS L'algoritmo cmq mi serve per crittare alcuni dati di magazzino prima di
spedirli via winsock. Non sono dati sensibili ma la sicurezza non è mai
troppa...
Sicuramente, per VB, esiste qualche libreria che implementa
AES o altro in modo decente, se ti va d'andare sul sicuro,
altrimenti potresti provare a scrivere tutto te... :)

Basta scaricarsi la documentazione... E` matematica in mag-
giorparte.

Saluti,
Federico
--
On the Net/MSN: quaqo <***@despammed.com> [X.509 available] ,''`.
Linux Reg. User #263663/NEW Machine: #216144 (Debian Sarge/SID) : :' :
On the Web: http://www.quagliata.eu.org - My GPG Key:0x5539D8E4 `. `'
On ICQ: 48618109 - On Jabber: ***@jabber.org/@jabber.linux.it `-
Lapo
2003-12-17 00:46:53 UTC
Permalink
quaqo wrote:

| Sicuramente, per VB, esiste qualche libreria che implementa
| AES o altro in modo decente, se ti va d'andare sul sicuro,
| altrimenti potresti provare a scrivere tutto te... :)

Ho detto Rijndael invece di AES, ma rileggiti il mio primo reply ;-)

| Basta scaricarsi la documentazione... E` matematica in mag-
| giorparte.

Beh, oddio, non direi "matematica", alla fine è un cifrario simmetrico,
non ha 'sta gran matematica...

- --
L a p o L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
quaqo
2003-12-17 08:45:13 UTC
Permalink
Post by Lapo
| Sicuramente, per VB, esiste qualche libreria che implementa
| AES o altro in modo decente, se ti va d'andare sul sicuro,
| altrimenti potresti provare a scrivere tutto te... :)
Ho detto Rijndael invece di AES, ma rileggiti il mio primo reply ;-)
... :P
Post by Lapo
| Basta scaricarsi la documentazione... E` matematica in mag-
| giorparte.
Beh, oddio, non direi "matematica", alla fine è un cifrario simmetrico,
non ha 'sta gran matematica...
Beh... Apposta... Non e` difficilissimo da implementare...

Saluti,
Federico
--
On the Net/MSN: quaqo <***@despammed.com> [X.509 available] ,''`.
Linux Reg. User #263663/NEW Machine: #216144 (Debian Sarge/SID) : :' :
On the Web: http://www.quagliata.eu.org - My GPG Key:0x5539D8E4 `. `'
On ICQ: 48618109 - On Jabber: ***@jabber.org/@jabber.linux.it `-
Lapo
2003-12-17 00:23:04 UTC
Permalink
quaqo wrote:

| Mi aggrego e propongo anche un piccolo dibattito: Rijandael vs
| Serpent? :)

Ti darò la stessa risposta che ho letto in "Pratical Criptography" (sì,
mi spiace, ma per un bel po' tutti i miei pensieri saranno modificati da
quella lettura, dopotutto è veramente illuminante in alcuni punti ^_^^):

Serpent è forse più sicuro, ma Rijandael è comunque *lo* standard

- --
L a p o L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
quaqo
2003-12-17 08:57:04 UTC
Permalink
Post by Lapo
| Mi aggrego e propongo anche un piccolo dibattito: Rijandael vs
| Serpent? :)
Ti darò la stessa risposta che ho letto in "Pratical Criptography" (sì,
mi spiace, ma per un bel po' tutti i miei pensieri saranno modificati da
Si`... L'avevamo capito. :))
Post by Lapo
Serpent è forse più sicuro, ma Rijandael è comunque *lo* standard
Io avevo letto (forse ricordo male) che Serpent offre maggiori
margini di sicurezza (riutilizza concetti propri del DES) ma e`
lento nel software poiche` compie molte volte calcoli semplici.

Rijandael ha invece meno passaggi pero` piu` complessi,e quindi
offre un ottimo compromesso.

Mi ricordo pure -pero`-che e` possibile implementare Serpent in
hardware, eliminando il problema della lentezza e godendo dei
vantaggi in termini di memoria per lo storage e della sicurezza
relativa a concetti gia` ritenuti sicuri.

Inoltre mi pare che Serpent non lamenti un notevole calo di
prestazioni all'aumentare della lunghezza della chiave...Mentre

Saluti,
Federico
--
On the Net/MSN: quaqo <***@despammed.com> [X.509 available] ,''`.
Linux Reg. User #263663/NEW Machine: #216144 (Debian Sarge/SID) : :' :
On the Web: http://www.quagliata.eu.org - My GPG Key:0x5539D8E4 `. `'
On ICQ: 48618109 - On Jabber: ***@jabber.org/@jabber.linux.it `-
Lapo
2003-12-17 09:09:38 UTC
Permalink
quaqo wrote:

| Io avevo letto (forse ricordo male) che Serpent offre maggiori
| margini di sicurezza (riutilizza concetti propri del DES) ma e`
| lento nel software poiche` compie molte volte calcoli semplici.

Più che altro il design di Serpent è più "conservativo", nel senso che
usa solo operazioni già largamente usate in passato (mentre AES usa cosa
più nuove e meno variabili).

Resta il fatto che in ambito lavorativo è una scelta sicurametne
migliore AES peril semplice fatto che se scegli Serpent e lo "rompono"
magari ti becchi una denuncia, se scegli AES e lo "rompono"...
sciuramente no, perché nessuno può dirti di aver sbagliato avendo scelto
"lo" standard.
Questo è un argomento che poco c'entra con la sicurezza ma che
sicuramente ha il suo peso in ambito lavorativo =)

E comunque ricordiamoci che stiamo confrontando una porta d'accaio di
20cm con una di 19cm, quando spesso il resto della casa è fatto con 5cm
di mattoni...
(sempre su "quel" libro ho letto cose molto sconsolanti, proprio sul
"resto della casa"...)

- --
L a p o L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
quaqo
2003-12-17 12:09:00 UTC
Permalink
Post by Lapo
Più che altro il design di Serpent è più "conservativo", nel senso che
(snip)

Si`, mi sono espresso male...
Post by Lapo
Resta il fatto che in ambito lavorativo è una scelta sicurametne
migliore AES peril semplice fatto che se scegli Serpent e lo "rompono"
magari ti becchi una denuncia, se scegli AES e lo "rompono"...
(snip)

Quoto...
Post by Lapo
E comunque ricordiamoci che stiamo confrontando una porta d'accaio di
(snip)

Immagino che -in futuro- darai altre (ben volute) informazioni... A
noi che non abbiamo il libro... :P

Saluti,
Federico
--
On the Net/MSN: quaqo <***@despammed.com> [X.509 available] ,''`.
Linux Reg. User #263663/NEW Machine: #216144 (Debian Sarge/SID) : :' :
On the Web: http://www.quagliata.eu.org - My GPG Key:0x5539D8E4 `. `'
On ICQ: 48618109 - On Jabber: ***@jabber.org/@jabber.linux.it `-
Continua a leggere su narkive:
Loading...