В криптографии головоломки Меркла — это ранняя конструкция криптосистемы с открытым ключом , протокола, разработанного Ральфом Мерклом в 1974 году и опубликованного в 1978 году. Он позволяет двум сторонам договориться об общем секрете , обмениваясь сообщениями, даже если у них заранее нет общих секретов.
Предположим, что Алиса и Боб хотят общаться. Боб может отправить сообщение Алисе следующим образом: сначала он создает большое количество головоломок, каждая из которых имеет умеренную сложность — Алиса должна иметь возможность решить головоломку с умеренными вычислительными усилиями. Головоломки представлены в виде зашифрованного сообщения с неизвестным ключом ; ключ должен быть достаточно коротким, чтобы позволить провести атаку методом перебора . Боб отправляет все головоломки (т. е. зашифрованные сообщения) Алисе, которая выбирает одну случайным образом и решает ее. Расшифрованное решение содержит идентификатор, а также сеансовый ключ, поэтому Алиса может сообщить Бобу, какую головоломку она решила. Теперь у обеих сторон есть общий ключ: у Алисы, потому что она решила головоломку, а у Боба, потому что он отправил головоломку. Любой подслушиватель (скажем, Ева) имеет более сложную задачу — она не знает, какую головоломку решила Алиса. Ее лучшая стратегия — решить все головоломки, но поскольку их так много, это более затратно с точки зрения вычислений для Евы, чем для Алисы.
Обратите внимание, что подслушивающая Ева может прочитать идентификатор X, отправленный обратно (в открытом тексте) от Алисы Бобу, но не имеет возможности сопоставить его с секретным ключом Y, который Боб и Алиса теперь используют для своего постоянного общения, поскольку значение X в каждом сообщении было сгенерировано случайным образом.
Параметры игры-головоломки можно выбрать так, чтобы злоумышленнику было значительно сложнее взломать код, чем сторонам общаться, но головоломки Меркла не обеспечивают огромных качественных различий в сложности, которые требуются для обеспечения безопасности (и определяют ее) в современной криптографии.
Предположим, что количество головоломок, отправленных Бобом, равно m , и Бобу и Алисе требуется n шагов вычислений, чтобы решить одну головоломку. Тогда оба могут вывести общий сеансовый ключ с временной сложностью O ( m+n ). Еве, напротив, требуется решить все головоломки, что займет у нее O( mn ) времени. Если m ≈ n , усилия Евы имеют примерно квадратичную сложность по сравнению с Алисой и Бобом, т. е. ее время вычислений составляет порядок квадрата их времени. Таким образом, n следует выбирать достаточно большим, чтобы вычисления все еще были выполнимы для Алисы и Боба, в то время как они превосходят возможности Евы.
Квадратичная сложность обычно не считается достаточно безопасной против злоумышленника (или, с другой стороны, для больших m,n, достаточно удобной для участников) для практических реальных криптографических приложений. Однако эта схема отличается тем, что является одним из первых примеров криптографии с открытым ключом и послужила источником вдохновения для протокола обмена ключами Диффи-Хеллмана , который имеет гораздо более высокую сложность, полагаясь на задачу дискретного логарифма .
В 2008 году Боаз Барак и Мохаммад Махмуди-Гидари показали («Merkle Puzzles Are Optimal»), что эту квадратичную границу улучшить невозможно.