Как обрабатывать ошибки заполнения в pkcs11?
Мне интересно как C_DecryptFinal
& C_Decrypt
должны иметь дело с ошибками заполнения.
Согласно pkcs11 2.20, C_DecryptFinal
может вернуться CKR_ENCRYPTED_DATA_INVALID
или же CKR_ENCRYPTED_DATA_LEN_RANGE
так что я полагаю, что если заполнение недопустимо, C_DecryptFinal
/C_Decrypt
вернуть CKR_ENCRYPTED_DATA_INVALID
,
Это правильно?
Если это так, C_DecryptFinal
/C_Decrypt
уязвимы для нападок оракула?
1 ответ
Ссылаясь на стандарт (раздел 11.1.6):
CKR_ENCRYPTED_DATA_LEN_RANGE: Вход зашифрованного текста в операцию дешифрования был определен как недействительный зашифрованный текст только на основе его длины. В зависимости от механизма операции это может означать, что зашифрованный текст слишком короткий, слишком длинный или не кратен некоторому конкретному размеру блока. Это возвращаемое значение имеет более высокий приоритет, чем CKR_ENCRYPTED_DATA_INVALID.
CKR_ENCRYPTED_DATA_INVALID: Зашифрованный ввод для операции дешифрования был определен как недействительный зашифрованный текст. Это возвращаемое значение имеет более низкий приоритет, чем CKR_ENCRYPTED_DATA_LEN_RANGE.
Так что для блочных шифров CKR_ENCRYPTED_DATA_LEN_RANGE
должен быть возвращен, когда вход не выровнен по блокам.
Если вход выровнен по блокам, CKR_ENCRYPTED_DATA_INVALID
вероятно, возвращается в случае неправильного заполнения для CKM_*_PAD
механизмы.
Таким образом, атака отступающего оракула, вероятно, возможна.
Поскольку заполнение PKCS#7 является единственной определенной схемой заполнения для блочных шифров, приложение часто отвечает за обработку заполнения, что приводит к тому, что, как мне кажется, должно быть ответом на ваш вопрос:
Приложение (то есть "клиент криптоки") не может предоставить внешнему злоумышленнику (то есть "клиенту приложения") никакого оракула, чтобы определить, что заполнение было неверным, независимо от источника этой информации (то есть криптоки). или само приложение).
Вероятно, бессмысленно защищать от атаки оракула-дополнения на уровне интерфейса криптоки (т. Е. Злоумышленника внутри приложения), поскольку такой злоумышленник может расшифровать все что угодно по своему усмотрению, используя соответствующие функции.
(Конечно, лучше использовать некоторую форму аутентифицированного шифрования и вообще не нужно беспокоиться об атаке с использованием оракулов).
Desclaimer: Я не эксперт по криптографии, поэтому, пожалуйста, подтвердите мои мысли.