Сергей Куницкий XBSoftware
сохранении секретов
Способ сохранения "больших" секретов при помощи
хранения "малых"
высокий уровень защиты данных против дешифрования и возможной модификации
правило Керкхоффа
эффект "обвала" или "лавины"
область значений ключа должна исключать возможность дешифрования данных путем перебора значений ключа;
экономичность реализации алгоритма при достаточном быстродействии
стоимость дешифрования данных без знания ключа должна превышать стоимость данных.
Перед шифрованием информацию следует подвергнуть статистическому кодированию (сжатию, архивации).
При этом уменьшится объем информации и ее избыточность, повысится энтропия (среднее количество информации, приходящееся на один символ).
Так как в сжатом тексте будут отсутствовать повторяющиеся буквы и слова, дешифрование (криптоанализ) затруднится.
Симметричное шифрование - это метод шифрования, при котором для защиты информации используется ключ, зная который любой может расшифровать или зашифровать данные
Алиса и Боб должны заранее договориться о
режиме вычислений (операционный режим)
заполнении пустых позиций (padding)
Делятся на две большие группы:
Поточные шифры
Блочные шифры
При блочном шифровании информация разбивается на блоки фиксированной длины и шифруется поблочно. Блочные шифры бывают двух основных видов:
Шифры перестановок переставляют элементы открытых данных (биты, буквы, символы) в некотором новом порядке.
Шифры замены заменяют элементы открытых данных на другие элементы по определенному правилу.
VENI VIDI VICI
YHQL YLGL YLFL
Блочное шифрование можно осуществлять двояко :
2. С обратной связью
Параметры симметричного шифрования:
В асимметричных алгоритмах шифрования (или криптографии с открытым ключом) для зашифровывания информации используют
один ключ (открытый)
Эти ключи различны и не могут быть получены один из другого
а для расшифровывания - другой (секретный/закрытый).
Почти идеально, но...
Открытый ключ A для Б
Открытый ключ Ч для Б
Открытый ключ Б для А
Открытый ключ Ч для А
Алиса
Боб
Чак
Чак имеет 2 пары ключей для каждого собеседника
Почти идеально, но...
Шифрованный текст
для Б
Зашифровывает сообщение А для Б своим секретным ключом
Боб расшифровывает и уверен что все ок
Алиса
Боб
Чак
Расшифровывает текст своим секретным ключом для А
Суть проста
2. Симметричный ключ шифруется открытым ассиметричным ключом
1. Сообщение шифруется симметричным ключом
Но суть в том что не существуют таких шифров, которые бы позволили снять шифр из под другого шифра. То есть этап где Алиса снимает свой шифр невозможен
К сожалению, все имеющиеся алгоритмы до сих пор требуют снятия шифров в той очереди в которой они были примененны.
Для реализации такого способа передачи сообщений используют одностороннюю функцию - функция после применения которой практически невозможно получить исходное значение (вычисление по модулю)
Смешивание красок
Зависит от следующего:
SSL (англ. secure sockets layer — уровень защищённых сокетов) — криптографический протокол, который подразумевает более безопасную связь. Он использует асимметричную криптографию для аутентификации ключей обмена, симметричное шифрование для сохранения конфиденциальности, коды аутентификации сообщений (MAC) для целостности сообщений
Имитовста́вка (MAC, англ. message authentication code — код аутентификации сообщения) — средство обеспечения имитозащиты в протоколах аутентификации сообщений с доверяющими друг другу участниками — специальный набор символов, который добавляется к сообщению и предназначен для обеспечения его целостности и аутентификации источника данных.
Добавляется хеш-функция к концу сообщения, а потом сверяется на стороне приемника, если совпали - значит все ок.
Для защиты от фальсификации (имитации) сообщения применяется имитовставка, выработанная с использованием секретного элемента (ключа), известного только отправителю и получателю.
В идеале криптографический хеширующий алгоритм должен удовлетворять следующим требованиям:
ТЗ
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