От манускриптов до шифровальных машин: история криптографии
Содержание:
Управление ключами
Основная статья: Управление ключами
Основные угрозы ключам
Как было сказано ранее, при шифровании очень важно правильно содержать и распространять ключи между собеседниками, так как это является наиболее уязвимым местом любой криптосистемы. Если вы с собеседником обмениваетесь информацией посредством идеальной шифрующей системы, то всегда существует возможность найти дефект не в используемой системе, а в тех, кто её использует
Можно выкрасть ключи у доверенного лица или подкупить его, и зачастую это оказывается гораздо дешевле, чем взламывание шифра. Поэтому процесс, содержанием которого является составление и распределение ключей между пользователями, играет важнейшую роль в криптографии как основа для обеспечения конфиденциальности обмена информацией.
Цели управления ключами
- Сохранение конфиденциальности закрытых ключей и передаваемой информации.
- Обеспечение надёжности сгенерированных ключей.
- Предотвращение несанкционированного использования закрытых или открытых ключей, например использование ключа, срок действия которого истек.
Управление ключами в криптосистемах осуществляется в соответствии с политикой безопасности. Политика безопасности диктует угрозы, которым должна противостоять система. Система, контролирующая ключи, делится на систему генерации ключей и систему контроля ключей.
Система генерации ключей обеспечивает составление криптоустойчивых ключей. Сам алгоритм генерации должен быть безопасным, так как значительная часть безопасности, предоставляемой шифрованием, заключена в защищённости ключа. Если выбор ключей доверить пользователям, то они с большей вероятностью выбирают ключи типа «Barney», нежели «*9(hH/A», просто потому что «Barney» проще запомнить. А такого рода ключи очень быстро подбираются методом вскрытия со словарем, и тут даже самый безопасный алгоритм не поможет. Кроме того, алгоритм генерации обеспечивает создание статистически независимых ключей нужной длины, используя наиболее криптоустойчивый алфавит.
Система контроля ключей служит для наиболее безопасной передачи ключей между собеседниками. Если передавать ключ шифрования по открытому каналу, который могут прослушивать, то злоумышленник легко перехватит ключ, и всё дальнейшее шифрование будет бессмысленным. Методы асимметричного шифрования решают эту проблему, используя разные ключи для зашифровывания и расшифровывания. Однако при таком подходе количество ключей растет с увеличением количества собеседников (каждый вынужден хранить свои закрытый и открытый ключи и открытые ключи всех собеседников). Кроме того, методы асимметричного шифрования не всегда доступны и осуществимы. В таких ситуациях используются разные методы по обеспечению безопасной доставки ключей: одни основаны на использовании для доставки ключей альтернативных каналов, считающихся безопасными. Другие, в согласии со стандартом X9.17, используют два типа ключей: ключи шифрования ключей и ключи шифрования данных. Третьи разбивают передаваемый ключ на составные части и передают их по различным каналам. Также существуют различные комбинации перечисленных выше методов.
Кроме того, система управления ключами при возникновении большого количества используемых ключей выступает в роли центрального сервера ключей, хранящего и распределяющего их. В том числе она занимается своевременной заменой скомпрометированных ключей. В некоторых системах в целях быстрой коммуникации могут использоваться сеансовые ключи. Сеансовый ключ — ключ шифрования, который используется только для одного сеанса связи. При обрыве сеанса или его завершении сеансовый ключ уничтожается. Также используемые ключи обычно имеют срок действия, то есть срок, в течение которого они являются аутентичными для использования. После истечения данного срока ключ изымается системой управления и, если необходимо, генерируется новый.
Практическая демонстрация
# virsh destroy debian9-boothack Домен debian9-boothack разрушен # cp -v /var/lib/libvirt/images/debian9-boothack.qcow2 ~ '/var/lib/libvirt/images/debian9-boothack.qcow2' -> '/root/debian9-boothack.qcow2'
# mkdir /guest # guestmount -a /var/lib/libvirt/images/debian9-boothack.qcow2 -m /dev/sda1 /guest # cp -v /guest/initrd.img-4.9.0-9-amd64 ~user/tmp '/guest/initrd.img-4.9.0-9-amd64' -> '/home/user/tmp/initrd.img-4.9.0-9-amd64'
$ mkdir unpacked $ cd unpacked/ $ zcat ../initrd.img-4.9.0-9-amd64 | cpio -idm $ ls bin conf etc init lib lib64 run sbin scripts
- Утилита для шифрованной отправки по сети. Добавляю её в
- Шелл-скрипт для извлечения ключа и отправки. Отправляется в и добавляется в список после .
- Недостающий родной скрипт обработки событий udhcpc, чтобы запустить автонастройку сети прямо в рамдрайве, пользуясь встроенными средствами. Его законное место в
$ find . | cpio -o -c | gzip -9 > ../initrd.img-4.9.0-9-amd64 125736 блоков $ sudo cp -v ../initrd.img-4.9.0-9-amd64 /guest '../initrd.img-4.9.0-9-amd64' -> '/guest/initrd.img-4.9.0-9-amd64' $ sudo guestunmount /guest
такой
# echo 'fa0c53***********4bd8c' | xxd -r -p > master.key
# modprobe nbd max_part=8 # qemu-nbd --connect=/dev/nbd0 /root/debian9-boothack.qcow2 # ls /dev/nbd0* /dev/nbd0 /dev/nbd0p1 /dev/nbd0p2 /dev/nbd0p5 # file -s /dev/nbd0p5 /dev/nbd0p5: LUKS encrypted file, ver 1 UUID: fb732477-ef98-40b5-86a2-8526c349f031 # cryptsetup --master-key-file=master.key luksOpen /dev/nbd0p5 crackeddisk # pvs PV VG Fmt Attr PSize PFree /dev/mapper/crackeddisk debian9-boothack-vg lvm2 a-- 19,75g 0 /dev/sda3 dt1 lvm2 a-- <215,01g 8,00m # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root debian9-boothack-vg -wi-a----- 18,75g swap_1 debian9-boothack-vg -wi-a----- 1,00g root dt1 -wi-ao---- 215,00g # mkdir /hackedroot # mount /dev/mapper/debian9--boothack--vg-root /hackedroot/ # ls /hackedroot/ bin boot dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var vmlinuz vmlinuz.old # cat /hackedroot/etc/hostname debian9-boothack
Асимметричное шифрование
Но что же делать, если Алиса и Боб находятся далеко друг от друга и не могут договориться об использовании одинакового секрета, поскольку есть некая Ева (от англ. eavesdropper — подслушивающий), которая так и хочет узнать тайны Алисы и Боба? В этом случае Боб может отправить Алисе замок, ключ от которого есть только у него. Алиса положит письмо в коробку и запрёт её на этот замок. Теперь ни Алиса, ни Ева не смогут открыть коробку и прочесть письмо.
Программист
«ООО «ОЛКОН»», Самара, от 30 000 ₽
tproger.ru
Вакансии на tproger.ru
Аналогичный подход используется в , которое также называют криптосистемой с открытым ключом. В примере с Алисой и Бобом секретным ключом Боба будет ключ от замка, а публичным ключом условно можно назвать сам замок. Отправка Алисе замка — это алгоритм согласования ключей.
Наиболее популярным алгоритмом шифрования с открытым ключом является RSA. Вот как выглядит его реализация на языке Python с использованием библиотеки RSA:
Более подробно с алгоритмом RSA можно ознакомиться в другой нашей статье.
Стоит также отметить, что асиметричные алгоритмы работают медленнее, чем симметричные, и очень часто встречается схема, когда по асимметричному алгоритму шифруется симметричный секрет и дальнейший обмен сообщениями происходит по симметричному алгоритму.
Немного истории
Слова «криптология» и «криптография» в современной литературе часто используются как взаимозаменяемые термины, но между ними есть семантическая разница. У слов различные значения, которые проще всего объяснить так:
- Криптология — учение об искусстве секретности и/или наука о работе криптосистем;
- Криптография — практический способ применения методов проектирования криптосистем, чтобы сделать что-то секретное или скрытое;
- Криптоанализ — поиск уязвимостей, которые позволят восстановить исходное сообщение из шифротекста без знания ключа или алгоритма.
Большая часть статьи посвящена «криптографии», как это принято сегодня, и хотелось бы, чтобы вы знали различия и значения обоих слов.
Само по себе изучение криптологии как науки существует уже много лет. Первый известный случай использования криптографии был обнаружен в надписи, высеченной в 1900 году до нашей эры, в главной гробнице дворянина Хнумхотепа II, в Египте. Писец (да) то тут, то там использовал некоторые странные иероглифы вместо обычных. Целью было скорее не спрятать сообщение, а изменить его форму, чтобы оно выглядело более величавым.
Во время расцвета Римской Империи (100-й год до нашей эры) Юлий Цезарь, как известно, использовал форму шифрования для передачи секретных сообщений своим армейским генералам во время войны. Этот шифр подстановки (шифр Цезаря), вероятно, самый упоминаемый в литературе исторический шифр (шифр — алгоритм, используемый для шифровки или дешифровки сообщений). В шифрах подстановки каждая буква исходного сообщения (исходное сообщение — текст, который будет зашифрован) заменяется на другую букву, находящуюся правее или левее исходной по алфавиту, для получения шифротекста (шифротекст — зашифрованное сообщение). В шифре Цезаря используется сдвиг вправо на 3 позиции, так что «A» становится «D», «B» — «E» и т. д. Алфавит в данном случае будет замкнут и после «X» следует «A».
Во время Второй мировой войны морские пехотинцы США завербовали и обучили людей из племени индейцев навахо, свободно владеющих языком навахо. Это был привлекательный способ использования кодирования, мало людей не из племени знали этот язык, а также не было никаких опубликованных книг на языке навахо. Речевой язык навахо был не очень сложен по криптографическим стандартам и, вероятно, был бы быстро взломан при взаимном сотрудничестве носителя языка и обученных криптографов. У японцев была возможность сделать это, когда в 1942 году на Филлипинах они пленили Джо Кийомию во время Марша смерти в Батаане. После попадания в плен Кийомия, навахо-сержант в армии США, но не носитель кода, получил приказ расшифровать перехваченное радиосообщение. Однако, так как Кийомия не был обучен коду, используемому военными службами США, то слова ему показались ничего не значащими. Когда он доложил, что не может понять перехваченные сообщения, его начали пытать. Японская Имперская Армия и ВМС так и не взломали устный код.
В начале 1970-х компания IBM осознала, что их пользователи требуют какой-нибудь вид шифрования, и сформировала «криптогруппу», возглавляемую Хорстом Фейстелем. Они спроектировали шифр под названием Lucifer. В 1973 году Национальное бюро стандартов США (сейчас NIST — Национальный институт стандартов и технологий США) объявило конкурс на блочный шифр, который должен был стать национальным стандартом. Видимо, они наконец-то осознали, что покупают множество коммерческого ПО без хорошей криптографической поддержки. В конце концов, Lucifer приняли и переименовали в DES (Data Encryption Standard). DES был взломан методом полного перебора в 1997 году. Главной уязвимостью DES была маленькая длина ключа. Когда вычислительная мощность компьютеров увеличилась, то метод полного перебора стал возможен для получения исходного сообщения. И если в 1980-х годах DES был единственным вариантом, то сейчас это изменилось. Сегодня у нас есть широкий выбор более сильных, быстрых и улучшенных алгоритмов. Сейчас проблематично выбрать среди них нужный.
В 1997 году NIST объявил конкурс на новый блочный шифр и получил 50 заявок. В 2000 году был принят Rijndael и назван AES (Advanced Encryption Standard).
Методы криптографии
Криптографическим методом защиты информации называется ряд специальных методов кодирования, шифрования или иных преобразований информации, которые позволяют сделать её содержание недоступным для лиц, не обладающих ключом криптограммы. Криптография и шифрование являются самыми надёжными методами защиты, поскольку шифровальщик охраняет непосредственно саму информацию, а не доступ к ней. К примеру, прочтение зашифрованного файла будет невозможным, если даже злоумышленнику удастся похитить носитель. Реализация данного метода защиты осуществляется с помощью программ или пакетов программ.
Для многих обывателей термин «криптография» означает что-то загадочное и таинственное. Однако в настоящее время различные виды шифрования можно встретить буквально везде — это и простые кодовые замки на дипломатах, и многоуровневые системы защиты секретных файлов. Люди сталкиваются с ней, когда вставляют в банкомат карточку, совершают денежные переводы, покупают через интернет товары, общаются по Skype, отправляют письма на электронную почту. Любые дела, связанные с информацией, так или иначе имеют отношение к криптографии.
Но, несмотря на всё многообразие сфер применения, в настоящее время существует всего несколько способов шифрования. Все эти методы криптографии относятся к двум видам криптографических систем: симметричным (с секретным ключом) и ассиметричным (с открытым ключом).
- Симметричные системы позволяют шифровать и расшифровывать информацию с помощью одного и того же ключа. Расшифровать криптографическую систему секретного ключа невозможно, если дешифровщик не обладает секретным ключом.
- В криптографических системах с открытым ключом пользователи обладают собственным открытым и частным закрытым ключами. К открытому ключу имеют доступ все пользователи, и информация шифруется именно с его помощью. А вот для расшифровки необходим частный ключ, находящийся у конечного пользователя. В отличие от криптограмм с секретным ключом в такой системе участниками являются не две, а три стороны. Третья может представлять собой сотового провайдера или, например, банк. Однако эта сторона не заинтересована в хищении информации, поскольку она заинтересована в правильном функционировании системы и получении положительных результатов.