Используется очень простой алгоритм, изобретенный еще в Древнем Риме. Вот алфавит "абвгдеёжзийклмнопрстуфхчцшщъыьэюя". И мы, когда пишем секретное донесение, смещаем каждую букву, скажем, на 2. То есть, вместо "а" мы пишем "в". Вместо "ж" пишем "и". То есть, вместо слова "мама" у нас запишется "овов". А цифра 2 есть КЛЮЧ ШИФРОВАНИЯ. Ключ можно менять, выбрав другую цифру. Пока понятно, да? Погнали дальше. Конечно, ключ можно легко подобрать, перепробовав 33 варианта. Рано или поздно подойдет. А теперь усложним ключ. Пускай это будут две цифры. "2,5". И будем шифровать так - первую букву смещаем на 2, следующую на 5, потом опять на 2 и т.д. Такой ключ подобрать гораздо сложнее. Потребуется 33 х 33 попыток, то есть 1089. Человеку это уже трудно. Но компьютер запросто подберет. Ключ из 10 даже компьютер будет подбирать очень долго, ибо потребуется 33 в десятой степени попыток. А если мы возьмем ключ из 1000 цифр то уже никакой компьютер не справится. Хотя, теоретически это взоможно, если работать миллион лет. И, наконец, если мы возьмем ключ, по длине равный самому тексту, то такой шифр сломать нельзя даже теоретически.
Вот так и работает компьютерное шифрование, используя очень длинные ключи. И когда Сноуден говорит, что кто-то научился их ломать, я не верю. Скорее всего речь идет об очень коротких ключах или о серкетных закладках в самих шифрующих программах. Если у вас длинный ключ и софт из надежного источника, ваш шифр никакое АНБ не хакнет.