Descriptografando o CipherValue em um arquivo PSKC

0

Isso é o oposto do que eu estava fazendo nessa questão - link

A especificação está disponível no link

O Data / seed é criptografado com AES-128-CBC & e uma chave e um IV. O IV é prefixado aos dados criptografados e a coisa toda é codificada na base 64 e armazenada no campo CipherValue.

Eu tenho (isso é de um arquivo pskc de amostra que tenho, não do RFC).

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

Eu preciso obter os dados descriptografados desta

Isso é o que estou fazendo

Eu tenho CipherValue armazenado em um arquivo chamado cv.

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

Eu recebo um cv.bin de 48 bytes

eu derramei em 2 partes

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

Eu converto iv.bin em hexadecimal

xxd -p < iv.bin
bf97603a252ad478236b4835488f55a5

Então, meu

iv = bf97603a252ad478236b4835488f55a5

Eu converto a chave em hexadecimal

Eu tenho uma chamada de arquivo k.b64 que contém E9C1E401122EE194D620465A775D9C97

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

key = 13d0b5138d35d76d84135f780fadb4e3ae40efbe43f42f7b

Agora eu descriptografo

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

Eu recebo o seguinte erro

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

O que estou fazendo de errado aqui?

    
por user93353 30.12.2014 / 08:20

1 resposta

1

(Resposta dos comentários reorganizados à ordem lógica.)

O valor da chave de criptografia neste exemplo E9C1E401122EE194D620465A775D9C97 é 32 caracteres que são dígitos hexadecimais válidos, que são inerentemente também caracteres base64 válidos. Normalmente, deve-se conhecer a codificação de dados do processo que criou (ou, quando aplicável, enviado).

Este valor é muito improvável para ser base64 porque uma codificação base64 de mais do que alguns bytes, a menos que deliberadamente trabalhada, quase sempre conterá alguns caracteres que não são dígitos hexadecimais. E é impossível ser base64 porque 32 caracteres de base64 que não usam preenchimento de base64 ( = ) codificam um valor de 24 bytes, mas sabemos que o valor é uma chave AES-128 de 16 bytes .

Assim, esta chave é codificada em hexadecimal, e é atribuída a openssl enc -K , que espera que a hex decifra corretamente.

    
por 04.01.2015 / 00:05