Domanda

Voglio sapere se le firme RSA sono univoche per un dato.

Supponiamo che io abbia una stringa "ciao".Il metodo per calcolare la firma RSA è in primo luogo ottenere il digest sha1 (questi sono, lo so, unqiue per i dati), quindi aggiungere un'intestazione con OID e schema di riempimento menzionati e fare un po 'di jiggle matematico per dare la firma.

Ora, supponendo che il riempimento sia lo stesso, la firma generata da openSSL o Bouncy Castle sarà la stessa?

Se sì, la mia unica paura è che non sarà facile recuperare il "testo" / dati ??

Ho effettivamente provato a fare una firma RSA di alcuni dati e le firme da OpenSSL e BC erano diverse.L'ho ripetuto ma ho ottenuto la stessa firma ancora e ancora per ciascuno di essi.Mi sono reso conto che le due firme dei metodi erano diverse a causa della differenza nel riempimento.Tuttavia non sono ancora sicuro del motivo per cui le firme di ciascuna delle librerie sono sempre le stesse, le ripeto.Qualcuno può fornire una semplice spiegazione?

È stato utile?

Soluzione

Il "solito" schema di riempimento, descritto in PKCS # 1 poiché il riempimento "vecchio stile, v1.5", è deterministico. Funziona così:

  • I dati da firmare sono sottoposti ad hashing (ad es. con SHA-1).
  • Viene aggiunta un'intestazione fissa; quell'intestazione è in realtà una struttura ASN.1 che identifica la funzione hash che è stata appena utilizzata per elaborare i dati.
  • Vengono aggiunti byte di riempimento (a sinistra): 0x00, quindi 0x01, quindi alcuni byte 0xFF, quindi 0x00. Il numero di 0xFF byte viene regolato in modo che la lunghezza totale risultante sia esattamente la lunghezza in byte del modulo (ovvero 128 byte per una chiave RSA a 1024 bit).
  • Il valore riempito viene convertito in un numero intero (che è inferiore al modulo), che passa attraverso l'elevazione a potenza modulare che è al centro di RSA. Il risultato viene riconvertito in una sequenza di byte, e questa è la firma.

Tutte queste operazioni sono deterministiche, non sono casuali, quindi è normale e ci si aspetta che firmare gli stessi dati con la stessa chiave e la stessa funzione hash produrrà la stessa firma sempre e sempre.

Tuttavia c'è una leggera sottospecificazione nell'intestazione fissa basata su ASN.1. Questa è una struttura che identifica la funzione hash, insieme ai "parametri" per quella funzione hash. Le solite funzioni hash non accettano parametri, quindi i parametri devono essere rappresentati con un valore speciale "NULL" (che richiede pochi byte), o essere omessi del tutto: entrambe le rappresentazioni sono accettabili (sebbene la prima sia presumibilmente preferita). Quindi, l'effetto grezzo è che ci sono due versioni dell '"intestazione fissa", per una data funzione hash. OpenSSL e Bouncycastle non utilizzano la stessa intestazione. Tuttavia, i verificatori della firma dovrebbero accettarli entrambi.

PKCS # 1 descrive anche un nuovo schema di riempimento, chiamato PSS, che è più complesso ma con una prova di sicurezza più forte. PSS include un mucchio di byte casuali, quindi otterrai ogni volta una firma distinta.

Altri suggerimenti

Le firme non sono un meccanismo di privacy;non è considerato un problema se riesci a ritirare il testo in chiaro.Se il tuo messaggio deve essere mantenuto segreto, crittografalo e firma.

Tuttavia, ricorda che le firme RSA vengono create utilizzando la chiave privata di un firmatario.Data una tale firma, puoi utilizzare la chiave pubblica del firmatario per "annullare" la trasformazione RSA (aumentare la firma del messaggio a e , mod n ) ed estrarre SHA1 oaltro valore hash fornito come input.Non è ancora possibile annullare la funzione hash per ottenere il testo in chiaro di input corrispondente a una firma che si è staccata dal suo messaggio.

RSA per la crittografia è una questione diversa.I metodi di riempimento per la crittografia qui includono dati casuali per sconfiggere l'analisi del traffico.

Questo è il motivo per cui aggiungi un vettore di sale / inizializzazione sopra la tua chiave.In questo modo non dovrebbe essere possibile stabilire quali record provengono dallo stesso testo in chiaro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top