"The mantra of any good security engineer is: "Security is not a
product, but a process." It's more than designing strong cryptography
into a system; it's designing the entire system such that all security
measures, including cryptography, work together."
-- Bruce Schneier, автор "Applied Cryptography".
Криптография
Содержание
Почему мы используем криптографию?.
OpenSSH.
Генераторы псевдо-случайных чисел (PRNG): ARC4, ...
Криптографические хэш-функции: MD5, SHA1, ...
Криптографические преобразования: DES, Blowfish, ...
Поддержка криптографического аппаратного обеспечения
Требуются криптографы
Дополнительно
Почему мы используем криптографию?
Потому что мы можем!
Проект OpenBSD расположен в Канаде.
Список контроля над экспортом Канады
не содержит, никаких, важных ограничений на экспорт криптографического
программного обеспечения, и даже более определён по отношению к
экспорту свободно-распространяемого криптографического программного
обеспечения. Marc Plumb провёл
некоторые исследования в области криптографического законодательства.
Поэтому, проект OpenBSD использует интегрированную криптографию во многих
частях операционной системы. Необходимым условием криптографического
программного обеспечения должно быть его свободная
доступность и хорошая лицензия. Мы не используем патентованную
криптографию. Необходимо также, чтобы используемое программное обеспечение
разрабатывалось в странах с пригодной для экспорта лицензией, мы не
хотим нарушать законы других стран. Криптографические компоненты
используемого программного обеспечения были написаны в
Аргентине, Австралии, Канаде, Германии, Греции, Норвегии и Швеции.
Когда мы создаём дистрибутив или снапшот OpenBSD, мы делаем это в странах,
из которых исходной код и бинарные файлы могут быть свободно доступны для
всех пользователей. В прошлом наши бинарные дистрибутивы собирались в
Канаде, Швеции и Германии.
OpenBSD поставляется с Kerberos V. Используемый нами базовый код - версия
для экспорта на базе Heimdal из Швеции. Так же, исходные тексты X11 были
доработаны для использования Kerberos.
OpenBSD первая операционная система поставляющаяся с IPsec,
который впервые был включён в OpenBSD 2.1 в 1997г. Наш стек
IPsec, с аппаратным ускорением на различных картах, и наш
свободный демон ISAKMP, используются на одной из машин
испытательной модели IPsec, запущенной VPNC.
Сегодня, криптография - важный аспект в улучшении безопасности операционной системы.
Криптографию, используемую в OpenBSD, можно разделить
на несколько частей, как показано ниже.
OpenSSH
Начиная с версии 2.6, OpenBSD содержит
OpenSSH,
бесплатную и свободную от патентов версию ssh.
OpenSSH
работает с протоколом ssh версии 1 и имеет множество улучшений,
-
все компоненты ограничительного характера (т.е. патенты, см.
ssl(8))
были удалены из исходного кода; все лицензионные или
патентованные компоненты заменены на библиотечные.
-
добавлена поддержка для ssh протокола 1.5.
-
добавлена поддержка Kerberos аутентификации и передачи билетов.
-
добавлена поддержка аутентификации по одноразовому паролю используя
skey(1).
Грубо говоря, мы взяли свободно распространяемую версию ssh и переработали её.
Позже, мы добавили в OpenSSH поддержку протокола SSH 2 и в результате получили
поддержку трёх основных протоколов: 1.3, 1.5, 2.0.
Генераторы псевдо-случайных чисел
Генераторы псевдо-случайных чисел (PRNG) предоставляют приложениям поток
чисел, которые обладают рядом важных свойств для системы безопасности:
- Посторонний человек не должен иметь возможность предсказать результат
работы генератора псевдослучайных чисел, даже если он знает
предыдущий результат.
- Сгенерированные числа не должны иметь повторяющихся шаблонов, что
подразумевает, что PRNG должен иметь очень большую длину цикла.
Как правило, PRNG - это просто алгоритм в котором одни и те же стартовые
значения будут вырабатывать одну и туже последовательность на выходе.
В многопользовательской операционной системе существует множество
источников для начальных значений PRNG. Ядро OpenBSD использует прерывания
от мыши, задержки в сетевых устройствах, задержки нажатия клавиш и
информацию дискового ввода/вывода для заполнения пула энтропии. Случайные
числа используются ядром и предоставляются пользовательским программам
через устройства. Случайные числа используются в следующих задачах:
- Динамическое выделение sin_port в bind(2).
- PID процессов.
- IP datagram IDs.
- RPC transaction IDs (XID).
- NFS RPC transaction IDs (XID).
- DNS Query-IDs.
- Генерация номеров inode, см. getfh(2) и fsirand(8).
- Timing perturbance in traceroute(8).
- Временные имена для mktemp(3) и mkstemp(3).
- Значение TCP ISS для защиты от спуфинга.
- random padding в IPsec пакетах esp_old.
- Для генерации salts для различных password алгоритмов.
- For generating fake S/Key challenges.
- В isakmpd(8)
для устойчивого обмена ключами.
Криптографические хэш-функции
Хэш-функции преобразуют входные данные в строку неизменного размера.
Для криптографических хэш-функции невозможно найти:
- два разных потока данных с одинаковым результатом преобразования
(стойкость к коллизиям),
- входное значение, по известному результату преобразования
(необратимость).
В OpenBSD используются криптографические хеш функции MD5, SHA1 и RIPEMD-160:
- В S/Key(1)
для создания одноразовых паролей.
- В IPsec(4) и
isakmpd(8)
для аутентификации источника данных и обеспечения целостности данных.
- Для MD5 паролей FreeBSD-типа (по умолчанию не используется), см.
passwd.conf(5)
- В libssl для цифровой подписи сообщений.
Криптографические преобразования
Криптографические преобразования используются для шифрования и
дешифрования данных. Обычно они используются с ключом для шифрования
данных и ключом для дешифрования данных. Безопасность криптографических
преобразований должна зависеть только от содержимого ключа.
OpenBSD поддерживает преобразования DES, 3DES, Blowfish и Cast,
используемые в ядре и пользовательских программах:
- В libc для создания
Blowfish(3)
паролей. Смотрите так же USENIX доклад
по этому вопросу.
- В
IPsec(4)
для обеспечения конфиденциальности на сетевом уровне.
- В isakmpd(8)
для защиты обмена, где передаются IPsec ключи.
- В AFS, для защиты сообщений передаваемых по сети, обеспечивая
конфиденциальность доступа к удалённой файловой системе.
- В libssl, для предоставления приложениям возможность взаимодействовать
по защищённому протоколу SSL.
Аппаратная поддержка криптографии
Начиная с версии 2.7, OpenBSD поддерживает некоторые криптографические
аппаратные устройства, такие как акселераторы и генераторы случайных чисел.
- IPsec crypto dequeue
Наша реализация стека IPsec была модифицирована таким образом, что
криптографические функции были вынесены за пределы основного кода.
Простое программное обеспечение IPsec стека должно использовать
криптографию при обработке каждого пакета. Это приводит к синхронному
выполнению. Для правильного использования аппаратных средств и для
увеличения производительности необходимо разъединить эти два компонента,
что мы и сделали. Сделав это, мы получили прирост производительности
даже в случае программной реализацией.
- Hifn 7751
Карты, использующие Hifn 7751 можно использовать в качестве ускорителей
симметричной криптографии, например
Soekris VPN1201 или VPN1211
(купить)
или PowerCrypt.
Текущая производительность при использовании одного Hifn 7751
на каждом конце туннеля составляет 64Мбит/сек для алгоритмов 3DES/SHA1 ESP,
примерно 600% ускорение по сравнению с использованием P3/550 CPU.
В дальнейшем предполагается провести ряд улучшений, но на 13 Апреля 2000
код стабилен. Мы написали свой собственный драйвер для данных чипов,
который к тому же работает с IPsec, отличный от написанного в США драйвера
PowerCrypt. На сегодняшний день,
7751 считается медленным и многие производители имеют более быстрые чипы
(даже Hifn теперь имеет более быстрый, но более дорогой чип). Пиковая
производительность с 3DES SHA1 ESP около 64Mbit/sec.
После 2.9, добавлена поддержка для Hifn 7951 - упрощённая версия
7751, которая добавляет акселератор публичных ключей (не поддерживается)
и генератор случайных чисел (поддерживается). Карты были предоставлены
Soekris Engineering.
После 3.0, добавлена поддержка для Hifn 7811 - более быстрая версия 7751
(около 130Mbit/s) с генератором случайных чисел. Карта была предоставлена
GTGI.
После 3.2, добавлена поддержка алгоритма сжатия LZS, используемого
ipcomp(4).
После 3.4, добавлена поддержка чипов 7955 и 7956. Они включают
в себя все возможности предыдущего чипа 7951 плюс поддержку AES.
- Hifn 6500
Это устройство представляет собой блок ассиметричного шифрования.
Поддерживает алгоритмы RSA, DSA и DH, а также другие основные функций,
оперирующие с большими числами. Он так же содержит высокопроизводительный
генератор случайных чисел. У нас есть одно такое устройство, полная
документация и пример кода. В OpenBSD 3.1, поддерживается генератор
случайных чисел и устройство работы с большими числами.
- Hifn 7814/7851/7854
Это устройство представляет собой процессор пакетов и устройство
ассиметричного шифрования. Поддерживает алгоритмы RSA, DSA и DH,
а также другие основные функций, оперирующие с большими числами.
Содержит генератор случайных чисел. В настоящий момент поддерживается
устройство работы с большими числами и генератор случайных чисел
(преобразование пакетов не поддерживается).
- Broadcom BCM5801/BCM5802/BCM5805/BCM5820/BCM5821/BCM5822/5823
(или beta чип Bluesteelnet 5501/5601)
После OpenBSD 2.7, мы добавили поддержку для предоставленного нам
производителем, тестового чипа 5501. Эти устройства обладают высокой
производительностью среди других устройств симметричного шифрования,
которые мы видели.
Bluesteelnet была куплена компанией Broadcom, которая вскоре начала
выпускать продукцию хорошего качества. Их новый BCM5805 аналигочен
предыдущему, за исключением того, что в него добавили работу с
ассиметричными алгоритмами DSA, RSA и т.д. Производительность
которого, в более чем четыре раза больше Hifn.
Люди из Broadcom/Bluesteelnet были хорошими партнёрами. Они
предоставили полную документацию и примеры кода для своих чипов, а
также необходимое количество карт для тестирования.
После 2.8, драйвер был модифицирован для генерации случайных чисел
на BCM5805 и похожих версиях, и пересылки этих данных в пул энтропии
ядра.
После 2.9, добавлена поддержка для BCM5820, который главным образом
является быстрой (64bit, higher clock speed) версией BCM5805.
Также была добавлена непроверенная поддержка для BCM5821 после 3.0.
В 3.1, добавлена поддержка устройства работы с большими числами,
RSA/DH/DSA операции могут быть ускорены.
Перед 3.2 была добавлена поддержка для BCM5801, BCM5802, BCM5821 и
BCM5822 (непроверенная поддержка BCM5821 не работала в 3.1, из-за
некоторых недокументированных особенностей обработки прерываний).
В 3.4, добавлена частичная поддержка BCM5823. В драйвере нет поддержки
AES, хотя чипсет его поддерживает.
- Securealink PCC-ISES
PCC-ISES
это новый набор микросхем разработанный в Нидерландах. Мы получили
необходимую аппаратуру и документацию и в данный момент работаем над
драйвером. В настоящее время, драйвер умеет посылать сгенерированные
случайные числа в пул энтропии ядра.
- SafeNet SafeXcel 2141
Мы получили документацию и аппаратные средства
SafeNet
крипто карт. Идёт работа над поддержкой, как минимум, симметричной
криптографии этих устройств.
- 3com 3cr990
3com предоставила нам драйвер для поддержки сетевой части этого чипсета,
и отталкиваясь от него, мы написали собственный драйвер. Мы интегрировали
этот драйвер, как только получили бесплатную лицензию на микрокод. Из-за
плохой документации и отсутствия сотрудничества, IPsec функции не
поддерживаются.
- Intel IPsec card
Несмотря ни на что, Intel, как и для своих сетевых компонентов, в отличие
от других производителей, твёрдо решила не предоставлять нам документацию.
Мы говорили с приблизительно пятью техническим инженерами, которые
участвовали в разработке этих продуктов. Они все хотели, чтобы мы получили
документацию. Они рассказывали о том, что мы сделали. Однако их руки
связаны управлением, которое не видит в этом выгоды для себя.
Забудьте о Intel. (Если вы хотите купить аппаратные средства Gigabit
Ethernet, мы рекомендуем что-нибудь другое... по той же самой причине:
большинство драйверов для сетевых устройств Intel, были написаны без
документации).
- Intel 82802AB/82802AC Firmware Hub RNG
Чип 82802 FWH (установленный на материнских платах i810, i820, i840,
i850 и i860) содержит генератор случайных чисел (RNG).
Высокопроизводительный IPsec для своей работы требует большой
случайной числовой энтропии. С 10 апреля, 2000, мы поддерживаем RNG.
Мы планируем добавить поддержку и для других генераторов случайных
чисел, найденных в других крипто чипах.
- VIA C3 RNG
Новые процессоры VIA C3 содержат генератор случайных чисел, как инструкцию.
Начиная с 3.3 такой генератор используеться
в ядре для заполнения пула энтропии.
- OpenSSL
Крипто карты в OpenBSD работающие с алгоритмами RSA/DH/DSA, могут
использоваться через вызовы OpenSSL. Таким образом, пользовательские
программы (например, OpenSSH или httpd c SSL) могут использовать их.
Если кто-нибудь хочет помочь в написании драйверов,
милости просим!.
Требуются криптографы
Наш проект нуждается в людях, готовых работать на этих системах. Криптографы
желающие принять участие в проекте, которые не являются гражданами Америки и
удовлетворяют приведённым выше требованиям, могут связаться с нами.
Дополнительная литература
Членами команды OpenBSD было написано несколько статей о криптографических
изменениях, которые они сделали в системе. Доступны postscript версии этих
документов.
- A Future-Adaptable Password Scheme.
Usenix 1999,
Niels Provos,
David Mazieres.
доклад и
слайды.
- Cryptography in OpenBSD: An Overview.
Usenix 1999,
Theo de Raadt,
Niklas Hallqvist,
Artur Grabowski,
Angelos D. Keromytis,
Niels Provos.
доклад и
слайды.
- Implementing Internet Key Exchange (IKE).
Usenix 2000,
Niklas Hallqvist и
Angelos D. Keromytis.
доклад и
слайды.
- Encrypting Virtual Memory.
Usenix Security 2000,
Niels Provos.
доклад и
слайды.
- The Design of the OpenBSD Cryptographic Framework.
Usenix 2003,
Angelos D. Keromytis,
Jason L. Wright, и
Theo de Raadt.
paper.
www@openbsd.org
Originally [OpenBSD: crypto.html,v 1.126 ]
$RuOBSD: crypto.html,v 1.8 2004/02/28 08:38:39 dfa Exp $
$Translation: crypto.html,v 1.17 2012/06/30 00:43:46 alex Exp $
$OpenBSD: crypto.html,v 1.16 2012/06/30 04:16:06 ajacoutot Exp $