5.4. Принципы разработки программного интерфейса
Фрагмент книги "Основы криптографии для экономистов". © Панасенко Сергей, 2005
У аппаратных шифраторов существует два основных режима работы [61, 70, 76]:
Режим начальной загрузки. При загрузке компьютера, в тот момент, когда BIOS ПК опрашивает все вставленное в него "железо", шифратор перехватывает управление и выполняет последовательность команд, зашитую в его память, например, предлагает пользователю ввести главный ключ шифрования (т.е. вставить соответствующий ключевой носитель), который будет использоваться в дальнейшем.
Режим выполнения операций. После завершения начальной загрузки шифратор ожидает от ПК команд и данных на выполнение операций шифрования данных. Помимо собственно функций шифрования, каждый шифратор в этом режиме должен выполнять, как минимум, следующее:
- выполнять различные операции с ключами шифрования: их загрузку в шифропроцессор и выгрузку из него, а также шифрование ключей друг на друге;
- рассчитывать имитоприставки для данных и ключей;
- выдавать по запросу случайные числа.
Рассмотрим работу шифратора в операционных системах семейства Microsoft Windows. Шифратор может получать команды сразу от нескольких программ, например:
- команды шифрования данных от программы шифрования файлов;
- команды шифрования данных и вычисления имитоприставок от драйвера, выполняющего прозрачное шифрование сетевых пакетов (скажем, реализующего механизмы VPN);
- запросы случайных чисел от программы-генератора криптографических ключей.
Во избежание возникновения коллизий программы не имеют прямого доступа к шифратору и управляют им через специальные программные модули (см. рис. 5.4), решающие следующие задачи:
Рис. 5.4. Программный интерфейс шифратора
- Обеспечение корректного поочередного выполнения шифратором команд, поступающих от различных программ. Программный интерфейс создает отдельную сессию шифрования для каждой программы, после чего поочередно переключает ресурсы шифратора между сессиями. Каждая сессия имеет собственный виртуальный шифратор со своими ключами шифрования, которые корректно перезагружаются при переключении между сессиями. Это несколько похоже на разделение ресурсов компьютера между приложениями в многозадачной операционной системе.
- Предоставление стандартного интерфейса к функциям шифратора и ключевым носителям Windows-приложениям.
- Возможность подключения различных типов шифраторов через драйверы, предоставляющие стандартный набор функций. Это позволяет прикладным программам не зависеть от конкретного типа шифратора. В данном случае вместо аппаратного шифратора можно подключить и программный, работающий на уровне ядра операционной системы. Аналогичным образом достигается и возможность использования различных ключевых носителей.
Таким образом, при обращении программы к УКЗД любая команда проходит несколько уровней:
- Уровень приложений.
- Уровень, обеспечивающий интерфейс между приложением и драйвером УКЗД.
- Уровень ядра операционной системы – драйвер УКЗД.
- Аппаратный уровень – собственно УКЗД.