MARS — шифр-кандидат в AES, разработанный корпорацией IBM, создавшей в своё время DES. По заявлению IBM, в алгоритм MARS вложен 25-летний криптоаналитический опыт фирмы, и наряду с высокой криптографической стойкостью шифр допускает эффективную реализацию даже в таких ограниченных рамках, какие характерны для смарт-карт.
 В разработке шифра принял участие Дон Копперсмит, один из авторов шифра Lucifer (DES), известный рядом статей по криптологии: улучшение структуры S-блоков против дифференциального криптоанализа, метод быстрого перемножения матриц(алгоритм Копперсмита — Винограда), криптоанализ RSA. Кроме него в разработке алгоритма приняли участие: Кэролин Барвик, Эдвард Д’Эвиньон, Росарио Женаро, Шай Халеви, Чаранжит Джутла, Стивен M. Матьяс Мл., Люк О'Коннор, Мохамед Перьевян, Дэвид Саффорд, Невенко Зунич.
 По правилам конкурса AES, участники могли вносить незначительные изменения в свои алгоритмы. Воспользовавшись этим правилом, авторы MARSa изменили процедуру расширения ключа, что позволило снизить требования к энергонезависимой и оперативной памяти. Ниже будет предоставлена модифицированная версия алгоритма.
 По результатам конкурса AES, MARS вышел в финал, но уступил Rijndael. После объявления результатов (19 Мая 2000 года) группа разработчиков составила своё собственное мнение о конкурсе AES, где дала комментарии на претензии к своему детищу.
 Сейчас MARS распространяется по всему миру под лицензией Royalty-free.
 MARS является блочно-симметричным шифром с секретным ключом. Размер блока при шифровании 128 бита, размер ключа может варьироваться от 128 до 448 бит включительно (кратные 32 битам). Создатели стремились совместить в своём алгоритме быстроту кодирования и стойкость шифра. В результате получился один из самых криптостойких алгоритмов, участвовавших в конкурсе AES.
 Алгоритм уникален тем, что использовал практически все существующие технологии, применяемые в криптоалгоритмах, а именно:
 Использование двойного перемешивания представляет сложность для криптоанализа, что некоторые относят к недостаткам алгоритма. В то же время на данный момент не существует каких-либо эффективных атак на алгоритм, хотя некоторые ключи могут генерировать слабые подключи.
 Авторы шифра исходили из следующих предположений:
 В шифре MARS использовались следующие методы шифрования:
 Структуру алгоритма MARS можно описать следующим образом:
 В первой фазе на каждое слово данных накладывается слово ключа, а затем происходит восемь раундов смешивания согласно сети Фейстеля третьего типа совместно с некоторыми дополнительными смешиваниями. В каждом раунде мы используем одно слово данных (называемое, исходным словом) для модификации трёх других слов(называемые, целевыми словами). Мы рассматриваем четыре байта исходного слова в качестве индексов на двух S-блоков, S0 и S1, каждый, состоящий из 256 32-разрядных слов, а далее проводим операции XOR или добавления данных соответствующего S-блока в три других слова.
 Если четыре байта исходного слова b0, b1, b2, b3 (где b0 является первым байтом, а b3 является старшим байтом), то мы используем b0, b2, как индексы в блока S0 и байты b1, b3, как индексы в S-блоке S1. Сначала сделаем XOR S0 к первому целевому слову, а затем прибавим S1 к тому же слову. Мы также добавляем S0 ко второму целевому слову и XOR блока-S1 к третьему целевому слову. В заключении, мы вращаем исходное слово на 24 бита вправо.
 В следующем раунде мы вращаем имеющиеся у нас четыре слова: таким образом, нынешнее первое целевое слово становится следующим исходным словом, текущее второе целевое слово становится новым первым целевым словом, третье целевое слово становится следующую вторым целевым словом, и текущее исходное слово становится третьим целевым словом.
 Более того, после каждого из четырёх раундов мы добавляем одно из целевых слов обратно в исходное слово. В частности, после первого и пятого раундов мы добавим третье целевое слово обратно в исходное слово, а после второго и шестого раунда мы добавляем первое целевое слово обратно в исходное слово. Причиной этих дополнительных операций смешивания, является ликвидация нескольких простых дифференциальных криптоатак в фазе перемешивания, чтобы нарушить симметрию в фазе смешивания и получить быстрый поток.
 Криптографическое ядро MARS — сеть Фейстеля 3-го типа, содержащая в себе 16 раундов. В каждом раунде мы используем ключевую Е-функцию, которая является комбинацией умножений, вращений, а также обращений к S-блокам. Функция принимает на вход одно слово данных, а возвращает три слова, с которыми впоследствии будет осуществлена операция сложения или XOR к другим трем словам данным. В дополнении исходное слово вращается на 13 бит влево.
 Для обеспечения, серьёзного сопротивления к криптоатакам, три выходных значения Е-функции(O1, O2, O3) используются в первых восьми раундах и в последних восьми раундах в разных порядках. В первые восемь раундов мы добавляем O1 и O2 к первому и второму целевому слову, соответственно, и XOR O3 к третьему целевому слову. За последние восемь раундов, мы добавляем O1 и O2 к третьему и второму целевому слову, соответственно, и XOR O3 к первому целевому слову.
 E-функция принимает в качестве входных данных одно слово данных и использует ещё два ключевых слов, производя на выходе три слова. В этой функции мы используем три временные переменные, обозначаемые L, M и R (для левой, средней и правой).
 Изначально мы устанавливаем в R значение исходного слова смещенного на 13 бит влево, а в M — сумма исходных слов и первого ключевого слова. Затем мы используем первые девять битов M как индекс к одной из 512 S-блоков (которое получается совмещением S0 и S1 смешиванием фазы), и сохраняем в L значение соответствующего S-блока.
 Затем умножим второе ключевое слово на R, сохранив значение в R. Затем вращаем R на 5 позиций влево (так, 5 старших битов становятся 5 нижними битами R после вращения). Тогда мы делаем XOR R в L, а также просматриваем пять нижних бит R для определения величины сдвига (от 0 до 31), и вращаем M влево на эту величину. Далее мы вращаем R ещё на 5 позиций влево и делаем XOR в L. В заключении, мы вновь смотрим на 5 младших битов R, как на величину вращения и вращаем L на эту величину влево. Таким образом результат работы E-функции — 3 слова (по порядку): L, M, R.
 Обратное перемешивание практически совпадает с прямым перемешиванием, за исключением того факта, что данные обрабатываются в обратном порядке. То есть, если бы мы совместили прямое и обратное перемешивание так, чтобы их выходы и входы были бы соединены в обратном порядке (D[0] прямого и D[3] обратного, D[1] прямого и D[2] обратного), то не увидели бы результата перемешивания.
Как и в прямом смешивание, здесь мы тоже используем одно исходное слово и три целевых. Рассмотрим четыре первых байта исходного слова: b0, b1, b2, b3. Будем использовать b0, b2 как индекс к S-блоку — S1, а b1b3 для S0. Сделаем XOR S1[b0] в первое целевое слово, вычтем S0[b3] из второго слова, вычтем S1[b2] из третьего целевого слов и
затем проделаем XOR S0[b1] также к третьему целевому слову. Наконец, мы поворачиваем исходное слово на 24 позиций влево.
Для следующего раунда мы вращаем имеющиеся слова так, чтобы нынешнее первое целевое слово стало следующим
исходным словом, текущее второе целевое слово стало первым целевым словом, текущее третье
целевое слово стало вторым целевым словом, и текущее исходное слово стало третьим целевым словом.
Кроме того, перед одним из четырёх «особенных» раундов мы вычитаем одно из целевых слов из исходного слова: перед четвёртым и восьмым раундами мы вычитаем первое целевое слово, перед третьем и седьмым раундами мы вычтем третье целевое слово из исходного.
 Процесс декодирования обратен процессу кодирования. Код дешифрования похож (но не идентичен) на код шифрования.
 
 При создании S-блока S, его элементы генерировались псевдослучайным генератором, после чего тестировались на различные линейные и дифференциальные свойства. Псевдослучайные S-блоки были сгенерированы при следующих параметрах:
 
  
    
      
        i
        =
        0
        …
        102
        ;
        j
        =
        0
        …
        4
        ,
        S
        [
        5
        i
        +
        j
        ]
        =
        
          S
          H
          A
          −
          1
        
        (
        5
        i
        |
        c
        1
        |
        c
        2
        |
        c
        3
        )
      
    
    {\displaystyle i=0\ldots 102;j=0\ldots 4,S[5i+j]=\mathrm {SHA-1} (5i\vert c1\vert c2\vert c3)}
  

 (где 
  
    
      
        S
        H
        A
        −
        1
        (
        j
        )
      
    
    {\displaystyle SHA-1(j)}
  
 — есть j-ое слово на выходе SHA-1)
Здесь считается, что i — 32-битное без знаковое, целое число, а c1, c2, c3 есть некоторые константы. В реализации IBM: c1 = 0xb7e15162; c2 = 0x243f6a88 (которые являются двоичной записью дробной части 
  
    
      
        e
      
    
    {\displaystyle e}
  
 и 
  
    
      
        π
      
    
    {\displaystyle \pi }
  
 соответственно). c3 изменялось пока не были подобраны S-блоки с подходящими свойствами. SHA-1 работает над потоками данных и использует прямой порядок байт.
 Дифференциальные свойства.
 Линейные свойства
 процедура расширения ключа расширяет заданный массив ключей k[], состоящий из n 32-битных слов (где n целое число от 4 до 14) в массив K[] из 40 элементов. Исходный ключ не должен придерживаться какой-либо структуры. В дополнение, процедура расширения ключа гарантирует следующие свойства ключевого слова, используемого при перемножении в криптографическом ядре алгоритма:
 Опишем алгоритм расширения ключа.
 Шифр был кандидатом AES, после небольших изменений в ходе первого раунда конкурса, связанных с изменением процедуры расширения ключа, MARS успешно прошёл в финал.
 В финале конкурса у MARS был выделен целый ряд недостатков:
 На все эти недостатки экспертная комиссия выделила одно крупное достоинство данного алгоритма — его симметричность.
Исходя из выделенных недостатков, MARS ожидаемо не стал победителем AES.
 После оглашения результатов конкурса AES, группа создателей MARS выпустила свою рецензию на весь конкурс. В ней были поставлены под сомнение критерии оценки конкурса. Они считали, что главной характеристикой шифра должна быть именно надёжность и его стойкость (к примеру, к brute-force атакам)
Кроме того они ответили на каждую претензию со стороны жюри к своему алгоритму.
 1. MARS не подходит для аппаратной реализации
Среди претензий к шифру были его трудная аппаратная реализация, которая могла повлечь за собой утяжеление работы Интернета, а также внедрение больших, по своим размерам, схем.
 2. MARS не подходит для реализации на устройствах с малой памятью
Для реализации на SMART картах есть у алгоритмов есть всего 128 байт памяти. Для процедуры расширения ключа MARS требует 512 байт.
 3. MARS не подходит для реализации на ППВМ
MARS не подходит для реализации на платформах, где не разрешено вращение(зависящих от сторонних факторов).
 4. Расширение ключа MARS является очень тяжёлой операцией
 В заключении разработчики приводят свой анализ алгоритмов участников AES,по результатам которого MARS, наряду с Serpent, являлся лучшим кандидатом на звание AES.
 В настоящее время нет эффективных атак на данный алгоритм. Хотя у него есть несколько слабых сторон: