Я изучал различные криптоатаки, и одной из атак, которую я недавно изучал, была атака padding oracle. Теперь я в основном это понимаю, но есть один аспект атаки padding oracle, о котором меня смущают разные учителя из разных источников:
Допустим, у меня есть URL:
http://somesite.com/place?ciphertext=aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbccccccccccccccccdddddddddddddddddd
(Предположим, что зашифрованный текст находится в шестнадцатеричном формате, а «аа» — это один байт, поэтому в целом этот зашифрованный текст состоит из 32 байтов, расположенных в двух 16-байтовых блоках. В этом примере первый блок начинается с первого «аа» и заканчивается последним 'bb'. Все, что после этого, является 2-м блоком зашифрованного текста.)
Теперь я знаю, что для запуска атаки оракула заполнения вы должны добавить блок нулей в качестве вектора инициализации к этому зашифрованному тексту. Однако я получаю неоднозначные и непоследовательные сигналы о том, где будут добавлены эти 0.
Например, в одном источнике казалось, что 0 будут добавлены в качестве префикса к первому блоку зашифрованного текста, поэтому приведенный выше URL-адрес станет таким:
http://somesite.com/place?ciphertext=0000000000000000000000000000000000aaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbccccccccccccccccdddddddddddddddd
Однако другой источник создал впечатление, что нули заменят первый блок зашифрованного текста, поэтому URL-адрес станет таким:
http://somesite.com/place?ciphertext=000000000000000000000000000000000ccccccccccccccccdddddddddddddddd
Тем не менее, другой источник создал впечатление, что вы добавляете нули в конец зашифрованного текста следующим образом:
http://somesite.com/place?ciphertext=aaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbccccccccccccccdddddddddddddd00000000000000000000000000000000000
Что это, или это необязательно?
Кроме того, описанный выше метод попытки атаки оракула заполнения предполагает, что зашифрованный текст присутствует в URL-адресе, но что, если вы хотите расшифровать файл, такой как файл cookie или что-то подобное? При атаке через URL-адрес вы можете получить от сервера такие ответы, как статус 200 и 500. Однако, если вы пытаетесь расшифровать просто файл на вашем компьютере, то что будет выступать в роли сервера? Насколько мне известно, если это просто файл, то нет сервера, который мог бы дать вам какие-либо ответы или какие-либо ошибки «badPaddingException» или что-то в этом роде.Это также означает, что нет сервера, который действительно знал бы промежуточные байты, которые использовались при шифровании. Как тогда вы будете расшифровывать файл (в отличие от URL-адреса), используя метод атаки оракула заполнения?