Это не официальный сайт wikipedia.org 01.01.2023

Grain — Википедия

Grain

Grain - симметричный алгоритм синхронного потокового шифрования, ориентированный, в первую очередь на аппаратную реализацию. Шифр представлен на конкурсе eSTREAM в 2004 году Мартином Хеллом, Томасом Юханссоном и Вилли Мейером. Алгоритм стал одним из финалистов конкурса во втором профиле (аппаратно ориентированные шифры).

ОписаниеПравить

 
Структура шифра Grain

Шифр состоит из трёх основных блоков: двух 80-битных регистров сдвига с обратной связью и выходной функции. Один из регистров обладает линейной функцией обратной связи (LFSR), второй регистр имеет нелинейную функцию обратной связи (NFSR). Внутреннее состояние шифра полностью определяется регистрами сдвига.

Регистр сдвига с линейной обратной связьюПравить

Функция обратной связи данного регистра задаётся примитивным полиномом f ( x ) = 1 + x 18 + x 29 + x 42 + x 57 + x 67 + x 80  

Если представить состояние регистра в виде s i , s i + 1 , . . , s i + 79  , то следующий младший (правый) бит будет задаваться соотношением

 
  
    
      
        
          s
          
            i
            +
            80
          
        
        =
        
          s
          
            i
            +
            62
          
        
        +
        
          s
          
            i
            +
            51
          
        
        +
        
          s
          
            i
            +
            38
          
        
        +
        
          s
          
            i
            +
            23
          
        
        +
        
          s
          
            i
            +
            13
          
        
        +
        
          s
          
            i
          
        
      
    
    
   

Регистр сдвига с нелинейной обратной связьюПравить

Функция обратной связи регистра с нелинейной обратной связью задаётся соотношением

  
  
    
      
        g
        (
        x
        )
        =
        1
        +
        
          x
          
            18
          
        
        +
        
          x
          
            20
          
        
        +
        
          x
          
            28
          
        
        +
        
          x
          
            35
          
        
        +
        
          x
          
            43
          
        
        +
        
          x
          
            47
          
        
        +
        
          x
          
            52
          
        
        +
        
          x
          
            59
          
        
        +
        
          x
          
            66
          
        
        +
        
          x
          
            71
          
        
        +
        
          x
          
            80
          
        
        +
        
          x
          
            17
          
        
        
          x
          
            20
          
        
        +
        
          x
          
            43
          
        
        
          x
          
            47
          
        
        +
        
          x
          
            65
          
        
        
          x
          
            71
          
        
        +
        
          x
          
            20
          
        
        
          x
          
            28
          
        
        
          x
          
            35
          
        
        +
        
          x
          
            47
          
        
        
          x
          
            52
          
        
        
          x
          
            59
          
        
        +
        
          x
          
            17
          
        
        
          x
          
            35
          
        
        
          x
          
            52
          
        
        
          x
          
            71
          
        
        +
        
          x
          
            20
          
        
        
          x
          
            28
          
        
        
          x
          
            43
          
        
        
          x
          
            47
          
        
        +
        
          x
          
            17
          
        
        
          x
          
            20
          
        
        
          x
          
            59
          
        
        
          x
          
            65
          
        
        +
        
          x
          
            17
          
        
        
          x
          
            20
          
        
        
          x
          
            28
          
        
        
          x
          
            35
          
        
        
          x
          
            43
          
        
        +
        
          x
          
            47
          
        
        
          x
          
            52
          
        
        
          x
          
            59
          
        
        
          x
          
            65
          
        
        
          x
          
            71
          
        
        +
        
          x
          
            28
          
        
        
          x
          
            35
          
        
        
          x
          
            43
          
        
        
          x
          
            47
          
        
        
          x
          
            52
          
        
        
          x
          
            59
          
        
      
    
    
   

Для битов b i   регистра NLSR получается выражение

  
  
    
      
        
          b
          
            i
            +
            80
          
        
        =
        
          s
          
            i
          
        
        +
        
          b
          
            i
            +
            62
          
        
        +
        
          b
          
            i
            +
            60
          
        
        +
        
          b
          
            i
            +
            52
          
        
        +
        
          b
          
            i
            +
            45
          
        
        +
        
          b
          
            i
            +
            37
          
        
        +
        
          b
          
            i
            +
            33
          
        
        +
        
          b
          
            i
            +
            28
          
        
        +
        
          b
          
            i
            +
            21
          
        
        +
        
          b
          
            i
            +
            14
          
        
        +
        
          b
          
            i
            +
            9
          
        
        +
        
          b
          
            i
          
        
        +
        
          b
          
            i
            +
            63
          
        
        
          b
          
            i
            +
            60
          
        
        +
        
          b
          
            i
            +
            37
          
        
        
          b
          
            i
            +
            33
          
        
        +
        
          b
          
            i
            +
            15
          
        
        
          b
          
            i
            +
            9
          
        
        +
        
          b
          
            i
            +
            60
          
        
        
          b
          
            i
            +
            52
          
        
        
          b
          
            i
            +
            45
          
        
        +
        
          b
          
            i
            +
            33
          
        
        
          b
          
            i
            +
            28
          
        
        
          b
          
            i
            +
            21
          
        
        +
        
          b
          
            i
            +
            63
          
        
        
          b
          
            i
            +
            45
          
        
        
          b
          
            i
            +
            28
          
        
        
          b
          
            i
            +
            9
          
        
        +
        
          b
          
            i
            +
            60
          
        
        
          b
          
            i
            +
            52
          
        
        
          b
          
            i
            +
            37
          
        
        
          b
          
            i
            +
            33
          
        
        +
        
          b
          
            i
            +
            63
          
        
        
          b
          
            i
            +
            60
          
        
        
          b
          
            i
            +
            21
          
        
        
          b
          
            i
            +
            15
          
        
        +
        
          b
          
            i
            +
            63
          
        
        
          b
          
            i
            +
            60
          
        
        
          b
          
            i
            +
            52
          
        
        
          b
          
            i
            +
            45
          
        
        
          b
          
            i
            +
            37
          
        
        +
        
          b
          
            i
            +
            33
          
        
        
          b
          
            i
            +
            28
          
        
        
          b
          
            i
            +
            21
          
        
        
          b
          
            i
            +
            15
          
        
        
          b
          
            i
            +
            9
          
        
        +
        
          b
          
            i
            +
            52
          
        
        
          b
          
            i
            +
            45
          
        
        
          b
          
            i
            +
            37
          
        
        
          b
          
            i
            +
            33
          
        
        
          b
          
            i
            +
            28
          
        
        
          b
          
            i
            +
            21
          
        
      
    
    
   

Выходная функцияПравить

В качестве аргументов функция h ( x )   принимает значения битов из LFSR и NFSR:

 
  
    
      
        h
        (
        x
        )
        =
        
          x
          
            1
          
        
        +
        
          x
          
            4
          
        
        +
        
          x
          
            0
          
        
        
          x
          
            3
          
        
        +
        
          x
          
            2
          
        
        
          x
          
            3
          
        
        +
        
          x
          
            3
          
        
        
          x
          
            4
          
        
        +
        
          x
          
            0
          
        
        
          x
          
            1
          
        
        
          x
          
            2
          
        
        +
        
          x
          
            0
          
        
        
          x
          
            2
          
        
        
          x
          
            3
          
        
        +
        
          x
          
            0
          
        
        
          x
          
            2
          
        
        
          x
          
            4
          
        
        +
        
          x
          
            1
          
        
        
          x
          
            2
          
        
        
          x
          
            4
          
        
        +
        
          x
          
            2
          
        
        
          x
          
            3
          
        
        
          x
          
            4
          
        
      
    
    
   

где x 0 , x 1 , x 2 , x 3 , x 4   равны соответственно s i + 3 , s i + 25 , s i + 46 , s i + 64 , b i + 63  

В результате на выход поступает

 
  
    
      
        
          z
          
            i
          
        
        =
        
          
          
            k
            
            A
          
        
        
          b
          
            i
            +
            k
          
        
        +
        h
        (
        
          s
          
            i
            +
            3
          
        
        ,
        
          s
          
            i
            +
            25
          
        
        ,
        
          s
          
            i
            +
            46
          
        
        ,
        
          s
          
            i
            +
            64
          
        
        ,
        
          b
          
            i
            +
            63
          
        
        )
        ,
        A
        =
        {
        1
        ,
        2
        ,
        4
        ,
        10
        ,
        31
        ,
        43
        ,
        56
        }
      
    
    
   

Инициализация состоянияПравить

 
Инициализация состояния

Шифр принимает на вход 80-битный ключ (secret key) и 64-битный вектор инициализации (initialization vector).

Перед тем как начать генерировать ключевой поток (keystream), шифр должен инициализировать своё состояние.
Пусть K = K 0 , . . , K 79   и I V = I V 0 , . . , I V 63  . Можно выделить следующие этапы инициализации состояния:

1. Загрузка битов ключа 
  
    
      
        K
      
    
    
    в NFSR, 
  
    
      
        
          b
          
            i
          
        
        =
        
          K
          
            i
          
        
        ,
        0
        
        i
        
        79
      
    
    
   
2. Загрузка 
  
    
      
        I
        V
      
    
    
    в LFSR, 
  
    
      
        
          s
          
            i
          
        
        =
        I
        
          V
          
            i
          
        
        ,
        0
        
        i
        
        63
      
    
    
   
3. Заполнение оставшихся битов LFSR единицами, 
  
    
      
        
          s
          
            i
          
        
        =
        1
        ,
        64
        
        i
        
        79
      
    
    
   

После этого шифр 160 тактов работает без выдачи ключевого потока, но результат работы шифра подаётся на вход NFSR и LFSR.

ПроизводительностьПравить

 
Ускорение шифрования

В случае когда аппаратная платформа не ограничена в ресурсах, то шифр позволяет достаточно просто увеличить скорость шифрования. Т.к. оба регистра каждый такт сдвигаются на 1 бит, то если просто реализовать несколько раз ( N  ) функции обратной связи f ( x )   и g ( x )   и выходную функцию h ( x )  , то скорость шифрования можно увеличить в N   раз, при этом регистры сдвига за каждый такт также должны сдвигаться на N   бит. Младшие 15 бит регистров сдвига не используются в функциях обратной связи и поэтому N   может принимать значения от 1 до 16.
Т.к. при инициализации состояния шифр должен отработать 160 тактов, то это накладывает некоторые ограничения на значение N  , i = 160 / N   должно быть целым числом.

БезопасностьПравить

Еще в версии 0.0 авторы заявляли, что шифр разработан таким образом, что невозможна атака быстрее, чем полный перебор ключей. Таким образом, лучшая атака должна иметь сложность порядка 280.

В спецификации версии 0.0 Grain [1] авторы утверждали: "Grain предоставляет большую надёжность, чем некоторые другие известные аппаратно ориентированные шифры. Хорошо известными примерами таких шифров является E0, используемый в Bluetooth, и A5/1, используемый в GSM. Хотя эти шифры просты в реализации, доказано, что они очень ненадёжны. По сравнению с E0 и A5/1, Grain предоставляет большую надёжность, сохраняя простоту реализации".

В версии 0.0 был обнаружен ряд серьёзных уязвимостей, поэтому в обновлённой версии 1.0 [2], у шифра немного изменилась выходная функция и функция обратной связи у регистра с нелинейтой обратной функцией (NFSR). После этого, с октября 2006 года не известно ни об одной атаке против Grain версии 1.0 быстрее, чем полный перебор. Однако, в сентябре 2006 года была опубликована попытка атаки на ключ[3]. В статье утверждается: "мы нашли связанные ключи и начальные значения в Grain, для любой пары(K,IV) с вероятностью 1/22 существует связанная пара (K’,IV’) которая генерирует ключевой поток сдвинутый на 1 бит. Хотя это и не является успешной атакой на ключ, данный факт показывает возможною слабость шифра при инициализации состояния."

См. такжеПравить

ПримечанияПравить

  1. Martin Hell, Thomas Johansson, Willi Meier. Grain - A Stream Cipher for Constrained Environments (англ.) : journal. — eSTREAM, 2005. — 29 April. Архивировано 26 мая 2011 года.
  2. Martin Hell, Thomas Johansson, Willi Meier. Grain - A Stream Cipher for Constrained Environments (англ.) : journal. — eSTREAM, 2006. Архивировано 27 мая 2011 года.
  3. Ozgul Kucuk. Slide Resynchronization Attack on the Initialization of Grain 1.0 (англ.) : journal. — eSTREAM, 2006. — 16 July. Архивировано 27 мая 2011 года.

СсылкиПравить