Алгоритм шифрования «Солитер»: из романа в реальность и обратно.
Solitaire (cipher)
Солитер: шифр из романа «Криптономикон» Брюса Шнейера. Ручной криптоалгоритм с использованием обычной колоды карт для безопасной связи без электроники.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Криптографический алгоритм
Cryptographic algorithm
Криптографический алгоритм Solitaire был разработан Брюсом Шнайером по просьбе Нила Стивенсона для использования в его романе «Криптономикон», где полевые агенты используют его для безопасной связи, не полагаясь на электронику и не имея при себе компрометирующих инструментов. Он был задуман как ручная криптосистема, вычисляемая с помощью обычной колоды игральных карт. В «Криптономиконе» этот алгоритм изначально назывался Pontifex, чтобы скрыть тот факт, что он связан с использованием игральных карт. Одной из причин создания Solitaire является то, что в тоталитарных режимах колода карт гораздо доступнее (и менее компрометирующая), чем персональный компьютер с набором криптологических инструментов. Однако, как предупреждает Шнайер в приложении к «Криптономикону», теперь об этом алгоритме узнают почти все, кто интересуется криптоанализом, поэтому ношение колоды карт также может быть расценено как компрометирующее. Более того, анализ выявил недостатки в шифре, из-за чего он теперь считается небезопасным.
The Solitaire cryptographic algorithm was designed by Bruce Schneier at the request of Neal Stephenson for use in his novel Cryptonomicon, in which field agents use it to communicate securely without having to rely on electronics or having to carry incriminating tools. It was designed to be a manual cryptosystem calculated with an ordinary deck of playing cards. In Cryptonomicon, this algorithm was originally called Pontifex to hide the fact that it involved playing cards. One of the motivations behind Solitaire's creation is that in totalitarian environments, a deck of cards is far more affordable (and less incriminating) than a personal computer with an array of cryptological utilities. However, as Schneier warns in the appendix of Cryptonomicon, just about everyone with an interest in cryptanalysis will now know about this algorithm, so carrying a deck of cards may also be considered incriminating. Furthermore, analysis has revealed flaws in the cipher such that it is now considered insecure.
Криптоанализ
В 1999 году Пол Кроули обнаружил, что в ключевом потоке наблюдается смещение в сторону повторения символов, которые возникают примерно каждые 1/22,5 символа, а не ожидаемые 1/26. Хотя его безопасность может быть достаточной для очень коротких сообщений, в целом Solitaire считается небезопасным. Кроули также заметил, что в некоторых случаях существуют две различные начальные конфигурации колоды, которые приводят к одной и той же конфигурации после выполнения алгоритма генерации ключевого потока. Например, если джокер A находится либо внизу, либо вверху колоды, он станет второй картой после первого шага. Это означает, что алгоритм не всегда обратим, как изначально утверждал Шнайер. В 2019 году Дэниел Шиу предложил модификации алгоритма, которые повысили бы его безопасность, но усложнили бы ручную реализацию.
In 1999 Paul Crowley discovered that there is a bias towards repeating characters in the keystream, which occur about every 1/22.5 characters rather than the expected 1/26. While its security may perhaps be adequate for very short messages, in general Solitaire is considered insecure. Crowley also noticed that in some cases, there are two different deck configurations which result in the same configuration after executing the keystream algorithm. For instance, when the A joker is either on the bottom of the deck or on the top of the deck it will become the second card after step 1. This means the algorithm is not always reversible as Schneier had originally claimed. In 2019 Daniel Shiu proposed modifications to the algorithm which would increase its security, at the cost of making it more difficult for the user to implement manually.