Lyra2 — это криптографическая хеш-функция, которая может также использоваться, как функция формирования ключа. Lyra2 была создана Маркосом Симплисио младшим, Леонардо К. Алмейда, Эвертоном Р. Андраде, Паулу К. Ф. Сантушем и Паулу С. Л. М. Баррето из Политехнической школы Университета Сан-Паулу. Lyra2 является одним из широко используемых алгоритмов хеширования наряду с PBKDF2, bcrypt и scrypt. Тем не менее, до появления Lyra2 scrypt был единственным доступным решением, учитывающим затраты памяти и времени обработки.
Lyra2 представил улучшения, такие как: разделение памяти и параметров обработки, что даёт дополнительную гибкость пользователям; использование одной базовой функции губки, а не двух, используемых в scrypt; более высокая устойчивость к атакам, использующим компромиссы между временем и памятью; и более высокая производительность, позволяющая увеличить использование памяти при аналогичном времени обработки.
 Lyra2 находится в свободном доступе и имеет два расширения:
 Основные достоинства алгоритма:
 Lyra2 может быть сконфигурирован как для защиты от атакующих платформ так и для оптимизации производительности на платформе пользователя:
 Затраты на вычисления при атаке асимптотически лежат между 
  
    
      
        O
        (
        
          2
          
            n
            T
          
        
        
          R
          
            3
          
        
        )
      
    
    {\displaystyle O(2^{nT}R^{3})}
  
 и 
  
    
      
        O
        (
        
          2
          
            n
            T
          
        
        
          R
          
            n
            +
            2
          
        
        )
      
    
    {\displaystyle O(2^{nT}R^{n+2})}
  
 при использовании порядка 
  
    
      
        1
        
          /
        
        
          2
          
            n
            +
            2
          
        
      
    
    {\displaystyle 1/2^{n+2}}
  
 памяти на пользовательской платформе. Другие алгоритмы не уступают эти показателям, но на практике они имеют значение 
  
    
      
        O
        (
        R
        )
      
    
    {\displaystyle O(R)}
  
 ниже, чем у Lyra2.
 Криптографические функции губки представляют собой хеш-функции, способные итеративно обрабатывать произвольные длины входных и выходных данных. Их конструкция включает в себя перестановку 
  
    
      
        f
      
    
    {\displaystyle f}
  
 фиксированной длины, которая работает с внутренним состоянием, представленным последовательностью размером 
  
    
      
        b
        +
        c
      
    
    {\displaystyle b+c}
  
 битов, состоящим из битрейта длиной 
  
    
      
        b
      
    
    {\displaystyle b}
  
 и ёмкостью длиной 
  
    
      
        c
      
    
    {\displaystyle c}
  
, в сочетании с входными данными 
  
    
      
        M
      
    
    {\displaystyle M}
  
, разрезанными на b-битные блоки. Функция губки включает в себя операцию absorb (впитывание), которая заключается в итеративном применении 
  
    
      
        f
      
    
    {\displaystyle f}
  
 к внутреннему состоянию после применения операции 
  
    
      
        X
        O
        R
      
    
    {\displaystyle XOR}
  
 битрейта с каждым из b-битных входных битов. Заметим, что количество итераций в этой операции задаётся параметром, числом раундов 
  
    
      
        ρ
      
    
    {\displaystyle \rho }
  
. Операция squeeze (выжимание), в свою очередь, представляет собой применение 
  
    
      
        f
      
    
    {\displaystyle f}
  
 ко всему внутреннему состоянию и последующую выдачу битрейта на выход, эта операция будет выполняться, пока заданное пользователем количество битов не будет предоставлено в качестве вывода. Есть также операция duplex, которая представляет собой серию пар последовательно применённых операций absorb и squeeze.
 Lyra2 предоставляет возможность сконфигурировать алгоритм наиболее подходящим образом для нужд пользователя. Это обеспечивается за счёт различных параметров алгоритма, таких как:
 Как и любая другая криптографическая хеш-функция Lyra2 принимает на вход соль и пароль, выдавая на выходе псевдослучайную последовательность. Внутренне её память организована как двумерный массив, чьи ячейки итеративно читаются и записываются, называемые просто матрицей памяти. Также стоит заметить, что количество посещений ячейки матрицы для её пересчёта определяется пользователем, что позволяет настроить алгоритм в соответствии с возможностями вычислительных систем пользователя. Инициализация и посещение матрицы использует сочетание состояний операций absorb, squeeze и duplex основной функции губки, обеспечивая последовательный характер всего процесса. Кроме того, пользователи могут определять размер матрицы и количество повторных посещений её ячеек после инициализации, что позволяет точно настроить использование ресурсов Lyra2. Lyra2 состоит из четырёх последовательных фаз: bootstrapping, setup, wandering и wrap-up.
 Bootstrapping
 На этой стадии происходит инициализация внутреннего состояния основной функции губки. На вход основной функции губки поступают пароль, соль и другие параметры. Параметры обычно представлены длиной соли, пароля, параметром затрат по времени и по памяти, то есть теми которые задаются пользователем, также могут быть добавлены и другие. Происходит операция absorb с этими входными данными, и происходит инициализация внутреннего состояния функции губки.
 Setup
 На стадии Setup происходит инициализация матрицы памяти. Ячейки матрицы имеют длину 
  
    
      
        b
      
    
    {\displaystyle b}
  
 бит, то есть размер битрейта основной функции губки. Для повышения производительности при работе с потенциально большой матрицей памяти программа установки использует операцию duplex функции губки над столбцами матрицы памяти с меньшим числом раундов. Этот подход ускоряет операции губки и, таким образом, позволяет охватить больше позиций памяти в заданном интервале при заданных ограничениях на затраты по времени, чем при полном цикле f. Эта фаза заканчивается, когда все столбцы матрицы памяти были посещены.
 Wandering
 Фаза блуждания заключается в псевдослучайной перезаписи ячеек матрицы памяти с использованием операции duplex над столбцами так же, как и в фазе Setup. Количество итераций на этом этапе ограничено параметром затрат по времени.
 Wrap-up
 На этом этапе происходит применение операции absorb с максимальным количество раундов, а затем операции squeeze, и получение на выходе псевдослучайной последовательности заданного размера.
 Lyra2 позволяет произвести вычисления мене чем за 1 секунду при использовании 400 MB памяти при значениях параметров 
  
    
      
        T
        =
        4
      
    
    {\displaystyle T=4}
  
 и 
  
    
      
        R
        =
        
          2
          
            15
          
        
      
    
    {\displaystyle R=2^{15}}
  
.
 Тесты были проведены на процессоре Intel Xeon E5-2430 (2,20 GHz, 12 ядер, 64-битная система) с 48 GB DRAM, на операционной системе Ubuntu 14.04 LTS 64 бит, код алгоритма был скомпилирован с помощью gcc 4.9.2.