• Почему в Rijndael присутствует сравнение с 0x80?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Потому что gfmultby02 - это функция умножения на два в поле Галуа 2^8. Если вчитаться в статью и поразмыслить, то байт, который больше или равен 0х80, будет представлен в виде "х^7 + ..." - тут важен только x^7, a байт, меньше 0х80 будет представлен полиномом максимум шестой степени, т.е. х^6 + ...
    Далее, 2 (то, на что умножаем) - это х^1 + х^0 = х.
    Дальше, просто умножаем полином на х. Видно, что если байт был меньше 0х80, то получится максимум полином x^7 + ..., он входит в используемое поле. Реализует это сдвиг влево.
    Втора ветка кода реализует поведение, когда результат не входит в наше поле. XOR 0х1b, видимо, как-то связан с конкретным порождающим полиномом 100011011, тут не разбирался. Может быть, Mrrl подскажет.
    Ответ написан
    Комментировать