Domanda

Ho giocato con OpenPGPjs (the Porta Javascript di OpenPGP) nel mio tempo libero per imparare qualcosa di nuovo.Per testarlo, sto lavorando su una semplice app Web per archiviare e recuperare la coppia di chiavi e i dati crittografati da un database.

Poiché OpenPGPjs ha un'opzione per produrre chiavi "corazzate" (chiavi binarie emesse come testo), vorrei salvarlo come tale nel database.Ma durante la generazione delle coppie di chiavi, ho notato che non hanno una lunghezza fissa (come avevo erroneamente supposto).La lunghezza variabile delle chiavi mi ha confuso su quali limiti scegliere per la dimensione del campo nel database.

Qualcuno può chiarire i seguenti dubbi su OpenPGP:

-> Qual è la dimensione massima che può avere una chiave 'corazzata' OpenPGP?
-> La dimensione dei dati crittografati può essere calcolata in base alla dimensione dei dati crittografati?
-> Qual è la pratica generale e consigliata (se presente) per archiviare tali chiavi nel database.

PS:Ho letto e compreso il insidie ​​​​dell'utilizzo di Javascript per la crittografia, quindi puoi ignorare l'avviso.:)

Nota:Sulla base dei commenti, ho modificato la domanda per rimuovere, si spera, ogni ambiguità su ciò che voglio sapere.

È stato utile?

Soluzione

Non è possibile prevedere la lunghezza della chiave (pubblica/privata, non importa) e dei dati crittografati.Se vuoi memorizzarli nel database, fallo come a BLOB O TEXT (non VARCHAR, non sono necessari indici e si otterrebbe un layout dei dati piuttosto scarno).Potresti voler rinunciare ad un po' di normalizzazione e memorizzare l'ID della chiave (o l'impronta digitale) separatamente come file VARCHAR se dovrai interrogarlo.

I dati armati ASCII sono più facili da gestire, mentre i dati binari sono molto più compatti.


Per dati crittografati, è facile vedere che la lunghezza crittografata dipende fortemente dall'input, ma anche da quali algoritmi di crittografia e compressione vengono scelti: OpenPGP ne consente molti.Poiché la compressione non dovrebbe (considerevolmente) aumentare lo spazio di archiviazione e la crittografia simmetrica dovrebbe almeno avere dimensioni lineari se non uguali e i metadati hanno più o meno dimensioni fisse, è possibile determinare facilmente un limite superiore per il tuo set speciale di algoritmi.Per l'archiviazione nel database ciò sarà probabilmente irrilevante poiché la lunghezza è comunque troppo grande per un'archiviazione in linea ragionevole.

Per pacchetti chiave, dipende da cosa vuoi memorizzare:Oltre alla chiave primaria pubblica, solitamente verranno archiviate diverse sottochiavi pubbliche (che vengono effettivamente utilizzate per la crittografia).Una chiave pubblica contiene anche ID utente, forse un'immagine, eventualmente qualche configurazione, certificati di revoca e firme in entrata.Le chiavi pubbliche generalmente possono diventare piuttosto grandi, non fidarsi di una dimensione massima.Lo stesso vale per le chiavi private, che di solito hanno la chiave pubblica in bundle.La dimensione può teoricamente essere arbitrariamente grande (almeno non sono a conoscenza di alcun limite nella specifica RFC).

Altri suggerimenti

La lunghezza della chiave è quella che scegli: probabilmente 4096 bit se segui le raccomandazioni attuali.Base64 lo codifica e lo salva come varchar.

La lunghezza dei dati crittografati è completamente variabile.IIWM Vorrei codificarlo in base64 e scriverlo su disco.Salva il nome file risultante nella tabella anziché i dati effettivi.

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