Decifrare CipherValue in un file PSKC


0

Questo è l'opposto di quello che stavo facendo in questa domanda - https://crypto.stackexchange.com/questions/21021/encryption-and-hmac-in-a-pskc-file

Le specifiche sono disponibili su https://tools.ietf.org/rfc/rfc6030.txt

I dati / seed sono crittografati con AES-128-CBC e e una chiave e un IV. Il IV è anteposto ai dati crittografati e il tutto è codificato in base 64 e memorizzato nel campo CipherValue.

Ho (questo proviene da un file pskc di esempio che ho, non dall'RFC).

CipherValue/EncryptedText = v5dgOiUq1Hgja0g1SI9VpcHu81DLdcDqT8C3+k8wlQtk5KL1KErwojxLPSNO8lZt
Encryption Key = E9C1E401122EE194D620465A775D9C97
Algo = AES-128-CBC

Ho bisogno di ottenere i dati decrittati da questo

Questo è quello che sto facendo

Ho CipherValue memorizzato in un file chiamato cv.

openssl base64 -d -A < cv > cv.bin

Ottengo un cv.bin a 48 byte

Ho versato in 2 parti

iv.bin = 16 bytes
data.bin = 32 bytes

Converto iv.bin in esadecimale

xxd -p < iv.bin
bf97603a252ad478236b4835488f55a5

Così il mio

iv = bf97603a252ad478236b4835488f55a5

Converto la chiave in esadecimale

Ho una chiamata al file k.b64 che contiene E9C1E401122EE194D620465A775D9C97

openssl base64 -d -A < k.b64 > k.bin
xxd -p < k.bin
13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b

key = 13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b

Ora decifro

openssl enc -aes-128-cbc -d  -K 13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b -iv bf97603a252ad478236b4835488f55a5  < data.bin

Ottengo il seguente errore

▓\=Bt═┐|)éïh│■ìcbad decrypt
62008:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:.
\crypto\evp\evp_enc.c:539:

Cosa sto facendo di sbagliato qui?

Risposte:


1

(Risposta dai commenti riorganizzati in ordine logico.)

Il valore della chiave di crittografia in questo esempio E9C1E401122EE194D620465A775D9C97è 32 caratteri che sono cifre esadecimali valide, che sono intrinsecamente anche caratteri base64 validi. Normalmente si dovrebbe conoscere la codifica dei dati dal processo che li ha creati (o laddove applicabile).

È molto improbabile che questo valore sia base64 perché una codifica base64 di più di pochi byte, se non deliberatamente creata, conterrà quasi sempre alcuni caratteri che non sono cifre esadecimali. Ed è impossibile essere base64 perché 32 caratteri di base64 che non usano base64 padding ( =) codificano un valore di 24 byte, ma sappiamo che il valore è una chiave AES-128 che è 16 byte.

Pertanto, questa chiave è codificata in esadecimale e la fornisce a openssl enc -Kchi si aspetta che esagoni decodifichi correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.