Эллиптическая криптография (Elliptic Curve Cryptography, ECC) — штука популярная, мощная и при этом не очень понятная. Мы в CloudFlare используем ее везде: от защиты HTTPS-соединений наших клиентов до передачи данных между серверами. В этой статье я попытаюсь на простых примерах показать, как все это работает.
Это перевод статьи Ника Салливана, впервые опубликованной в блоге компании CloudFlare. Перевела Алёна Георгиева.
Вообще мы убеждены: чтобы доверять той или иной системе безопасности, нужно понимать технологию, которая за ней стоит. Так что мы решили найти хорошее, относительно доступное руководство по ECC — и поделиться им с читателями. Найти не удалось, и мы написали его сами — оно перед вами.
Предупреждаю: тема сложная, в двух словах о ней не расскажешь. Здесь есть что обсудить, так что устраивайся поудобней. Но если нужны те самые два слова, то вот они: ECC — это новое поколение криптосистем с открытым ключом, которые построены на понятных математических основаниях и обеспечивают куда более серьезную защиту, чем криптосистемы первого поколения вроде RSA. Хочешь обеспечить высокий уровень защиты и сохранить при этом производительность — имеет смысл обратиться к ECC. А если интересуют детали — они ниже.
Криптография с открытым ключом
Историю криптографии можно разделить на два периода: классический и современный. Водоразделом здесь служит 1977 год, когда одновременно были представлены алгоритм RSA и протокол Диффи — Хеллмана. Случилась настоящая революция: это были первые криптографические системы, где безопасность строилась на теории чисел. Стала возможной безопасная коммуникация без известного обеим сторонам — то есть симметричного — шифра. До этого криптография бесконечно занималась вопросом, как безопасно переслать секретные шифры. Теперь же она могла обеспечить доказательно безопасную коммуникацию между двумя сторонами — без заботы о том, не перехватит ли кто обмен ключами.
Современная криптография стоит на том, что ключ для шифрования данных может быть открытым, а вот ключ для дешифровки лучше оставить в секрете. Такие системы называют криптографическими системами с открытым ключом (public key cryptographic systems). Первая — и все еще самая распространенная из них — RSA. Она названа инициалами тех, кто впервые описал ее алгоритм (Ron Rivest, Adi Shamir, Leonard Adleman).
Хорошей криптографической системе с открытым ключом нужен набор алгоритмов, которые легко пройти в одном направлении и трудно в обратном. В случае с RSA «легкий» алгоритм умножает два простых числа. Его «трудной» парой будет факторизация — разложение получившегося результата на изначальные множители. Алгоритмы с такой характеристикой — «просто в одну сторону, трудно в обратную» — называют односторонней функцией с потайным входом (trapdoor function, TDF). Найти хорошую TDF критично важно для создания безопасной криптографической системы с открытым ключом.
Проще говоря, чем больше разрыв между сложностью прохождения функции в одном направлении и в другом, тем надежней получится криптографическая система, на ней основанная.
Алгоритм RSA в миниатюре
RSA — самая популярная и наиболее понятная из систем с открытым ключом. Ее безопасность опирается на то, что умножение — это быстро, а разложение на множители — медленно. Коротко рассмотрим, как выглядит и работает маленькая RSA-система.
Системы с открытым ключом обычно имеют два компонента: открытый ключ и секретный ключ. Шифрование работает так: берешь сообщение, применяешь к нему математическую операцию — и получаешь число, которое выглядит случайным. При дешифровке берешь это «случайное» число и применяешь другую операцию, чтобы получить исходное сообщение. Зашифрованное с помощью открытого ключа можно расшифровать, только применив секретный ключ.
Компьютеры не очень хорошо справляются с произвольно большими числами. Эту проблему можно решить, если выбрать максимальное значение и иметь дело только с числами, которые меньше максимума. Работает это, как в часах с циферблатом и стрелками. Как перевести их, например, на 37 часов? Очевидно, разделить 37 на максимум — то есть 12 — докрутить остаток. Так и здесь: любые вычисления, дающие результат больше максимума, мы «докручиваем» до числа в допустимом диапазоне.
РЕКОМЕНДУЕМ:
Как создать защищенное зашифрованное устройство
В RSA максимальное значение (обозначим его max) получают умножением двух случайных простых чисел. Открытый и секретный ключи — это два специально выбранных числа больше нуля, но меньше максимального значения, обозначим их pub и priv. Чтобы зашифровать число, мы перемножаем его pub раз — и всякий раз «докручиваем», когда превышаем максимум. Чтобы расшифровать сообщение, перемножаем его priv раз по тому же правилу — и получаем исходное число. Звучит удивительно, но правда работает. Когда обнаружили эту особенность, она стала большим прорывом.
Чтобы создать пару ключей для RSA, сначала берешь два простых числа, чтобы получить максимум ( max). Затем выбираешь число для открытого ключа ( pub). До тех пор, пока ты знаешь два изначальных простых числа, ты можешь вычислить секретный ключ priv через открытый. Это то, как факторизация соотносится со взломом RSA: разложение максимального значения на исходные множители позволяет вычислить чей-то секретный ключ по открытому и дешифровать личные сообщения.
Рассмотрим все это на конкретном примере. Возьмем простые числа 13 и 7, перемножим и получим максимальное значение 91. В качестве открытого ключа возьмем число 5. А затем, зная изначальные множители и максимум, применим расширенный алгоритм Евклида и получим секретный ключ — 29.
Эти параметры ( max = 91, pub = 5, priv = 29) определяют полностью функциональную RSA-систему. Мы можем взять число и перемножить его 5 раз для зашифровки, а затем взять получившийся результат, перемножить его 29 раз и получить изначальное число.
Используем эти значения, чтобы зашифровать слово CLOUD.
Чтобы представить сообщение математически, нужно превратить буквы в числа. Для представления латинского алфавита отлично подходит кодировка UTF-8. Каждому символу соответствует свой номер.
В этой кодировке CLOUD выглядит как 67, 76, 79, 85, 68. Все эти числа меньше нашего максимума, поэтому мы можем зашифровать их по отдельности.
1 |
67 × 67 = 4489 = 30 |
Откуда 30? Поскольку получившееся число 4489 больше максимума, мы «докручиваем» его до нужного нам диапазона (от 0 до 91). Для этого делим 4489 на 91 до целого числа и берем остаток. Этим остатком и будет 30.
1 2 3 4 |
4489 = 91 × 49 + 30 30 × 67 = 2010 = 8 8 × 67 = 536 = 81 81 × 67 = 5427 = 58 |
58 и будет зашифрованной версией 67.
Повторив этот процесс для каждой из букв, мы получим зашифрованное сообщение CLOUD в виде:
1 |
58, 20, 53, 50, 87 |
Чтобы расшифровать это запутанное сообщение, берем каждое из получившихся чисел — и точно так же перемножаем 29 раз.
1 2 3 4 |
58 × 58 = 3364 = 88 (помни, что мы «докручиваем» число, если оно превышает максимум) 88 × 58 = 5104 = 8 … 9 × 58 = 522 = 67 |
Вуаля, мы вернулись к 67. Провернув то же самое с остальными числами, мы получим исходное сообщение.
Вывод: ты можешь взять число, перемножить его сколько-то ( pub) раз и получить случайно выглядящий результат, а потом перемножить его другое количество ( priv) раз и вернуться к изначальному числу.
Не такой уж тайный ход
RSA и протокол Диффи — Хеллмана были столь мощны, потому что имели строгие обоснования безопасности. Их авторы доказали, что взлом системы равен решению математической проблемы, которую, как считается, сложно решить. Факторизация — хорошо известная проблема, ее изучают с античности (см. решето Эратосфена). Любые прорывы в этой области стали бы громкой новостью и озолотили изобретателя.
Тем не менее факторизация — не такая уж большая проблема, если решать ее шаг за шагом. Для разложения на простые множители есть специальные алгоритмы — например, квадратичное решето или общий метод решета числового поля, — и они умеренно успешны. Во всяком случае, точно быстрее и экономичней, чем наивный подход с угадыванием пар простых чисел.
Эффективность этих алгоритмов растет, поскольку размер чисел, которые нужно раскладывать на множители, все время увеличивается. А вот разрыв между сложностью факторизации и умножения уменьшается — и тоже из-за роста чисел (например, длины ключей). Ресурсы, доступные для дешифровки, растут — и вместе с ними растет длина ключей, причем куда быстрее. Это не очень хорошо для мобильных и других маломощных девайсов, чьи вычислительные ресурсы ограничены. Разрыв между разложением и умножением не очень устойчив в долгосрочной перспективе.
Все это значит, что RSA — далеко не идеальная система для криптографии будущего. В идеальной TDF операции «туда» и «обратно» усложняются в одинаковом темпе — пропорционально растущему размеру чисел. Нам нужен потайной ход понадежней.
Эллиптические кривые: где найти надежный потайной ход?
С появлением RSA и протокола Диффи — Хеллмана начался активный поиск других математически обоснованных решений для криптографии, которые могли бы послужит хорошей TDF. И вот в 1985 году были предложены алгоритмы, основанные на таинственном математическом направлении — эллиптических кривых.
Но что же такое эллиптическая кривая — и как работает основанная на ней TDF? К сожалению, в отличие от факторизации — штуки, с которой мы неизбежно сталкиваемся в школе, — эллиптические кривые большинству людей не близки. Понять и объяснить их не так-то просто — впрочем, я все равно попытаюсь. (Если глаза уже начали стекленеть, можешь скипнуть до раздела «Что все это значит?».)
Эллиптическая кривая — это множество точек, удовлетворяющих конкретному математическому уравнению. Выглядит оно так:
1 |
y² = x³ + ax + b |
Его график отдаленно напоминает упавшую набок греческую букву Ω («омега»).
Есть и другие представления эллиптических кривых, но технически это множество точек, удовлетворяющих уравнению с двумя переменными: одна из них в квадрате, а другая — в кубе. Однако эллиптическая кривая — это не просто симпатичная картинка: у нее есть ряд особенностей, которые делают ее хорошей основой для криптографии.
Странная симметрия
Еще раз взглянем на нашу эллиптическую кривую — и найдем те самые особенности.
Одна из них — горизонтальная симметрия. Каждую точку на кривой можно зеркально отразить по оси x — и окажешься на все той же кривой. Еще интересней то, что любая не строго вертикальная прямая пересекает эллиптическую кривую не более чем в трех местах.
Представим, что это такой странный бильярд. Если соединить две точки на кривой, проходящая через них прямая пересечет ее еще ровно в одном месте. Поставим воображаемый бильярдный шарик в точку A и толкнем его в сторону точки B. Достигнув третьей, последней точки на кривой, шар отскочит либо прямо вверх (если он находится ниже оси x), либо прямо вниз (если он выше оси x) — на другую сторону кривой.
Мы можем соединить любые две точки на кривой и получить новую — например, соединив A и B, мы получили С.
А еще мы можем связывать эти «ходы», чтобы раз за разом соединять изначальную точку с получившимся результатом. Так, соединив точку A с самой собой, мы получим точку B; из исходной точки A и получившейся B выйдет C; А и С в свою очередь дадут D — и так далее.
Что-то знакомое, да? В RSA мы точно так же сколько-то раз умножали исходное число само на себя — а точнее, на то, что получалось при «докручивании» результата умножения. Все эти точки B, C, D и т. д. — точно такие же промежуточные результаты, только полученные не арифметически, а геометрически.
Оказывается, если мы имеет две точки — изначальную, «помноженную» на себя n раз, и конечную, — выяснить, чему равно n, довольно сложно. Чтобы развить метафору со странным бильярдом, представь себе человека, который сколько-то времени играет в такой бильярд — сам с самой и в закрытой комнате. Ему будет довольно просто толкать шарик снова и снова по описанным выше правилам. Но если кто-нибудь войдет в эту комнату и увидит, где остановился шарик, то даже зная правила игры и изначальную точку, определить количество ударов о бортики он все равно не сможет — пока не повторит все ходы от стартовой точки до финальной. «Легко туда, трудно обратно» — это, как помнишь, основа для хорошей TDF.
Все страньше и страньше
Упрощенная кривая из предыдущего раздела прекрасно выглядит и объясняет общую концепцию эллиптических кривых, но не показывает, как выглядят эллиптические кривые в криптографии.
Здесь, как и в RSA, нам приходится ограничивать себя числами в фиксированном диапазоне. Более того, нас в этом диапазоне интересуют целые числа — а кривая состоит не только из них. При решении уравнения эллиптической кривой ( y² = x³ + ax + b) мы используем тот же самый трюк с «докручиванием» чисел, превышающих максимум. Если за максимум взять простое число, такая эллиптическая кривая называется простой — и обладает превосходными криптографическими свойствами.
Вот пример кривой ( y² = x³ − x + 1), построенной для всех значений.
А вот та же кривая, но построенная только для целых значений с максимумом 97.
Совсем не похоже на кривую в традиционном понимании — но это она. Выглядит так, как будто ставшую вдруг невидимой кривую прикололи кнопками в точках, где она выдает целые значение. И заметь, горизонтальная симметрия сохранилась.
На самом деле мы все еще можем играть на этой кривой в бильярд и соединять точки. И любая прямая по-прежнему может собрать на себе не более трех точек. Вычислить эти точки довольно легко. Представь себе, что линия, соединяющая две точки, — это нитка, которая обматывается вокруг кривой, пока не попадет на третью. Это как если бы в нашем странном бильярде шар, ударившись о бортик (максимум), волшебным образом перемещался на противоположную сторону стола и продолжал свое движение до тех пор, пока не ударится о точку, — как в игре «Астероиды».
С помощью такого представления кривой уже реально зашифровывать сообщения. Можно представить исходное число сообщения как x, получить из уравнения y — и, соответственно, точку на кривой. На практике все чуть сложнее, но общая идея такова.
Для слова FLARE получим точки с координатами (70,6), (76,48), -, (82,6), (69,22).
(На этой кривой нет точки при x = 65, но в реальном мире есть способы обойти эту проблему.)
Эллиптическую криптосистему определяют: взятое за максимум простое число, уравнение кривой и открытая (стартовая) точка на кривой. Секретным ключом будет число priv, а открытым ключом — стартовая точка, соединенная сама с собой priv раз. Вычисление секретного ключа по открытому в такой криптосистеме называется функцией дискретного логарифма эллиптической кривой. Кажется, это и есть та TDF, которую мы искали.
Что все это значит?
Вычислить дискретный логарифм эллиптической кривой трудно — на чем и строится эллиптическая криптография. Спустя несколько десятилетий математики так и не нашли алгоритм, который решал бы эту проблему лучше простого перебора. Другими словами, в отличие от факторизации с ее понятными математическими основаниями, у этой проблемы, кажется, нет короткого решения, которое сократило бы разрыв в TDF. При работе с числами одной величины решить дискретный логарифм эллиптической кривой гораздо труднее, чем разложить число на множители. А значит, эллиптические криптосистемы крепче RSA и протокола Диффи — Хеллмана.
Чтобы иллюстрировать, насколько крепче, Арьен Ленстра несколько лет назад представил концепцию «Универсальной безопасности» (PDF). Суть в том, чтобы вычислить, сколько энергии тратится на взлом криптографического алгоритма, и сравнить с тем, сколько воды можно вскипятить той же энергией. Эдакий криптографический углеродный след. По его расчетам, на взлом 228-битного RSA-ключа требуется меньше энергии, чем на кипячение одной чайной ложки воды. Для сравнения: энергией, потраченной на взлом 228-битного ECC-ключа, можно вскипятить всю воду на планете. Чтобы добиться того же уровня безопасности c RSA, нужен ключ в 2380 бит.
РЕКОМЕНДУЕМ:
Безопасность смарт-контрактов в блокчейне Ethereum
С эллиптической криптографией можно использовать ключи меньшей длины — и получать тот же уровень безопасности. А маленькие ключи важны, особенно в мире, где все больше криптографии на маломощных девайсах типа телефонов. Перемножить два простых числа проще, чем разложить результат на множители — но когда простые числа становятся слишком длинными, даже умножение может занять на маломощных устройствах какое-то время. В принципе, можно поддерживать безопасность RSA, увеличивая длину ключей, — но производительность на клиенте от этого снизится. ECC, кажется, предлагает альтернативу получше — высокую безопасность и короткие быстрые ключи.
Эллиптические кривые в действии
Эллиптические кривые медленно запрягали, но теперь стремительно набирают популярность — и очень быстро распространяются. Эллиптическую криптографию сейчас можно найти в самых разных приложениях: правительство США использует ее для защиты внутренних коммуникаций, проект Tor — чтобы обеспечить анонимность; этот же механизм работает, если нужно подтвердить право собственности на биткоины, отправить сообщение в iMessage и зашифровать данные DNS с помощью DNSCurve; также это предпочтительный метод аутентификации для безопасного серфа через SSL/TLS. CloudFlare пользуется ECC, чтобы обеспечить совершенную прямую секретность (PFS), которая необходима, чтобы сохранить приватность в сети.
Криптографические алгоритмы первого поколения вроде RSA и Диффи — Хеллман все еще подойдут для большинства сфер, но ECC быстро набирает популярность — как решение для конфиденциальности и безопасности в интернете.
Дальше пойдут чуть устаревшие сведения и картинки — из тех времен, когда деревья были выше, трава зеленее, а браузеры щедрее делились сведениями о шифровании. Зато эти сведения и картинки наглядны — так что пролистывать их не стоит.
Если ты откроешь HTTPS-версию блога Cloudflare через свежий Chrome или Firefox, то твой браузер будет использовать эллиптическую криптографию. Можешь убедиться в этом сам — нажми на замок слева от адресной строки и выбери вкладку «Соединение».
На этой картинке нас в первую очередь интересует текст ECDHE_RSA. ECDHE расшифровывается как Elliptic Curve Diffie Hellman Ephemeral — это механизм обмена ключами, построенный на эллиптических кривых. В CloudFlare он обеспечивает совершенную прямую секретность на SSL. А с помощью RSA здесь идентифицируется сервер.
Мы используем RSA, потому что SSL-сертификат CloudFlare привязан к паре RSA-ключей. Но современные браузеры поддерживают и сертификаты на эллиптических кривых. Если бы CloudFlare использовал такой сертификат, его обозначение выглядело бы ECDHE_ECDSA. Идентификация сервера в таком случае выполнялась бы с помощью эллиптического алгоритма электронной подписи (Elliptic Curve Digital Signature Algorithm).
Уравнение эллиптической кривой для ECDHE, которую использует CloudFlare (и Google.com, кстати):
1 2 3 4 |
max: 115792089210356248762697446949407573530086143415290314195533631308867097853951 curve: y² = x³ + ax + b a = 115792089210356248762697446949407573530086143415290314195533631308867097853948 b = 41058363725152142129326129780047268409114441015993725554835256314039467401291 |
Уровень производительности ECDSA по сравнению с RSA впечатляет. Даже со старыми версиями OpenSSL, которые не заточены под код эллиптических кривых, ECDSA-подпись с 256-битным ключом более чем в 20 раз быстрее RSA-подписи с 2048-битным ключом.
На MacBook Pro с OpenSSL 0.9.8 тест скорости выдает:
1 2 |
Doing 256 bit sign ecdsa's for 10s: 42874 256 bit ECDSA signs in 9.99s Doing 2048 bit private rsa's for 10s: 1864 2048 bit private RSA's in 9.99s] |
То есть с ECDSA за то же время можно получить в 23 раза больше подписей, чем с RSA.
CloudFlare постоянно ищет способы поднять производительность SSL. Например, мы начали использовать оптимизированную версию ECC, которая увеличивает скорость ECDHE более чем в два раза. Эллиптическая криптография экономит время, мощность и вычислительные ресурсы — как для сервера, так и для браузера — и помогает нам сделать сеть одновременно быстрее и безопаснее.
Оборотная сторона
Но не все так радужно в мире эллиптических кривых — есть и тонкие места, которые мешают им полностью охватить отрасль.
Примечание переводчика: далее речь снова пойдет о делах минувших дней — но делах показательных.
Одно из них — недавно мелькавший в новостях Dual_EC_DRBG (Dual Elliptic Curve Deterministic Random Bit Generator). Это генератор случайных чисел, стандартизированный Национальным институтом стандартов и технологий США (NIST), который продвигало их же Агентство национальной безопасности.
Dual_EC_DRBG генерирует псевдослучайные числа, используя принцип эллиптических кривых. Его алгоритм берет точки на кривой и многократно выполняет операцию по соединению этих точек — чтобы получить новые. После его публикации сообщалось (PDF), что в генератор, возможно, встроен бэкдор — а значит, последовательность полученных чисел можно полностью предсказать, если есть правильный секретный ключ.
Недавно компания RSA отозвала несколько своих продуктов, потому что Dual_EC_DRBG был установлен как дефолтный генератор псевдослучайных цифр в их линейке продуктов безопасности. Был генератор случайных чисел написан с бэкдором или нет, силу самой технологии эллиптических кривых это не отменяет — но зато поднимает вопрос о стандартизации. Как мы уже писали ранее, нужно следить, чтобы ваша система использовала адекватно случайные числа.
Некоторые скептически настроенные криптографы вообще испытывают недоверие — и к самому NIST, и к опубликованным им стандартам, которые поддержало АНБ. Почти все широко применяемые эллиптические кривые попадают в эту категорию. Об атаках на эти конкретные кривые ничего не слышно — однако плохие кривые существуют, и некоторые считают, что лучше поберечься, чем потом сожалеть.
Есть, конечно, кое-какой прогресс в разработке кривых с эффективной арифметикой за пределами NIST, включая кривую 25519, созданную Дэниелом Бернштейном (djb), и недавно вычисленные кривые Пауло Баретто сотоварищи — но до их широкого распространения еще жить и жить. Пока эти «нетрадиционные» кривые не встроят в браузеры, их нельзя будет использовать для обеспечения безопасности передаваемых по сети данных.
Другое тонкое место ECC связано с патентами. Более 130 патентов, касающихся конкретного использования эллиптических кривых, принадлежат BlackBerry — ведь в 2009 году они приобрели Certicom. Многие из тех патентов лицензированы для эксклюзивного использования частными компаниями — и даже АНБ. Некоторые разработчики из-за этого взяли паузу — чтобы оценить, не нарушает ли их работа с ECC эти патенты. В 2007 году Certicom подала иск против Sony — из-за нескольких видов использования эллиптических кривых, — однако в 2009 году иск был отклонен. Сейчас уже есть куча разных реализаций криптографии с эллиптическими кривыми, которые, как считается, не нарушают эти патенты — а потому широко используются.
РЕКОМЕНДУЕМ:
Режим гаммирования в блочном алгоритме шифрования
У цифровой подписи ECDSA есть серьезный недостаток по сравнению с RSA: она требует хорошего источника энтропии. Без достаточной случайности чисел секретный ключ могут раскрыть. В 2013 году слабый генератор случайных чисел в Android позволил хакерам найти секретный ключ ECDSA и взломать несколько биткоин-кошельков. У Sony Playstation была похожая уязвимость. Для электронных подписей нужен хороший генератор случайных чисел. Dual_EC_DRBG уж точно не подойдет.
Заглядывая в будущее
Впрочем, недостатки есть у всякой технологии, а вот достоинства ECC по сравнению с традиционной RSA неоспоримы — и уже широко признаны. Многие эксперты беспокоятся, что математические алгоритмы RSA и Диффи — Хеллмана могут быть успешно взломаны в течение ближайших лет — и тогда ECC останется единственной разумной альтернативой.
Не понятно что именно скармлеваеться алгаритму по этому параграфу
«Рассмотрим все это на конкретном примере. Возьмем простые числа 13 и 7, перемножим и получим максимальное значение 91. В качестве открытого ключа возьмем число 5. А затем, зная изначальные множители и максимум, применим расширенный алгоритм Евклида и получим секретный ключ — 29.»
Просто из ниоткуда 29
Почему номер буквы в utf-8 в квадрате при примере шифрования? Откуда квадрат?
«67 × 67 = 4489 = 30»
»
Рассмотрим все это на конкретном примере. Возьмем простые числа 13 и 7, перемножим и получим максимальное значение 91. В качестве открытого ключа возьмем число 5. А затем, зная изначальные множители и максимум, применим расширенный алгоритм Евклида и получим секретный ключ — 29.»
Неопнятно откуда было взято число 29 и какие параметры надо скармливать Эвклидовскому алгоритму .
Повторив этот процесс для каждой из букв, мы получим зашифрованное сообщение CLOUD в виде:
58, 20, 53, 50, 87
неправельно так как при шифровании (pub=5) результатом шифровки слова CLOUD должно быть 11, 41, 79, 71, 68, последовательность чисел.
и если их расшифрововать (priv=29) то они расшифрововуеться в CLOUD
в посте pub =3 как я понял вот и неверная последовательность чисел
Интересная идея для шифра Вернама.
Несколько широковещательных радиостанций синхронно передают цифровой случайный код, созданный на основе теплового шума диода или транзистора. Например в КВ диапазоне (ещё интереснее — в спутниковом ТВ сигнале). Такой поток принимается на огромной территории всеми желающими. Две стороны, которым надо установить надежную шифрованную передачу данных отслеживают в потоке заранее обусловленную последовательность цифр или несколько последовательностей. После которых берется заранее оговоренное количество цифр из потока, которые и будут однократной «страницей шифроблокнота». Фактически здесь создается синхронный шифроблокнот у передающей и принимающей стороны.
Время, через которое появится нужная последовательность, случайно и может быть большим.