Crab — это блочный шифр, разработанный Бартом Калиски и Мэттом Робшоу из лаборатории RSA на первом семинаре FSE в 1993. Crab был разработан, чтобы продемонстрировать, как идеи хеш-функций могут быть использованы для создания быстрого шифрования. Алгоритм шифрования очень похож на MD5.
 Crab использует блок из 1024 байтов. Поскольку Crab представлен больше для исследовательских целей, то окончательные алгоритмы генерации ключей не представлены. Авторы предлагают метод, который может превратить 80-битный ключ в три необходимых подключа, хотя алгоритм может легко принимать ключи переменной длины.
 Crab использует два набора длинных подключей:
 Эти подключи должны быть вычислены перед шифрованием и дешифрованием.
 Crab был предложен как новая тестовая идея, а не как рабочий алгоритм. Он использует многие из тех же методов, что и MD5. Бихам утверждает, что такой размер блока (1024 байта) упрощает алгоритм криптоанализа. С другой стороны, Crab может эффективно использовать ключи длиной и больше 80 бит. В таком случае «алгоритм криптоанализа не упрощается».
 Для шифрования 1024-байтного блока 
  
    
      
        X
      
    
    {\displaystyle X}
  
:
 
  
    
      
        X
        <<<
        b
      
    
    {\displaystyle X<<<b}
  
 обозначает левое вращение 
  
    
      
        X
      
    
    {\displaystyle X}
  
 на 
  
    
      
        b
      
    
    {\displaystyle b}
  
 бит.
 Функции 
  
    
      
        
          F
          
            r
          
        
      
    
    {\displaystyle F_{r}}
  
 применяются 8 раз при обработке каждой из 64 независимых групп в каждой итерации, они используют булевы функции 
  
    
      
        
          f
          
            r
          
        
      
    
    {\displaystyle f_{r}}
  
, который зависят от итерации. В остальном 
  
    
      
        
          F
          
            r
          
        
      
    
    {\displaystyle F_{r}}
  
 одинаковы и могут быть представлены следующим образом:
 
  
    
      
        
          F
          
            r
          
        
        (
        B
        ,
        C
        ,
        D
        ,
        S
        )
        =
        (
        B
         
        +
         
        
          f
          
            r
          
        
        (
        B
        ,
        C
        ,
        D
        )
        +
        S
        )
      
    
    {\displaystyle F_{r}(B,C,D,S)=(B~+~f_{r}(B,C,D)+S)}
  

 Функции 
  
    
      
        
          f
          
            r
          
        
      
    
    {\displaystyle f_{r}}
  
 совпадают с функциями из MD5:
 Дешифрование происходит по обратному алгоритму.
 Генерация подключей — это задача, которая может быть решена различными способами. Начальная перестановка 
  
    
      
        P
      
    
    {\displaystyle P}
  
 может быть сгенерирована с использованием ключа 
  
    
      
        K
      
    
    {\displaystyle K}
  
 вариациями методов, представленных в Knuth; один вариант того, как массив перестановок 
  
    
      
        P
      
    
    {\displaystyle P}
  
 может быть сгенерирован из 80-битного ключа 
  
    
      
        K
      
    
    {\displaystyle K}
  
, представлен ниже.
 Массив 
  
    
      
        S
      
    
    {\displaystyle S}
  
 из 2048 32-битных слов может быть сгенерирован так же, из того же 80-битного ключа или из другого ключа. Авторы предупреждают, что эти детали должны «рассматриваться как мотивационные; вполне могут быть альтернативные схемы, которые являются более эффективными и предлагают улучшенную безопасность»
 В начале первой итерации слова открытого текста перемещаются в 64 группы из четырёх в псевдослучайном порядке с использованием перестановки 
  
    
      
        P
      
    
    {\displaystyle P}
  
. В каждой группе слова обрабатываются таким образом, что все четыре слова в конце итерации зависят от каждого входного слова и некоторой ключевой зависимости. В последующих итерациях мы связываем группы вместе, используя метод, полученный из используемых при расчете дискретного преобразования Фурье методов.
 В первой итерации первая группа использует слова 
  
    
      
        
          X
          
            0
          
        
        ,
        
          X
          
            1
          
        
        ,
        
          X
          
            2
          
        
      
    
    {\displaystyle X_{0},X_{1},X_{2}}
  
 и 
  
    
      
        
          X
          
            3
          
        
      
    
    {\displaystyle X_{3}}
  
. Во второй итерации первая группа принимает модифицированные слова 
  
    
      
        
          X
          
            0
          
        
        ,
        
          X
          
            4
          
        
        ,
        
          X
          
            8
          
        
      
    
    {\displaystyle X_{0},X_{4},X_{8}}
  
 и 
  
    
      
        
          X
          
            12
          
        
      
    
    {\displaystyle X_{12}}
  
. Первая группа третьей итерации принимает модифицированные 
  
    
      
        
          X
          
            0
          
        
        ,
        
          X
          
            16
          
        
        ,
        
          X
          
            32
          
        
      
    
    {\displaystyle X_{0},X_{16},X_{32}}
  
 и 
  
    
      
        
          X
          
            48
          
        
      
    
    {\displaystyle X_{48}}
  
, а в последней итерации используется недавно модифицированный 
  
    
      
        
          X
          
            0
          
        
        ,
        
          X
          
            64
          
        
        ,
        
          X
          
            128
          
        
      
    
    {\displaystyle X_{0},X_{64},X_{128}}
  
 и 
  
    
      
        
          X
          
            192
          
        
      
    
    {\displaystyle X_{192}}
  
.
 Это обобщено на другие группы, и в конце четвёртой итерации получается полный диффузионный эффект, при котором каждое выходное слово зависит от каждого из 256 текстовых слов ввода. Этот эффект легко достигается за счет использования переменной вращения бит, используемой для индексации перестановочных текстовых слов. Его можно обобщить следующим образом, где 
  
    
      
        r
        =
        0
        ,
        .
        .
        .
        ,
        3
      
    
    {\displaystyle r=0,...,3}
  
 обозначает итератор:
   В программной реализации каждая итерация состоит из обработки 64 групп, где для обработки требуется восемь шагов. Каждый шаг требует от 6 до 8 операций, поэтому реализация может выполняться очень быстро. Индексирование 
  
    
      
        
          X
          
            i
          
        
      
    
    {\displaystyle X_{i}}
  
 легко оптимизируется. Время инициализации перестановок 
  
    
      
        P
      
    
    {\displaystyle P}
  
 и слова 
  
    
      
        
          X
          
            i
          
        
      
    
    {\displaystyle X_{i}}
  
 являются фиксированными накладными расходами и зависят от используемых методов. Эти накладные расходы становятся менее значимыми, чем больше сообщение. Возможно, количество ключевых зависимых слов 
  
    
      
        
          X
          
            i
          
        
      
    
    {\displaystyle X_{i}}
  
 может быть уменьшено без ущерба для безопасности, что сократит время, необходимое для предварительного вычисления ключевого зависимого материала.
 Каждая итерация фактически представляет собой 64 приложения 
  
    
      
        
          
            1
            2
          
        
      
    
    {\displaystyle {1 \over 2}}
  
 итерации хеширования MD5 (каждая итерация в MD5 имеет 16 шагов). Интересно, что слова буфера в хеш-функции заменяются открытым текстом и его модификациями в блочном шифре, в то время как сообщение в хеш-функции становится ключевым элементом в блочном шифре.
 В блочном шифре есть 4 итерации, как в MD5, и поэтому 
  
    
      
        256
        ×
        32
      
    
    {\displaystyle 256\times 32}
  
 бита зашифрованы с использованием эквивалента 
  
    
      
        64
        ×
        
          
            1
            2
          
        
      
    
    {\displaystyle 64\times {1 \over 2}}
  
 MD5 хэшей из 512 бит. Это дает приблизительную оценку скорости шифрования около 500 Кбайт/с, что вдвое меньше скорости MD5.
 Обработка каждой из 64 групп в каждой итерации независима. Это дает прекрасную возможность для распараллеливания алгоритма, что сразу же даст повышение скорости.
 Рассмотрим перевернутый 26-й бит (0x04000000) одного из 256 текстовых слов. Этот конкретный бит часто затрагивает только три слова в первой итерации. При следующих трех итерациях число затронутых слов будет увеличиваться в 4 раза, что приведет к 
  
    
      
        3
        ×
        4
        ×
        4
        ×
        4
        =
        192
      
    
    {\displaystyle 3\times 4\times 4\times 4=192}
  
 затронутым словам, оставив 64 слова нетронутыми. Это происходит с экспериментальной вероятностью в 
  
    
      
        0.096
        =
        
          2
          
            −
            3.4
          
        
      
    
    {\displaystyle 0.096=2^{-3.4}}
  
. Это немедленно приводит к тому, что для различающей атаки (англ. Distinguishing attacks) нужно не больше дюжины выбранных блоков открытого текста.
 Анализ атаки с восстановлением ключа (англ. Key-recovery attack) немного сложнее из-за отрывочного характера описания генерации ключа. Если предположить, что ключ может быть эффективно восстановлен из перестановки 
  
    
      
        P
      
    
    {\displaystyle P}
  
, авторы считают, что для атаки с восстановлением ключа не потребуется более 
  
    
      
        
          2
          
            16
          
        
      
    
    {\displaystyle 2^{16}}
  
 выбранных блоков открытого текста и пренебрежительных вычислительных усилий.