Newsgroup: it.comp.sicurezza.crittografia
Titolo: RSA

Ciao a tutti.
Mi sono documentato sul funzionamento base di questo algoritmo 
asimmetrico e sono riuscito a scriverene una piccola imitazione 
casalinga che preso un messaggio (solo un numero) M, lo cifra in C e lo 
ridecifra con le formule C = M^E Mod N ed M = C^D Mod N.
Tutto funziona incredibilmente bene se continuo a cifrare un solo 
numero. Ma se volessi applicarlo in una routine che critti una stringa, 
o un array di byte, prendendo come messaggio M l'ascii del carattere in 
questione, come posso risolvere il problema dell'output? insomma, il 
numero risultante può andare da 0 a N giusto? Come faccio a farlo stare 
in un byte? Avevo pensato a fare un Mod 256, ma poi coem faccio a 
tornare indietro?
Ringrazio chiunque possa darmi informazioni a rigurdo o segnalarmi un 
buon sito che spieghi come applicarlo ai testi.
Ricky
PS: non sapevo se postarlo qui o su un newsgroup di programmazione, 
spero di aver scelto bene (altrimenti chiedo scusa)

 spero di aver scelto bene (altrimenti chiedo scusa)
Hai scelto bene; hai ottimi gusti! :-)
Cristiano

 caso di considerarle.
la mia vorrebbe essere qualcosa in più di una applicazione didattica. Ti 
ringrazio per il codice ma non mi serve, sono riuscito tranquillamente a 
far funzionare il codice.
Il problema é che, volendo usarlo per crittare gli ascii di una chiave 
(schema simile al funzionamento del pgp) dovrei riuscire a far restare i 
caratteri critati nel range 0-255.
Come fa il pgp epr scrivere la chiave? Questo potrebe risolvere il mio 
problema...
Grazie ancora
Ricky

 problema...
Purtroppo non ne ho la più pallida idea (non so nemmeno cos'è 'epr'), non mi
sono mai interessato a pgp e simili.
Cristiano

 Cristiano
Grazie,
Ricky

 Base 64? Mai sentito. Googlerò...
Mi sono informato, é un sistema numerico. Veramente, avevo già ideato un 
simile stratagemma per scrivere numeri così grossi in poco spazio.
Non so se esista, ma mi ero creato un sistema numerico in base 256, 
utilizzando tutti i caratteri ascii. Sarebbe comunque meglio usare un 
sistema in base 64?
Ricky

 sistema in base 64?
Secondo me, di solito conviene utilizzare l'esadecimale che si genera e si
converte senza alcun problema. L'inconveniente è che hai 2 cifre per 1 byte.
Cristiano

 E' questo il mio problema
Ci credo che è un problema! :-)
Ma il problema non è solo quello. E` che i calcoli non li puoi fare con un
modulo gestibile con la normale aritmetica del VB6, perché, come ti dicevo,
se l'applicazione non deve essere solo un semplice esercizio, i numeri in
gioco sono enormi e devi usare una libreria multiprecisione; probabilmente
esisterà qualcosa per VB6, ma io non ne sono a conoscenza.
Per questi scopi è senz'altro da preferire il C++ che oltre ad essere
ultra-fornito di librerie, genera anche eseguibili molto veloci.
Cristiano

 ultra-fornito di librerie, genera anche eseguibili molto veloci.
Il problema é che non conosco così bene il C++.
Per questo pensavo di affidarmi al vb
Ricky


Credo che sei cascato male, ma hai provato a vedere se c'è qualche libreria
in precisione multipla per vb?
Se no, già che ci sei, puoi provare a scrivere da solo una mini-libreria per
le poche operazioni in precisione multipla necessarie per l'RSA. Ti puoi
aiutare implementando gli algoritmi indicati qui:
http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
Se mi permetti una considerazione, posso dirti che difficilmente riuscirai a
scrivere un codice classificabile come "non didattico", non per incapacità
tua, ma perché le librerie in C e C++ sono ormai ultra-ottimizzate e
sfruttano al meglio le peculiarità di ogni singola CPU implementando
algoritmi allo stato dell'arte (vedi miracl).
La decisione finale spetta a te. :-)
Ciao
Cristiano

 Cristiano
Ciao,
Ricky