15 10-22 altoros-fact_sheet_st_v4

Post on 22-Jan-2018

3.404 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Altoros Expertise:Шифрование:

шаблоны выбораили как защитить конфиденциальные данные

http://belarusjug.org/

@javaBY

Шалев Евгений

для Belarus Java User Group

@altoros

Немного терминов

2@javaBY@javaBY

@altoros

И ещё чуть-чуть терминов

3@javaBY@javaBY

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

Практическая (достаточная) криптостойкость:невозможность дешифрования (с текущим

развитием техники и технологий)

@altoros

Немного цифр

4@javaBY@javaBY

64 бита: 18446744073709551616 возможных

ключей

128 бит:

34028236692093846346337460743176821145

6 возможных ключей

256 бит:

11579208923731619542357098500868790785

32699846656405640394575840079131296399

36 возможных ключей

@altoros

И ещё немного цифр

5@javaBY@javaBY

Процессор Intel Xeon E5-2697 v3

Количество ядер: 14

Тактовая частота: 2.6 ГГц

Максимальная Turbo-частота: 3.6 ГГц

Операций в секунду: 14 x 3.6 x 109 = 2 36

Сколько времени понадобится для перебора (брутфорс) 56 битного ключа с

помощью процессора Intel Xeon?

2 56 / 2 36 = 2 20 (секунд) = 12 (суток)

Сколько времени понадобится для перебора (брутфорс) 128 битного ключа с

помощью процессора Intel Xeon?

2 128-36 = 2 92 (секунд) = 1,57 x 1020 (лет) = 156 911 810 693 510 314 460 (лет)

@altoros

Задача 1. Постановка задачи

7@javaBY@javaBY

Зашифровать документ, сохранить на диск и расшифровать его, используя

секретный ключ.

@altoros

Задача 1. Пути решения

8@javaBY@javaBY

Зашифровать документ, сохранить на диск и расшифровать его, используя

секретный ключ.

Решение 1. Разработка нового алгоритма

1) выполним смещение символа (байта, бита и т.д.) вправо, влево на N позиций,

2) используем таблицу перестановок,

3) запишем всё в матрицу горизонтальными строками, а прочитаем вертикальными,

4) возьмём новый текст в качестве ключа и сложим посимвольно 2 текста.

@altoros

Задача 1. Пути решения

9@javaBY@javaBY

Решение 1. Достоинства

Безопасность за счёт неизвестности.

@altoros

Задача 1. Пути решения

10@javaBY@javaBY

Решение 1. Возможные недостатки

Алгоритм может оказаться неуникальным (и уже давно изученным),

шифртекст проходит неуспешно статистические тесты,

не защищён от полного перебора,

существуют слабые ключи,

неисследованный линейный, дифференциальный и другие виды криптоанализа,

неисследованный лавинный критерий,

и т.д.

@altoros

Задача 1. Пути решения

11@javaBY@javaBY

Решение 1. Возможные недостатки

Если внимательнее присмотреться к

1) выполним смещение символа (байта, бита и т.д.) вправо, влево на N позиций,

2) используем таблицу перестановок,

3) запишем всё в матрицу горизонтальными строками, а прочитаем

вертикальными,

4) возьмём новый текст в качестве ключа и сложим посимвольно 2 текста.

@altoros

Задача 1. Пути решения

12@javaBY@javaBY

Решение 1. Возможные недостатки

Если внимательнее присмотреться к

1) выполним смещение символа (байта, бита и т.д.) вправо, влево на N позиций,

2) используем таблицу перестановок,

3) запишем всё в матрицу горизонтальными строками, а прочитаем вертикальными,

4) возьмём новый текст в качестве ключа и сложим посимвольно 2 текста.

то можно заметить

1) шифр Цезаря,

2) шифр с использованием полибианского квадрата,

3) шифр перестановок с шифрующими таблицами.

@altoros

Задача 1. Пути решения

13@javaBY@javaBY

Решение 1. Возможные недостатки

1) шифр Цезаря (VENI VIDI VICI -> YHQL YLGL YLFL),

2) шифр с использованием полибианского квадрата,

3) шифр перестановок с шифрующими таблицами.

@altoros

Задача 1. Пути решения

14@javaBY@javaBY

Решение 1. И снова немного цифр

Вероятность появления некоторых букв в русскоязычном тексте:

о — 9.2%

а — 8.7%

е — 8.1%

и — 7.5%

н — 6.4%

т — 6.3%

р — 5.5%

@altoros

Задача 1. Пути решения

15@javaBY@javaBY

Решение 1. Можно ли применять рассмотренные алгоритмы на практике?

@altoros

Задача 1. Пути решения

16@javaBY@javaBY

Решение 1. Можно ли применять рассмотренные алгоритмы на практике?

1) Мощность вычислительных ресурсов злоумышленника

не позволяет дешифровать шифртекст за адекватное

время,

@altoros

Задача 1. Пути решения

17@javaBY@javaBY

Решение 1. Можно ли применять рассмотренные алгоритмы на практике?

1) Мощность вычислительных ресурсов злоумышленника

не позволяет дешифровать шифртекст за адекватное

время,

2) низкий уровень граммотности злоумышленника,

3) сщствт йзквй брьр.

@altoros

Задача 1. Пути решения

18@javaBY@javaBY

Решение 1.

А вот посимвольное сложение 2 текстов может оказаться

самым надёжным вариантом (самым-самым).

@altoros

Задача 1. Пути решения

19@javaBY@javaBY

Решение 1.

А вот посимвольное сложение 2 текстов может оказаться

самым надёжным вариантом (самым-самым).

Требования к ключу:

1) случайное равномерное распределение,

2) совпадает по размеру с заданным текстом (или больше),

3) применяется только 1 раз.

@altoros

Задача 1. Пути решения

20@javaBY@javaBY

Решение 1.

А вот посимвольное сложение 2 текстов может оказаться

самым надёжным вариантом (самым-самым).

Требования к ключу:

1) случайное равномерное распределение,

2) совпадает по размеру с заданным текстом (или больше),

3) применяется только 1 раз.

Был придуман в 1917 году Г. Вернамом и называется шифр

Вернама!

Является единственным алгоритмом симметричного

шифрования, для которого доказана абсолютная

криптографическая стойкость.

@altoros

Задача 1. Пути решения

21@javaBY@javaBY

Решение 2. Структурируем знания

@altoros

Задача 1. Пути решения

22@javaBY@javaBY

Решение 2. Структурируем знания

Симметричные алгоритмы шифрования (один ключ для

зашифрования и расшифрования)

- блочные,

- поточные,

асимметричные алгоритмы шифрования (один ключ используется

для зашифрования, второй - для расшифрования).

@altoros

Задача 1. Пути решения

23@javaBY@javaBY

Решение 2. Структурируем знания

Петля Фейстеля

@altoros

Задача 1. Пути решения

24@javaBY@javaBY

Решение 2. Структурируем знания

Примеры алгоритмов:

DES (2DES, 3DES),

Blowfish,

IDEA,

Lucifer,

ГОСТ 28147-89,

RC5,

RC6,

MARS,

Twofish,

CAST-128/256,

и много-много других.

@altoros

Задача 1. Пути решения

25@javaBY@javaBY

Решение 2. Структурируем знания

AES - Advanced Encryption Standard

@altoros

Задача 1. Пути решения

26@javaBY@javaBY

Решение 2. Структурируем знания

AES - Advanced Encryption Standard

1. Алгоритм шифрования!

2. Ещё так назывался конкурс по выбору надёжного алгоритма

шифрования, который станет стандартом симметричного

блочного шифрования. Конкурс был организован научно-

исследовательским институтом NIST. В Европе аналогичный

конкурс назывался NESSIE.

@altoros

Задача 1. Пути решения

27@javaBY@javaBY

Решение 2. Структурируем знания. Конкурс AES

Требования к конкурсантам:

● размер блока шифруемых данных: 128 бит,

● поддерживаемые размеры ключа: 128, 192, 256 бит,

● стойкость против современных криптографических атак,

● простая, обоснованная структура алгоритма,

● отсутствие слабых и эквивалентных ключей,

● скорость шифрования на аппаратных платформах должна быть

высокой (8-64 битные),

● поддержка распараллеливания операций в многопроцессорных

системах и аппаратных реализациях,

● минимальные требования к оперативной и энергонезависимой

памяти.

@altoros

Задача 1. Пути решения

28@javaBY@javaBY

Решение 2. Структурируем знания. Конкурс AES

На конкурс было представлено 15 алгоритмов.

Финалисты конкурса:

- Rijndael (AES),

- MARS,

- Twofish,

- Serpent,

- RC6.

@altoros

Задача 1. Пути решения

29@javaBY@javaBY

Решение 2. Зашифрование с использованием Java

@altoros

Задача 1. Пути решения

30@javaBY@javaBY

Решение 2. AES: режимы работы - ЕСВ

@altoros

Задача 1. Пути решения

31@javaBY@javaBY

Решение 2. AES: режимы работы - СВС

@altoros

Задача 1. Пути решения

32@javaBY@javaBY

Решение 2. AES: режимы работы. Выбор

Что нужно знать при выборе режима работы?

1. Возможно ли появление ошибки в шифртексте.

2. Какие данные шифруем.

3. Нужно ли распараллеливать процесс зашифрования\расшифрования.

4. Нужно ли добавлять шифртекст динамически.

5. Будет ли применим алгоритм к тексту с произвольным доступом.

и т.д.

@altoros

Задача 2. Постановка задачи

33@javaBY@javaBY

Реализовать в разрабатываемой системе хранение

идентификационных данных (например, паролей).

@altoros

Задача 2. Пути решения

34@javaBY@javaBY

Вариант 1: Сохраняем логин и пароль в открытом виде (а

ещё и высылаем на почту, SMS, и в разведку:))

Вариант 2: Шифруем всё с помощью ключа, который также

сохраняется в БД.

Вариант 3: Хешируем пароль и сохраняем в БД.

Вариант 4: Хешируем пароль с солью и сохраняем в БД.

@altoros

Задача 2. Пути решения

35@javaBY@javaBY

Что же такое хеширование?

@altoros

Задача 2. Пути решения

36@javaBY@javaBY

Что же такое хеширование?

@altoros

Задача 2. Пути решения

37@javaBY@javaBY

Почему 3й вариант не так хорош?

@altoros

Задача 2. Пути решения

38@javaBY@javaBY

Почему 3й вариант не так хорош?

Вариант 3: Хешируем пароль и

сохраняем в БД.

http://cmd5.ru/

http://www.hashkiller.co.uk/

http://www.md5crack.com/

https://crackstation.net/

@altoros

Задача 2. Пути решения

39@javaBY@javaBY

Что такое соль и как она связана с хешем?

Соль - случайно сгенерированная последовательность.

Внедряется в хешируемую последовательность на любом

этапе получения хеша.

Сохраняется в БД.

@altoros

Задача 3. Постановка задачи

40@javaBY@javaBY

Передать зашифрованное сообщение между 2

пользователями, сохранив конфиденциальные данные в

секрете

@altoros

Задача 3. Пути решения

41@javaBY@javaBY

Решение 1. Алгоритм Диффи-Хеллмана.

Алиса Боб

A, g, p

А = g a mod p ----->

B

<----- B = g b mod p

K = B a mod p = g ab mod p K = A b mod p = g ab

mod p

@altoros

Задача 3. Пути решения

42@javaBY@javaBY

Решение 1. Алгоритм Диффи-Хеллмана. Пример

Алиса Боб

2, 3, 7

А = 3 2 mod 7 = 2 ----->

5

<----- 5 = 3 5 mod 7 = 5

K = 5 2 mod 7 = 3 2*5 mod 7 = 4 K = 2 5 mod 7 = 3 2*5 mod 7 = 4

@altoros

Задача 3. Пути решения

43@javaBY@javaBY

Решение 2. Асимметричный алгоритм шифрования.

Взять открытый ключ (e, n)

Взять открытый текст m

Зашифровать сообщение с использованием открытого ключа: c = E(m) =

me mod n

Принять зашифрованное сообщение c,

Взять свой закрытый ключ (d, n)

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

m = D(c) = c d mod n

@altoros

Задача 3. Пути решения

44@javaBY@javaBY

Примеры алгоритмов асимметричного шифрования.

RSA

DSA

Elgamal

ECDSA

@altoros

Задача 3. Пути решения

45@javaBY@javaBY

И снова немного цифр

минимально допустимая длина ключа - 1024 бита,

рекомендуемая длина ключа - 2048 бит.

Почему?

Потому что вычисление ключей асимметричного шифрования строится на основе простых

чисел.

@altoros

Задача 3. Пути решения

46@javaBY@javaBY

javax.crypto.IllegalBlockSizeException: Data must not be longer than 117

bytes

@altoros

Задача 3. Пути решения

47@javaBY@javaBY

Тогда логично использовать симметричное шифрование

для шифрования текстов, а асимметричное - для

шифрования передаваемых ключей?

@altoros

Задача 3. Пути решения

48@javaBY@javaBY

Так и работают протоколы защищённого обмена данными:

TLS, SSH.

В спецификации указано много алгоритмов.

1. Алгоритмы асимметричного шифрования.

2. Алгоритмы симметричного шифрования.

3. Алгоритмы хеширования.

@altoros

Задача 4. Постановка задачи

49@javaBY@javaBY

Ну и напоследок :) Новая задача! Есть шифртекст, который

возможно расшифровать с помощью любых 2 участников

из пяти.

@altoros

Задача 4. Пути решения

50@javaBY@javaBY

Схемы разделения секрета!

Например, Схема Шамира.

y = 5x2 + 23x -9

@altoros

Задача 4. Пути решения

51@javaBY@javaBY

Достоинства схем разделения секрета:

1. абсолютная криптостойкость,

2. масштабируемость,

3. гибкость и др.

Недостатки схем разделения секрета:

1. увеличение объёма данных, кратное количеству

участников,

2. не так много готовых библиотек,

3. необходима чёткая политика безопасности для

участников,

4. нет способа проверить корректность своего ключа и др.

@altoros

Ну и напоследок

52@javaBY@javaBY

На собственном горбу и на чужом

я вынянчил понятие простое:

бессмысленно идти на танк с ножом,

но если очень хочется, то стоит.

И. М. Губерман

@altoros

Если всё-таки необходимо создавать новый алгоритм

шифрования, то необходимо

53@javaBY@javaBY

- ещё раз поискать разрабатываемый алгоритм - может он

давно существует,

- выполнить линейный, диффиренциальный, лавинный

анализ алгоритма, найти уязвимые места,

- выполнить анализ расширения ключа,

- выполнить анализ шифртекстов с помощью

статистических тестов,

- выполнить анализ шифртекстов с использованием слабых

ключей,

- выполнить анализ шифрования на различных аппаратных

платформах,

...

@altoros

Итоги

54@javaBY@javaBY

@altoros

Стеганография

55@javaBY@javaBY

@altoros

Финал

56@javaBY@javaBY

Спасибо!

top related