В чем разница с AES128 и AES256 в отношении расширения ключа и генерации byes? (и, может быть, AES192)

#c #aes

#c #aes

Вопрос:

Если я не ошибаюсь, для AES128 мы генерируем 16 байт данных, следовательно, код для него показан ниже.

 void KeyExpansion(unsigned char inputKey[16], unsigned char expandedKeys[176])
{
    for(int i=0; i<16; i  )
    expandedKeys[i] = inputKey[i];

    int bytesGenerated = 16;
    int rconIteration = 1;
    unsigned char temp[4];

     while(bytesGenerated <176)
    {
        for(int i=0; i<4; i  )
        temp[i] = expandedKeys[i   bytesGenerated - 4];

        if(bytesGenerated % 16 == 0)
        {
            keyExpansionCore(temp, rconIteration);
            rconIteration  ;
        }

        for(unsigned char a=0; a<4; a  )
        {
            expandedKeys[bytesGenerated] = expandedKeys[bytesGenerated - 16] ^ temp[a];
            bytesGenerated  ;
        }
    }
}
  

Однако, я не слишком уверен в AES256. Мы также генерируем 16 байт данных или 32 байта данных? Если он генерирует 32 байта данных, я должен вместо этого изменить свой inputKey [16] на inputKey [32]? А как насчет расширенного ключа? Я был смущен, когда увидел expandedKey[176] с inputKey[16], разве это не становится 192 байтами? (Но я видел этот код при поиске AES128.)

Ответ №1:

Отличается размер ключа, а не размер блока (который всегда равен 16 байтам). Размер ключа в AES может составлять 128, 192 или 256 бит. Больше информации, а также смотрите этот и этот ответ StackExchange.