Newsgroup: it.comp.sicurezza.crittografia
Titolo: sorgenti rsa

Salve a tutti,
mi servirebbe un'implementazione dell'rsa possibilmente scritta in ANSI C.
Una cosa pulita, che implementa solo questo algoritmo (non una libreria o
un'applicazione che lo contiene) e senza troppi fronzoli. Di mondezza ne ho
trovata gia' tanta, se qualcuno ha qualche link buono da postare avra' la
mia eterna gratitudine.
Grazie.

 fronzoli.
Non capisco che intendi esattamente; una libreria d'appoggio per i calcoli
in multiprecisione è pur sempre necessaria.
Afaik, un'implementazione completa del solo RSA (calcoli in multiprecisione
e algoritmo) non esiste, né tantomeno credo che possa esistere in ANSI C (se
non a livello didattico), perché sarebbe piuttosto inefficiente (non potendo
ottimizzare in asm le routine critiche).
Cristiano

 Cristiano
Non direi. Esiste sia solo in ANSI C, come in C++, in Pascal, in VB e anche
in FORTRAN. Ne ho trovate svariate. Volevo solo sapere se voi conoscevate
un'implementazione particolarmente pulita e leggibile dell'algoritmo. Lo
devo riscrivere in PHP. Se e' per questo l'ho anche gia' trovato in PHP, ma
non mi piace molto e vorrei riscriverlo io. Prima di sentir dire che per
applicazioni http c'e' gia bello ed implementato l'SSL, aggiungo che non mi
serve a questo scopo.
Grazie.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Valerio wrote:
| Prima di sentir dire che per applicazioni http c'e' gia
| bello ed implementato l'SSL, aggiungo che non mi
| serve a questo scopo.
Allora non ti dirò che in PHP c'è già bello implementato l'SSL (che poi
non è che c'entri molto, non mi pare che esportino anche le funzioni per
l'accesso a RSA), ti dirò che in PHP c'è già un modulo che implementa
completamente GPG, quindi anche RSA (ma probabilmente è proprio
l'implementaiozne che hai già trovato e che non ti piace, dato che l'ha
postata Leonardo Marinangeli giusto due giorni fa):
http://sourceforge.net/projects/gpgext/
P.S.: no, personalmente non ho ancora avuto il tempo di provarlo
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9aI5IACgkQaJiCLMjyUvvAmwCeK6VNF4JFX4MFEtQRS/tdRvz5
v6gAoPdcqQZWkj6RUBte6mqw0p7/SW5E
=REar
-----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Valerio wrote:
| Se e' per questo l'ho anche gia' trovato in PHP, ma
| non mi piace molto e vorrei riscriverlo io.
http://dickmann.homeunix.org/pear/pear/Crypt_RSA/RSA.php?source
questa implementazione in puro PHP è concisa ed efficente (usa la
libreria GMP per i numeri), è sicuramente un buono spunto...
ma non è comlpeta, in quanto, per dirne una, usa numeri primi non "forti".
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9aMqMACgkQaJiCLMjyUvuJrQCgzu1k6p/w7qGA0xUcT458glIy
LKsAoKVn63LDlAyJ0kvYggFGou7RaCWO
=DJLg
-----END PGP SIGNATURE-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
L.A.P.O. wrote:
| per dirne una, usa numeri primi non "forti".
Benché... RSA Labs FAQ 4.1, punto 3.1.4
However, advances in factoring over the last ten years appear to have
obviated the advantage of strong primes; the elliptic curve factoring
algorithm is one such advance. The new factoring methods have as good a
chance of success on strong primes as on ``weak'' primes. Therefore,
choosing traditional ``strong'' primes alone does not significantly
increase security. Choosing large enough primes is what matters.
However, there is no danger in using strong, large primes, though it may
take slightly longer to generate a strong prime than an arbitrary prime.
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9aQHAACgkQaJiCLMjyUvvtggCgnNpLnWU9xP0QIH+ww7sSa+Be
QkMAoNtD/D0EeWPthQDVGK+b2F0BtMmr
=mv+3
-----END PGP SIGNATURE-----

 trovato in PHP, ma non mi piace molto e vorrei riscriverlo io.
Non conosco il PHP, ma se conosci la teoria e hai anche un'implementazione
proprio in PHP che altro ti serve? Probabilmente continuo a non capire.
Cristiano

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Cristiano wrote:
| Non conosco il PHP, ma se conosci la teoria e hai anche un'implementazione
| proprio in PHP che altro ti serve? Probabilmente continuo a non capire.
Anche perché l'RSA, nella sua forma "base", è una delle teorie
matematiche più facili da capire e semplice come calcoli che io
conosca... (alla fine sono un paio di esponenti modulari e via andare)
Usando una libreria che rende facili i calcoli con numeri grandi RSA
occupa veramente poche righe di codice.
In ANSI C senza librerie invece sarebbero probabilmetne un migliaio di
righe e oltre, ma 950 delle quali solo per gestire in modo decenet i
numeri grandi.
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9bP5AACgkQaJiCLMjyUvup6gCfWnO/J9GH+u2L0vBP5TMTjamz
oWcAoN0DAOTvvD4R5bvYl53bGd8quVW8
=1vns
-----END PGP SIGNATURE-----

 numeri grandi.
Che poi senza usare l'asm ottimizzato a puntino l'implementazione sarebbe
molto inefficiente.
Cristiano

 due di queste (GMP, BC), Java ne ha una sua interna
(java.math.BigInteger)...
Mi pare di ricordare una tabella comparativa sul sito di MIRACL (ma non ci
giurerei).
GMP non riuscii a compilarlo; poi ho trovato MIRACL e GMP l'ho abbandonato.
L'altra libreria è NTL (che ora supporta l'overload degli operatori).
Tra tutte scelsi MIRACL perché rimasi impressionato dalla sua velocità e
perché già d'allora permetteva l'overload degli operatori. Anche il supporto
per le curve ellittiche è ottimo, non ricordo se le altre librerie le
implementano.
In generale MIRACL usa il meglio delle ottimizzazioni oggi pensabili.
Cristiano

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Cristiano wrote:
| Mi pare di ricordare una tabella comparativa sul sito di MIRACL (ma non ci
| giurerei).
Mhh, no, mi pare che compari solo l'uso di diverse opzioni ma non
rispetto ad altre librerie.
Vedo invece, con un certo piacere, che l'autore è di per sé interessato
alla crittografia (questo mi fa supporre che MIRACL sia pensata anche in
quella direzione e non, per esempio, per fare fluidodinamica... anche se
poi, una volta "finita", una libreria per numeri interi dovrebbe essere
equalmente efficente in entrambe le cose)
Invece è con spiacere che noto che non è opensource... va beh, è
comunque una licenza piuttosto tranquilla (in breve: non costa se non
vuoi farci soldi).
Noto sempre con spiacere che è molto pensata per Windows... e che il
sito non dice per quali altre piattaforme compila.
Quest'ultima cosa, se è brutta come temo, ai miei occhi la
"squalificherebbe" abbastanza...
Comunque credo che farò un po' di test comparativi prima di decidere in
modo definitivo.
| Tra tutte scelsi MIRACL perché rimasi impressionato dalla sua velocità e
| perché già d'allora permetteva l'overload degli operatori. Anche il
supporto
| per le curve ellittiche è ottimo, non ricordo se le altre librerie le
| implementano.
| In generale MIRACL usa il meglio delle ottimizzazioni oggi pensabili.
Mhh.. ok, grazie per il consiglio.
Se avrò voglia di fare delle prove comparative "pratiche" tra le due (o
tra le tre)... ovviamente le posterò ^_^
Già che non ho ancora inviato il post:
Primi commenti su NTL
1. è opensource (GPL)
2. è a oggetti
3. è C++ "portabile" (che vuol dire, di solito, che usa poche cose del
C++ oltre alle classi)
4. è utilizzabile in congiunzione a GMP per sfruttarne le ottimizzazioni
assembler ma mantenendo l'uso di livelli di astrazioni maggiori
Questo mi fa stare NTL *molto* più "simpatica" di MIRACL (questo però
non dice nulla sulla sua velocità, solo sulla sua simpatia ^_^)...
peraltro ho notato che Cygwin non ha *alcun* pacchetto di grandi numeri
nella distro quindi probabilmente mi cimenterò nel loro packaging...
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9chGIACgkQaJiCLMjyUvt3PwCcDNIBpLzQ+YTLdpjxCJWC5+19
bzcAn2Ul1xd6YShY1kKRhDsSdyR8nWBJ
=2CxY
-----END PGP SIGNATURE-----

 non dice nulla sulla sua velocità, solo sulla sua simpatia ^_^)...
Alcuni dicono che GMP sia piuttosto veloce, ma io non posso confermarlo. :-(
Posso confermare, invece, che le poche applicazioni che scrissi per NTL
(quando non c'era ancora il wrapper per il C++) richiesero molto tempo per
la scrittura e si rivelarono più lente di MIRACL (non ricordo di quanto).
Cristiano

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Cristiano wrote:
| Sì, sì, MIRACL è espressamente studiata per la crittografia; implementa
| molti protocolli crittografici (tra cui, ti dicevo, le curve ellittiche).
| Include anche il supporto per numeri in virgola mobile di lunghezza
| indefinita (sfruttando le frazioni continue).
Bene, ma che hanno fatto di male i cari "mantissa+esponente"?
Non ho capito cosa abbia di "meglio" lì'idea delle frazioni e così su
due piedi mi vengono almeno un paio di "peggio" in mente... ma prima
voglio approfondire (README, aspettami).
| Chissa perché, ma inizio a notare che 'sto cavolo di opensource è un po'
| troppo sopravalutato. :-)
Il punto non è questo...
|>Noto sempre con spiacere che è molto pensata per Windows...
| Questa è una fortuna per noi winzozzaroli. :-)
...è principalmente che Windows lo considero una barca che affonda, e
non voglio fare la fine del topo.
(topo volontario, capiamoci, in effetti dovrei forse dire "una barca che
va in una direzione che non mi piace... e sto iniziando a preparare le
valige per scendere")
|>Se avrò voglia di fare delle prove comparative "pratiche" tra le due
|>(o tra le tre)... ovviamente le posterò ^_^
| Ti serve per qualcosa in particolare?
No, difatti dubito che farò tali prove prima che il caso mi dia un
motivo sufficente...
| Alcuni dicono che GMP sia piuttosto veloce, ma io non posso
confermarlo. :-(
| Posso confermare, invece, che le poche applicazioni che scrissi per NTL
| (quando non c'era ancora il wrapper per il C++) richiesero molto tempo per
| la scrittura e si rivelarono più lente di MIRACL (non ricordo di quanto).
Comunque NTL usa GMP per andare veloce (è anzi consigliato), quindi come
velocità sono sicuramente a pari ^_^
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9c7usACgkQaJiCLMjyUvuDegCdF6N0wyHswqrmIxEAdq/Xal63
K4kAoOBvd61TOpEFdB2C+x450gD2UYBv
=AM13
-----END PGP SIGNATURE-----

http://www.jamwt.com/wasted/builds/
"Valerio" <k...@ko.ko> ha scritto nel messaggio
news:FDa6b.20437$hE5.7...@news1.tin.it...


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Red Owl wrote:
| 
http://www.jamwt.com/wasted/builds/
Ha chiesto *esplicitamente* un'implementaiozne stand-alone e tu *ancora*
te ne esci con questo programma peer2peer che tra l'altro l'autore ha
'sconfessato' rendendolo nei fatti illegale?
Ho capito che ti piace, ma resta comunque OT...
- --
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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj9fwi0ACgkQaJiCLMjyUvvtMQCfWgHZ8n2gRUjJ7pZeY9P0u1lQ
80cAoKXL50+Kxovm3AwDW7Ln5d3Qhd2y
=xWdC
-----END PGP SIGNATURE-----

 Ho capito che ti piace, ma resta comunque OT...
Inoltre, il suo quoting era veramente lassativo...
Ciao,
un TJL73 e la strana, noiosa fauna che popola la rete...
-- 
"Esistono due tipi di persone:
 quelle intelligenti e quelle non.
 Con le prime, non si arriva a questionare,
 con le altre, e` inutile farlo..."                               -- SDB