Одной из сложностей реализации 152-ФЗ "О персональных данных" является организация защищенного вебсайта, собирающего персональные данные, т.к. передаваемые персональные данные сайту необходимо скрывать от посторонних (т.е. шифровать).
Из Постановления Правительства 781:
7. Обмен персональными данными при их обработке в информационных системах осуществляется по каналам связи, защита которых обеспечивается путем реализации соответствующих организационных мер и (или) путем применения технических средств .
5. Средства защиты информации, применяемые в информационных системах, в установленном порядке проходят процедуру оценки соответствия .
Из 58 приказа ФСТЭК:
2.8 Для обеспечения безопасности персональных данных при межсетевом взаимодействии отдельных информационных систем через информационно-телекоммуникационную сеть международного информационного обмена (сеть связи общего пользования) применяются следующие основные методы и способы защиты информации от несанкционированного доступа:
создание канала связи, обеспечивающего защиту передаваемой информации.
Техническое средство, реализующее защищенный канал связи, должно быть сертифицировано ФСБ в качестве средства шифрования. Получить сертификат ФСБ могут только те технические средства, которые реализуют отечественные криптоалгоритмы (ГОСТ 28147-89).
Т.о. facebook или gmail могут обеспечивать безопасность ПДн с помощью https и ssl, построенных на западных криптоалгоритмах, но нашим же сайтам обязательно нужно использовать ГОСТ: ставить на всех клиентов КриптоПро CSP или аналоги (КриптоПро стоит 1800р и не на всех платформах работает (iOS)); использовать дорогие решения StoneGate SSL и т.д.
В результате требования к шифрованию веб трафика выполнить зачастую невозможно, т.к. круг посетителей вебсайта обычно не ограничен.
Давайте посмотрим, как из этой ситуации выкручивается сайт gosuslugi.ru:
Все просто! Субъект даёт согласие (галка обязательна!) на передачу своих перс.данных по открытым (незащищённым) каналам связи Интернет. Т.о. портал госуслуги снимает с себя ответственность за возможное разглашение ваших перс.данных (ФИО, СНИЛС, паспорт, контакты, фото и т.д.) по пути от вашего ПК до сервера гос.услуг (или еще хуже - использует несертифицированную криптографию (AES 256 бит + RSA) для защиты персональных данных).
Видя такую несправедливость, я написал жалобу в Роскомнадзор через тот же портал гос.услуг и получил такой вот ответ:
3. Аутентификация с помощью открытого ключа
p = простое число длинной L битов, где L принимает значение, кратное 64, в диапазоне от 512 до 1024.
q= 160-битовой простое число - множитель p-1
g = , где h - любое число, меньшее p-1, для которого больше 1
x = число, меньшее q
Используется однонаправленная хэш-функция: Н(m).
Первые три параметра, p, q, g, открыты и могут быть общими для пользователей сети. Закрытым ключом является х, а открытым - у. Чтобы подписать сообщение, m:
1. А генерирует случайное число k, меньше q
2. А генерирует
Его подписью служат параметры r и s, он посылает их В
3. В проверяет подпись, вычисляя
Если v=r, то подпись правильна.
Система стандартов IPSec вобрала в себя прогрессивные методики и достижения в области сетевой безопасности. Система IPSec прочно занимает лидирующие позиции в наборе стандартов для создания VPN. Этому способствует ее открытое построение, способное включать все новые достижения в области криптографии. IPsec позволяет защитить сеть от большинства сетевых атак, «сбрасывая» чужие пакеты еще до того, как они достигнут уровня IP на принимающем компьютере. В защищаемый компьютер или сеть могут войти только пакеты от зарегистрированных партнеров по взаимодействию.
IPsec обеспечивает:
Работа в рамках стандартов IPSec обеспечивает полную защиту информационного потока данных от отправителя до получателя, закрывая трафик для наблюдателей на промежуточных узлах сети. VPN-решения на основе стека протоколов IPSec обеспечивают построение виртуальных защищенных сетей, их безопасную эксплуатацию и интеграцию с открытыми коммуникационными системами.
Протокол SSL (Secure Socket Layer - уровень защищенных сокетов), разработанный Netscape Communications при участии RSA Data Security, предназначен для реализации защищенного обмена информацией в клиент/серверных приложениях. На практике SSL широко реализуется только совместно с протоколом прикладного уровня HHTP.
Функции безопасности, предоставляемые протоколом SSL:
Протокол SSL использует криптографические методы защиты информации для обеспечения безопасности информационного обмена. Данный протокол выполняет взаимную аутентификацию, обеспечивает конфиденциальность и аутентичность передаваемых данных. Ядро протокола SSL - технология комплексного использования симметричных и асимметричных криптосистем. Взаимная аутентификация сторон выполняется при помощи обмена цифровыми сертификатами открытых ключей клиента и сервера, заверенными цифровой подписью специальных сертификационных центров. Конфиденциальность обеспечивается шифрованием передаваемых данных с использованием симметричных сессионных ключей, которыми стороны обмениваются при установлении соединения. Подлинность и целостность информации обеспечиваются за счет формирования и проверки цифровой подписи. В качестве алгоритмов асимметричного шифрования применяются алгоритм RSA и алгоритм Диффи-Хеллмана.
Рисунок 9 Криптозащищенные туннели, сформированные на основе протокола SSL
Согласно протоколу SSL криптозащищенные туннели создаются между конечными точками виртуальной сети. Клиент и сервер функционируют на компьютерах в конечных точках туннеля (рис. 9)
Протокол диалога SSL имеет два основных этапа формирования и поддержки защищаемого соединения:
Первый этап отрабатывается перед непосредственной защитой информационного обмена и выполняется по протоколу начального приветствия (Handshake Protocol), входящему в состав протокола SSL. При установлении повторного соединения, возможно сформировать новые сеансовые ключи на основе старого общего секрета.
В процессе установления SSL - сессии решаются следующие задачи:
Рисунок 10 Процесс аутентификации клиента сервером
В протоколе SSL предусмотрено два типа аутентификации:
Клиентское/серверное ПО, поддерживающее SSL, может с помощью стандартных приемов криптографии с открытым ключом проверить, что сертификат сервера/клиента и открытый ключ действительны и были выданы источником сертификатов из списка доверенных источников. Пример процесса аутентификации клиента сервером представлен на рисунке 10.
До передачи сообщение по линии передачи данных, сообщение проходит следующие этапы обработки:
1.Сообщение фрагментируется на блоки, пригодные для обработки;
2.Данные сжимаются (опционально);
3.Генерируется MAC ключ ;
4.Данные зашифровываются с помощью ключа ;
1.Используя ключ , данные расшифровываются;
2.Проверяется MAC ключ ;
3.Происходит декомпрессия данных (если использовалось сжатие);
4.Сообщение собирается из блоков и получатель читает сообщение.
A , Клиент | CA Удостоверяющий центр | B , Сервер |
---|---|---|
Генерация пары ключей цифровой подписи: . Передача в УЦ | - симметричная схема шифрования; - схема открытого шифрования; - схема ЦП; - любые функции (лучше ОНФ) | Генерация пары ключей схемы открытого шифрования: . Передача в УЦ |
K - случайный сеансовый ключ. | ||
Если , то K принимается как аутентичный общий секретный ключ |
||
A | B | |
---|---|---|
Симметричная схема шифрования |
||
. . . | и т.д. | . . . |
Как и другие протоколы, SSL подвержен атакам, связанным с не доверенной программной средой, внедрение программ-закладок и др.:
Цель создания TLS - повышение защиты SSL и более точное и полное определение протокола:
TLS предоставляет следующие усовершенствованные способы защиты:
Протокол SSH (Secure Shell-оболочка безопасности) - это набор протоколов аутентификации с открытым ключом, позволяющий пользователю на стороне клиента безопасно регистрироваться на удалённом сервере.
Главная идея протокола заключается в том, что пользователь на стороне клиента, должен загрузить с удаленного сервера открытый ключ и установить с его помощью защищённый канал, используя криптографический мандат. Криптографическим мандатом пользователя является его пароль: его можно зашифровать с помощью полученного открытого ключа и передать на сервер.
Все сообщения шифруются с помощью IDEA .
SSH выполняется между двумя ненадёжными компьютерами, работающими в незащищенной сети(клиент - сервер).
Набор протоколов SSH состоит из трех компонентов:
publickey - клиент высылается ЭЦП , сервер проверяет доверие открытому ключу клиента по имеющейся на сервере копии ключа, затем проверяет аутентичность клиента по Sc.
password - клиент подтверждает свою аутентичность паролем.
hostbased - аналогично publickey, только используется пара ключей для клиентского хоста; подтвердив аутентичность хоста, сервер доверяет имени пользователя.
Протокол включает в себя 3 этапа. Первый этап - "Hello" phase, где первый идентификатор это строка, I, отправляется, чтобы начать протокол, за которым следует список поддерживаемых алгоритмов - X.
На 2-й стадии стороны согласуют секретный ключ, s. Для этого применяется алгоритм Диффи-Хеллмана . Сервер подтверждает свою идентичность, отправляя клиенты свой открытый ключ, , верифицированный цифровой подписью, , и подпись дайджеста, h. В качестве идентификатора sid устанавливается значение h.
На стадии 3 секретный ключ, идентификатор сессии и дайджест используются для создании 6 "apllication keys", вычисленных с помощью .
К преимуществам протокола относится:
Информатика, кибернетика и программирование
Самый большой недостаток канального шифрования заключается в том что данные приходится шифровать при передаче по каждому физическому каналу компьютерной сети. В результате стоимость реализации канального шифрования в больших сетях может оказаться чрезмерно высокой. Кроме того при использовании канального шифрования дополнительно потребуется защищать каждый узел компьютерной сети по которому передаются данные. Если абоненты сети полностью доверяют друг другу и каждый ее узел размещен там где он защищен от злоумышленников на этот недостаток...
Шифрование в каналах связи компьютерной сети
Одной из отличительных характеристик любой компьютерной сети является ее деление на так называемые уровни, каждый из которых отвечает за соблюдение определенных условий и выполнение функций, необходимых для общения между компьютерами, связанными в сеть. Это деление на уровни имеет фундаментальное значение для создания стандартных компьютерных сетей. Поэтому в 1984 г. несколько международных организаций и коми готов объединили свои усилия и выработали примерную модель компьютерной сети, известную под названием OSI (Open . Systems Interconnection Модель открытых сетевых соединений).
Согласно модели OSI коммуникационные функции разнесены по уровням. Функции каждого уровня независимы от функций ниже- и вышележащих уровней. Каждый уровень может непосредственно общаться только с двумя соседними. Модель OSI определяет 7 уровней: верхние 3 служат для связи с конечным пользователем, а нижние 4 ориентированы на выполнение коммуникационных функций в реальном масштабе времени.
Теоретически шифрование данных для передачи по каналам связи компьютерной сети может осуществляться на любом уровне модели OSI. На практике" это обычно делается либо на самых нижних, либо на самых верхних уровнях. Если данные шифруются на нижних уровнях, шифрование называется канальным, а если на верхних, то такое шифрование называется сквозным. Оба этих подхода к шифрованию данных имеют свои преимущества и недостатки.
Канальное шифрование
При канальном шифровании шифруются абсолютно все данные, проходящие по каждому каналу связи, включая открытый текст сообщения, а также информацию о его маршрутизации и об используемом коммуникационном протоколе. Однако в этом случае любой интеллектуальный сетевой узел (например, коммутатор) будет вынужден расшифровывать входящий поток данных, чтобы соответствующим образом его обработать, снова зашифровать и передать на другой узел сети.
Тем не менее канальное шифрование представляет собой очень эффективное средство защиты информации в компьютерных сетях. Поскольку шифрованию подлежат все данные, передаваемые от одного узла сети к другому, у криптоаналитика нет никакой дополнительной информации о том, кто служит источником этих данных, кому они предназначены, какова их структура и т. д. А если еще позаботиться и о том, чтобы, пока канал простаивает, передавать по нему случайную битовую последовательность, сторонний наблюдатель не сможет даже сказать, где начинается и где заканчивается текст передаваемого сообщения.
Не слишком сложной является и работа с ключами. Одинаковыми ключами следует снабдить только два соседних узла сети связи, которые затем могут менять используемые ключи независимо от других пар узлов.
Самый большой недостаток канального шифрования заключается в том, что данные приходится шифровать при передаче по каждому физическому каналу компьютерной сети. Отправка информации в незашифрованном виде по какому-то из каналов ставит под угрозу обеспечение безопасности всей сети. В результате стоимость реализации канального шифрования в больших сетях может оказаться чрезмерно высокой.
Кроме того, при использовании канального шифрования дополнительно потребуется защищать каждый узел компьютерной сети, по которому передаются данные. Если абоненты сети полностью доверяют друг другу и каждый ее узел размещен там, где он защищен от злоумышленников, на этот недостаток канального шифрования можно не обращать внимания. Однако на практике такое положение встречается чрезвычайно редко. Ведь в каждой фирме есть конфиденциальные данные, знакомиться с которыми могут только сотрудники одного определенного отдела, а за его пределами доступ к этим данным необходимо ограничивать до минимума.
Сквозное шифрование
При сквозном шифровании криптографический алгоритм реализуется на одном из верхних уровней модели OSI. Шифрованию подлежит только содержательная часть сообщения, которое требуется передать по сети. После зашифрования к ней добавляется служебная информация, необходимая для маршрутизации сообщения, и результат переправляется на более низкие уровни с целью отправки адресату.
Теперь сообщение не требуется постоянно расшифровывать и зашифровывать при прохождении через каждый промежуточный узел сети связи. Сообщение остается зашифрованным на всем пути от отправителя к получателю.
Основная проблема, с которой сталкиваются пользователи сетей, где применяется сквозное шифрование, связана с тем, что служебная информация. используемая для маршрутизации сообщений, передается по сети в незашифрованном виде. Опытный криптоаналитик может извлечь для себя массу полезной информации, зная кто с кем, как долго и в какие часы общается через компьютерную сеть. Для этого ему даже не потребуется быть в курсе предмета общения.
По сравнению с канальным, сквозное шифрование характеризуется более сложной работой с ключами, поскольку каждая пара пользователей компьютерной сети должна быть снабжена одинаковыми ключами, прежде чем они смогут связаться друг с другом. А поскольку криптографический алгоритм реализуется на верхних уровнях модели OSI, приходится также сталкиваться со многими существенными различиями в коммуникационных протоколах и интерфейсах в зависимости от типов сетей и объединяемых в сеть компьютеров. Все это затрудняет практическое применение сквозного шифрования.
Комбинированное шифрование
Комбинация канального и сквозного шифрования данных в компьютерной сети обходится значительно дороже, чем каждое из них по отдельности. Однако именно такой подход позволяет наилучшим образом защитить данные, передаваемые по сети. Шифрование в каждом канале связи не позволяет противнику анализировать служебную информацию, используемую для маршрутизации. А сквозное шифрование уменьшает вероятность доступа к незашифрованным данным в узлах сети.
При комбинированном шифровании работа с ключами ведется так: сетевые администраторы отвечают за ключи, используемые при канальном шифровании, а о ключах, применяемых при сквозном шифровании, заботятся сами пользователи.
Шифрование файлов
На первый взгляд, шифрование файлов можно полностью уподобить шифрованию сообщений, отправителем и получателем которых является одно и то же лицо, а средой передачи служит одно из компьютерных устройств хранения данных (магнитный или оптический диск, магнитная лента, оперативная память). Однако все не так просто, как кажется на первый взгляд.
Если при передаче по коммуникационным каналам сообщение затеряется по пути от отправителя к получателю, его можно попытаться передать снова. При шифровании данных, предназначенных для хранения в виде компьютерных файлов, дела обстоят иначе. Если вы не в состоянии расшифровать свой файл, вам вряд ли удастся сделать это и со второй, и с третьей, и даже с сотой попытки. Ваши данные будут потеряны раз и навсегда. Это означает, что при шифровании файлов необходимо предусмотреть специальные механизмы предотвращения возникновения ошибок в шифртексте.
Криптография помогает превратить большие секреты в маленькие. Вместо того чтобы безуспешно пытаться запомнить содержимое огромного файла, человеку достаточно его зашифровать и сохранить в памяти использованный для этой цели ключ. Если ключ применяется для шифрования сообщения, то его требуется иметь под рукой лишь до тех пор, пока сообщение не дойдет до своего адресата и не будет им успешно расшифровано. В отличие от сообщений, шифрованные файлы могут храниться годами, и в течение всего этого времени необходимо помнить и держать в секрете соответствующий ключ.
Есть и другие особенности шифрования файлов, о которых необходимо помнить вне зависимости от применяемого криптографического алгоритма:
Если файл представляет собой единое целое (например, содержит отрезок текста), восстановление этого файла в исходном виде не потребует больших усилий: перед использованием достаточно будет просто расшифровать весь файл. Однако если файл структурирован (например, разделен на записи и поля, как это делается в базах данных), то расшифровывание всего файла целиком каждый раз, когда необходимо осуществить доступ к отдельной порции данных, сделает работу с таким файлом чрезвычайно неэффективной. Шифрование порций данных в структурированном файле делает его уязвимым по отношению к атаке, при которой злоумышленник отыскивает в этом файле нужную порцию данных и заменяет ее на другую по своему усмотрению.
У пользователя, который хочет зашифровать каждый файл, размешенный на жестком диске компьютера, имеются две возможности. Если он использует один и тот же ключ для шифрования всех файлов, то впоследствии окажемся не в состоянии разграничить доступ к ним со стороны других пользователей. Кроме того, в результате у криптоаналитика будет много шифртекста, полученного на одном ключе, что существенно облегчит вскрытие этого ключа.
Лучше шифровать каждый файл на отдельном ключе, а затем зашифрован, все ключи при помощи мастер-ключа. Тем самым пользователи будут избавлены от суеты, связанной с организацией надежного хранения множества ключей. Разграничение доступа групп пользователей к различным файлам будет осуществляться путем деления множества всех ключей на подмножества и шифрования этих подмножеств на различных мастер-ключах. Стойкость такой криптосистемы будет значительно выше, чем в случае использования единого ключа для шифрования всех файлов на жестком диске, поскольку ключи, применяемые для шифрования файлов, можно генерировать случайным образом и, следовательно более стойкими против словарной атаки.
Аппаратное и программное шифрование
Аппаратное шифрование
Большинство средств криптографической защиты данных реализовано в виде специализированных физических устройств. Эти устройства встраиваются в линию связи и осуществляют шифрование всей передаваемой но ней информации. Преобладание аппаратного шифрования над программным обусловлено несколькими причинами.
Даже в компьютерах установка специализированного шифровального оборудования создает меньше проблем, чем модернизация системного программного обеспечения с целью добавления в него функций шифрования данных. В идеале шифрование должно осуществляться незаметно для пользователя. Чтобы добиться этого при помощи программных средств, средства шифрования должны быть упрятаны глубоко в недра операционной системы. С готовой и отлаженной операционной системой проделать это безболезненно не так-то просто. Но даже любой непрофессионал сможет подсоединить шифровальный блок к персональному компьютеру, с одной стороны, и к внешнему модему, с другой.
Современный рынок аппаратных средств шифрования информации предлагает потенциальным покупателям 3 разновидности таких средств самодостаточные шифровальные модули (они самостоятельно выполняют всю работу с ключами), блоки шифрования в каналах связи и шифровальные платы расширения для установки в персональные компьютеры. Большинство устройств первого и второго типов являются узко специализированными. и поэтому прежде, чем принимать окончательное решение об их приобретении, необходимо досконально изучить ограничения, которые при установке накладывают эти устройства на соответствующее "железо", операционные системы и прикладное программное обеспечение. А иначе можно выбросить деньги на ветер, ни на йоту не приблизившись к желанной цели. Правда, иногда выбор облегчается тем, что некоторые компании торгуют коммуникационным оборудованием, которое уже имеет предустановленную аппаратуру шифрования данных.
Платы расширения для персональных компьютеров являются более универсальным средством аппаратного шифрования и обычно могут быть легко сконфигурированы таким образом, чтобы шифровать всю информацию, которая записывается на жесткий диск компьютера, а также все данные, пересылаемые на дискеты и в последовательные порты. Как правило, зашита от электромагнитного излучения в шифровальных платах расширения отсутствует, поскольку нет смысла защищать эти платы, если аналогичные меры не предпринимаются в отношении всего компьютера.
Программное шифрование
Любой криптографический алгоритм может быть реализован в виде соответствующей программы. Преимущества такой реализации очевидны: программные средства шифрования легко копируются, они просты в использовании, их нетрудно модифицировать в соответствии с конкретными потребностями.
Во всех распространенных операционных системах имеются встроенные средства шифрования файлов. Обычно они предназначены для шифрования отдельных файлов, и работа с ключами целиком возлагается на пользователя. Поэтому применение этих средств требует особого внимания. Во-первых, ни в коем случае нельзя хранить ключи на диске вместе с зашифрованными с их помощью файлами, а во-вторых, незашифрованные копии файлов необходимо удалить сразу после шифрования.
Конечно, злоумышленник может добраться до компьютера и незаметно внести нежелательные изменения в программу шифрования. Однако основная проблема состоит отнюдь не в этом. Если злоумышленник в состоянии проникнуть в помещение, где установлен компьютер, он вряд ли будет возиться с программой, а просто установит скрытую камеру в стене, подслушивающее устройство в телефон или датчик для ретрансляции электромагнитного излучения в компьютер. В конце концов, если злоумышленник может беспрепятственно все это сделать, сражение с ним проиграно, даже еще не начавшись.
А также другие работы, которые могут Вас заинтересовать |
|||
9393. | Средства для наркоза. Снотворные средства | 39.58 KB | |
Средства для наркоза Натрия оксибутират - неингаляционный Усиливает ГАМК-ергические (тормозомедиатор) процессы ЦНС. Эффекты: седативный, снотворный, антигипокический. Показания: наркоз (базисный), бессонница, невроз. вм, вв, внутрь, ректально... | |||
9394. | Сущность и назначение (задачи) российского уголовного процесса | 52.5 KB | |
Тема №1: Сущность и назначение (задачи) российского уголовного процесса. Понятие, сущность и структура УПР. Соотношение УПР, уголовного судопроизводства и правосудия. Стадии УПР. Уголовный процесс и уголовно процессуальное п... | |||
9395. | Российское уголовно-процессуальное законодательство | 34 KB | |
Тема №2: Российское уголовно-процессуальное законодательство. Понятие и сущность УПРЗ. Действующее УПРЗ. Действие УПРЗ во времени, пространстве, по кругу лиц. Значение решений КС РФ. Значение Постановлений Пленума ВС... | |||
9396. | Принципы уголовного судопроизводства | 63 KB | |
Тема №3: Принципы уголовного судопроизводства. Понятие, сущность и значение принципов УПР. Их взаимная связь и взаимная обусловленность. В главе 2 УПК закреплена группа норм, объединенных одним названием - принципы уголовного судопроизводст... | |||
9397. | Участники уголовного процесса: государственные органы и должностные лица | 51.5 KB | |
Тема №4. Участники уголовного процесса: государственные органы и должностные лица. Понятие участников уголовного процесса и их классификация. Стороны в уголовном судопроизводстве. Их субъектный состав. Под участниками уголовного судопро... | |||
9398. | Участники процесса, отстаивающие свои или представляемые интересы | 40 KB | |
Тема №5. Участники процесса, отстаивающие свои или представляемые интересы. Потерпевший. Понятие дается в ст.42 УПК - физическое или юридическое лицо. Потерпевший - физическое лицо - которому преступлением причинен физический, имущественны... | |||
9399. | Уголовное преследование. Реабилитация | 35.5 KB | |
Тема №6. Уголовное преследование. Реабилитация. Понятие, сущность и основания уголовного преследования. Соотношение уголовного преследования с обвинением. Уголовное преследование одно из назначений уголовного судопроизводства... | |||
9400. | Гражданский иск. Основания, предмет и процессуальный порядок предъявления гражданского иска | 33 KB | |
Гражданский иск Понятие гражданского иска. Основания, предмет и процессуальный порядок предъявления гражданского иска. УПК предусматривает возможность рассмотрения гражданского иска в рамках производства по уголовному делу. Гражданский иск... | |||
9401. | Общие положения теории доказательств | 100.5 KB | |
Тема №8. Общие положения теории доказательств. Общетеоретические и философские проблемы доказывания в уголовном процессе. Доказательственное право не является самостоятельной отраслью права, оно является подотраслью УПП. Под доказательственным право... | |||
«Практическая криптография». Книга эта невероятно интересная! Если вы интересуетесь криптографией, то просто обязаны держать ее на полке (в крайнем случае — скачать электронную версию), ровно как и любую другую книгу этих авторов, которую сможете найти.
Важно! Если перед вами стоит практическая задача, советую найти настоящего специалиста по криптографии, а не полагаться на бложик никому неизвестного программиста. Учтите также, что книга была написана в 2005 году и к тому моменту, когда вы найдете эту заметку, информация может устареть.
Есть несколько причин, по которой я взялся за написание этой памятки. Для начала, я хочу иметь под рукой краткую заметку по созданию безопасного соединения. Есть подозрения, что когда-нибудь она мне пригодится. Объем «Практической криптографии» — более 400 страниц, так что на краткое руководство оно не тянет. Тем не менее, ознакомиться с книгой стоит для понимания того, почему авторы предлагают то решение, а не иное. Другая причина создания этого поста — мой экземпляр книги начинает потихоньку разваливаться. Третья — информация в интернете доступна отовсюду, а не только у меня дома.
Объяснение таких понятий, как блочный шифр, функция хэширования, и тд в этом тексте вы не найдете. Обращайтесь к соответствующей литературе или Википедии. Если вы хотели бы увидеть в этом блоге посты из серии «основы криптографии», отпишитесь в комментариях — посмотрим, что тут можно сделать.
Есть пользователи А и Б, которые обмениваются сообщениями. Они могут использовать протокол TCP, UDP, электронную почту или чат — сейчас это не имеет значения. Есть злоумышленник Е, который может перехватывать, подменять и переставлять эти сообщения, заставлять их бесследно исчезнуть, а также слать сообщения от имени А и Б. Задача — помочь А и Б обмениваться сообщениями таким образом, чтобы Е не мог узнать их содержимого. Избавиться от Е никак нельзя.
В качестве алгоритма шифрования Шнайер и Фергюсон рекомендуют использовать AES (Rijndael с размером блока 128 бит ) с длиной ключа 256 бит в режиме CTR . В этом режиме максимальный размер одного сообщения составляет 16 · 2 32 байт. Вряд ли кого-то стеснит это ограничение. В крайнем случае можно разбить сообщение на части.
Для шифрования сообщения с номером i, имеющего размер L бит, необходимо вычислить L бит следующим способом:
b 1 , b 2 , …, b L = E K (0 || i || 0 ) || E K (1 || i || 0) ||
E K (2 || i || 0) || E K (3 || i || 0) || …
где функция E K (128 бит на выходе) — алгоритм шифрования, K (256 бит) — ключ шифрования, аргумент функции (128 бит) — шифруемые данные, а оператор || означает конкатенацию данных. После вычисления битов b 1 … b L складываем их по Жегалкину (исключающее ИЛИ, операция XOR, ⊕) с битами сообщения, в результате получаем зашифрованный текст. Для расшифровки нужно проделать точно такую же последовательность действий над шифротекстом.
Здесь важно обратить внимание на два момента. Во-первых, ключи шифрования при посылке данных от А к Б и от Б к А должны быть разными. Во-вторых, необходимо согласовать последовательность байт в аргументе функции E K . Порядок байт в 32-х разрядных числах может меняться в зависимости от архитектуры используемого процессора. Традиционно в сетевых протоколах и форматах файлов используется порядок байт от старшего к младшему .
В качестве функции хэширования авторы рекомендуют SHA-256 . Она используется при вычислении кодов аутентификации сообщений, а также при обмене ключами. В последнем случае применяется функция SHA d -256, определенная, как SHA256(SHA256(message)).
Допустим, мы успешно установили сеансовый ключ с помощью алгоритма Диффи-Хеллмана , в результате А и Б получили общий ключ К. Затем производится следующая последовательность действий:
// Избавляемся от алгебраической структуры ключа
K = SHA d -256(K)
// Строим 4 дочерних ключа:
// 1. Шифрование от А к Б
key_send_enc = SHA d -256(K || «Enc from A to B»)
// 2. Шифрование от Б к А
key_recv_enc = SHA d -256(K || «Enc from B to A»)
// 3. Аутентификация от А к Б
key_send_auth = SHA d -256(K || «Auth from A to B»)
// 4. Аутентификация от Б к А
key_recv_auth = SHA d -256(K || «Auth from B to A»)
Каждое сообщение должно сопровождаться имитовставкой (MAC) . В качестве функции MAC Шнайер и Фергюсон рекомендуют использовать HMAC-SHA-256:
a i = HMAC K (i || L(x i) || x i || m i)
HMAC K (m) = SHA256{(K ⊕ 0x5c5c..5c) || SHA256[(K ⊕ 0x3636..36) || m]}
Здесь a i — код аутентификации i-го сообщения m i . HMAC K (m) представляет собой хэш-функцию, значение которой зависит не только от сообщения m, но и от ключа K. Как и в случае с шифрованием, в MAC должно использоваться два независимых ключа для А и Б. Как уже отмечалось, ⊕ — это операция побитового исключающего ИЛИ (она же XOR).
В «Практической криптографии» делается особый акцент на том, как важно производить аутентификацию не только сообщения m i , являющегося обычной последовательностью байт, но и его смысла. Пусть m i = a || b || c, то есть состоит из нескольких полей определенной длины. Представим, что после очередного обновления протокола размеры полей изменилось. Тогда, если злоумышленник Е сможет подменить версию протокола, сообщение будет интерпретировано неверно. Притом неважно как злоумышленнику удастся это сделать — безопасность одной части системы не должна зависеть от безопасности остальных.
Вот для чего нужна дополнительная информация x i , включающая в себя id протокола (сигнатуру, IP:порт получателя и отправителя), версию протокола, id сообщения, размер и имена полей сообщения. Притом информация x i должна быть закодирована таким образом, чтобы ее можно было однозначно декодировать. L(x i) в нашей формуле — это, очевидно, длина x i . К счастью, всего этого гемора можно избежать, просто передавая сообщения в XML-подобном формате данных, то есть таком, где дополнительная информация о смысле сообщения уже включена в само сообщение. Тут важно не забыть включить в каждое сообщение всю дополнительную информацию, перечисленную выше.
Что еще следует знать о MAC?
Важно! Для каждого нового сеанса связи необходимо генерировать новые ключи шифрования и аутентификации.
Согласование ключей заслуживает написания отдельного поста, если не двух, потому сейчас мы его не рассматриваем.
Теперь А и Б обмениваются сообщениями в формате, подобном XML (либо следуют инструкциям, которые предусмотрены для иной ситуации, см пункт 4). Каждому сообщению присваивается уникальный 32-х битный номер. Нумерация сообщений начинается с единицы — так проще отследить момент, когда номера закончатся. Когда это произойдет, необходимо заново произвести согласование ключей. Можно использовать и 64-х битные номера сообщений, но тогда каждое сообщение станет на 4 байта длиннее. К тому же, время от времени следует производить обновление ключей, так что 32 бита — в самый раз.
Если для передачи данных используется протокол UDP, следует производить повторную посылку сообщения по некоторому таймауту в случае, если другая сторона на него не реагирует. При использовании TCP этого не требуется — транспортный уровень позаботиться о гарантированной доставке пакетов. Злоумышленник Е может нарушить сеанс связи между А и Б, испортив одно из сообщений или переставив пару сообщений местами. Но раз у нас есть «человек посередине», то он в любом случае может нарушить связь между А и Б. Отсюда вывод:
Не стоит тратить время на написание «своего TCP» поверх другого протокола — просто используйте протокол TCP. Если, конечно, в вашем приложении это возможно.
Когда пользователь А хочет послать сообщение m i , он вычисляет MAC этого сообщения a i согласно пункту 4. Затем он шифрует сообщение m i || a i , как это описано в пункте 2 и посылает пользователю Б следующее: i || m’ i || a’ i . После этого А увеличивает значение счетчика отправленных сообщений i на единицу.
Когда пользователь Б получает i || m’ i || a’ i , он расшифровывает m i и a i , проверяет код аутентификации. Сообщения с неверным MAC игнорируются (их мог отправить злоумышленник Е). Затем производится проверка значения i — если оно меньше ожидаемого номера сообщения, для определенности назовем его j, сообщение отбрасывается. В противном случае (i >= j) присваиваем j значение i + 1 и обрабатываем сообщение m i .
Здесь есть несколько моментов, на которых стоит заострить внимание. Во-первых, как уже отмечалось в пункте 2, номера сообщений следует передавать в порядке байт от старшего к младшему. Во-вторых, проверку номера сообщения можно было бы проводить и до расшифровки. Но в этом случае, если сообщение с неверным номером пошлет злоумышленник Е, будет обнаружена (а затем записана в логи) ошибка «неверный номер сообщения», когда на самом деле произошла ошибка «неверный код аутентификации сообщения». Криптографы в первую очередь беспокоятся о безопасности и корректной работе приложений, а не о производительности. Некоторым программистам есть чему у них поучиться.
К сожалению, в случае активного вмешательства злоумышленника Е в передачу данных, пользователь Б может получить лишь подмножество сообщений, отправленных А. Если обнаружена пропажа сообщений, то поведение пользователей должно зависеть от типа информации, которой они обмениваются. В одних случаях пропажа части сообщений может быть не критичной, в другой — требовать прекращения сеанса связи.
Очень многие моменты не были рассмотрены в этом посте. Как А и Б согласуют сеансовые ключи связи? Откуда во время согласования ключей пользователю А известно, что он общается с Б, если по условию задачи Е может выдавать себя за кого угодно?
Дополнение: Эти вопросы рассматриваются в .
Не менее интересные вопросы — как правильно генерировать псевдослучайные числа? Как противодействовать тайминг-атакам? Что делать, если операционная система поместит запущенное приложение со всеми ключами в файл подкачки? с устаревшей парой RSA-ключей? Злоумышленник Е хоть и не знает содержимого сообщений, но знает их размер и время отправки — опасно ли это и как этому противостоять?
Мир информационной безопасности неописуемо интересен (хоть и сложен) и в этом блоге непременно появятся новые посты о криптографии. Если у вас есть ко мне вопросы, не стесняйтесь задать их в комментариях, постараюсь ответить.