Treyfer
![]() | Тема этой статьи Википедии может не соответствовать общему правилу по известности . ( июнь 2015 г. ) |
Эта статья нуждается в дополнительных цитатах для проверки . ( июль 2015 г. ) |
Общий | |
---|---|
Дизайнеры | Гидеон Юваль |
Впервые опубликовано | 1997 |
Деталь шифрования | |
Размеры ключей | 64 бита |
Размеры блоков | 64 бита |
Раунды | 32 |
Лучший публичный криптоанализ | |
Атака скольжением с использованием 2 32 известные открытые тексты и 2 44 работа завершается успешно в течение любого количества раундов |
В криптографии разработанный Трейфер — это блочный шифр / MAC, в 1997 году Гидеоном Ювалем. ориентированный на приложения смарт-карт Алгоритм, , чрезвычайно прост и компактен; его можно реализовать всего за 29 байт 8051 машинного кода . [1]
Трейфер имеет довольно небольшой размер ключа и размер блока по 64 бита каждый. Все операции байтово-ориентированы, и имеется единственный S-box размером 8×8 бит . S-блок остается неопределенным; реализация может просто использовать любые данные, доступные в памяти. В каждом раунде к каждому байту добавляется значение S-блока, состоящее из суммы ключевого байта и предыдущего байта данных, затем оно поворачивается на один бит влево. В конструкции делается попытка компенсировать простоту трансформации патронов за счет использования 32 патронов.
Из-за простоты своего расписания ключей , использующего одни и те же восемь ключевых байтов в каждом раунде, Трейфер был одним из первых шифров, которые оказались восприимчивыми к атаке со скольжением . Этот криптоанализ, который не зависит от количества раундов и выбора S-box, требует 2 32 известные открытые тексты и 2 44 время вычислений.
Реализация [ править ]
Простую реализацию Трейфера можно сделать следующим образом. [2]
#include <stdint.h>
#define NUMROUNDS 32
extern uint8_t const sbox[256];
void treyfer_encrypt(uint8_t * text[8], uint8_t const key[8]) {
unsigned i;
uint8_t t = *text[0];
for (i = 0; i < 8 * NUMROUNDS; i++) {
t += key[i % 8];
t = sbox[t] + *text[(i + 1) % 8];
t = (t << 1) | (t >> 7); /* Rotate left 1 bit */
*text[(i + 1) % 8] = t;
}
}
void encrypt(uint8_t * text[8], uint8_t const key[8]) {
unsigned int i = 0;
unsigned int j = 0;
uint8_t t = 0;
t = text[0];
for (j = 0; j < NUMROUNDS; j++) {
for (i = 0; i < 8; i++) {
t = t + key[i];
t = sbox[t] + *text[(i + 1) % 8];
t = (t << 1) | (t >> 7);
*text[(i + 1) % 8] = t;
}
}
}
void decrypt(uint8_t *text[8], uint8_t const key[8]) {
int i = 0;
int j = 0;
uint8_t top = 0;
uint8_t bottom = 0;
for (j = 0; j < NUMROUNDS; j++) {
for (i = 7; i >= 0; i--) {
top = *text[i] + key[i];
top = sbox[top];
bottom = *text[(i + 1) % 8];
bottom = (bottom >> 1) | (bottom << 7);
*text[(i + 1) % 8] = bottom - top;
}
}
}
См. также [ править ]
Ссылки [ править ]
- ^ «Атака на Трейфера по связанным ключам» (PDF) . encs.concordia.ca . Проверено 1 апреля 2024 г.
- ^ «C реализация Трейфера» . Stackoverflow.com . Проверено 27 ноября 2022 г.
- Дэвид Вагнер , Алексей Бирюков (1999). «Атаки слайдами» ( PostScript ) . Проверено 25 января 2007 г.