Расшифровка CipherValue в файле PSKC

986
user93353

Это противоположно тому, что я делал в этом вопросе - https://crypto.stackexchange.com/questions/21021/encryption-and-hmac-in-a-pskc-file

Спецификация находится по адресу https://tools.ietf.org/rfc/rfc6030.txt.

Данные / семя зашифрованы с помощью AES-128-CBC &, а также ключа и IV. IV добавляется к зашифрованным данным, и все это кодируется в base-64 и сохраняется в поле CipherValue.

У меня есть (это из образца файла pskc, а не из RFC).

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

Мне нужно получить расшифрованные данные из этого

Это то что я делаю

Я храню CipherValue в файле с именем cv.

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

Я получаю 48 байт cv.bin

Я разлил на 2 части

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

Я конвертирую iv.bin в hex

xxd -p < iv.bin bf97603a252ad478236b4835488f55a5 

Так что мой

iv = bf97603a252ad478236b4835488f55a5 

Я превращаю ключ в шестнадцатеричный

У меня есть файл вызова k.b64, который содержит E9C1E401122EE194D620465A775D9C97

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

Сейчас расшифровываю

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

Я получаю следующую ошибку

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

Что я здесь не так делаю?

0

1 ответ на вопрос

1
dave_thompson_085

(Ответ из комментариев реорганизован в логический порядок.)

Значение ключа шифрования в этом примере E9C1E401122EE194D620465A775D9C97составляет 32 символа, которые являются действительными шестнадцатеричными цифрами, которые по своей сути также являются действительными символами base64. Обычно нужно знать кодировку данных из процесса, который его создал (или, если применимо, отправил).

Это значение очень маловероятно, чтобы быть base64, так как кодирование base64 более чем несколько байт, если намеренно не обработано, почти всегда будет содержать некоторые символы, которые не являются шестнадцатеричными цифрами. И невозможно быть base64, потому что 32 символа base64, не использующих base64 padding ( =), кодируют 24-байтовое значение, но мы знаем, что это ключ AES-128, который составляет 16 байтов.

Таким образом, этот ключ закодирован в шестнадцатеричном формате и дает ему, openssl enc -Kкоторый ожидает, что шестнадцатеричный код правильно расшифрован

Похожие вопросы