Где взять ключ шифрования AES Key Schedule?

1

Я реализовал ключевое расписание AES на Java, но есть одна вещь, о которой я смущен. В wikipedia (http://en.wikipedia.org/wiki/Rijndael_key_schedule#Key_schedule_description) говорится:

Первые n байтов расширенного ключа - это просто ключ шифрования.

Откуда этот ключ шифрования? Является ли он генерируется случайным образом и если да, какие ограничения вы должны сгенерировать с помощью и т.д.?

На данный момент у меня есть метод, который просто генерирует случайный массив из 16 байтов:

public int[][] initvec() {
    int[][] key = new int[4][Nk];
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < Nk; j++) {
            key[i][j] = mrnd.nextInt(255) % (0xff + 1);
            int keyval = key[i][j];
            // System.out.printf("%x,",keyval);
        }
        // System.out.println("");
    }
    return key;
}

Я также хотел бы напечатать этот ключ, однако, поскольку java только подписал байты, если я использую число, большее 127 (в настоящее время 255), я получу отрицательные числа, которые не могут быть представлены в строке правильно, используя что-то вроде этого, где outputbyte byte [] и имеет целые числа, преобразованные в байты и хранящиеся внутри него:

String output = new String(outputbyte, StandardCharsets.UTF_8);

Возможно ли использование 127?

  • 1
    key[i][j] = mrnd.nextInt(255) % (0xff + 1); ? Вы используете 255 довольно много там, но вы все еще исключаете его. Это может не чувствовать себя желанным больше.
Теги:
aes
schedule
rijndael
symmetric-key

1 ответ

2
Лучший ответ

Откуда этот ключ шифрования?

Это ключ, который пользователь поставляет, когда что-то нужно зашифровать.

Является ли он генерируется случайным образом и если да, какие ограничения вы должны сгенерировать с помощью и т.д.?

Он может генерироваться случайным образом. Тогда задача состоит в том, чтобы сообщить об этом другой стороне. Например, можно отправить ключ, зашифрованный с помощью криптографии с открытым ключом. Это называется гибридным шифрованием.

Часто ключевой обменный протокол, такой как Диффи-Хеллман, используется для ведения переговоров по секретности без его отправки, полностью собранного по кабелю. Это обеспечивает прямую секретность, потому что каждая сторона самостоятельно вычисляет секретный ключ.

Возможно ли использование 127?

Нет, это не так, потому что вы все это делаете неправильно. Байты от 0x00 до 0x1F не являются печатными символами. Поэтому, когда вы пытаетесь напечатать эти байты даже с уменьшенным байтовым доменом до 127, вы не увидите фактический ключ. Кроме того, ограничивая домен, вы также помогаете злоумышленникам, потому что теперь им не нужно набирать полный домен для каждого байта ключа.

При создании случайного ключа вам необходимо использовать полную емкость ключевого байта. Когда вы хотите увидеть ключ, вы можете закодировать его с помощью Base 64 или Hex.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню