15 10-22 altoros-fact_sheet_st_v4
TRANSCRIPT
Altoros Expertise:Шифрование:
шаблоны выбораили как защитить конфиденциальные данные
http://belarusjug.org/
@javaBY
Шалев Евгений
для Belarus Java User Group
@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
- ещё раз поискать разрабатываемый алгоритм - может он
давно существует,
- выполнить линейный, диффиренциальный, лавинный
анализ алгоритма, найти уязвимые места,
- выполнить анализ расширения ключа,
- выполнить анализ шифртекстов с помощью
статистических тестов,
- выполнить анализ шифртекстов с использованием слабых
ключей,
- выполнить анализ шифрования на различных аппаратных
платформах,
...