Сложение по модулю 2 n в блочном шифровании

I СЛОЖЕНИЕ ПО МОДУЛЮ 2" В БЛОЧНОМ ШИФРОВАНИИ

Козлов Александр Александрович, г. Москва Карондеев Андрей Михайлович, г. Москва Силков Александр Андреевич, г. Москва

Работа посвящена анализу стойкости алгоритмов блочного шифрования, в которых операция смешения с ключом реализована как операция сложения по модулю 2n. В ходе работы был произведен анализ криптографических свойств операции сложения по модулю 2n. Предложены линейные и нелинейные аппроксимации данной операции, а также изучены особенности их использования при проведении криптоанализа. Приведен пример использования аппроксимаций сложения по модулю 2n для проведения атаки типа Known Plaintext Attack на шифр, имеющий структуру SP-сети. Описанная в работе атака позволяет восстановить ключ быстрее полного перебора, что было подтверждено моделированием на ЭВМ. Показано, что замена операции побитового исключающего или (XOR) на сложение по модулю 2n приводит к увеличению стойкости блочных шифров.

Ключевые слова: блочное шифрование (block cipher), сложение по модулю 2 (addition modulo 2n)n, линейный криптоанализ (linear cryptanalysis), нелинейный криптоанализ (nonlinear cryptanalysis).

ADDITION MODULO 2" IN BLOCK CIPHERS |

Aleksander Kozlov, Moscow Andrey Karondeev, Moscow Aleksander Silkov, Moscow

The article is devoted to the analysis of the resistance of block cipher algorithm which uses addition modulo 2n operation as a key mixing operation. Analysis of cryptographic properties of the addition modulo 2n operation was carried out in the article. Authors propose linear and non-linear approximations and their usage in cryptanalysis. Authors give an example of usage of the approximations for Known Plaintext Attack on SP-network cipher. Described attack allows recovering the key faster than full key lookup, it was confirmed by computer simulation. It has been shown that replacement of exclusive or operation(XOR) on the addition modulo 2n operation increases resistance of block ciphers.

Keywords: addition modulo 2n, block cipher, cryptanalysis.

Составной частью любого блочного шифра является процедура смешения с ключом. Обычно данная процедура представляет собой не что иное, как простой XOR промежуточного информационного блока c раундовым ключом (как в алгоритмах DES, AES и др.), однако ничто не мешает использовать любую другую операцию, например сложение по модуль 2n (как в алгоритме ГОСТ 28147-89). С учетом современной элементной базы и структуры большинства блочных шифров замена операции XOR на сложение по модулю 2n не приведет к существенному возрастанию сложности как программной, так и аппаратной реализации шифра. Целью данной работы является изучение криптографических свойств операции + mod 2n, а также, на примере SP-сетей, оценка

сложности проведения линейного криптоанализа при использовании операции сложения по модулю 2".

1. Линейные статистические аналоги сложения по модулю 2n

Рассмотрим сложение двух n-разрядных чисел

A+B=D mod 2n, где A=(an-1, an_2,..., a0) , B=(bn-1, bn-2,., b0) , D=(dn-1, dn_2,..., d0). Его можно рассматривать как отображение:

Add-. %ln ^ ,

Обозначим аргументы этого отображения через Е — {an_1,bn_1,... , a0,b0).

Схематическое изображение блока £ mod 2П приведено на рисунке 1.

an-\bn.i öi&iOo&o

II -ММ

тахиеж2' \Wv№\ < 2

2i

Теорема 1.

Для любого

i > 0 max

uezi

Prob

Доказательство. Выразим вектор значений булевой функции р^ через вектор р^:

Таблица 1.

Функция переноса Рг

Т—Г

¿4-1 4 4

Рис. 1. Блок сложения по модулю 2"

Рассмотрим координатные функции данного отображения. Их можно записать в виде:

di = aj©bj©pj,

где Pi - значение переноса в i-й разряд, которое определяется следующим рекуррентным соотношением:

Pi = ai_ibi_ivai_ipi_ivbi_ipi_il р0 = 0,

Утверждение 1.

Piiai-1,bi_i,^,aQ,bQ) £ äff ,Vi>0,

где через aff обозначено множество аффинных функций.

Доказательство.

Преобразуем рекуррентное соотношение (3) Pi = а1_1Ь1_1@а1_1р1_1@Ь1_1р1_1, после чего становится видно, что АНФ, полученная развертыванием этого рекуррентного соотношения, содержит одночлены aj_1aj_2 ... a1a0b0 и VA_2 ... b1a0b0.

Как следствие, из равенства Парсеваля получаем соотношение:

a i-1 b i-1 a i-2 b . i-2 a 0 b 0 Pi

0 0 0 0 . . 0 0 0

0 0 1 1 . . 1 1 0

0 1 0 0 . . 0 0 Pl-l

0 1 1 1 . . 1 1

1 0 0 0 . . 0 0 Pi-l

1 0 1 1 . . 1 1

1 1 0 0 . . 0 0 1

1 1 1 1 . . 1 1 1

где через Wf(u) обозначен и-й коэффициент Уолша-Адамара.

Утверждение 2. Для любого I > 0 функция ,а0,Ь0) не имеет фиктивных переменных.

Доказательство. В самом деле, переменная существенна тогда и только тогда, когда она входит в АНФ, а ранее при доказательстве утверждения 1 уже было показано, что АНФ функции Р1 содержит одночлены ...а^аоЬо и

^¿—1^1—2 Ь1а0Ь0.

(р^ = (и,х) + с) < 0.75, причем равенство достигается на двух линейных функциях и

Если оба старших разряда слагаемых А и В равны нулю, переноса не происходит вне зависимости от значений остальных разрядов. Если же оба старших разряда равны единице, то перенос происходит всегда. В оставшихся случаях значение функции pj совпадает со значением переноса из предыдущего разряда. Рассмотрим действительнозначный аналог функции р^ и вычислим преобразование Уолша-Адамара (преобразование Фурье 2 типа). Вычисления будем производить по схеме «бабочка». Последние две итерации приведены в таблице 2.

В связи с особенностями строения функции ри столбец значений поделен на четыре части. Вычисляя преобразование Уолша-Адамара по схеме «бабочка» на предпредпоследнем шаге имеем вычисленные вектора преобразовании от каждого из четырех блоков. Далее проделываем последние два шага.

Проанализируем результат. Из (5) следует, что значения элементов первого и четвертого блоков по модулю строго меньше 22-1. Поэтому значение 22-1 является максимальным по модулю среди коэффициентов Уолша-Адамара функции pj и достигается на двух аргументах (1000.. .00) и (0100.. .00). Эти наборы соответствуют линейным функциям а¡Л и Ь¡Л , а значение коэффициента Уолша-Адама-ра дает указанную вероятность совпадения 0.75. Как следствие из теоремы 1 имеем: Для любого j от 0 до п для i-го выхода Ю = А + В той 2п справедливы соотношения:

Таблица 2.

Вычисление преобразования Уолша-Адамара от функции переноса pt

a b ... a b i-1 i-1 0 0 Pi A Pi

0 0 0 ... 0 0 0 0 1 ... 1 1 0 0 1 1 22i-2 0 0 22i"2 + WpVi(0) p i-i

0 1 0 . 0 0 0 1 1 . 1 1 p i-1 Л i-1 i-1 P i-i 22i~2 + ^(0) p i-i 22i-l 0 0

1 0 0 . 0 0 1 0 1 . 1 1 p i-1 V., i-1 W*. p l-l Wp._i(0)-22i~2 Pi-i 22i-l 0 0

1 1 0 . 0 0 1 1 1 . 1 1 1 1 -1 -1 _22i-2 0 0 22i~2 + Wp._i(0) p i-i -2W-Q. Pi-i

РгоЬ(й1 = а1Ь1а1_1) =

= РгоЬ{йг = а1Ъ1Ъ1_1) = 0.75, причем эти два статистических аналога функции di является наилучшими среди всех линейных.

Утверждение 3.

VI > 0 = 2¿ << 221

Доказательство.

a0 b0 Vi = aob о

0 0 0 1 2

0 1 0 1 2

1 0 0 1 2

1 1 1 -1 -2

Доказательство.

Для начала рассмотрим сумму переносов из соседних разрядов

Таблица 3.

Сумма mod 2 соседних разрядов переноса

a b i-1 i-1 Vi^Vi-1

0 0 Pi-1

0 1 0

1 0 0

1 1 Pi-l©l

В самом деле, для i = 1 утверждение верно, далее утверждение непосредственно следует из таблицы 2.

При проведении криптоанализа может быть полезна аппроксимация для суммы mod 2 нескольких выходов. Докажем следующее утверждение о сумме mod 2 для двух соседних выходов блока + mod 2n

Утверждение 4.

Prob(didi_1 = афЬф 1) = 0.75

Из таблицы 3 видно, что ProЬ(p¿©p¿_1 = а1_1фЬ1_1ф1) = 0.75. Прибавим к обеим частям равенства величин а1Ь1фа1_1фЬ1_1 и тогда, с учетом (2), получаем искомое утверждение: РгоЬСф©^! = «¿©£¿©1) = 0.75.

Стоит отметить, что рассмотренные ранее статистические соотношения справедливы, только если случайные величины а^Ь^а^^Ь^,... ,а0,Ь0 независимы и принимают всевозможные значения с равной вероятностью.

2. Особенности использования линейных статистических аналогов при анализе блочных

шифров

Для примера рассмотрим один из классических блочных шифров, а именно SP-сеть с размером блока 16 бит и 4 раундами шифрования. Каждый цикл, кроме последнего, состоит из 3 операций (Рисунок 2):

• Смешение информационного блока с под-ключом

• Нелинейное преобразование, реализуемое слоем S-блоков

• Линейное преобразование, реализуемое P-блоком

В последнем раунде отсутствует P-блок и на выходе производится смешение с подключом (Рисунок 2). Ключ состоит из 80 бит, разбитых на 5 подключей по 16 бит каждый. В качестве операции смешения с подключом будем использовать сложение mod 2n.

Все P-блоки описываются таблицей 4: Все S-блоки описываются таблицей 5: Обозначим, через Ху - j-й бит входа в i-й блок смешения с подключом, через Yij- - j-й бит выхода из i-того блока смешения с подключом, а через Vij- j-й бит выхода из i-го слоя S-box.

Будем считать, что нам известно достаточное количество пар открытый текст - шифртекст полученных на одном ключе, который необходимо восстановить.

Важной особенностью является то, что ключ фиксирован и операция смешения с подключом по сути представляет собой сложение с константой. Поэтому полученные ранее оценки для линейной аппроксимации сложения не работают, так как были получены из предположения, что оба слагаемых выбираются случайно равновероятно, а это условие не выполняется при фиксированном ключе. Более того справедливо следующие утверждения: Утверждение 5.

Для любого i > 0 и любого фиксированного к = (к0,k1,^,ki_1) Prob(pi = + £ ,

где о < < 0.5 причем обе границы

достигаются на ключах fc = (0,0,... ,0) и

ММ 1 М 1 мм мм

к I

мм 1 1 1 1 1 1 1 Mil

Sn S12 S,3 S|4

IIM 1 1 1 MM

Р

ММ 1 М 1 мм мм

к Z

мм 1 1 1 1 1 1 1 Mil

S2| S22 S23 $24

мм 1 1 1 1 MM

р

! 1 М 1 1 1 1 1 1 1 II II

к 3

мм 1 1 1 1 1 1 1 MM

S3! S32 S33 S34

мм 1 1 1 1 1 1 1 1 II

р

мм мм мм мм

к 4

Mil 1 1 1 1 1 1 1 MM

S41 S42 S43 S44

мм 1 1 1 1 1 1 1 1 1 II

к

MM MM Mil II 1 1

Рис. 2. Схема шифрования

1ц_1 ЗГо

+к modi"

Уя-1 У1 Уо

Рис. 3. Блок смешения с подключом

Таблица 4.

Описание P-блока

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15

Таблица 5.

Описание S-блока

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

9 0 12 4 6 2 10 8 3 11 15 5 7 14 1 13

к = (0,0, ...,0,1) соответственно.

Доказательство.

При к = (0,0, ...,0) перенос в 1-й разряд никогда не происходит, а мы считаем, что он происходит при х{1=\. Так как функция х^ линейна и как следствие равновесна, при данной аппроксимации мы ошибемся в половине случаев.

При к = (0,0, .„,0,1) перенос в (/-1)-й разряд никогда не происходит, а перенос в /-й разряд полностью определяется значением х/_1.

Утверждение 6.

Для любого / > 0 и любого фиксированного

к = (к0,к1,^,к1_1) РгоЬ(р1 = к1_1) = ± + е,, где 0 < < 0.5 причем обе границы

достигаются на ключах к = (0,0,... ,0,1) и к = (0,0, ...,0) соответственно.

Доказательство.

При к = (0,0, ...,0,1) перенос в (/-1)-й разряд никогда не происходит, а перенос в /-й разряд полностью определяется значением , а мы считаем, что он есть всегда. Так как функция х1Л линейна и как следствие равновесна, при данной аппроксимации мы ошибемся в половине случаев.

При к = (0,0, „.,0) перенос в /-й разряд никогда не происходит, как мы и предполагаем.

Утверждения 5, 6 можно усилить, а именно при изменении к = ,к0) от

до (1,0, ...,0) РгоЬ(р1 = монотонно воз-

растает от 0.5 до 1, а РгоЬ(р1 = кмонотонно убывает от 1 до 0.5, а также при изменении к = (к1_1,к1_2,^,к0) от (1,0,...,0) до (1,1, -.,1) РгоЬ(р1 = монотонно убыва-

ет от 1 до 0.5, а РгоЬ(р1 = кмонотонно воз-

растает от 0.5 до 1 (Рисунок 4). Последнее легко доказывается сопоставлением случаев, когда действительно происходит перенос, с функциями и соответственно.

Учитывая то, что на фиксированном заранее не известном ключе рассмотренные ранее соотношения в худшем случаи, будут выполняться с вероятностью 0.5 (bias=0) из чего следует, что они не применимы для проведения линейного криптоанализа в чистом виде. Однако учитывая тот факт, что наихудший случай соответствует ключу специального вида, а также монотонность изменения вероятности выполнения аппроксимации при изменении ключа, в случаи возникновения неуспеха при проведении линейного криптоанализа с использованием данных соотношений можно получить некую информацию о ключе.

3. Нелинейные статистические аналоги сложения по модулю 2n

Пусть X+K=Y mod 2n, где X=(xn1, xn_2, ...,

xo) Y=(yn-P Уп2 ..., Уоl а K=(kn-P К-2, ..., к0 )=const.

Лемма 1. Для любого фиксированного K, найдется zтакое, что

Vi > 0 Prob(yt = Х[фг  Х[_х) = - + £,

где \s\ > -

4

Доказательство. Зафиксируем к1 и к-_у При к= 0, к-1= 0

Рис. 4. Значения РгоЬф^кц) иProb(pi=xi-j) на различных к

xi xi-l Vi xi@z

0 0 0 0

0 1 Pi-1 z

1 0 1 1

1 1 1ерг-1 !z

Если Prob(pi j=0)>0.5 , положим z = 1.

При к== 0, к{-1= 1

xi. xi.-1 Vi Xj_-1 z  xi_1

0 0 Pi-1 0

0 1 1 z

1 0 1ерг-1 1

1 1 0 10Z

Если Prob(pi j=0)>0.5 , положим z = 0. При к= 1, к{-1= 0

xi xi-l Vi xi-l@Z

0 0 1 0

0 1 iePi-i z

1 0 0 1

1 1 pi-1 10Z

Если РюЬ(рц=0)>0.5 , положим z = 0 , иначе z = 1.

При к= 1, ki1= 1

xi xi-l yi xi-l@Z

0 0 1 ерг-1 0

0 1 0 z

1 0 Pi-1 1

1 1 1 10Z

Если РгоЪ(рц=0)>0.5 , положим 2 = 0 , иначе 2 = 1.

Соотношения, рассмотренные в леммах 1, 2, в отличие от рассмотренных линейных статистических аналогов, выполняются с преобладанием существенно больше нуля для всех ключей К, соответственно их использование повышает эффективность при проведении криптоанализа.

Если РгоЬ(р-1=0)>0.5 , положим 2 = 1 , иначе 2 = 0.

Лемма 2. Для любого фиксированного К, найдется 2 такое, что

VI > 0 РгоЬ{у1@у1_1 = хфг  х1_1) + где И >7

Доказательство. Зафиксируем кг- и к^.

При кг= 0, кгЧ= 0

xi xi-l УгУг-1 xi@Z

0 0 Pi-1 0

0 1 1 z

1 0 iep/,-1 1

1 1 0 1Z

Если Probpi i=0)>0.5 , положим z = 1 0.

При k= 0, k i-1= 1

Xi Xi-1 У/.ФУ/.-1 Х,_1 Z

0 0 1 0

0 1 lPi-i z

1 0 0 1

1 1 Pi-1 10Z

Если Prob(pi 7=0)>0.5 , положим z = С 1.

При k= 1, k i-1=0

xi. xi-1 УгФУг-1 Х,_1 Z

0 0 iePi-i 0

0 1 0 z

1 0 Pi-1 1

1 1 1 1Z

Если Prob(pi 7=0)>0.5 , положим z = 1 0.

При k= 1, k i-1= 1

xi xi-l УгУг-1

0 0 0 0

0 1 Pi-1 z

1 0 1 1

1 1 1ерг-1 10Z

4. Криптоанализ на основе нелинейных статистических аналогов

4.1. Описание метода криптоанализа

Общая идея - получить соотношение связывающие некоторые биты открытого текста, шифртекста и ключа, которое выполняется с преобладанием (bias) существенно больше нуля. Соотношения (7) и (8) не являются линейными. Покажем, что это не мешает использовать лемму о накапливании. Действительно как было показано в леммах 1, 2 для фиксированного ключа, наибольшее преобладание достигается при фиксированном z. После подстановки этого z, нелинейных членов не остается и мы получаем линейное соотношение, для которого применима лемма о накапливании. Заранее не известно при каком z преобладание будет максимальным, но известно что среди всех значений будет такое z для которого мы гарантировано получим высокое преобладание, поэтому будем перебирать всевозможные z. По сути, каждому z соответствует конкретное линейное соотношение. Итого получаем несколько линейных соотношений, одно из которых гарантированно выполняется с большим значением преобладания.

С учетом вышесказанного произведем криптоанализ блочного шифра описанного в 3 части, более детальная схема которого изображена на рисунке 5.

5.1. Используемые аппроксимации

Для проведения анализа будем использовать следующие соотношения:

1. Нелинейные соотношения для блока сложения по модулю 2":

• 3z: xi@xi_iz = yi выполняется с преобладанием больше ^

• 3z: xi@xi_1z = У[ФУ[_1 выполняется с преобладанием больше -

4

2. Корреляционную матрицу S-блока

Корреляционная матрица рассматриваемого S-блока приведена на таблице 6 (выделенные

ciphertext ... Со

Рис. 5. Схема шифрования

ячеики соответствуют аппроксимациям, используемым в активных S-блоках).

Активными назовем S-блоки, лежащие на пути аппроксимации. Активные блоки выбирались так, чтобы максимизировать преобладание конечного соотношения. При построении пути, при аппроксимации блока сложения два соседних входных разряда переходят в соответствующие два выходных разряда или только в старший. Поэтому необходимо строить путь, покрывающий соседние разряды, что сильно усложняет процесс построения пути.

На рисунке 6 приведен путь используемой аппроксимации:

Согласно приведенной схеме активными S-блоками являются:

S\,\, S2,1, S2,2,

Для каждого из них выполняются следующие линейные соотношения:

з

• S\\ : V2 = Y1Y2 , выполняется с bias = -

• S21 : VQ = Y0 , выполняется с bias = -

8 3

• S22: Vq = Y3 , выполняется с bias = -

з

• S34 : VQ = Y3 , выполняется с bias = -

Для каждого из блоков сложения используем следующие соотношения:

• Bz0: Xlil4@Xlil3z0 = Yltl4Yltl3 , выполняется с

i

bias >-

4

• Bzt: X212X211z1 = Y2fi2Y2fll , выполняется с

bias > -

4

• Bz2:X3i3X32z2 = Y3 3, выполняется с bias > -

4

• Bz3: X212X211z3 = Y212 , выполняется с

i

bias >-

4

• X4)0 = Y4Q , выполняется с bias > ^ Итоговое соотношение имеют вид:

^l,3©zl

subkey Къ mixing

5з1 S32 S33

subkey К4 mixing

1 1 1 '

541 S42 S43 S44

C)5 ... ciphertext ... Co

Рис. 6. Схема нелинейной аппроксимации

Значение У13 получаем из открытого текста и перебираемой части первого подключа, а У4,0 из шифртекста и перебираемой части пятого подключа, обращения часть схемы. Согласно лемме о накапливании, для соотношения (9) найдутся такие что на истинном ключе оно будет выполняется с преобладанием больше чем 2б  Г-)3  Г-)3  - =

^ 8 4096

соответственно для проведения криптоанализа в худшем случаи будет достаточно иметь порядка 23 тысяч пар открытый текст - шифртекст. Для проведения анализа необходимо перебрать 4 младших бита первого и пятого под-ключей, а также значения (24+4+2 =210). Моделирование на ЭВМ показало, что в среднем достаточно порядка 5 тысяч пар открытый текст - шифртекст. Ход криптоанализа: 1. Для восстанавливаемого ключа сгенерировать 23000 случайных пар открытый текст - шифртекст

Y3 , Y2 , Yo

S -Вох

v3 , vz , v2 , 4.

Рис. 7. Схема Б-блока

Таблица 6.

Корреляционная матрица S-блока

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 nil

0000 16 0 0 0 0 0 0 0 0 0 0 0 0 0

0001 -4 0 -4 -4 0 -4 0 12 0 -4 0 -4 0 -4

0010 -4 -8 4 4 0 4 -8 0 -8 -8 0 0 0

0011 0 0 0 8 0 0 -8 0 -8 -8 0 0 0

0100 0 4 -4 0 0 12 4 4 -4 0 0 -4 0 0

0101 -4 -4 0 -4 0 0 -4 0 -4 4 -8 -4 8 4

оно 4 4 0 -4 0 0 -4 0 -4 4 8 4 8 -4

0111 -8 4 4 0 0 4 -4 -4 4 0 0 -4 -4 0 -8

1000 0 4 4 0 -8 -4 4 0 -8 4 -4 -4 -4

1001 -4 4 0 4 0 0 -4 4 8 4 -4 -4 8

1010 -4 -4 -8 4 -8 0 4 -4 0 4 -4 4

1011 0 4 4 0 0 4 4 0 -4 -4 8 -8 4

1100 0 -8 0 8 0 -4 -4 4 -4 4 -4 -4 -4

1101 -4 -8 4 0 -4 0 4 0 -4 4 8 4

1110 4 -4 -4 -8 4 -8 0 4 0 -4 4 0 -4

1111 8 0 8 0 0 4 4 4 -4 -4 -4 4 -4

2. Для сгенерированных пар и всевозможных значений части ключа К10 , К1;1 , К12 , К13 , К50 , К5д, К52, К53 и параметров 20, г-^ вычислить преобладание, с которым выполняется соотношение 9

3. Значения части ключа, на котором соотношение 9 выполняется с наибольшим преобладанием принимаем за истинные.

4. Оставшиеся биты находим тотальным опробованием

6. Выводы

Проведенный выше анализ использования сложения по модулю 2п в блочном шифровании показывает:

• Замена блока смешения с ключом со сложения по модулю 2 на сложение по модулю 2п существенно осложняет линейный криптоанализ.

• Существуют алгоритмы взлома такого шифра быстрее полного перебора, при этом наилучшие результаты дает использование нелинейных аппроксимаций.

• При проведении криптоанализа возможно комбинирование описанных методов. Сначала необходимо воспользоваться методом линейных аппроксимаций, а при неудачном исходе использовать нелинейные методы.

Литература

1. Mukhopadhyay D., Design and Analysis of Cellular Automata Based Cryptographic Algorithms. Ph.D. thesis, Indian Institute of Technology, Kharagpur, 2007

2. Matsui M., Linear Cryptanalysis Method for DES Cipher. In Advances in Cryptology—Proceedings of EUROCRYPT '93, LNCS v. 765, pp. 386 - 397, Springer, 1994

3. Li An-Ping, Linear Approximating to Integer Addition. https://eprint.iacr.org/2006/457.pdf

4. Wallen J., Linear Approximations of Addition Modulo 2n. Fast Software Encryption — FSE'2003, LNCS v. 288, pp. 261 - 273, Springer-Verlag, 2003.