Трейфер
![]() | Тема этой статьи Википедии может не соответствовать общему правилу по известности . ( июнь 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 = * текст [ 0 ];
for ( i = 0 ; i < 8 * NUMROUNDS ; i ++ ) {
t += key [ i % 8 ];
т = sbox [ т ] + * текст [( я + 1 ) % 8 ];
т знак равно ( т << 1 ) | ( т >> 7 ); /* Поворот влево на 1 бит */
* text [( i + 1 ) % 8 ] = t ;
}
}
void encrypt ( uint8_t * text [ 8 ], uint8_t const key [ 8 ]) {
unsigned int i = 0 ;
беззнаковое целое j = 0 ;
uint8_t т = 0 ;
т = текст [ 0 ];
for ( j = 0 ; j < NUMROUNDS ; j ++ ) {
for ( i = 0 ; i < 8 ; i ++ ) {
t = t + key [ i ];
т = sbox [ т ] + * текст [( я + 1 ) % 8 ];
т знак равно ( т << 1 ) | ( т >> 7 );
* текст [( я + 1 ) % 8 ] = т ;
}
}
}
void decrypt ( uint8_t * text [ 8 ], uint8_t const key [ 8 ]) {
int i = 0 ;
интервал j = 0 ;
uint8_t сверху = 0 ;
uint8_t дно = 0 ;
for ( j = 0 ; j < NUMROUNDS ; j ++ ) {
for ( i = 7 ; i >= 0 ; i -- ) {
top = * text [ i ] + key [ i ];
верх = sbox [ верх ];
внизу = * текст [( я + 1 ) % 8 ];
низ = ( низ >> 1 ) | ( низ << 7 );
* текст [( i + 1 ) % 8 ] = низ - верх ;
}
}
}
См. также [ править ]
Ссылки [ править ]
- ^ «Атака на Трейфера по связанным ключам» (PDF) . encs.concordia.ca . Проверено 1 апреля 2024 г.
- ^ «C реализация Трейфера» . Stackoverflow.com . Проверено 27 ноября 2022 г.
- Дэвид Вагнер , Алексей Бирюков (1999). «Атаки слайдами» ( PostScript ) . Проверено 25 января 2007 г.