IBM создала для АНБ самый мощный дешифровщик времён холодной войны

от автора

Он выполнял свои задачи в 200 раз быстрее любого другого компьютера на Земле

Сотрудники устанавливают Harvest (IBM 7950) в штаб-квартире АНБ. Две консоли управляли настройками Stretch, универсального мейнфрейма системы, и потокового сопроцессора Harvest, который предназначался для высокоскоростного анализа перехваченных сообщений, шифров и кодов.

Сотрудники устанавливают Harvest (IBM 7950) в штаб‑квартире АНБ. Две консоли управляли настройками Stretch, универсального мейнфрейма системы, и потокового сопроцессора Harvest, который предназначался для высокоскоростного анализа перехваченных сообщений, шифров и кодов.

В разгар холодной войны существовал настолько засекреченный специализированный компьютер, что остальной мир даже не подозревал о его существовании. Некоторые задачи он выполнял до 200 раз быстрее любого другого компьютера своего времени. Он служил главным криптоаналитическим процессором Агентства национальной безопасности США (АНБ) с Карибского кризиса 1962 года, всю войну во Вьетнаме и ещё после подписания Хельсинкских соглашений 1975 года. Машину остановили только тогда, когда её механические узлы окончательно износились.

Harvest имел огромное значение и благодаря своим возможностям, и благодаря эпохе, в которую работал. На протяжении 14 лет он обрабатывал самые секретные перехваты АНБ, в период, когда радиоэлектронная разведка по своему стратегическому значению уступала разве что ядерному оружию.

IBM спроектировала и построила Harvest специально для АНБ. Это была одна из первых машин, рассчитанных на обработку огромных непрерывных потоков данных. В этом смысле она стала предшественницей современных компьютеров, которые в реальном времени обрабатывают видеопотоки и обеспечивают работу систем безопасности. Кроме того, Harvest стал одним из первых компьютеров, созданных в виде дополнения к универсальной машине, специализированного помощника, который исключительно хорошо выполнял одну конкретную работу. В некотором смысле модульная архитектура Harvest была аналогом современных графических процессоров, которые берут на себя ресурсоёмкие задачи в играх и системах искусственного интеллекта.

Такая вычислительная мощность требовала непрерывного потока данных. А это привело ещё к одному новаторскому достижению: первой в мире автоматизированной ленточной библиотеке, роботизированная система которой могла сама достать любую из сотен массивных кассет с магнитной лентой.

Беспрецедентные возможности Harvest по обработке и хранению данных заставили его создателей совершенно по‑новому подойти к работе с информацией. Поэтому IBM разработала специальный язык программирования Alpha. С его помощью криптоаналитики могли строго описывать задачи дешифровки, примерно так же, как учёные того времени использовали новый язык Fortran для описания уравнений и алгоритмов обработки данных.

В центре обработки данных АНБ в Форт-Миде, штат Мэриленд, находился один из самых быстрых компьютеров своего времени. Правда, о нём почти не говорили из-за секретной работы по взлому кодов и поиску закономерностей в шифрах. Национальный криптологический музей.

В центре обработки данных АНБ в Форт‑Миде, штат Мэриленд, находился один из самых быстрых компьютеров своего времени. Правда, о нём почти не говорили из‑за секретной работы по взлому кодов и поиску закономерностей в шифрах. Национальный криптологический музей.

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

Сердце секретной машины АНБ

Основой Harvest, официально называвшегося IBM 7950, стал знаменитый транзисторный мейнфрейм IBM 7030 1960 года, более известный как Stretch. С 1961 по 1963 год IBM поставила Stretch восьми или девяти заказчикам, главным образом научно‑исследовательским лабораториям. Машину проектировали и создавали во второй половине 1950-х годов, и именно Stretch ввёл ставшее сегодня стандартным понятие 8-битного байта. Первые три года после запуска Stretch оставался самым быстрым компьютером несекретного мира, хотя IBM так и не достигла своей амбициозной цели: сделать его в сто раз быстрее предшественника, IBM 704. Пока инженеры IBM в Покипси, штат Нью‑Йорк, проектировали и строили Stretch, компания параллельно и без лишней огласки обсуждала новую систему для АНБ.

Существовавшие тогда криптоаналитические компьютеры АНБ представляли собой крупные устройства, занимавшиеся пакетной обработкой. Перед каждым запуском оператору приходилось вручную устанавливать нужные магнитные ленты. Эти системы уже не справлялись с огромным объёмом перехваченных сообщений, которые стекались со всего мира. Агентству требовалась машина, способная автоматически и круглосуточно обрабатывать непрерывный поток поступающих данных. Уже одно это требование во многом определило архитектуру Harvest.

Схематическое изображение компьютера IBM/NSA Harvest, работавшего с 1962 по 1976 год. Система Harvest, созданная IBM специально для АНБ для дешифровки, объединяла мейнфрейм IBM 7030 Stretch и специализированный потоковый процессор. Stretch выполнял обычные вычисления и операции ввода-вывода, в том числе управлял автоматизированной ленточной библиотекой Tractor. Обе части системы использовали два вида общей памяти: большой основной банк и меньший, но более быстрый. Когда Stretch переводил систему в потоковый режим, Harvest извлекал из памяти два потока данных, P и Q, параллельно обрабатывал их и записывал результат в виде третьего потока, R. Крис Филпот.

Схематическое изображение компьютера IBM/NSA Harvest, работавшего с 1962 по 1976 год. Система Harvest, созданная IBM специально для АНБ для дешифровки, объединяла мейнфрейм IBM 7030 Stretch и специализированный потоковый процессор. Stretch выполнял обычные вычисления и операции ввода‑вывода, в том числе управлял автоматизированной ленточной библиотекой Tractor. Обе части системы использовали два вида общей памяти: большой основной банк и меньший, но более быстрый. Когда Stretch переводил систему в потоковый режим, Harvest извлекал из памяти два потока данных, P и Q, параллельно обрабатывал их и записывал результат в виде третьего потока, R. Крис Филпот.

После двух неудачных предложений АНБ IBM в 1958 году наконец получила контракт. Новая машина должна была основываться на Stretch, но дополнительно получить специализированный сопроцессор и революционную систему хранения данных на магнитных лентах под названием Tractor.

Главной специализацией Stretch были вычисления с плавающей точкой, необходимые в научных задачах. IBM прежде всего рассчитывала на лаборатории, занимавшиеся передовыми исследованиями, включая разработку ядерного оружия и прогнозирование погоды. Специализированный сопроцессор, который собирались добавить к Stretch, предназначался совсем для другого: он должен был помогать аналитикам АНБ просеивать огромные массивы буквенно‑цифровых символов, то есть, по сути, целочисленные данные.

Сопроцессор Harvest представлял собой полную противоположность универсальному компьютеру. Это была потоковая вычислительная машина. Вместо длинной последовательности инструкций она выполняла одну заданную группу операций и применяла её к каждой паре символов, проходивших через систему. Harvest использовал общую память с главным процессором Stretch и работал короткими сериями. В каждый конкретный момент Stretch либо работал, либо приостанавливал свою работу, пока сопроцессор Harvest с огромной скоростью обрабатывал данные в памяти.

Stretch и Harvest стали одними из первых крупных компьютеров, полностью построенных на транзисторах, смонтированных на печатных платах внутри огромных шкафов размером с холодильник. В техническом руководстве Stretch 1962 года процессор машины разделялся на несколько функциональных секций: блок команд, блок предварительного просмотра, арифметический блок с параллельной и последовательной обработкой и блок шины памяти. Harvest унаследовал основную схемотехнику Stretch, но получил необычное дополнение. Его потоковые блоки обрабатывали данные в несколько перекрывающихся этапов, образуя конвейер. Пока одна пара байтов сравнивалась, следующая уже загружалась из памяти.

Сопроцессор Harvest извлекал из системной памяти два потока данных, P и Q, выполнял над ними операции, а затем записывал результат обратно в память в виде третьего потока, R. Ширина каждого потока могла составлять от 1 до 8 бит. Память Harvest адресовалась побитно, поэтому границами машинных слов можно было вообще пренебречь. Например, машина могла получить из памяти ровно 5 бит вместо целого байта. Для потоков P, Q и R предусматривались гибкие механизмы циклов и сложной адресации. Благодаря этому система могла, например, многократно извлекать из памяти короткие строки.

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

Сложность Harvest ставила в тупик даже некоторых сотрудников АНБ. Как писал Джеймс Бэмфорд в своей книге 2001 года об истории агентства «Body of Secrets» (“Корпус секретов”, Doubleday), во время экскурсий для сотрудников чиновники иногда указывали на машину и насмешливо говорили: «Она красивая, но не работает».

Однако далеко не всех в агентстве пугал этот монументальный аппарат. Один из немногих задокументированных примеров работы Harvest, который приводит Бэмфорд, описывает поиск 7000 заданных выражений в массиве из 3,5 миллиарда символов. Машина справилась чуть меньше чем за четыре часа.

В рассекреченном выступлении 1972 года аналитик АНБ Роберт Луни упоминал ещё одну задачу, которую решал Harvest, хотя и не раскрыл её конечную цель и не объяснил, с какой именно дешифровкой она была связана. Задание под кодовым названием Moretown требовало просеять 11 миллионов сообщений, накопленных за 16 лет перехвата, и проверить их примерно по 8000 поисковых выражений. На всё ушло около десяти часов.

Сотрудница IBM Фрэнсис Аллен участвовала в создании Alpha, специализированного языка программирования Harvest. IBM.

Сотрудница IBM Фрэнсис Аллен участвовала в создании Alpha, специализированного языка программирования Harvest. IBM.
Джеймс Х. Померен из IBM был главным инженером Harvest и руководил разработкой специализированных схем, оптимизированных под алгоритмы, которые применялись во многих криптографических задачах. IEEE.

Джеймс Х. Померен из IBM был главным инженером Harvest и руководил разработкой специализированных схем, оптимизированных под алгоритмы, которые применялись во многих криптографических задачах. IEEE.
Фред Брукс-младший из IBM был одним из ключевых архитекторов аппаратной системы Harvest. Музей истории компьютеров.

Фред Брукс‑младший из IBM был одним из ключевых архитекторов аппаратной системы Harvest. Музей истории компьютеров.

Как единая система Harvest, то есть Stretch плюс специализированный потоковый сопроцессор IBM, обрабатывал один байт за 0,3 микросекунды и располагал примерно 800 килобайтами адресуемой памяти.

«Здесь вы видите один блок, который вынули из масляной ванны», говорил Луни в своём выступлении 1972 года, посвящённом десятилетию Harvest. Он показывал фотографию банков памяти на магнитных сердечниках. Всего их было шесть, и они были погружены в масло для охлаждения.

Если учесть задержки при загрузке различных данных из ленточного архива Tractor, одна «инструкция» Harvest порой могла выполняться несколько часов подряд без какого‑либо вмешательства человека.

«Это был совершенно потрясающий компьютер, вспоминала почётный сотрудник IBM Фрэнсис Аллен в устной истории 2001 года. Одна инструкция, например, могла выполнять сортировку и статистический анализ данных прямо по мере их прохождения через систему… Всё, чем мы тогда занимались, находилось на переднем крае технологий. В этом не было никаких сомнений».

Аллен, получившая премию Тьюринга в 2006 году, участвовала в разработке и Stretch, и Harvest. Когда она только начала работать над Harvest, вспоминала Аллен, расположенное в Форт‑Миде, штат Мэриленд, об АНБ за пределами закрытого разведывательного сообщества практически никто не знал. Поэтому сначала она решила, что занимается каким‑то непонятным проектом для военно‑морского флота. «Мы думали, что работаем для Бюро кораблестроения, потому что именно под таким названием АНБ проходило в бюджете!» вспоминала Аллен, умершая в 2020 году.

Другие ключевые проектировщики и первые разработчики Harvest впоследствии тоже сыграли заметную роль в истории вычислительной техники. Фредерик Брукс‑младший, лауреат премии Тьюринга 1999 года и один из главных создателей аппаратного и программного обеспечения IBM System/360, также участвовал в разработке Harvest. А Джеймс Померен, прежде чем стать главным инженером Harvest, помогал создавать новаторский компьютер IAS вместе с Джоном фон Нейманом.

Как Tractor хранил целый мир данных

IBM разработала ленточную систему Tractor (IBM 7955), чтобы подключить её к тому же Stretch, на котором работал Harvest. Ни одна существовавшая технология хранения данных не могла обеспечить пропускную способность, соответствующую аппетитам компьютера. Stretch отвечал за доставку кассет из библиотеки к накопителям с помощью автоматизированного механизма Tractor. Он же координировал чтение данных из Tractor и запись результатов, которые выдавал Harvest. Сам Harvest все вычисления выполнял только над данными, находившимися в общей оперативной памяти системы.

В начале 1960-х годов, включая период после установки Tractor и Harvest, жёсткие диски всё ещё находились на ранней стадии развития. Для задач дешифровки такого масштаба, какие решал Harvest, дисковые накопители были бы непрактичны и по стоимости, и по занимаемой площади. Поэтому основу Tractor пришлось строить на магнитных лентах.

Каждая лента находилась внутри корпуса, внешне напоминавшего магнитолу: две закрытые катушки под прозрачным окном и ручка для переноски. Такая кассета весила от 6 до 7 килограммов, примерно как шар для боулинга. Кассету Tractor можно представить как огромного предшественника компакт‑кассеты, которая появилась примерно десятилетием позже. Внутри находилась лента длиной 550 метров, способная хранить около 120 мегабайт данных. Каждый модуль хранения вмещал до 160 таких кассет.

Техник IBM держит одну из массивных кассет данных перед шкафами ленточных накопителей. Такие кассеты использовала автоматизированная система Tractor компьютера Harvest. / IBM.

Техник IBM держит одну из массивных кассет данных перед шкафами ленточных накопителей. Такие кассеты использовала автоматизированная система Tractor компьютера Harvest. / IBM.

Когда Harvest запустили в 1962 году, система включала три автоматических кассетных модуля, каждый из которых обслуживал два ленточных накопителя. Таким образом, суммарный объём доступного онлайн‑хранилища трёх блоков Tractor достигал невероятных для того времени 44 гигабайт. Это более чем в 190 раз превышало ёмкость дисковой системы IBM 2314, которую представили в 1965 году: её восемь накопителей вместе хранили 233 мегабайта.

Tractor должна была работать без остановки, круглосуточно и без выходных, постоянно меняя кассеты. Скорость работы механизма рассчитывали так, чтобы система хранения успевала кормить данными прожорливый Harvest. Для извлечения кассет создали специальный роботизированный механизм, сервоприводную руку, которая перемещалась вдоль стоек хранилища. Она доставала кассету из ячейки и передавала её загрузочному механизму либо, наоборот, получала кассету от него и возвращала в хранилище.

Лента двигалась со скоростью 6 метров в секунду и проносилась мимо головок чтения и записи так быстро, что глаз не мог уследить за её движением. Программное обеспечение Stretch управляло и перемещением кассет, и чтением, и записью. После завершения обработки одной ленты накопителю Tractor требовалось около 18 секунд, чтобы начать чтение следующей, если кассету уже заранее извлекли и подготовили к загрузке. Робот мог самостоятельно достать кассету из хранилища и подготовить её к чтению, человеку не требовалось вообще ничего делать.

Помимо Tractor к Stretch подключались и обычные катушечные ленточные накопители. Техники Harvest часто использовали их для импорта и экспорта данных между Harvest и другими системами, потому что другого практичного способа загружать в машину большие массивы данных или выгружать их оттуда просто не существовало. Tractor также могла хранить постоянные файлы и при необходимости напрямую извлекать их из ленточных библиотек. Иными словами, огромные кассетные хранилища Tractor одновременно служили и постоянным архивом, и местом временного хранения данных, которые предстояло обработать Harvest.

В коммерческой вычислительной технике 1962 года не существовало ничего, что могло бы сравниться с гигабайтами одновременно доступных данных Tractor. В большинстве вычислительных центров того времени слово «доступные» применительно к данным обычно означало стойки с магнитными лентами, стоявшие где‑то рядом с накопителями. Получить данные можно было лишь настолько быстро, насколько оператор успевал вручную снять нужную катушку, установить её на машину и заправить ленту, по одной за раз.

Alpha, язык программирования, созданный специально для Harvest

IBM и АНБ совместно разработали язык Alpha исключительно для программирования потокового движка Harvest при решении задач криптоанализа. Согласно рассекреченной истории компьютеров АНБ, подготовленной Пентагоном, название Alpha расшифровывалось как Advanced Language for Programming Harvest, «расширенный язык программирования Harvest».

Alpha позволял программисту определить алфавит, в котором система обрабатывала данные для дешифровки. Кроме того, в языке существовали два необычных символа, у которых в обычных компьютерах ещё много лет не было аналогов. Похожие возможности появились позже в Multics и Unix в виде подстановочных знаков. Символ scab, который на клавиатуре Harvest, переделанной из ранней пишущей машинки IBM Selectric, обозначался знаком «?», означал существующий, но неизвестный символ. А pad, представленный пробелом, обозначал пустое значение или заполнитель. Такая система была особенно удобна для криптоанализа, где неизвестные и сомнительные символы встречались постоянно.

Оператор Harvest печатает на одной из основных системных консолей, которую сделали из пишущей машинки IBM Selectric. / IBM.

Оператор Harvest печатает на одной из основных системных консолей, которую сделали из пишущей машинки IBM Selectric. / IBM.

Правила, по которым Alpha работал со строками, предвосхитили и другие современные концепции, например «не число» (NaN), специальное обозначение неизвестного значения в наборе данных, которое может распространяться по вычислениям, вместо того чтобы незаметно портить результат. Строки Alpha можно было объединять в cords, “шнуры”, а шнуры, в свою очередь, в ropes, «канаты». Так криптоаналитики получили иерархическую систему понятий для описания сложных перехваченных сообщений.

Когда работа Аллен над Harvest завершилась, она подготовила итоговый технический отчёт о своей части программного обеспечения и тут же потеряла к нему доступ. «Я потратила на это добрую часть лета, вспоминала она в 2001 году. А потом всё это просто исчезло где‑то внутри Форт‑Мида».

Чем заменить незаменимую машину

К 1971 году, по словам аналитика АНБ Луни, Harvest использовали интенсивнее, чем когда‑либо: 115 часов производственной работы в неделю, то есть более двух третей всего времени. При этом количество выполнявшихся задач снижалось ещё с 1967 года. Как отмечал Луни, к 1972 году обычную обработку данных постепенно переносили на более новые универсальные компьютеры, а Harvest оставляли для огромных специализированных задач, с которыми не могла справиться ни одна другая система.

На десятилетнем юбилее Harvest Луни назвал его машиной, «задуманной в пятидесятые, родившейся в шестидесятые и незаменимой в семидесятые».

В последнем он ошибся.

27 февраля 1976 года операторы в последний раз выключили Harvest. В ленточной библиотеке Tractor износился специальный механический компонент, а компания, выпускавшая эту деталь, к тому времени уже прекратила существование. Harvest проработал почти полтора десятилетия практически без перерыва, пережил самый опасный эпизод в истории взаимного ядерного уничтожения и дожил до эпохи разрядки международной напряжённости. Всё это время он обрабатывал перехваты со скоростью, недостижимой для гражданских компьютеров. К моменту вывода из эксплуатации Harvest пережил несколько поколений коммерческой вычислительной техники.

Деревянная табличка с бронзовой пластиной и надписью «Место компьютерной системы Harvest, 1962–1976». Табличка напоминает о выводе Harvest из эксплуатации в 1976 году в штаб-квартире АНБ в Форт-Миде, штат Мэриленд. Национальный криптологический музей.

Деревянная табличка с бронзовой пластиной и надписью «Место компьютерной системы Harvest, 1962–1976». Табличка напоминает о выводе Harvest из эксплуатации в 1976 году в штаб‑квартире АНБ в Форт‑Миде, штат Мэриленд. Национальный криптологический музей.

Кто‑то в АНБ решил отметить уход машины шуточной телеграммой, написанной от имени самого Harvest в последний день его работы. Сегодня документ хранится в архивах агентства. «Я впервые начал работать в АНБ. Хотя широкой публике об этом почти ничего не известно, вероятно, я был крупнейшей, самой быстрой и технически совершенной компьютерной системой в мире, говорилось в телеграмме. А теперь, четырнадцать лет спустя, пришло время уходить на покой. Более современное оборудование и новые технологии сделали стоимость моего обслуживания и эксплуатации неоправданной».

В конечном итоге АНБ заменило Harvest знаменитым суперкомпьютером Cray-1. В Cray-1 использовались более быстрые и гораздо плотнее интегрированные микросхемы, поэтому он превосходил стареющие транзисторные схемы Harvest почти в любой задаче, включая обработку текста. Хотя Cray создавался прежде всего для численных и научных вычислений, его продавали заказчикам из самых разных отраслей. В итоге именно универсальность Cray сделала его победителем, когда поддерживать уникальное оборудование Harvest для обработки текста ради единственного заказчика стало слишком дорого.

Из‑за завесы секретности вокруг Harvest у него не появилось прямой линии наследников. Однако идеи, впервые реализованные в этой машине, никуда не исчезли. В последующие годы они снова и снова возникали в других технологиях.

Автоматизированная ленточная библиотека Tractor стала предшественницей роботизированных хранилищ, которые примерно через двадцать лет превратились в стандартное оборудование корпоративных центров обработки данных. Конвейерная архитектура Harvest предвосхитила движение в сторону потоковых вычислительных архитектур 1980-х годов. А непрерывный поиск шаблонов, которым занимались его блоки сопоставления, напрямую напоминает работу современных аппаратных систем глубокого анализа сетевых пакетов и программируемых сетевых коммутаторов, которые сегодня обрабатывают интернет‑трафик на полной скорости.

Harvest не стал основателем компьютерной династии. Но для своего времени он удивительно уверенно указывал в будущее, причём сразу в нескольких направлениях.

ссылка на оригинал статьи https://habr.com/ru/articles/1082664/