Криптография
Сергей Куницкий XBSoftware
Начнем погружение!
Криптография наука о
- конфиденциальности
- целостности данных
- аутентификации
- невозможности отказа от авторства
сохранении секретов
Способ сохранения "больших" секретов при помощи
хранения "малых"
Криптография включает
- Симметричное шифрование
- Ассиммитричное шифрование
- Хеширование
- Гомоморфное шифрование
- ....... шифрование
- ЭЦП и УЦ
- Распределение ключей
- Защита от изменений
- .....
Требования к алгоритмам шифрования
-
высокий уровень защиты данных против дешифрования и возможной модификации
-
правило Керкхоффа
-
эффект "обвала" или "лавины"
-
область значений ключа должна исключать возможность дешифрования данных путем перебора значений ключа;
-
экономичность реализации алгоритма при достаточном быстродействии
-
стоимость дешифрования данных без знания ключа должна превышать стоимость данных.
Из практики:
Перед шифрованием информацию следует подвергнуть статистическому кодированию (сжатию, архивации).
При этом уменьшится объем информации и ее избыточность, повысится энтропия (среднее количество информации, приходящееся на один символ).
Так как в сжатом тексте будут отсутствовать повторяющиеся буквы и слова, дешифрование (криптоанализ) затруднится.
Симметричное шифрование
Симметричное шифрование - это метод шифрования, при котором для защиты информации используется ключ, зная который любой может расшифровать или зашифровать данные
Симметричное шифрование
Симметричное шифрование
Симметричное шифрование
Симметричное шифрование
Симметричное шифрование
Симметричное шифрование
Алиса и Боб должны заранее договориться о
- секретном ключе
- алгоритме
- векторе инициализации (iv)
-
режиме вычислений (операционный режим)
-
заполнении пустых позиций (padding)
Симметричное шифрование
Делятся на две большие группы:
Поточные шифры
Блочные шифры
Симметричное шифрование
Блочные шифры
При блочном шифровании информация разбивается на блоки фиксированной длины и шифруется поблочно. Блочные шифры бывают двух основных видов:
- шифры перестановки
Шифры перестановок переставляют элементы открытых данных (биты, буквы, символы) в некотором новом порядке.
- шифры замены
Шифры замены заменяют элементы открытых данных на другие элементы по определенному правилу.
Симметричное шифрование
Шифры перестановки (Скитала)
Симметричное шифрование
Шифры замены
VENI VIDI VICI
YHQL YLGL YLFL
Симметричное шифрование
Блочные шифры
Блочное шифрование можно осуществлять двояко :
- Без обратной связи
2. С обратной связью
Симметричное шифрование
Операционные режимы
- Электронная шифровальная книга (ECB) Electronic code book
- Сцепление шифрованных блоков (CBC) Cipher block chaining
- Распространяющегося сцепления блоков шифра (РСВС) Propagating cipher block chaining
- Шифрованная обратная связь (CFB) Cipher feed back
- Режим обратной связи по выходу (OFB) Output feed back
- Режим счётчика (CTR) Counter mode
Симметричное шифрование
Потоковые шифры
Симметричное шифрование
Параметры симметричного шифрования:
- стойкость (более подробно рассмотрим позже)
- длина ключа
- число раундов
- длина обрабатываемого блока
- сложность аппаратной/программной реализации
- сложность преобразования
Блочные
- AES (англ. Advanced Encryption Standard) - американский стандарт шифрования
- ГОСТ 28147-89 — СНГ
- DES (англ. Data Encryption Standard) - стандарт в США
- 3DES (Triple-DES, тройной DES)
- RC2 (Шифр Ривеста (Rivest Cipher или Ron’s Cipher)) RC5
- Blowfish, Twofish, NUSH
- IDEA (International Data Encryption Algorithm, международный алгоритм шифрования данных)
- CAST (по инициалам разработчиков Carlisle Adams и Stafford Tavares)
- Khufu, Khafre, Kuznechik
Потоковые
- RC4 (алгоритм шифрования с ключом переменной длины)
- SEAL (Software Efficient Algorithm, программно-эффективный алгоритм)
- WAKE (World Auto Key Encryption algorithm, всемирный алгоритм шифрования на автоматическом ключе)
- Скорость
- Простота реализации (простые операции)
- Относительно небольшая длина ключа для сопоставимой стойкости
- Изученность
Симметричное шифрование
Итоги
- Сложные системы распределения ключей в большой сети
- Обмен ключами... Как????
Ассиметричное шифрование
В асимметричных алгоритмах шифрования (или криптографии с открытым ключом) для зашифровывания информации используют
один ключ (открытый)
Эти ключи различны и не могут быть получены один из другого
а для расшифровывания - другой (секретный/закрытый).
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Ассиметричное шифрование
Почти идеально, но...
Открытый ключ A для Б
Открытый ключ Ч для Б
Открытый ключ Б для А
Открытый ключ Ч для А
Алиса
Боб
Чак
Чак имеет 2 пары ключей для каждого собеседника
Ассиметричное шифрование
Почти идеально, но...
Шифрованный текст
для Б
Зашифровывает сообщение А для Б своим секретным ключом
Боб расшифровывает и уверен что все ок
Алиса
Боб
Чак
Расшифровывает текст своим секретным ключом для А
Ассиметричное шифрование
Применение
Ассиметричное шифрование
- RSA (Rivest-Shamir-Adleman)
- DSA (Digital Signature Algorithm)
- Elgamal (Шифросистема Эль-Гамаля)
- Diffie-Hellman (Обмен ключами Диффи — Хелмана)
- ECDSA (Elliptic Curve Digital Signature Algorithm) — алгоритм с открытым ключом для создания цифровой подписи.
- ГОСТ Р 34.10-2001
- Rabin
- Luc
- McEliece
- Williams System (Криптосистема Уильямса)
Ассиметричное шифрование
Итоги
- Не нужно предварительно передавать секретный ключ по надёжному каналу.
- Только одной стороне известен ключ шифрования, который нужно держать в секрете .
- Пару можно не менять значительное время
- В больших сетях число ключей в асимметричной криптосистеме значительно меньше, чем в симметричной.
- В алгоритм сложнее внести изменения.
- Более длинные ключи (64 бит симметричного ключа = 512 бит RSA)
Гибридное шифрование
Суть проста
2. Симметричный ключ шифруется открытым ассиметричным ключом
1. Сообщение шифруется симметричным ключом
Гомоморфное шифрование
xv ~= Av
yv ~= Bv
(AB)v = A (Bv) ~= A yv = y (Av) ~= (xy)v
(A + B)v = Av + Bv ~= xv + yv ~= (x + y)v
Бонус:
Алгоритм Диффи-Хеллмана
- Алиса кладет свое письмо в железный ящик и, заперев его на замок, отправляет Бобу.
- Боб при получении ящика, берет свой замок и, дополнительно заперев им ящик, отправляет обратно.
- Алисе ящик приходит уже с двумя замками (напомню с первым замком Алисы от которого у нее есть ключ, и со вторым — Боба, от которого ключ есть есть только у Боба).
- Алиса снимает свой замок, и отправляет ящик обратно Бобу
- Бобу приходит ящик с уже одним его замком от которого у него есть ключ
- Боб отпирает оставшийся его замок своим ключем, и читает сообщение
Бонус:
Алгоритм Диффи-Хеллмана
Но суть в том что не существуют таких шифров, которые бы позволили снять шифр из под другого шифра. То есть этап где Алиса снимает свой шифр невозможен
К сожалению, все имеющиеся алгоритмы до сих пор требуют снятия шифров в той очереди в которой они были примененны.
Бонус:
Алгоритм Диффи-Хеллмана
Для реализации такого способа передачи сообщений используют одностороннюю функцию - функция после применения которой практически невозможно получить исходное значение (вычисление по модулю)
Бонус:
Алгоритм Диффи-Хеллмана
Смешивание красок
Надежность шифра
Зависит от следующего:
- Секретность ключа.
- Сложность поиска(отгадывания) ключа
- Взлом шифровального алгоритма.
- «Лазейки».
- Атака с известным текстом
- Известный фрагмент текста.
Тест на усваивание:
SSL (англ. secure sockets layer — уровень защищённых сокетов) — криптографический протокол, который подразумевает более безопасную связь. Он использует асимметричную криптографию для аутентификации ключей обмена, симметричное шифрование для сохранения конфиденциальности, коды аутентификации сообщений (MAC) для целостности сообщений
Бонус: Имитовставка
Имитовста́вка (MAC, англ. message authentication code — код аутентификации сообщения) — средство обеспечения имитозащиты в протоколах аутентификации сообщений с доверяющими друг другу участниками — специальный набор символов, который добавляется к сообщению и предназначен для обеспечения его целостности и аутентификации источника данных.
Добавляется хеш-функция к концу сообщения, а потом сверяется на стороне приемника, если совпали - значит все ок.
Для защиты от фальсификации (имитации) сообщения применяется имитовставка, выработанная с использованием секретного элемента (ключа), известного только отправителю и получателю.
Криптографическая хешфункция
В идеале криптографический хеширующий алгоритм должен удовлетворять следующим требованиям:
- трудно восстановить входные данные по выходным (то есть алгоритм должен быть односторонним);
- трудно подобрать такие входные данные, которые дали бы на выходе заранее заданный результат;
- трудно найти два варианта входных данных, которые дали бы одинаковые выходные результаты;
- изменение одного бита во входных данных приводит к изменению, примерно, половины битов в результате.
Криптография и JavaScript
- Шифрование и дешифрование на клиенте
- Хранение файлов на сервере "кусками"
- Расшаривание файлов с другими участниками системы
ТЗ
Создание пары ключей
var crypt = new JSEncrypt({default_key_size: 1024}),
privateKey = "",
publicKey = "" ;
crypt.getKey();
privateKey = crypt.getPrivateKey();
publicKey = crypt.getPublicKey();
Прозрачное шифрование
Прозрачное шифрование
var simKey = CryptoJS.lib.WordArray.random(48)
.toString(CryptoJS.enc.UTF8);
var encryptedFileWordArray = CryptoJS.Rabbit.encrypt(
file, simKey, {
mode: CryptoJS.mode.CFB,
padding: CryptoJS.pad.AnsiX923
});
Crypto-js (//code.google.com/p/crypto-js/)
Прозрачное шифрование
var rsaEncrypt = new JSEncrypt(),
encryptSimKey = "";
rsaEncrypt.setPublicKey(publicKey);
encryptSimKey = rsaEncrypt.encrypt(simKey);
Прозрачное шифрование
Прозрачное шифрование
var rsaDecrypt = new JSEncrypt(),
simKey = "";
rsaDecrypt.setPrivateKey(privateKey);
simKey = rsaDecrypt.decrypt(encryptSimKey)
Прозрачное шифрование
var decryptedFile = CryptoJS.Rabbit.decrypt(file, simKey, {
mode: CryptoJS.mode.CFB,
padding: CryptoJS.pad.AnsiX923
});
Шаринг с другими пользователями
Цифровой конверт
var rsaDecrypt = new JSEncrypt(),
simKey = "";
rsaDecrypt.setPrivateKey(ownerPrivateKey);
simKey = rsaDecrypt.decrypt(encryptSimKey)
var rsaEncrypt = new JSEncrypt(),
encryptSimKey = "";
rsaEncrypt.setPublicKey(publicKeyUser2);
encryptSimKey = rsaEncrypt.encrypt(simKey);
Итоги
//codifile.com
Вопросы
Спасибо
Ивану Маркину ( за честно стыренные взятые картинки из его презентации)
google - за отличную поисковую систему
Wikipedia - за доступ к информации и 25 часовую работу в сутки
Habrahabr - за техническую подготовленность
XBSoftware - за возможность и подопытных кроликов
Жене - за то что терпит все мои выходки и всякие митапы )
И всем Вам за внимание !
kunitskiys@gmail.com
Crypto
By innko
Crypto
- 3,353