Newsgroup: it.comp.sicurezza.crittografia
Titolo: Sviluppo prog per cifratura dati

Salve,
sono alle prime armi con la crittografia e vorrei sviluppare un
programma mio in C per cifrare i miei dati. Ho visto diversi sorgenti,
alcuni molto incomprensibili. Vorrei sapere, utilizzando l'algoritmo
AES, chi genera la chiave e come, visto che tutti spiegano come
Rijndael cifra i dati ma non come si ottiene la chiave simmetrica per
farlo. Se sapete anche darmi dei sorgenti dell'algoritmo, ve ne sarei
grato.
Grazie.
Paco.

 Se sapete anche darmi dei sorgenti dell'algoritmo, ve ne sarei grato.
http://www.iaik.tu-graz.ac.at/research/krypto/AES/
qua ce ne sono in tutte le salse...
- --
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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKK+xEACgkQaJiCLMjyUvsxDwCfUrm7ARhd82gkamd+4bxaYWLm
LNYAoIL1uBgVEKBDr4XhRvy0D68ncuzP
=WvNL
-----END PGP SIGNATURE-----

 sua volta.
D'accordo su tutto, sarei solo un po' cauto nel dire che la password utente
è usata "solo" per cifrare l'altra chiave... nel senso che se la chiave
utente
è scelta male, tutto il sistema è a rischio anche se la chiave usata per
cifrare
realmente i dati è totalmente casuale.
Ciao
AM

 per cifrare realmente i dati è totalmente casuale.
Vero, ho dimenticato di specificare che questo aiuta sicuramente per
quegli attacchi "sui dati in transito", ma non aiuta per niente se
l'attaccante recupera il file con la chiave dal PC dell'utente.
C'è da dire, però, che se il PC dell'utente nno è fidato "a nulla serve
tutto ciò", in ogni caso, perché eventuali trojan o altro possono fare
"quello che gli pare", essendo in esecuzione con gli stessi identici
diritti dell'utente che, ai dati, deve pur accedere..
- --
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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKNrqoACgkQaJiCLMjyUvu/TQCfdEM/rNjrSOTIhfk3vGg25CrL
0yEAoPv5WcisyF/uS+0ssyRl+aUj9RTj
=x1bw
-----END PGP SIGNATURE-----

Grazie per i suggerimenti.
Ho trovato un'implementazione di Rijndael abbastanza semplice (su
segnalazione di lapo) e veloce che usero' per cifrare i dati. Adesso,
pero', devo trovare un alg asimmetrico per scambiarmi la chiave
simmetrica. Se ho ben capito, gli alg Diffie-Hellma & co. permettono di
cifrare/decifrare ma non sono in grado di generare una coppia di
chiavi, giusto?se e' cosi', qual'e' l'algoritmo che le genera?in attesa
dei vostri preziosi suggerimenti, mi metto alla ricerca di sorgenti di
diffi-hell
Ciao
Paco

 se e' cosi', qual'e' l'algoritmo che le genera?
Dipende dal sistema asimmetrico che vuoi usare, RSA, per fare un
esempio, usa come "chiavi" due valori casuali modulo N, dove N è
importante che sia p*q e che p e q siano entrambi numeri primi.
Quindi nel caso di RSA con chiave a 1024 bit la procedura è questa:
1. generi un numero casuale di 512bit (beh, magari metti direttamente
l'ultimo bit a 1, tanto i numeri pari di quelle dimensioni non sono mai
primi)
2. verifichi se è "probabilmente primo" con un po' di iterazioni di
Miller-Rabin
3. ripeti fino ad ottenere "p" e "q" probabilmente primi di 512 bit
4. li moltiplichi tra loro e ottieni N=p*q
5. generi un numero casuale "a" modulo N (quindi di 1024 bit)
6. calcoli l'inverso b*a=1 (mod N)
"a" e "b" sono (a tua scelta) la chiave pubblica e la chiave privata.
O melgio, in genere nella chiave pubblica si include anche "N" e nella
chiave privata si include anche "p" (anche se, in realtà, una volta
calcolato "b" avere la fattorizzazione di "N" non serve più).
Originariamente il punto "2" verificava che non solo "p" fosse
probabilmente primo, ma anche "(p-1)/2", ovvero che "p" fosse un "primo
forte", ma pare che i moderni algoritmi di fattorizzazione non abbiano
differenze di tempo tra primi "normali" e primi "forti", quindi
probabilmente si può ormai omettere questo passo...
sperando di non aver detto nessuna cavolata (sto andando a memoria..),
saluto
  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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKNujsACgkQaJiCLMjyUvujSQCcD4f0wEVRNkm+Ph6OP2jzMiOr
rk0An1qgwAumn+Re1iKyNIIfMPXXMLsd
=vFm9
-----END PGP SIGNATURE-----

 saluto
Sul resto mi fido ^_^
-- 
Borland C++ Builder Mailing List:
http://tux.linuxtime.it/mailman/listinfo/bcb-it

 Sul resto mi fido ^_^
Non ti fidare di chi va a memoria, controlla ad esempio qua 0=)
http://en.wikipedia.org/wiki/RSA
http://it.wikipedia.org/wiki/RSA
- --
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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKN0uQACgkQaJiCLMjyUvuf2ACfUcUTy9/rTxcz1niA1N6bUNLy
yu0AoJH4Px+xNQAY/1vs8aBjAOsLoISF
=iMLl
-----END PGP SIGNATURE-----

 falso: c'è il 2 ;-)
Hai perfettamente ragione, mi è venuto in mente 3 millisecondi dopo aver
inviato il messaggio... chiedo venia :(

Sto analizzando i sorgenti di gnupg (sempre riguardo ad RSA) e mi sto
incasinando un po', perche' non sono proprio cosi' semplici (quantomeno
per me). Sul link suggerito da Lapo
(
http://www.iaik.tu-graz.ac.at/research/krypto/AES/
) ho trovato un'
implementazione molto samplice e veloce di Mike Scott per quanto
riguarda Rijndael, volevo sapere se avete qualke altro link dove poter
trovare una roba simile per RSA a portata di mano.
Grazie
Paco

  [X.509 available]
Linux Reg. User: #263663 / Machine: #216144 (Arch Linux/Wombat)
On the Web: 
http://www.quaqo.org
 - My OpenPGP KeyID: 0x5539D8E4
On ICQ: 48618109 - On Jabber: 
qu...@jabber.org/@jabber.linux.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFCkeJwZXjZQFU52OQRAtNtAKCvAL6wx3bkMCGLnXuEPiWkvfHJ4gCgkxw/
R1xMT8vRYCMImaeYlBMAkuI=
=1O5n
-----END PGP SIGNATURE-----

Veramente sto facendo un programmino mio. Mi serve solo per lo scambio
della chiave segreta. Se riuscissi a trovarlo gia pronto sarebbe
meglio...idee???

 se l'attaccante recupera il file con la chiave dal PC dell'utente.
Vero vero. Consideriamo il caso in cui si debba proteggere un canale
di comunicazione in cui uno dei due capi sia il nostro PC. Il canale
per definizione è insicuro e quindi la trasmissione va cifrata con
una certa chiave. Per quanto riguarda il PC abbiamo due casi limite:
- il PC è sicuro e quindi è inutile che la chiave venga conservata
cifrata a sua volta
- il PC NON è sicuro (trojan, keylogger, ...) e quindi è altrettanto
inutile che la chiave venga conservata cifrata a sua volta
Questo in teoria. In pratica secondo me esistono anche i casi intermedi
che giustificano la cifratura locale della chiave ("attaccanti" che
sono
in grado di leggere un file, ma che non sono capaci o non vogliono
installare e utilizzare un programma intrusivo come un key-logger,
tenendo anche conto che la prima è un'operazione che può non lasciare
tracce, la seconda può più facilmente essere individuata).
Altre applicazioni invece secondo me giustificano pienamente una certa
attenzione nella generazione della chiave utente (quella che cifra la
chiave realmente usata per cifrare), ad esempio il mantenimento sicuro
dei dati, come un backup su cd.
Anacleto

 meglio...idee???
GnuPG?
Ciao,
un TJL73 e le banalità...
-- 
"Se ci sono due soluzioni per uno stesso problema,
 una delle due è sbagliata."

 un TJL73 e le banalità...
Più che altro avrei firmato "...e le cose testate per anni da migliaia
di persone che vanno SICURAMENTE meglio delle cose fatte di persona" =)
(poi, ripeto, se lo fai per divertirti è tutto un altro paio di
maniche... ma anche in quel caso userei comunque gpg, quando l'esigenza
si facesse reale ;-))
- --
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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKS0YQACgkQaJiCLMjyUvthZgCgm8eW+M4MJoz4UacxlzAwsuSX
2WwAoP0Z8LlpYs0oVPxWspOut9mtTeVu
=OgLt
-----END PGP SIGNATURE-----

 si facesse reale ;-))
Il fatto e che di gpg mi interessa solo la parte di generazione delle
chiavi pubbliche e il loro scambio; per quanto mi riguarda, i sorgenti
di gpg sono troppo incasinati (ci sono strutture dati abbastanza
complesse) e sono annegati all'interno dell'intero progetto
(giustamente) e quindi lo vedo abbastanza difficile esportare nel mio
programma solo rsa.c ad esempio, perche' si porta dietro altri trenta
*.c.
Detto cio',dall'alto della mia ignoranza(ma se sono qui e' proprio per
imparare, grazie a voi) vi chiedo: come cavolo genero un'intero di
512bit?e' enorme. Forse ci vuole un array del tipo unsigned long int?
Grazie
Paco

 512bit?e' enorme. Forse ci vuole un array del tipo unsigned long int?
La domanda è "come lo genero" o "come lo immagazzino"? ;-)
Per immagazzinarlo usi ovviamente un array di byte (char[] in C, o
unsigned char[]), per generarlo devi:
a. avere una sorgente di numero casuali DAVVERO (non pensare NEANCHE di
usare rand() o rand48())
b. implemebntare una libreria per lavorare su numeri grandi
c. implementare un test di primalità per controllare che il numero
generato sia davvero primo (o almeno che questo sia vero con prabilità
1-2^(-100) o qualcosa del genere)
Io, francamente, ti SCONSIGLIO CALDAMENTE tutto ciò: librerie che fanno
questo ce ne sono, già pronte e funzionanti.
Spesso sono complicate, è verissimo, ma farlo a mano ti ASSICURO che è
50-100 volte *più* complicato (metti nel mix anche un paio di settimane
chino sui libri di testo di programmazione e di matematica discreta).
    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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKUTnoACgkQaJiCLMjyUvvefACePAEsW5b6qVqgqkKBKRMjKm8F
7cMAn2YwSp/V2ZlCKf68nFdQLxY0vVSF
=vv8d
-----END PGP SIGNATURE-----


ma che spreco = scaricati waste
bello pronto e cotto conchiave a 4096 (che e' poco)



Io sto cercando il codice, non un programma bello pronto.
Ciao.
Paco

 bello pronto e cotto conchiave a 4096 (che e' poco)
Un programma di peer2peer ha sicuramente tantissimo a che faer con le
esigenze di una persona che vuole capire il lato matematico di RSA per
implementarlo in prioma persona, già già.
  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 /
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (Cygwin)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iEYEARECAAYFAkKXRw4ACgkQaJiCLMjyUvu/UgCgxQViNQ0vUNlHYpqf3MGRgjIa
gM0AoOM2DCXV9HOWBuqKrCn6v5oXtW71
=+aBx
-----END PGP SIGNATURE-----

  <<<