Такую идею автоматического шифрования телеграфных сообщений в декабре 1917 года предложил американец Жильбер Вернам (Gilbert Vernam) (1890–1960), молодой инженер компании «AT&T» (англ. Аmerican Тelephone and Тelegraph) и талантливый изобретатель. Он работал в телеграфном отделении научно-исследовательского отдела компании, где занимались разработкой «телетайпа» – буквопечатающего телеграфного аппарата.
Ещё летом, через несколько месяцев после того, как Соединенные Штаты объявили войну Германии, в компании началась работа над секретным проектом по сохранению секретности сообщений, переданных телетайпом. Во время исследований оказалось, что колебания тока в линии связи могли быть записаны с помощью осциллографа и потом легко преобразованы в буквы переданного сообщения. Поэтому было решено внести изменения в соединение проводов печатающего механизма телетайпа. В результате текст сообщения шифровался методом одноалфавитной замены. В телеграфном отделении понимали, что такая защита была слишком слабой, однако ничего другого придумать не смогли и прекратили заниматься этой проблемой до тех пор, пока Вернам не рассказал им о своей идее.
Он предложил использовать особенности телетайпного кода Бодо, в котором каждый знак состоял из пяти элементов. Каждый из этих элементов символизировал наличие («+») или отсутствие («—») электрического тока в линии связи. Таким образом, были 32 разных комбинации «+» и «—». 26 из них должно было соответствовать буквам, а оставшиеся соответствовали «служебным комбинациям» (пробел между словами, переход с букв на цифры и знаки препинаний, обратный переход с цифр и знаков препинаний на буквы, возвращения каретки печатающего устройства, переход на новую строку и холостой ход).
Например, буква «А» отражалась комбинацией «++—», а переход на цифры и знаки препинаний отражался комбинацией «++—++». Закодированное сообщение набивалось на перфоленте: «+» были дырками, а «—» – их отсутствием. При считывании перфоленты металлические щупы проходили через дырки, замыкали электрическую цепь и посылали импульсы тока по проводам. А там, где на перфоленте находился «—», бумага не позволяла этим щупам замкнуть цепь, и в результате токовый импульс не передавался.
Вернам предложил готовить перфоленту со случайными знаками (так называемую «гамму») предварительно и потом электромеханически соединять её импульсы с импульсами знаков открытого текста. «Гамма» – это секретный ключ, созданный из хаотического набора букв того же алфавита. Полученная сумма представляла собой шифротекст, предназначенный для передачи по линии связи. Вернам установил такое правило сложения: если одновременно оба импульса были «+» или «—», то итоговый импульс будет «-», а если эти импульсы разные, то в результате выйдет «+».
Сложение, по современной терминологии, осуществляется «по модулю 2» («0» означает знак «—», а 1 – «+»): 0 + 0 = 0; 0 + 1 = 1; 1 + 0 = 1; 1 + 1 = 0. Пусть, например, знак «гаммы» имеет вид: «+—+–» (10100). Тогда буква «А» – «++—» (11000) при шифровании переходит в двоичную комбинацию «– ++—»: (01100) = (11000) х (10100). При дешифровке ту же операцию необходимо повторить в обратном порядке: (01100) х (10100) = (11000) – «++—» – буква «А».
Чтобы складывать электроимпульсы при шифровании, Вернам сконструировал специальное устройство, которое состояло из магнитов, реле и токосъёмных пластин. А поскольку процедура дешифровки была аналогична процедуре шифрования, этот же прибор мог быть использован и при дешифровке. Импульсы поступали в устройство сложения из двух счётчиков: один считывал «гамму», а другой – открытый текст. «Плюсы» и «минусы», которые получали на выходе, можно было передавать как обычное телетайпное сообщение. На приёмном конце устройство, изобретённое Вернамом, добавляло импульсы, считываемые с идентичной ленты с «гаммой», и восстанавливало исходные импульсы открытого текста.