|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2009
Messaggi: 218
|
[JAVA][JCE]Implementazione firma MD5WithRSA
Salve a tutti, è il mio primo post in questa sezione. Per un progetto universitario devo implementare l'algoritmo di firma RSA. Il codice è il seguente:
Codice:
KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPrivateKeySpec ks =(RSAPrivateKeySpec)kf.getKeySpec(priv,RSAPrivateKeySpec.class);
BigInteger exponent = ks.getPrivateExponent();
BigInteger modulus = ks.getModulus();
byte[] messaggio = new String("Ciao").getBytes("UTF8");
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(messaggio);
byte[] hashBytes = digest.digest();
BigInteger hash = new BigInteger(hashBytes);
BigInteger signature = hash.modPow(exponent, modulus);
byte[] signatureBytes = signature.toByteArray();
Signature sig = Signature.getInstance("MD5WithRSA");
sig.initVerify(pub);
sig.update(messaggio);
boolean verified = false;
try{
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Apr 2009
Messaggi: 218
|
Ho capito perchè quando vado a verificare la firma utilizzando la classe Signature di Java, mi viene stampato a video Documento falso. Leggendo qualche forum ho scoperto che la classe Signature, infatti applica anche un padding al messaggio prima di sottoporlo alla firma vera e propria.
Il tutto mi serviva per implementare un protocollo di firma cieca. Visto che non mi posso appoggiare alla classe Signature per implementarlo, l'ho implementato "a manina", ma ora mi sorge un altro dubbio. Nel normale algoritmo di firma RSA il messaggio, prima di essere firmato, deve essere sottoposto ad hashing, così che risulti minore del modulo della chiave. Se, però sottopongo ad hashing un messaggio reso cieco e poi lo firmo, la moltiplicabilità di RSA va a farsi friggere e non riesco più a togliere il blinding factor dalla firma. Pertanto, è corretto oscurare il messaggio e poi farselo firmare, senza applicare l'hash, anche se risulta maggiore del modulo? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:25.



















