Научная статья на тему 'О криптографическом расширении и его реализации для русского языка программирования'

О криптографическом расширении и его реализации для русского языка программирования Текст научной статьи по специальности «Математика»

CC BY
410
59
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук
Ключевые слова
РУССКИЙ ЯЗЫК ПРОГРАММИРОВАНИЯ / ЛЯПАС-Т / КОМПИЛЯТОР / ПРЕПРОЦЕССОР / ПРОЦЕССОР / АППАРАТНАЯ РЕАЛИЗАЦИЯ / RUSSIAN PROGRAMMING LANGUAGE / LYAPAS-T / COMPILER / PREPROCESSOR / PROCESSOR / HARD IMPLEMENTATION

Аннотация научной статьи по математике, автор научной работы — Агибалов Геннадий Петрович, Липский Валерий Борисович, Панкратова Ирина Анатольевна

Представлено расширение русского языка программирования ЛЯПАС, получившее название ЛЯПАС-Т и заключающееся в увеличении длины операндов и расширении множества элементарных операций над ними. Необходимость в нём продиктована, в первую очередь, потребностями страны в доверенных и эффективных программной и аппаратной реализациях современных криптографических алгоритмов в безопасных компьютерных системах логического управления критически важными объектами, такими, как космические системы, энергетические установки, ядерное оружие, подводные лодки, беспилотники и т. п. Представлены также компилятор ЛЯПАСа-Т, генерирующий его загрузочный модуль для операционной системы Linux, и проекты процессора, реализующего ЛЯПАС-Т ап-паратно, и препроцессора, конвертирующего программы на ЛЯПАСе-Т в исполняемый код процессора. Сообщается о процессоре для подмножества ЛЯПАСа-Т без подпрограмм, операций над комплексами и длинных операндов, описанном на VHDL, протестированном средствами компьютерного моделирования и реализованном на ПЛИС с помощью системы автоматизированного проектирования.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Cryptographic extension and its implementation for Russian programming language

Cryptographic extension of the Russian programming language LYaPAS called LYaPAS-T is presented. The extension concerns the size of operands and the set of elementary operations over them. It is caused by the need of trustworthy and effective soft and hard implementations of contemporary cryptographic algorithms in secure computer systems applied for the logical control of critically important objects such as cosmic systems, nuclear weapons, energetic plants, submarines, etc. A LYaPAS-T compiler generating a load module for operating system Linux, and the projects of a LYaPAS-T processor implementing LYaPAS-T in hardware and of a preprocessor translating LYaPAS-T programs to the executive code of the processor are presented too. It is also told that for a LYaPAS-T subset containing neither subprograms nor operations over complexes and long operands, the architecture of the processor has been described in VHDL, tested by means of a computer simulation, and implemented in a programmable logical integrated circuit obtained with the help of a computer-aided design.

Текст научной работы на тему «О криптографическом расширении и его реализации для русского языка программирования»

2013 Математические основы информатики и программирования №3(21)

МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ И ПРОГРАММИРОВАНИЯ

УДК 004.43, 004.056

О КРИПТОГРАФИЧЕСКОМ РАСШИРЕНИИ И ЕГО РЕАЛИЗАЦИИ ДЛЯ РУССКОГО ЯЗЫКА ПРОГРАММИРОВАНИЯ

Г. П. Агибалов, В. Б. Липский, И. А. Панкратова

Национальный исследовательский Томский государственный университет, г. Томск,

Россия

E-mail: agibalov@isc.tsu.ru, lipsky@mail.tsu.ru, pank@isc.tsu.ru

Представлено расширение русского языка программирования ЛЯПАС, получившее название ЛЯПАС-Т и заключающееся в увеличении длины операндов и расширении множества элементарных операций над ними. Необходимость в нём продиктована, в первую очередь, потребностями страны в доверенных и эффективных программной и аппаратной реализациях современных криптографических алгоритмов в безопасных компьютерных системах логического управления критически важными объектами, такими, как космические системы, энергетические установки, ядерное оружие, подводные лодки, беспилотники и т. п. Представлены также компилятор ЛЯПАСа-Т, генерирующий его загрузочный модуль для операционной системы Linux, и проекты процессора, реализующего ЛЯПАС-Т аппаратно, и препроцессора, конвертирующего программы на ЛЯПАСе-Т в исполняемый код процессора. Сообщается о процессоре для подмножества ЛЯПАСа-Т без подпрограмм, операций над комплексами и длинных операндов, описанном на VHDL, протестированном средствами компьютерного моделирования и реализованном на ПЛИС с помощью системы автоматизированного проектирования.

Ключевые слова: Русский язык программирования, ЛЯПАС-Т, компилятор, препроцессор, процессор, аппаратная реализация.

Введение

Здесь под Русским языком программирования подразумевается алгоритмический язык ЛЯПАС, разработанный в начале 1960-х годов в Томском государственном университете под руководством А. Д. Закревского и предназначенный для представления логико-комбинаторных алгоритмов решения задач прикладной дискретной математики, встречающихся в синтезе дискретных автоматов [1, 2]. Имя Русского языка программирования ему дали американские учёные [3]. До 1990-х годов ЛЯПАС интенсивно использовался в Советском Союзе [2], США [4], Германии, Польше, Чехословакии и многих других странах. В настоящее время ЛЯПАС успешно возрождается силами кафедры защиты информации и криптографии Томского государственного университета, главным образом, с целью разработки доверенного системного и прикладного программного обеспечения для автоматизированного проектирования безопасных компьютерных систем логического управления и для безопасной и эффективной реализации криптографических алгоритмов [5]. Среди многочисленных языков програм-

мирования, известных сегодня, ЛЯПАС предстаёт как наиболее подходящий для этих целей.

Вместе с тем есть один существенный и, возможно, единственный недостаток ЛЯПАСа — отсутствие в нём ряда элементарных операций, которые широко используются в современных криптографических алгоритмах: для арифметики длинных чисел, вычислений в многомерных пространствах над конечными полями и кольцами, решения комбинаторных задач над большими множествами и др. Кстати сказать, этот недостаток присущ всем современным языкам программирования, включая и те, что моложе ЛЯПАСа. В некоторых из них он преодолевается путём написания классов длинных чисел, больших дискретных функций и т. п. Что касается ЛЯПАСа, этот его недостаток более эффективно преодолевается расширением самого языка путём распространения элементарных операций в ЛЯПАСе на логические комплексы, которые, как известно, допускают арифметическую интерпретацию, и добавлением к нему некоторых новых элементарных операций, определённых над переменными и логическими комплексами. Последняя версия ЛЯПАСа — язык ЛЯПАС-М [6, 7], подвергнутый предварительно некоторой ревизии и затем расширенный (ехТе^е^ указанным образом, — называется ЛЯПАС-Т.

Ревизия ЛЯПАСа-М касается символики языка и арифметических операций умножения и деления целых чисел. Её результат назван уЛЯПАСом (от уЬУаРАБ, или reVised ЬУаРАБ). В нём вместо больших русских букв используются большие латинские буквы, символы некоторых операций заменены другими, более подходящими знаками, и операции умножения и деления определены с сохранением переполнения и остатка соответственно. Для хранения последних в язык введена специальная переменная Z.

Цель данной работы — представить информацию о некоторых из первых результатов, полученных в процессе возрождения ЛЯПАСа, а именно: о расширении ЛЯПАС-Т, обусловленном, главным образом, требованиями криптографических алгоритмов; о компиляторе ЛЯПАСа-Т, генерирующем код в формате исполняемого файла операционной системы (ОС) Ьтих; о процессоре, реализующем программы на ЛЯПАСе-Т аппаратно; о препроцессоре, транслирующем эти программы в исполняемый код процессора; о воплощении процессора в ПЛИС для подмножества уЛЯПАСа.

Начнём изложение с краткого обзора языка уЛЯПАС.

1. уЛЯПАС

Программа на уЛЯПАСе представляет собой последовательность предложений, каждое из которых (кроме, возможно, первого) начинается с §5, где в — целое неотрицательное число, и которые, в свою очередь, являются последовательностями операций над операндами языка.

1.1. Операнды

Операндами в уЛЯПАСе являются константы, переменные, комплексы и элементы комплексов. Они используются для представления неотрицательных целых чисел, булевых векторов, символов Ишс^е и последовательностей из них. Компоненты в булевом векторе нумеруются, начиная с 0 в направлении справа налево. В уЛЯПАСе неотрицательные целые ограничиваются числом 232 — 1, а длина булева вектора — числом 32. Булев вектор длины 32 называется словом и рассматривается также как неотрицательное целое, представленное в двоичном позиционном коде. Булев вектор любой длины п ^ 1 с одной единичной компонентой называется далее единичным вектором.

В vЛЯПАСе имеются натуральные, единичные и символьные константы. Натуральные константы записываются как десятичные, шестнадцатеричные, восьмеричные и двоичные числа. Единичная константа — это единичный вектор. Она обозначается Ii, если номер компоненты 1 в ней равен i. Символьная константа — это последовательность символов Unicode. В ней символы ' и \ записываются как пары \' и \\ соответственно.

Переменные в vЛЯПАСе принимают значения булевых векторов длины 32. Их количество равно 27. Они обозначаются буквами a, b, ... , z, Z и, как сказано выше, Z используется в специальных целях. Кроме того, есть ещё виртуальная переменная, называемая собственной или внутренней переменной языка. В отличие от остальных, реальных, переменных, она не участвует в записи программ на ЛЯПАСе, но появляется в них неявно как результат любой элементарной операции и может быть использована любой последующей операцией в программе. Для удобства изложения эту переменную принято называть т.

Комплекс есть конечное линейно упорядоченное множество элементов, которые в символьном комплексе суть коды символов (булевы векторы длины 8, или байты), а в логическом — булевы векторы длины 32, или слова. Каждый комплекс имеет уникальный номер из ряда 0, 1, 2, . . . Логический или символьный комплекс, имеющий номер i, обозначается Li или Fi соответственно. Действительное и максимально возможное количества элементов в комплексе являются параметрами комплекса и называются его мощностью и ёмкостью соответственно.

Далее все эти понятия вводятся формально:

— переменная и ::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z;

— особая переменная Z;

— десятичная цифра д :: = 0|1|2|3|4|5|6|7|8|9, десятичая константа д ::= д{д};

— шестнадцатеричная цифра п ::= g|A|B|C|D|E|F, шестнадцатеричная константа

h ::= n{n}h;

— восьмеричная цифра ш ::= 0|1|2|3|4|5|6|7, восьмеричная константа w ::= ш{ш^;

— двоичная цифра е ::= 011, двоичная константа в ::= e{e}b ;

— натуральная константа i ::= д|h|w|e;

— символ о ::= любой символ Unicode, символьная константа Е ::=' о {а}';

— единичная константа I ::= Id|Iu; константа ::= i|E|I;

— символьный комплекс F::= Fd, логический комплекс L ::= Ld, комплекс к ::= F|L;

— индекс J ::= .д|и|(и + д)|(и — д); элемент комплекса ::= kJ;

— Qд ::= мощность комплекса с номером д, Бд ::= ёмкость комплекса с номером д;

— значение натуральной константы ::= неотрицательное целое|булев вектор;

— значение символьной константы ::= строка символов;

— значение переменной ::= неотрицательное целое|булев вектор;

— значение элемента логического комплекса ::= неотрицательное целое|булев вектор;

— значение элемента символьного комплекса :: = неотрицательное целое|булев вектор| символ.

В отличие от других языков программирования, типы значений в vЛЯПАСе не фиксированы. Тип значения (целое или вектор) для константы, переменной и элемента комплекса определяется типом операции (арифметической или логической соответственно), которая применяется к этому операнду.

1.2. Элементарные операции Передача значения

Пусть, как обычно, т есть собственная (внутренняя) переменная ЛЯПАСа, a — произвольные переменная или элемент комплекса, 7 — переменная, элемент комплекса или константа, х — значение на выходе генератора псевдослучайных чисел в компьютере (PRNG), Z — начальное состояние PRNG, в — значение на выходе таймера в компьютере. Тогда:

Oa — присвоение наименьшего значения (нулей): a := 00...0;

-a — присвоение наибольшего значения (единиц): a := 11... 1;

^ a — присвоение т: a := т;

Y — присвоение 7: т := 7;

^ (U1U2) —обмен значениями переменных U и и2;

^ (ku1u2), или ^ (кид), ^ (к.ди), или ^ (к.д1.д2) —обмен значениями элементов комплекса ки1 и ки2, или ки и к.д, или к.д1 и к.д2 соответственно;

X означает т := х; ^Х означает Z := т; T означает т := в.

Логические и арифметические операции

! —вычисление номера правой единицы: т := !т;

— — отрицание т := — т;

% — вычисление веса булева вектора: т := %т;

V7 — дизъюнкция: т := т V 7;

&7 — конъюнкция: т := т&7;

®7 — сложение по модулю 2: т := т ф 7;

< 7 — левый сдвиг: т := т < 7;

> 7 — правый сдвиг т := т > 7;

+7 — сложение по модулю 232: т := т + 7;

—7 — вычитание по модулю 232: т := т — 7;

*7 — умножение по модулю 232: т := т * 7, Z := переполнение;

: 7 — деление двойного числа: т := частное от деления Zт на 7, Z := остаток;

/7 — частное целочисленного деления: т := частное от деления т на 7, Z := остаток; ; 7 — остаток целочисленного деления: т := остаток от деления т на 7, Z := частное; Aa — увеличение на 1: т := a := a + 1;

Va — уменьшение на 1: т := a := a — 1.

1.3. Операции перехода м д — безусловный переход к параграфу д; м д — переход к параграфу д по условию т = 0; м д — переход к параграфу д по условию т = 0;

t (71 ° 72)д — переход к параграфу д по отношению о е {=, =,<,>, ^, ^};

^ д — уход к параграфу д с возвратом;

— возврат к точке, следующей за точкой ухода >-^ д; t (7)д — переход к параграфу д по времени 7;

tXдa1a2 — перечисление единиц: если a1 = 0, то a2 := 0 и м д,в противном случае правая 1 в a1 заменяется на 0, её номер присваивается a2 и выполняется следующая операция;

{assembly program} — ассемблерная вставка: выполняется программа на языке Ассемблера, указанная между { и }.

1.4. Операции над комплексами Пусть £ есть д или и; тогда:

@ + к(£) —образование (создание) комплекса к ёмкости £ и мощности 0;

@ — к — уничтожение комплекса к;

@%к — сокращение ёмкости комплекса до его мощности;

О к - очистка комплекса (в пределах его мощности): к ::= 00 ... 0;

...^т > Т — символы ^1,а2, ...,ат добавляются к символьному комплексу Т; @ > к£ — вставка элемента: значение т вставляется в комплекс к перед £-м элементом (в отсутствие £ — после последнего элемента);

@ < к£ — удаление элемента: £-й элемент (в отсутствие £ — последний элемент) комплекса к перемещается в т, мощность комплекса уменьшается на 1;

@#к1 к2(£1, £2, £3) — £1 элементов комплекса к1, начиная с £2-го элемента (в отсутствие £2 —первые £1 элементов к1), копируются в к2, начиная с £3-го элемента (в отсутствие £3 — в конец к2), мощности к1, к2 не изменяются.

Впредь комплекс, образованный с фиксированной ёмкостью (д), называется статическим, а комплекс с переменной ёмкостью (и) —динамическим.

Заметим также, что операция объявления части комплекса самостоятельным комплексом, существующая в ЛЯПАСе, не включена в уЛЯПАС по причине её потенциальной опасности.

1.5. Операции ввода-вывода

/Т >С — вывод символьного комплекса Т на консоль;

/Ч1 >С — вывод символьной константы <; на консоль;

/Т <С — ввод символьной константы с клавиатуры: вводимые символы добавляются к символьному комплексу Т, мощность комплекса увеличивается.

2. Расширение уЛЯПАСа

2.1. Длинная арифметика Натуральные константы в расширении ЛЯПАС-Т являются целыми из множества {0,1,..., 2П — 1}, где п кратно 32 и зависит от фактической реализации ЛЯПАСа-Т. В настоящее время значение п = 214 вполне приемлемо для криптографических приложений.

Обозначая число 232 символом $, любую натуральную константу с можно выразить в виде

С = Со + С^ + С2$2 + ... + СГ-1^Г 1 (1)

для некоторых г > 0 и с € П = {0,1,... , 232 — 1}, I = 0,1,... , г — 1. В стандартном двоичном представлении элементы множества П являются словами — булевыми векторами длины 32. Поэтому в ЛЯПАСе-Т последовательность с0,с1,... ,сг-1 представляется логическим комплексом мощности г с с в качестве г-го элемента.

Все операции, определённые в уЛЯПАСе над переменными, в ЛЯПАСе-Т могут применяться к логическим комплексам. В случае арифметической операции последовательность элементов комплекса рассматривается как натуральная константа с, заданная формулой (1). Различные операнды для одной и той же арифметической операции могут иметь различные длины и типы (один из них — переменная, другой — комплекс). В случае логической операции значение комплекса рассматривается как булев вектор, являющийся конкатенацией элементов комплекса. Логические комплексы мощности п/32 со значениями единичных векторов являются единичными константами в ЛЯПАСе-Т.

2.2. М н о ж е с т в е н н о с т ь с о б с т в е н н о й п е р е м е н н о й

Таким образом, в отличие от ЛЯПАСа, в ЛЯПАСе-Т есть два типа операндов для элементарных операций: переменные длины в одно слово и логические комплексы различных длин — от одного до n/32 слов. Соответственно этому, в ЛЯПАСе-Т имеются и два типа собственной переменной — простая и комплексная. Первая — из ЛЯПАСа, имеет длину одного слова. Она может принимать значение любой переменной языка. В любой реализации ЛЯПАСа-Т, программной или аппаратной, она представляется в регистре процессора. Собственные переменные 2-го типа имеют длины логических комплексов и могут принимать значения последних. В аппаратной реализации ЛЯПАСа-Т все они могут представляться в одном и том же регистре максимальной возможной длины — n разрядов. В программной реализации ЛЯПАСа-Т, из-за отсутствия такого регистра, роль комплексной собственной переменной на время выполнения цепочки операций, начинающейся с обращения к логическому комплексу, возлагается непосредственно на этот комплекс, и хранится она по месту его расположения в памяти компьютера.

В дальнейшем изложении, там, где это не вызывает двусмысленности, собственная переменная любого типа, будь то простая или комплексная, обозначается (как в ЛЯПАСе) буквой т и называется соответственно простой или комплексной т.

2.3. Д о п о л н и т е л ь н ы е о п е р а ц и и

В дополнение к операциям в vЛЯПАСе расширение ЛЯПАС-Т содержит некоторые новые логические операции, используемые в записи криптографических алгоритмов, включая следующие, где А ::= и|£|ки|к.д|д:

1) ft L — перестановка: компоненты булева вектора т переставляются в соответствии с их порядковыми номерами, указанными в элементах логического комплекса L;

2) _(£ь£2) —проекция: выбирается часть булева вектора т с компонентами, имеющими номера в интервале (£1,£2);

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3) ft £1А(£2,£3) —вставка: часть булева вектора А с компонентами, имеющими номера в интервале (£2,£3), вставляется в т перед £1-й компонентой (в отсутствие £3 вставляется правая часть булева вектора А длины £2, в отсутствие (£2, £3) —весь булев вектор А);

4) ft (£1, £2) — редукция: часть булева вектора т с компонентами, имеющими номера в интервале (£ъ£2), вычёркивается из вектора;

5) | А — конкатенация: булев вектор А присоединяется к т;

6) ^ £1(£2,£3) или ^ £1(£2,£3) —левый или правый циклические сдвиги: часть булева вектора т с компонентами, имеющими номера в интервале (£2,£3), циклически сдвигается на £1 бит влево или вправо соответственно (в отсутствие £3 сдвигается правая часть булева вектора т длины £2, в отсутствие (£2,£3) —весь булев вектор т);

Т) ^ к — максимальный элемент комплекса к помещается в т, его номер — в Z;

8) ^ к — минимальный элемент комплекса к помещается в т, его номер — в Z.

Что касается арифметических операций по модулю N (для некоторого натурального N), таких, как сложение и вычитание (mod N), умножение (mod N), возведение в степень (mod N) и другие, широко используемые в криптографии, фактически нет никакой реальной возможности для включения их в список элементарных операций ЛЯПАСа-Т из-за существования великого множества алгоритмов их выполнения, имеющих разные эффективности в различных случаях. Вместо этого решено эти алгоритмы реализовывать по мере надобности и возможности на ЛЯПАСе-Т и (или) на

языке Ассемблера и включать их в библиотеку для использования в программах на ЛЯПАСе-Т в качестве подпрограмм.

3. Компилятор ЛЯПАСа-Т

3.1. Что это такое?

Далее для краткости любая программа на ЛЯПАСе-Т и её подпрограммы называются L-программой и L-подпрограммами соответственно.

Для выполнения L-программы компьютером она должна быть подана в качестве параметра компилятору, который преобразует её в загрузочный модуль (исполняемый код) для ОС Linux. Компилятор запускается по команде последней >$ lc <prog>.l,

где <prog>.l —это имя файла с L-программой, являющейся списком L-подпрограмм. (Рекомендуется файлу с L-программой давать имя с расширением l, но это не обязательно.) Первая в списке L-подпрограмма является головной. ОС Linux передаёт ей управление после загрузки файла в оперативную память компьютера. Порядок следования других L-подпрограмм в списке несущественный. Файл может содержать не все необходимые L-подпрограммы. В этом случае компилятор находит недостающие в файле liblO.l, являющемся библиотекой пользователя. В ней рекомендуется хранить наиболе часто используемые L-подпрограммы.

Результатом работы компилятора является загрузочный модуль, который хранится под именем <prog> (без расширения) в той же папке, где находится и L-программа. Запуск скомпилировангой программы на выполнение осуществляется по команде >$ ./<prog>.

Компилятор написан на языке C+—+ с использованием библиотеки регулярных выражений, делающим его максимально простым и прозрачным.

3.2. С т р у к т у р а з а г р у з о ч н о г о м о д у л я

Загрузочный модуль состоит из двух сегментов — сегмента программы (.text) и сегмента данных (.data). В свою очередь, первый сегмент состоит из подпрограмм, генерируемых компилятором для L-подпрограмм, вызываемых в процессе исполнения L-программы. Сегмент данных содержит: текущий адрес в памяти для размещения новых комплексов и границу памяти, отводимой ОС под комплексы; текущее состояние PRNG; единичные константы; веса всех булевых векторов в {0,1}8 (нужны для реализации операции взвешивания %); все символьные константы, встречающиеся в L-программе.

3.3. О р г а н и з а ц и я п а м я т и

Для каждой L-подпрограммы все её локальные переменные, начала, мощности и ёмкости её локальных комплексов размещаются в стеке, образующем фрейм в 1420 байтов. Доступ к локальным данным осуществляется по фиксированным смещениям от начала фрейма (регистр ebp). Значение регистра ebp фрейма родительской подпрограммы также сохраняется во фрейме, образуя список фреймов вызванных L-подпрограмм.

Локальные комплексы L-подпрограммы размещаются в «куче». Адрес свободного участка кучи на момент вызова подпрограммы также сохраняется во фрейме.

Создание локального комплекса сопровождается проверкой свободного места путём сравнения величин ёмкости создаваемого комплекса, адреса свободного участка и границы памяти, отводимой под комплексы. Если места достаточно, то адрес начала комплекса получает значение адреса свободного участка, а адрес свободного участка

увеличивается на значение ёмкости комплекса. Если места недостаточно, то выполняется обращение к ОС для увеличения границы доступной памяти.

Такая организация памяти защищена от атак переполнения стека и «кучи», поскольку, во-первых, буферы (комплексы) убраны из стека вместе с возможностью переписать адрес возврата и, во-вторых, нет операций для освобожения «кучи» посредством ОС.

4. Процессор ЛЯПАСа-Т

4.1. Параметры

В ЛЯПАСе-Т, реализованном аппаратно, длина операнда, наибольший номер комплекса и наибольшее количество подпрограмм в иерархической структуре программы обозначаются натуральными n, m и k соответственно. Следовательно, количества различных комплексов (логических и символьных) и переменных в программе на ЛЯПАСе-Т, исполняемой процессором, равны соответственно mk и 27k. В настоящее время максимальные значения m = 64, k =128 вполне достаточны для большинства практических алгоритмов.

4.2. И с п о л н я е м ы й к о д

Для исполнения процессором программа на ЛЯПАСе-Т должна быть предварительно представлена последовательностью инструкций в исполняемом коде (называемом LE-код) для процессора. Каждая инструкция в нём содержит в себе поля под код операции, тип операнда (константа или нет, тип комплекса — логический, символьный, статический или динамический, если операнд — комплекс или его элемент) и под адреса комплекса и переменной в памяти данных. Поле адреса комплекса используется, если операция имеет дело с данными вида ки или L. В первом случае адрес статического комплекса к, являющийся, по определению, адресом его первого элемента, записывается в этом поле явно, и адрес переменной и записывается в поле адреса переменной. Во втором случае поле адреса комплекса содержит адрес комплекса L и поле адреса переменной остаётся пустым (равно Q). Во всех других случаях поле адреса комплекса в инструкции пустое. То же самое справедливо и в отношении динамического комплекса с одним исключением: в поле адреса динамического комплекса указывается не сам адрес комплекса, а адрес, по которому он хранится.

4.3. А р х и т е к т у р а

Архитектура процессора, реализующего ЛЯПАС-Т аппаратно, содержит блоки: Память, Арифметико-логическое устройство (АЛУ), Устройство управления (CD — Control Device), Счётчик инструкций (IC — Instruction Counter), Регистр инструкций (IR —Instruction Register) и два Дешифратора — адреса (ADec) и операции (ODec).

Память

Память процессора подразделяется на два сегмента — IM (Instruction Memory) и DM (Data Memory), используемых для запоминания соответственно последовательности инструкций в LE-коде, представляющей некоторую программу P на ЛЯПАСе-Т, и данных для неё — единичных констант Ii, переменных и комплексов для каждой подпрограммы в иерархической структуре программы P, а также параметров (мощностей и ёмкостей) и адресов этих комплексов в DM. Соответственно, для P с k подпрограммами, DM подразделяется условно на четыре секции: секция I — для хранения векторов Ii, i = 0,1,... , n — 1; секции C и G, разбитые на k подсекций Cj и Gj —для хранения соответственно статических и динамических комплексов в j-й подпрограмме; и секция W, также разбитая на k подсекций Wj — для хранения принадлежащих

j-й подпрограмме локальных переменных a, b, ..., z, параметров и адресов всех комплексов j-й подпрограммы.

Секции I, C и W образуют так называемую статическую память, а секция G — динамическую память процессора. Размещение данных в первой выполняет препроцессор (до исполнения программы P), во второй — сам процессор (во время исполнения P).

Инструкции в IM и данные в DM располагаются плотно, без пропусков элементов памяти, в порядке следования секций I, C, W и G. Количество занятых элементов подсекции Gj в DM отображается значением одного из элементов в Wj. Адрес этого элемента обозначается далее aj. Его значение есть наименьший из адресов свободных элементов в Gj. В частности, до запуска процессора все aj совпадают с числом элементов в статической памяти DM.

Статические комплексы, создаваемые в j-й подпрограмме, размещаются в Cj препроцессором путём указания их параметров и адресов в Wj. Ёмкость и адрес в Wj динамического комплекса препроцессор оставляет неопределёнными. Динамический комплекс, создаваемый в j -й подпрограмме с ёмкостью, задаваемой значением некоторой переменной £, располагается в Gj в массиве требуемого размера с начальным элементом по адресу, записанному по адресу aj. Это делается аналогичным образом процессором в момент исполнения им данной операции: параметры и адрес комплекса запоминаются в Wj, значение по адресу aj увеличивается на £.

АЛУ

АЛУ состоит из трёх регистров т, Z и O максимальной возможной длины n, называемых регистрами общего назначения (CURs - Common Use Registers) и предназначенных для представления соответственно переменных т, Z и операнда, считываемого из DM, а также операционных устройств (OD — Operational Devices) и схемы CEA (Complex Element Address) определения адреса элемента комплекса в DM.

Операционные устройства используются для выполнения арифметических и логических операций в ЛЯПАСе-Т с участием операндов и результатов операций, представленных в регистрах т, Z и O.

Для элемента комплекса ки его адрес в DM вычисляется схемой CEA как в = + 4и, если к = L, или как в = ^ + и, если к = F, где ^ есть адрес в DM

первого элемента в к (называемый также адресом самого комплекса к).

Устройство управления

Основные функции блока CD следующие: получать и анализировать информационные сигналы от других блоков, выбирать следующую инструкцию из IM, идентифицировать код операции в ней, определять адрес операнда в DM и адрес следующей инструкции в IM, формировать и посылать управляющие сигналы к другим исполнительным блокам.

4.4. А л г о р и т м ф у н к ц и о н и р о в а н и я

1. Устройство управления CD выбирает из IM инструкцию по адресу, указанному в IC, и записывает её в IR.

2. ODec дешифрует содержимое поля кода операции, а ADec — содержимое полей типа и адреса операнда (комплекса и/или переменной) из инструкции в IR.

3. CD по информации от ODec и ADec генерирует сигналы либо для выбора из DM (возможно, посредством схемы CEA) операнда (константы, переменной, комплекса или элемента комплекса) по соответствующему адресу и для его записи в один из CURs, либо, если операнд является константой, заданной в инструкции явно, для записи его в регистр O или в IC.

4. Если операция в инструкции относится к функциональному типу, т. е. является арифметической или логической, то СВ генерирует сигнал, инициализирующий соответствующее ОВ.

5. Это ОВ выполняет данную операцию, и результат записывается в СиИй в соответствии с кодом операции.

6. Если код операции указывает на переход, то содержимое поля адреса переменной в инструкции в Ш записывается в 1С; в противном случае содержимое в 1С увеличивается для выбора следующей инструкции из 1М.

7. Если инструкция в Щ указывает на создание некоторого динамического комплекса с переменной ёмкостью £ в ]-й подпрограмме, то мощность 0 и ёмкость £ этого комплекса записываются по адресам его параметров в Wj, а значение по адресу aj запоминается в Wj как адрес этого комплекса в Gj и затем увеличивается на величину £.

В этом алгоритме функционирования процессора поведение устройства управления СВ описывается формально на языке конечных автоматов.

4.5. Ь-препроцессор

Для трансляции программы на ЛЯПАСе-Т в ЬЕ-код используется специальный компилятор, называемый Ь-препроцессор. Он может быть написан на любом языке программирования (на ЛЯПАСе-Т, например) для исполнения на любом компьютере, снабжённом соответствующим компилятором. Ь-препроцессор должен выполнять следующую последовательность действий над заданной Ь-программой Р:

1) каждой подпрограмме в иерархической структуре программы Р назначить уникальный номер из ряда 1, 2, ... , к;

2) для каждого ] = 1, 2,..., к каждой локальной переменной и каждому статическому локальному комплексу ]-й подпрограммы в структуре программы Р поставить в соответствие уникальный адрес в Wj;

3) для каждого вызова ^'-й подпрограммы из г-й подпрограммы в Р, г,^ € {1, 2, . . . , к}, подставить реальные параметры, указанные в вызове, вместо соответствующих абстрактных (внешних) параметров в теле ]-й подпрограммы и вместо самого вызова — инструкции а^, ^ аj и текст ]-й подпрограммы, в котором вместо имени всякого динамического комплекса указан адрес в Wj, где лежит адрес этого комплекса в Gj;

4) всякую другую операцию в программе заменить эквивалентной ей цепочкой инструкций в ЬЕ-коде — непосредственно либо с промежуточной заменой на цепочку унарных операций, т. е. таких, которые используют самое большее один операнд, отличный от т.

4.6. А л ь т е р н а т и в н ы й в а р и а н т

В альтернативном варианте процессора в сегменте 1М хранятся исполняемые коды как головной программы, так и всех подпрограмм в её иерархической структуре. В этом случае Ь-препроцессор вместо вызова подпрограммы подставляет в содержащую его (вызов) программу инструкцию А с кодом операции перехода по адресу исполняемого кода данной подпрограммы в 1М и в конец последнего записывает инструкцию с кодом операции возврата, т. е. перехода по адресу инструкции, следующей в 1М за А. Кроме того, в процессе исполнения программы процессор перед исполнением инструкции А пересылает значения входных операндов подпрограммы, указанных в её вызове, по соответствующим адресам ВМ в её исполняемом коде, а перед возвратом к инструкции, следующей за А, пересылает результаты исполнения кода подпрограммы по адресам соответствующих её выходных операндов, указанных в её вызове.

Пересылка значений операндов подпрограмм существенно снижает скорость работы процессора по сравнению с его базовым вариантом, но значительно сокращает объём требуемой памяти сегмента IM. Вместе с тем отсутствие пересылок между операндами в базовом варианте не гарантирует сохранения значений входных операндов подпрограммы, если это не предусмотрено программистом.

4.7. Применения Есть, по меньшей мере, два возможных применения процессора ЛЯПАСа-Т: в качестве криптопроцессора и как управляющего процессора. В первом случае сегмент памяти IM заполняется LE-кодом некоторой программы на ЛЯПАСе-Т, реализующей некоторый криптографический алгоритм, а данные для него (открытый или шифрованный тексты, ключи и др.) записываются в сегмент DM. Во втором случае IM и DM используются для запоминания соответственно LE-кода ЛЯПАС-Т-программы, реализующей некоторый алгоритм, предназначенный для безопасного управления критически важным объектом (космическим, энергетическим, транспортным, технологическим и т. п.), и данных для этой программы.

5. Процессор для подмножества уЛЯПАСа

Пусть Li является подмножеством vЛЯПАСа, которое включает все операции первого уровня vЛЯПАСа и не содержит (вызовов) подпрограмм и операций над комплексами. Архитектура процессора для L1 (называемого также L1-процессором) была впервые разработана и описана на VHDL в 2012 г. С.Е. Солдатовым, студентом кафедры защиты информации и криптографии Томского государственного университета. С целью предварительной верификации все отдельные блоки в L1-процессоре и его архитектура в целом промоделированы с помощью программного продукта ModelSim PE Student Edition 10.1d. Кроме того, с использованием автоматизированной системы проектирования ISE WebPACK 9.2i фирмы «Xilinx» синтезирована программируемая логическая интегральная схема ^-процессора. Максимальная рабочая частота схемы равна 50 МГц, что эквивалентно схемной задержке в 20 нс. Cхема занимает 1/3 часть отладочной платы Nexys2 FPGA, Digilent Inc.

Этот результат показывает, что аппаратная реализация процессора для ЛЯПАСа-Т является совершенно реальным проектом, обещающим создание доверенных средств для эффективного исполнения криптографических и безопасных управляющих алгоритмов.

Результаты работы доложены на 12 Всероссийской конференции «Сибирская научная школа-семинар с международным участием „Компьютерная безопасность и криптография"— SIBECRYPT’13» [8, 9]. Там же был продемонстрирован алгоритм шифрования AES, представленный на языке vЛЯПАС [10].

ЛИТЕРАТУРА

1. LYaPAS, a Programming Language for Logic and Coding Algorithms / eds. M.A. Gavrilov and A. D. Zakrevskii. New York, London: Academic Press, 1969. 475 p.

2. Торопов Н. Р. Язык программирования ЛЯПАС // Прикладная дискретная математика. 2009. №2(4). С. 9-25.

3. Nadler N. User group for Russian programming language // IEEE, Newsletter for Computer-Aided Design. 1971. Iss.3.

4. Charles J. and Albright Jr. An Interpreter for the Language LYaPAS. University of North Carolina at Chapel Hill: Department of Computer Science. 1974. 125 p.

5. Агибалов Г. П. К возрождению русского языка программирования // Прикладная дискретная математика. 20І2. №3(17). С. 77-84.

6. Закревский А. Д., Торопов Н. Р. Система программирования ЛЯПАС-М. Минск: Наука и техника, І978. 240 с.

7. Торопов Н. Р. Диалоговая система программирования ЛЕС. Минск: Наука и техника, І985. 2б3с.

8. Agibalov G. P., Lipsky V. B., and Pankratova I. A. Cryptographic extension of Russian programming language jj Прикладная дискретная математика. Приложение. 20І3. №б. С. 93-98.

9. Agibalov G. P., Lipsky V. B., and Pankratova I. A. Project of hardware implementation of Russian programming language jj Прикладная дискретная математика. Приложение. 20І3. №б. P. 98-І02.

10. Broslavskiy O. V. AES in LYaPAS jj Прикладная дискретная математика. Приложение. 20І3. №б. С. 102-104.

i Надоели баннеры? Вы всегда можете отключить рекламу.