Сообщение длиной 49152 символа занимает в памяти 42 кбайт. Найдите степень алфавита, который

Обновлено: 03.07.2024

14 ответов 14

Я не думаю, что есть встроенный способ, но я думаю, что проще всего

Это лучший способ, если вы хотите, чтобы ваш код работал на машинах с разными языками. В противном случае, если вы генерируете свой алфавит динамически (как и другие ответы ниже), вы можете закончить с другим алфавитом на разных машинах.

Как это работает с разными языками? Будет ли это каким-то волшебным образом содержать китайские буквы или буквы других языков?

Этот ответ кажется почти шуткой. ОП специально сказал, что может сделать это вручную, но хочет автоматизированный способ. И игнорирует культуру, язык и т. д.

да, это работает, даже если единственная перегрузка Enumerable.Range принимает параметры типа int ;-)

String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant())); возвращает ABCDEFGHIJKLMNOPQRSTUVWXYZ ;

Это не сработает для языков, в которых буквы ASCII-кода не входят в диапазон от "a" до "z". Вы не можете использовать этот метод в таких случаях. В остальном хорошее решение.

Я написал это, чтобы получить код столбца MS Excel (A,B,C, .Z, AA, AB, .ZZ, AAA, AAB, . ) на основе индекса, основанного на 1. (Конечно, переход на отсчет с нуля означает просто удаление столбца --; в начале.)

Предположим, что вы имеете в виду буквы английского алфавита.

Лучше использовать (int)'A' вместо жестко заданного числа 65. Это сделает код более читабельным и менее подверженным ошибкам.

@MehrdadAfshari Внутренняя кодировка не имеет значения. Что важно, так это то, что значения типа Char являются кодовыми точками Unicode, а они расположены в порядке от A до Z.

Вы можете сделать что-то подобное, основываясь на значениях ascii символов:

(См. таблицу здесь.) Вы просто выполняете преобразование из значения int символа в значение символа, но это работает только для символов ascii, а не для разных языков и т. д.

EDIT: как предложил Mehrdad в комментарии к аналогичному решению, лучше сделать это:

Это приводит символ A к его значению int, а затем увеличивает на основе этого, так что это не жестко запрограммировано.

Atom Feed
Facebook
Twitter
 Kindle
Информационный бюллетень по электронной почте (Crypto-Gram)

Да, каждый бит ключа удваивает устойчивость алгоритма к атакам грубой силы. Но трудно найти какое-то реальное значение в коэффициенте работы 2 49152 .

В сочетании с этим действительно выдающимся прорывом Crypteto не ставит под угрозу скорость шифрования. В прошлом постепенное повышение надежности ключа влияло на скорость шифрования данных. Обычная ситуация заключалась в том, что увеличение силы ключа на каждый бит сопровождалось последующим снижением
скорости шифрования на 50%.

Это даже отдаленно не соответствует действительности. Совсем не очевидно, как длина ключа связана со скоростью шифрования. Blowfish имеет одинаковую скорость, независимо от длины ключа. AES-192 примерно на 20 % медленнее, чем AES-128, а AES-256 медленнее примерно на 40 %. Threefish, блочный шифр внутри Skein, шифрует данные со скоростью 7,6 тактов/байт с 256-битным ключом, 6,1 тактов/байт с 512-битным ключом и 6,5 тактов/байт с 1024-битным ключом. Я не утверждаю, что Threefish безопасен и готов к коммерческому использованию — с любой длиной ключа, — но вероятность того, что скорость шифрования упадет вдвое с каждым добавленным битом ключа, просто исключена.

Это фундаментальная асимметрия криптографии, и важно правильно ее понять. Стоимость шифрования зависит от длины ключа линейно, а стоимость взлома — в геометрической прогрессии. Это одна из причин, почему из всех звеньев в цепочке безопасности криптография является самой надежной.

Обычно я бы не беспокоился о таких вещах, но они прямо попросили меня прокомментировать:

Но Хоторн Дэвис преодолел эту проблему. Предлагая алгоритм с непревзойденной силой ключа в 49 152 бита, мы можем шифровать и расшифровывать данные со скоростью, превышающей 8 мегабайт в секунду. Это означает, что вышеупомянутый гигабайт данных займет 2 минуты 13 секунд.Если бы Брюс Шнайер, ведущий криптолог США, увеличил свой 448-битный алгоритм шифрования Blowfish до Blowfish 49152, ему было бы трудно зашифровать один гигабайт за 4 часа.

[…]

Мы с нетерпением ждем советов и поддержки от доброго доктора Шнайера.

Я не врач, но уверен. Прочтите мое эссе 1999 года о криптографии со змеиным маслом:

Или прочитайте, что я писал о длинах симметричных ключей в 1996 году в Applied Cryptography (стр. 157–158):

Одним из следствий второго закона термодинамики является то, что для представления информации необходимо определенное количество энергии. Для записи одного бита путем изменения состояния системы требуется количество энергии не менее kT, где T — абсолютная температура системы, а k — постоянная Больцмана. (Держитесь со мной; урок физики почти закончен.)

Учитывая, что k = 1,38×10 -16 эрг/°К, а температура окружающей среды во Вселенной составляет 3,2°К, идеальный компьютер работа при температуре 3,2°K будет потреблять 4,4×10 -16 эрг каждый раз, когда он устанавливает или сбрасывает бит. Чтобы запустить компьютер с более низкой температурой, чем космическое фоновое излучение, потребуется дополнительная энергия для работы теплового насоса.

Теперь годовая выработка энергии нашего Солнца составляет около 1,21×10 41 эрг. Этого достаточно, чтобы произвести около 2,7×10 56 однобитовых изменений на нашем идеальном компьютере; достаточно изменений состояния, чтобы провести 187-битный счетчик через все его значения. Если бы мы построили сферу Дайсона вокруг Солнца и собрали всю его энергию за 32 года без каких-либо потерь, мы могли бы заставить компьютер считать до 2 192 . Конечно, у него не осталось бы энергии для выполнения каких-либо полезных вычислений с этим счетчиком.

Но это всего лишь одна звезда, и притом жалкая. Типичная сверхновая испускает около 10 51 эрг. (Примерно в сто раз больше энергии было бы высвобождено в виде нейтрино, но пока оставьте их.) Если бы всю эту энергию можно было бы направить в единую оргию вычислений, 219-битный счетчик мог бы проходить через все циклы. его состояний.

Эти цифры не имеют ничего общего с технологией устройств; это максимумы, которые допускает термодинамика. И они явно подразумевают, что атаки грубой силы на 256-битные ключи будут невозможны до тех пор, пока компьютеры не будут созданы из чего-то другого, кроме материи, и не будут занимать что-то другое, кроме пространства.

Десять лет спустя по-прежнему нет причин использовать что-то большее, чем 256-битный симметричный ключ. Я дал тот же совет в 2003 году в Практической криптографии (стр. 65-6). Даже мифический квантовый компьютер не сможет переборщить такое большое пространство ключей. (Конечно, открытые ключи бывают разные — см. рекомендации в Таблице 2.2 этого документа NIST).

Конечно, в реальном мире есть более разумные способы, чем поиск ключей методом грубой силы. И весь смысл криптоанализа шифров состоит в том, чтобы найти ярлыки для поиска методом грубой силы (как эта атака на AES), но 49 152-битный ключ просто глуп.

ОТРЕДАКТИРОВАНО ДОБАВИТЬ (9/30): Вот это смешно:

Несколько месяцев назад я разослал электронные письма каждому из семнадцати экспертов в области криптологии со званием доктора или профессора. Мое электронное письмо было первым объявлением академическому миру об алгоритме шифрования TOUAREG, который, что несколько необычно, имеет надежность сеансового ключа более 49 000 бит и при этом работает со скоростью 3 мегабайта в секунду. Принимая во внимание, что самая надежная версия BLOWFISH имеет сеансовый ключ из 448 бит и что каждый дополнительный бит удваивает задачу взлома ключа, я полагал, что мое объявление вызовет нечто большее, чем легкое трепетание интереса.

К его большому удивлению, никто не ответил.

Еще один совет: мое эссе 1998 года "Памятка разработчику шифров-любителей". Любой может разработать шифр, который он сам не сможет взломать. Это даже не сложно. Поэтому, когда вы говорите криптографу, что разработали шифр, который не можете взломать, его первым вопросом будет «кто вы, черт возьми, такой?» Другими словами, почему тот факт, что вы не можете взломать шифр, должен считаться доказательством безопасности шифра?

Если вы хотите разрабатывать алгоритмы, начните с взлома существующих. Практикуйтесь, разбивая алгоритмы, которые уже были взломаны (не заглядывая в ответы). Сломай то, что еще никто не сломал. Сломай другую. Опубликуйте свои перерывы. Когда вы зарекомендовали себя как человек, который может взламывать алгоритмы, вы можете приступить к разработке новых алгоритмов. До этого никто не будет воспринимать вас всерьез.

ОТРЕДАКТИРОВАНО ДОБАВИТЬ (9/30): Я только что сделал математику. Скорость шифрования 8 мегабайт в секунду на процессоре с частотой 3,33 ГГц соответствует примерно 400 тактовым циклам на байт. Это намного, намного медленнее, чем любой из финалистов AES десять лет назад или любой из кандидатов второго раунда SHA-3 сегодня. На самом деле это ужасно медленно.

Комментарии

Я думаю, вы хотели написать «6.5 тактов на байт» вместо «1024 тактов на байт»

Посмотрите, будут ли они делиться/опубликовывать исходный код, и пусть они говорят сами за себя 🙂
-rich

Такой длинный ключ полезен только в том случае, если вы используете его один раз, как одноразовый блокнот 😛

"Этот идет до одиннадцати".

"мы даже не можем представить себе мир, в котором возможен 256-битный поиск методом полного перебора".

Я думаю, довольно показательно, что единственные результаты поиска для этого доктора Хоторна в отношении шифрования получены с этого сайта и его блога. Учитывая, что они заявляют, что он «[…] один из ведущих и опытных экспертов по шифрованию в Великобритании[…]», я не могу найти никаких упоминаний о его работе.

Создавать ключ длиной 49 152 бита просто глупо. Проблема, которую эти «исследователи», по-видимому, не решают, заключается в том, что сила ключа на симметричных ключах по отношению ко времени не является линейной. Тот факт, что размер ключа удвоился, не означает, что он удвоил свою силу или удвоил время, необходимое для шифрования/дешифрования данных.

Все, что делает удвоение размера ключа, — это удваивает пространство для поиска правильного ключа. Это не обязательно означает, что он удваивает свою силу. Это то, что криптографы-любители постоянно ошибаются.

Предположим, вы ищете иголку в стоге сена с n-количеством сена. Удвоение количества сена в стоге аналогично удвоению размера ключа — ваше пространство для поиска иголки увеличилось вдвое. Но увеличилась ли сила? Независимо от количества сена в стоге, нельзя ли просто сжечь стог, чтобы найти свою иголку?

Таким образом, хотя размер ключа может содержать 2^49152 ключа в пространстве, это не означает, что сила для нахождения правильного ключа имеет ту же величину. Держу пари, что при правильном криптоанализе этот ключ не надежнее стандартных 2^128 симметричных ключей.

Поэтому утверждение о «самом сильном в мире алгоритме шифрования», вероятно, неверно. Его следует перефразировать на «самое большое в мире пространство симметричных ключей».

Наконец, когда обычные 256-битные ключи, такие как AES и Blowfish, начинают подвергаться серьезным атакам криптоанализа, нам следует заняться усилением алгоритмов или созданием новых более надежных алгоритмов, не обязательно увеличивая пространство ключей. Не забудьте сжечь стог сена.

Вы не можете соединить квантовые компьютеры параллельно. Или, скорее, это будет означать, что у вас не уникальный 256-битный ключ, а ряд маленьких ключей, которые применяются к данным независимо от других (т.е. первый блок зашифрован ключом 1, второй - ключом 2 и т. д.). )

Десять лет спустя по-прежнему нет причин использовать что-то большее, чем 256-битный симметричный ключ.

Так почему же 448 бит для Blowfish?

"Я думаю, вы хотели написать "6,5 тактов на байт" вместо "1024 тактов на байт"".

Да. Фиксированный. Спасибо.

«Этого достаточно, чтобы обеспечить примерно 2,7 × 10 56 однобитовых изменений на нашем идеальном компьютере; достаточно изменений состояния, чтобы проверить все значения 187-битного счетчика».

Для большинства двоичных счетчиков каждое изменение значения на выходе связано с изменением состояния более чем на один бит, причем не только на выходе, но и внутри.

Вы также подумали о том, какой должна быть тактовая частота, исходя из приблизительного предположения 2^25 секунд в год….

"Так почему же 448 бит для Blowfish?"

Общая неряшливость, больше всего на свете. Blowfish действительно предназначен для ключа переменной длины: от 32 до 448 бит. Blowfish использует шаг расширения ключа, чтобы расширить ключ до 448 бит. Шаг раскрытия ключа может использовать более короткий ключ или все 448 бит.

Это неаккуратное расписание. Ключевые расписания очень сложные, и я не очень хорошо их понимал в 1993 году, когда разрабатывал Blowfish. Я гораздо больше горжусь расписанием ключей в Twofish и Threefish.

"Вы также думали о том, какой должна быть тактовая частота, исходя из приблизительного предположения 2^25 секунд в год..."

Я был бы рад, если бы кто-нибудь обновил физику этого анализа.

Я мало знаю о разработке современного криптоалгоритма. Но достаточно знать, что претендовать на звание самого сильного и нерушимого в мире — это не то, на что мог бы претендовать любой, у кого есть хоть немного разума. Это просто означает, что это не продлится долго, когда выйдет исходный код.

Длина ключа, необходимая для обеспечения его безопасности, так же действительна, как и сам алгоритм, верно? Разве не полезно, возможно, удвоить длину ключа (симметричный 512, общедоступный 4096 или около того), чтобы защититься от будущих обнаружений слабых мест в базовой криптосхеме?

«Длина ключа, необходимая для обеспечения его безопасности, так же действительна, как и алгоритм, верно? Разве не полезно удвоить длину ключа (симметричный 512, общедоступный 4096 или около того), чтобы защититься от будущих обнаружений слабых мест в базовой криптосхеме?»

Разумный подход — это одна из причин, по которой я обычно рекомендую 256-битные ключи.

Я знаю, что взрывной рост длины асимметричного ключа, необходимого для обеспечения безопасности, является одной из причин, по которой DNSSEC работает над стандартизацией шифрования на основе эллиптических кривых в ближайшем будущем.

И я могу представить невидимых розовых единорогов.

Клайв: Ваш счетчик может использовать код Грея. Это кажется разумным предположением, учитывая, что здесь мы говорим о наилучшем сценарии.

«jawstech» — это не настоящая компания. Это веб-сайт BS, который используется для продвижения доменов. Такую хрень можно копать весь день. Вы пытаетесь создать где-то здесь чучело?

Jawstech – это ссылка 1999 года. Просто показывает, что происходит, когда криптографа со змеиным маслом бросают в немилую конуру 😉

Чтобы констатировать очевидное, не имеет значения, насколько сильна криптография, если вы можете просто заставить кого-то сообщить вам свой пароль/фразу (преднамеренно или непреднамеренно, например, с помощью регистраторов нажатий клавиш).

Здесь определенно вступает в силу «Закон непредвиденных последствий». Ресурсы, брошенные на ненужное совершенствование криптографии, — это ресурсы, которые не используются для усиления слабых мест, которые можно использовать, или, что еще хуже, ресурсы, отвлеченные от таких слабых мест, чтобы усугубить ситуацию.

Похоже на студента колледжа, который полон решимости повысить свою оценку по криптографии 101 до A+ с A, в результате чего другие его предметы, такие как Телекоммуникации 101 или Безопасность баз данных 101, опускаются с B до C вместо того, чтобы двигаться их тоже на пятерки.

Прошу прощения у тех, кто это знает. Я подозреваю, что некоторые комментарии здесь читают менеджеры, менее разбирающиеся в технологиях, которые, тем не менее, могут подумать, что стоит похвастаться сильной криптографией, а не обновлением брандмауэра или IDS. Действительно, отчеты высшему руководству, содержащие XXX-битную криптографию, выглядят более эффективными, чем отчеты, в которых обсуждается обновление чего-либо до версии 8.

Они также теряют баллы за то, что назвали «самый надежный алгоритм шифрования в мире» в честь этого труднопроизносимого внедорожника VW.

Есть ли связь между количеством желтых постов (Брюс) и количеством упоминаний имени Брюса в цитируемой статье…?

Я бы сказал, что 49 152-битный ключ будет очень уязвим для атаки типа "его слишком сложно установить, поэтому просто используйте ключ по умолчанию "12345..."".

«jawstech» — не настоящая компания. Это веб-сайт BS, который используется для продвижения доменов. Такую хрень можно копать весь день. Вы пытаетесь создать где-то здесь соломенного чучела?»

Это была реальная ссылка в 1999 году, когда я писал эссе. Я подумывал сделать примечание на этот счет, но решил, что это очевидно. Думаю, что нет.

Если вы собираетесь провести урок физики, постарайтесь правильно указать единицы измерения. Неправильно ссылаться на «градусы Кельвина». Единицей является Кельвин (множественное число Кельвинов), сокращенно «К». Таким образом, вы можете сказать: "Температура окружающей среды во Вселенной составляет 3,2 К" или "Температура окружающей среды во Вселенной составляет 3,2 Кельвина".

Вы можете изложить свою точку зрения, не будучи таким педантичным. Педантичность просто заставляет вас казаться глупым (что на самом деле не так); без него люди будут воспринимать вас более серьезно.

@DaveShaw: «Разве не полезно удвоить длину ключа (симметричный 512, общедоступный 4096 или около того), чтобы защититься от будущих обнаружений слабых мест в базовой криптосхеме?»

Как правило, просто удвоить длину ключа для заданного алгоритма не так уж и просто — никто не знает, как должен выглядеть AES-512.
Общим подходом к усилению «просто для уверенности» было бы использование старого доброго тройного шифрования (известного благодаря Triple-DES).

"Есть ли связь между количеством желтых постов (Брюс) и количеством упоминаний имени Брюса в цитируемой статье...?"

Я думаю, это в первую очередь зависит от того, насколько я занят, нахожусь ли я в самолете или нет и т. д. Хотя это и сомнительная запись, поэтому я слежу за комментариями более внимательно, чем обычно.

Несмотря на то, что вы правы насчет единиц, жаловаться на педантичность кого-то, исправляя довольно простительную и распространенную ошибку, выглядит немного странно.

"Хотя это и ложная запись, поэтому я слежу за комментариями более внимательно, чем обычно".

Когда авторы уделяют время общению со своим сообществом, это делает блог, эссе, журнал или сайт более личным и приятным для чтения. Вы на самом деле человек!

"Вы можете изложить свою точку зрения, не будучи таким педантичным. Педантичность просто заставляет вас казаться глупым (что на самом деле не так); люди будут воспринимать вас более серьезно без него».

О, я знаю. Но в контексте книги это сработало. Раздел был посвящен длине ключа, и я говорил о базовом взломе методом полного перебора, распределенном программном взломе методом полного перебора и аппаратном взломе методом полного перебора. Затем я рассказал об использовании вирусов для взлома методом полного перебора, о чем-то из 1991 года, названном «китайской лотереей», и еще о чем-то из 1991 года об использовании биочипов для взлома методом полного перебора.На тот момент все это было довольно глупо, поэтому я пошел на крайность.

IIRC, чего я, возможно, не знаю, время Планка составляет примерно 10 ^ -44 секунды, что будет 2 ^ -146 секунд. Учитывая, что в году 2 ^ 25 секунд, можно сделать вывод, что наибольшее количество последовательных (т. е. непараллельных) вычислений в год для любой системы не может превышать 2 ^ 171, независимо от того, сколько энергии было доступно для вычисления.

Отказ от ответственности: IAALNAP (я юрист, а не физик)
Джефф

@Aaron: Вы сказали: «Все, что делает удвоение размера ключа, — это удваивает пространство для поиска правильного ключа». Я не криптогений (иначе я был бы знаменит с книгами и блогом!), но….

Разве удвоение размера ключа не приводит к квадратному пространству ключа? (Предполагая, что все возможные значения являются действительными ключами, то есть.) IOW, 2^(n2) равно (2^n)^2, а не (2^n)2. Все последнее занимает 2^(n+1).

Например, возьмем пятибитный ключ. Он может иметь 2^5=32 значения, от 0 до 31 (десятичное). Удвойте длину до десяти бит. Теперь он может иметь 2^10=1024 значения, от 0 до 1023. Это 32 в квадрате, а не 32 в два раза. Все, что нужно, чтобы удвоить пространство ключей, это добавить один бит. В этом примере перейдите от пяти битов к шести; теперь он может иметь 2^6=64 значения, от 0 до 63.

Я что-то упустил в вашем объяснении или в криптографии в целом?

Читайте также: