Thanat0z
11.05.2007, 02:11
Данный материал любезно предоставлен и взят с разрешения создателя программы UDC - sic57005
Линк на исходный материал - __http://the-udc.com/rus/rus_hrainbow.html
Hybrid Rainbow - Новый сверхмощный метод, комбинирующий гибридную атаку с популярной техникой предвычисления. Сочетая в себе гибкость гибридной атаки, удобство и скорость табличного криптоаналза, он позволит с легкость восстанавливать те пароли, которые раньше считали "стойкими" и даже "недоступными для восстановления". Теперь, для любой хеш-функции, единожды посчитав гибридную таблицу по качественному словарю или комбинации словарей, можно за секунды восстанавливать пароли из 12 символов, да и из 13, да даже и из 20... Хотя, в общем-то, длина пароля более не имеет значения.
Оглавление
1. Предпосылки
2. Новые рубежи
3. Параметры генератора
4. Параметры предвычислителя
5. Работа с HR из UDC
6. Статистика и примеры
7. Справка по UDC
1. Предпосылки к созданию метода
Еще в 2003 году, Philippe Oechslin анонсировал новый метод, названный Rainbow Attack ("Making a Faster Cryptanalytic Time-Memory Trade-Off"), который позволил предвычислять Прямой Перебор. Единожды сгенерировав таблицу для определенного набора символов и определенной длинны пароля (например, 7 латинских символов) и сохранив ее на диск, мы сможем обращаться к таблице сколько угодно раз, и искать пароли для соответствующего набора символов уже не Прямым Перебором, а, выбирая нужные хеш-значения из таблицы, что на порядки сокращает время атаки.
Например, после создания таблицы для 7 алфавитно-цифровых символов (на это потребуется больше недели), можно восстановить почти любой пароль из 7 алфавитно-цифровых символов за 20-30 секунд. А вот Прямой Перебор по тому же диапазону займет более суток. Более того, таблицы можно просто скачать из Интернета, при этом даже не придется тратить время на их генерацию.
Таблицы, предложенные Philippe Oechslin имеют вероятностный характер - то есть любая таблица по определенному диапазону, не гарантирует 100% вероятность нахождения любого пароля из этого диапазона. И чем больше размер таблицы - тем выше эта вероятность восстановления (Success Rate).
И тут мы подходим к основной проблеме Rainbow таблиц. Если мы хотим получить высокую Success Rate для большого диапазона перебора - объем таблицы может быть слишком велик. В частности, таблицы для восстановления всех 8 символьных паролей с вероятностью 99% занимают более 1.5Тб (1500 Гигабайт). А время криптоанализа по ним, никак не меньше времени загрузки их с диска, что уже само по себе довольно ощутимо (порядка 4-5 часов).
Конечно же, мы можем сильно уменьшить объем таблиц за счет уменьшения Success Rate; например, для 90% вероятности восстановления того же диапазона объем таблицы уменьшится более чем в 2 раза (700 Гигабайт), а при 1% Success Rate таблица вообще поместится на компакт-диск.
Но только вот, что мы сможем восстановить по этим таблицам?
Таблица с 1% Success Rate вообще не даст никаких результатов, более эффективно в таком случае использовать Прямой Перебор. А таблица с 90% Success Rate, возможно, не будет содержать как раз самые релевантные комбинации (которые могли бы быть реальными паролями), навроде "password", "testpass" или "qwertyui".
Но при этом, сами релевантные комбинации, возможно c легкостью уместить и в 1% исходного диапазона для перебора.
Но для этого надо научиться генерировать таблицы так, чтобы они состояли именно из релевантных комбинаций, а не разнообразного "мусора" (т.е. строк, у которых вероятность быть паролем очень низка - "qpdfvlpr", например)...
Таблицы, которые предложил Philippe Oechslin, являлись демонстрацией успешности его техники предвычисления, а не специальным средством для восстановления паролей, о чем он и утверждал в abstract'e своей работы. Однако, многие онлайн сервисы, а также новички или любители, сразу же вооружились его методом, в первоначальном виде. И уже в таком виде метод давал неплохие результаты.
Однако за 4 года, барьер в 8 символов так и не был преодолен. Обычными Rainbow таблицами нельзя восстановить пароль из 12 символов, например, для MD5, как бы мы ни старались. Да что там 12, огромные сложности возникают уже и с 9 символами. А ведь на многих веб-порталах предлагают ставить пароли не короче 6-10 символов. Как раз для того чтобы их нельзя было подобрать при помощи таблиц...
2. Новые рубежи
А теперь представим, что у нас есть генератор, который строит таблицы из релевантных комбинаций, любой заданной длины и в любом количестве. Например, миллиард релевантных слов из 9 букв. Чем поможет такая таблица?
С одной строны, реальное заполнение диапазона из 9 букв составит меньше одной сотой процента. И по отношению к случайной строке из 9 букв ее Success Rate будет такой же (0.01%). Но с другой, стороны, каждая из релевантных комбинаций должна быть проверена в первую очередь, по причине большей реальной вероятности успеха. Возможно, по отношению к паролям, придуманным человеком, такая таблица будет иметь до 10% Success Rate (а может и больше). И в этом случае, мы получаем выигрыш КПД по отношению к классическим Rainbow таблицам до 10%/0.01% = 1000 раз.
Здесь я говорю "возможно", потому что реальная вероятность успеха полностью зависит от параметров генератора, которые пользователь устанавливает самостоятельно.
Самым примитивным способом предвычисления является текстовой словарь, состоящий целиком из релевантных комбинаций. По разным источникам, его Success Rate меняется от 5% до 90% (в зависимости от словаря и от исходной выборки хеш-значений). Но это уже в тысячи раз лучше, чем для Rainbow таблиц аналогичного размера.
Теперь посмотрим в сторону пользователя, который пытается придумать сложный для восстановления пароль. Пусть он даже знает, что у нас есть таблица из 100 миллиардов релевантных слов разной длины (такая таблица может занимать пару Гигабайт), но он не знает что это за таблица и какие слова в ней содержатся. Как выбрать пароль, который не восстановят? Ведь мы можем восстановить всего-то 100 миллиардов разных слов, а он может выбрать любой из практически неогранниченного количества. Может быть, он возьмет пароль "H@rdPas$word", которого наверняка нету в нашей таблице. Только вот откуда ему знать это. Возможно, у нас не будет пароля "peopmmssrl", но а если он у нас есть? Таким образом, граница "невозможности восстановления" стирается, уже благодаря одной сравнительно небольшой таблице.
А если у каждого криптоаналитика будет по своей большой таблице релевантных слов?...
Также теряет смысл и отношение "быть более надежным" для паролей. Будет ли пароль "testpassword" более надежным чем "326"? В одной таблице не будет первого, в другой не будет второго, а в третьей будут оба.
3. Основные параметры генератора
Из чего мы будем генерировать наши таблицы? Для первого приближения Hybrid Rainbow ответ прост - из словарей.
Возьмем один словарь D1. Какие слова мы можем получить из него? Например, добавим к каждому слову строку "2007". Или удвоим каждое слово. Или запишем в обратном порядке. Каждое такое действие назовем операцией. Назовем правилом последовательность операций. Например, удвоить слово, и записать результат в обратном порядке. Каждое правило "добавляет" в наш словарь еще одно слово, получаемое применением правила к исходному слову словаря. Значит, имея N правил, мы получим в N раз больше слов, чем в исходном словаре. Достоинство такого метода - его скорость, а также отсутствие необходимости держать на диске что-то кроме исходных слов и списка правил.
А есть и другой способ. Возьмем из словаря D1 какое-то слово W и добавим это слово к каждому слову из исходного словаря D1 (включая и W). Получим новый словарь, с количеством слов равным исходному. Теперь возьмем другое слово V и проделаем ту же операцию. Да и вообще, проделаем ее для всех слов из D1. Если в D1 было ровно M слов, то мы получим M новых словарей по M слов. Объединим их вместе и получим словарь из M^2 (M квадрат) слов. Такой словарь назовем "Декартовым квадратом D1" и обозначим за D1*D1.
Например, если D1 = {test, pass, 1} (три слова), то D1*D1 будет равен {testtest, testpass, test1, passtest, passpass, pass1, 1test, 1pass, 11} (девять слов).
Чем этот способ хорош? В первом приближении, он позволяет строить по набору слов всевозможные фразы, из этих слов составленные.
Копнем немного глубже. Будем строить словарь не из слов языка, а из кусочков слов. Например, по четырехбуквенным комбинациям. Причем не будем включать в словарь те комбинации, которые редко встречаются в реальных словах (паролях), навроде "pzla" или "qmzo", а оставим только те, которые являются вероятными, например, "test" или "qqqq". Построим D1*D1. Самое удивительное, что он будет состоять в основном из релевантных слов! Хотя их там будет в квадрат раз больше, чем в исходном словаре. То есть для 1000 релевантных кусочков, мы получим 1 000 000 более-менее релевантных комбинаций из 8 символов.
Данное обстоятельство позволяет, с одной стороны, упростить анализ релевантности, с другой стороны, автоматизировать процесс генерации словарей.
Теперь обобщим эту технику. Будем строить, не декартов квадрат, а декартово мультипроизведение. По набору словарей D1, D2, ... Dk построим словарь D1*D2*...*Dk, состоящий из всевозможных "фраз", где первое слово берется из первого словаря (D1), второе - из второго (D2), ..., а последнее - из последнего (Dk). Такой словарь будет иметь размер, равный произведению длин всех словарей, участвующих в построении, кроме того, он тоже в некоторой степени сохраняет релевантность.
Можно создать обобщенный словарь, который учитывает особенности морфологии. Например, все английские слова можно получить, перемножив prefixes.txt * stems.txt * suffixes.txt (префиксы * основы * суффиксы). Конечно, полученный словарь будет включать не только английские слова, но и "странные" словоформы (например "reasker" или "premainy"), но даже у них релевантность будет выше, чем у случайных наборов символов. Самое главное, что эти три файла с частями слов вместе занимают куда меньше места, чем даже сравнительно небольшой словарь английских слов.
Так вот, в Hybrid Rainbow используется именно декартово мультипроизведение, как основной способ генерации релевантных комбинаций.
Значит, до начала генерации, необходимо определить все словари с "частичками", в порядке их произведения. Это и является первым параметром метода ( D = {D1, D2, D3, ... Dk} ).
4. Параметризация предвычислителя
После того как мы определили нужные нам словари ( D = {D1, D2, D3, ... Dk} ), необходимо задать способ, которым полученное произведение R = D1*D2*...*Dk будет сохранено на диск.
Объем полученного словаря |R| будет составлять |D1|*|D2|*...*|Dk|, то есть просто произведение объемов всех словарей. Пусть мы возьмем два словаря на 100 000 и 500 000 слов, и перемножим, получим словарь на 50 000 000 000 слов. Скорее всего, его уже не удастся записать в текстовом виде на диск. При средней длине слова в 9 символов, такой словарь потребует 480 Гб дискового пространства.
Для того чтобы сократить этот объем, можно пользоваться параметром длина цепочки. Как и в оригинальном методе Philippe Oechslin, установка длина цепочки в L сокращает объем словаря в L/16 раз. То есть, если в вышерассмотренном примере положить длину цепочки равной 2048, то объем файла на диске сократится до 380 Мб (50 000 000 000 * 16/2048 байт).
Однако, при увеличении длины цепочки, время криптоанализа (т.е. подбора пароля по готовой таблице) увеличивается. И если при длине цепочки равной 2048, в среднем на одно хеш-значение потребуется пара секнуд, то уже при длине цепочки равной 10 000, на один хеш придется потратить до пары минут. В общем случае, время криптоанализа зависит от длины цепочки квадратично. Обычно для цепочки, длиннее 100 000 криптоанализ перестает быть эффективным.
Один диапазон для предвычисления (R) не обязан быть предвычислен на одном компьютере за один раз. Естественно, метод поддерживает возобновление вычисления после остановки. А для того чтобы эффективней генерировать несколько таблиц по одному диапазону, введен параметр номер таблицы. Таблицы с разными именами и номерами, даже по одному диапазону (R) никогда не будут одинаковыми.
Также, следует отметить, что оптимальным образом криптоанализ происходит, если таблица целиком умещается в оперативную память компьютера. Для этого имеет смысл сделать несколько маленьких табличек с разными номерами таблицы, вместо одной большой.
А как сделать "маленькую" таблицу? Для этого поможет параметр под именем "Фактор выполнения". Установка в 100% предполагает где-то 45-55% покрытие R (т.е. Success Rate), что является обычно недостаточным. Для 90% Success Rate необходимо поставить фактор выполнения минимум на 300%. При этом время предвычисления будет в 3 (=300%/100%) больше чем время перебора по тому же диапазону.
Мы видим, что за то же время, что Прямой Перебор справляется с диапазоном, предвычисления (с фактором выполнения = 100%) покрывают лишь половину диапазона. Это неизбежная плата за уменьшение объема файла-таблицы и увеличение скорости криптоанализа.
Маленькие таблицы получаются, за счет установки фактора выполнения на небольшое значение 1% - 25%. У каждой такой таблицы будет свой небольшой Success Rate, но сложив все таблицы вместе мы получим общий Success Rate больше чем у одной таблицы того же объема. Подобный эффект подробно описан в работе Philippe Oechslin.
Линк на исходный материал - __http://the-udc.com/rus/rus_hrainbow.html
Hybrid Rainbow - Новый сверхмощный метод, комбинирующий гибридную атаку с популярной техникой предвычисления. Сочетая в себе гибкость гибридной атаки, удобство и скорость табличного криптоаналза, он позволит с легкость восстанавливать те пароли, которые раньше считали "стойкими" и даже "недоступными для восстановления". Теперь, для любой хеш-функции, единожды посчитав гибридную таблицу по качественному словарю или комбинации словарей, можно за секунды восстанавливать пароли из 12 символов, да и из 13, да даже и из 20... Хотя, в общем-то, длина пароля более не имеет значения.
Оглавление
1. Предпосылки
2. Новые рубежи
3. Параметры генератора
4. Параметры предвычислителя
5. Работа с HR из UDC
6. Статистика и примеры
7. Справка по UDC
1. Предпосылки к созданию метода
Еще в 2003 году, Philippe Oechslin анонсировал новый метод, названный Rainbow Attack ("Making a Faster Cryptanalytic Time-Memory Trade-Off"), который позволил предвычислять Прямой Перебор. Единожды сгенерировав таблицу для определенного набора символов и определенной длинны пароля (например, 7 латинских символов) и сохранив ее на диск, мы сможем обращаться к таблице сколько угодно раз, и искать пароли для соответствующего набора символов уже не Прямым Перебором, а, выбирая нужные хеш-значения из таблицы, что на порядки сокращает время атаки.
Например, после создания таблицы для 7 алфавитно-цифровых символов (на это потребуется больше недели), можно восстановить почти любой пароль из 7 алфавитно-цифровых символов за 20-30 секунд. А вот Прямой Перебор по тому же диапазону займет более суток. Более того, таблицы можно просто скачать из Интернета, при этом даже не придется тратить время на их генерацию.
Таблицы, предложенные Philippe Oechslin имеют вероятностный характер - то есть любая таблица по определенному диапазону, не гарантирует 100% вероятность нахождения любого пароля из этого диапазона. И чем больше размер таблицы - тем выше эта вероятность восстановления (Success Rate).
И тут мы подходим к основной проблеме Rainbow таблиц. Если мы хотим получить высокую Success Rate для большого диапазона перебора - объем таблицы может быть слишком велик. В частности, таблицы для восстановления всех 8 символьных паролей с вероятностью 99% занимают более 1.5Тб (1500 Гигабайт). А время криптоанализа по ним, никак не меньше времени загрузки их с диска, что уже само по себе довольно ощутимо (порядка 4-5 часов).
Конечно же, мы можем сильно уменьшить объем таблиц за счет уменьшения Success Rate; например, для 90% вероятности восстановления того же диапазона объем таблицы уменьшится более чем в 2 раза (700 Гигабайт), а при 1% Success Rate таблица вообще поместится на компакт-диск.
Но только вот, что мы сможем восстановить по этим таблицам?
Таблица с 1% Success Rate вообще не даст никаких результатов, более эффективно в таком случае использовать Прямой Перебор. А таблица с 90% Success Rate, возможно, не будет содержать как раз самые релевантные комбинации (которые могли бы быть реальными паролями), навроде "password", "testpass" или "qwertyui".
Но при этом, сами релевантные комбинации, возможно c легкостью уместить и в 1% исходного диапазона для перебора.
Но для этого надо научиться генерировать таблицы так, чтобы они состояли именно из релевантных комбинаций, а не разнообразного "мусора" (т.е. строк, у которых вероятность быть паролем очень низка - "qpdfvlpr", например)...
Таблицы, которые предложил Philippe Oechslin, являлись демонстрацией успешности его техники предвычисления, а не специальным средством для восстановления паролей, о чем он и утверждал в abstract'e своей работы. Однако, многие онлайн сервисы, а также новички или любители, сразу же вооружились его методом, в первоначальном виде. И уже в таком виде метод давал неплохие результаты.
Однако за 4 года, барьер в 8 символов так и не был преодолен. Обычными Rainbow таблицами нельзя восстановить пароль из 12 символов, например, для MD5, как бы мы ни старались. Да что там 12, огромные сложности возникают уже и с 9 символами. А ведь на многих веб-порталах предлагают ставить пароли не короче 6-10 символов. Как раз для того чтобы их нельзя было подобрать при помощи таблиц...
2. Новые рубежи
А теперь представим, что у нас есть генератор, который строит таблицы из релевантных комбинаций, любой заданной длины и в любом количестве. Например, миллиард релевантных слов из 9 букв. Чем поможет такая таблица?
С одной строны, реальное заполнение диапазона из 9 букв составит меньше одной сотой процента. И по отношению к случайной строке из 9 букв ее Success Rate будет такой же (0.01%). Но с другой, стороны, каждая из релевантных комбинаций должна быть проверена в первую очередь, по причине большей реальной вероятности успеха. Возможно, по отношению к паролям, придуманным человеком, такая таблица будет иметь до 10% Success Rate (а может и больше). И в этом случае, мы получаем выигрыш КПД по отношению к классическим Rainbow таблицам до 10%/0.01% = 1000 раз.
Здесь я говорю "возможно", потому что реальная вероятность успеха полностью зависит от параметров генератора, которые пользователь устанавливает самостоятельно.
Самым примитивным способом предвычисления является текстовой словарь, состоящий целиком из релевантных комбинаций. По разным источникам, его Success Rate меняется от 5% до 90% (в зависимости от словаря и от исходной выборки хеш-значений). Но это уже в тысячи раз лучше, чем для Rainbow таблиц аналогичного размера.
Теперь посмотрим в сторону пользователя, который пытается придумать сложный для восстановления пароль. Пусть он даже знает, что у нас есть таблица из 100 миллиардов релевантных слов разной длины (такая таблица может занимать пару Гигабайт), но он не знает что это за таблица и какие слова в ней содержатся. Как выбрать пароль, который не восстановят? Ведь мы можем восстановить всего-то 100 миллиардов разных слов, а он может выбрать любой из практически неогранниченного количества. Может быть, он возьмет пароль "H@rdPas$word", которого наверняка нету в нашей таблице. Только вот откуда ему знать это. Возможно, у нас не будет пароля "peopmmssrl", но а если он у нас есть? Таким образом, граница "невозможности восстановления" стирается, уже благодаря одной сравнительно небольшой таблице.
А если у каждого криптоаналитика будет по своей большой таблице релевантных слов?...
Также теряет смысл и отношение "быть более надежным" для паролей. Будет ли пароль "testpassword" более надежным чем "326"? В одной таблице не будет первого, в другой не будет второго, а в третьей будут оба.
3. Основные параметры генератора
Из чего мы будем генерировать наши таблицы? Для первого приближения Hybrid Rainbow ответ прост - из словарей.
Возьмем один словарь D1. Какие слова мы можем получить из него? Например, добавим к каждому слову строку "2007". Или удвоим каждое слово. Или запишем в обратном порядке. Каждое такое действие назовем операцией. Назовем правилом последовательность операций. Например, удвоить слово, и записать результат в обратном порядке. Каждое правило "добавляет" в наш словарь еще одно слово, получаемое применением правила к исходному слову словаря. Значит, имея N правил, мы получим в N раз больше слов, чем в исходном словаре. Достоинство такого метода - его скорость, а также отсутствие необходимости держать на диске что-то кроме исходных слов и списка правил.
А есть и другой способ. Возьмем из словаря D1 какое-то слово W и добавим это слово к каждому слову из исходного словаря D1 (включая и W). Получим новый словарь, с количеством слов равным исходному. Теперь возьмем другое слово V и проделаем ту же операцию. Да и вообще, проделаем ее для всех слов из D1. Если в D1 было ровно M слов, то мы получим M новых словарей по M слов. Объединим их вместе и получим словарь из M^2 (M квадрат) слов. Такой словарь назовем "Декартовым квадратом D1" и обозначим за D1*D1.
Например, если D1 = {test, pass, 1} (три слова), то D1*D1 будет равен {testtest, testpass, test1, passtest, passpass, pass1, 1test, 1pass, 11} (девять слов).
Чем этот способ хорош? В первом приближении, он позволяет строить по набору слов всевозможные фразы, из этих слов составленные.
Копнем немного глубже. Будем строить словарь не из слов языка, а из кусочков слов. Например, по четырехбуквенным комбинациям. Причем не будем включать в словарь те комбинации, которые редко встречаются в реальных словах (паролях), навроде "pzla" или "qmzo", а оставим только те, которые являются вероятными, например, "test" или "qqqq". Построим D1*D1. Самое удивительное, что он будет состоять в основном из релевантных слов! Хотя их там будет в квадрат раз больше, чем в исходном словаре. То есть для 1000 релевантных кусочков, мы получим 1 000 000 более-менее релевантных комбинаций из 8 символов.
Данное обстоятельство позволяет, с одной стороны, упростить анализ релевантности, с другой стороны, автоматизировать процесс генерации словарей.
Теперь обобщим эту технику. Будем строить, не декартов квадрат, а декартово мультипроизведение. По набору словарей D1, D2, ... Dk построим словарь D1*D2*...*Dk, состоящий из всевозможных "фраз", где первое слово берется из первого словаря (D1), второе - из второго (D2), ..., а последнее - из последнего (Dk). Такой словарь будет иметь размер, равный произведению длин всех словарей, участвующих в построении, кроме того, он тоже в некоторой степени сохраняет релевантность.
Можно создать обобщенный словарь, который учитывает особенности морфологии. Например, все английские слова можно получить, перемножив prefixes.txt * stems.txt * suffixes.txt (префиксы * основы * суффиксы). Конечно, полученный словарь будет включать не только английские слова, но и "странные" словоформы (например "reasker" или "premainy"), но даже у них релевантность будет выше, чем у случайных наборов символов. Самое главное, что эти три файла с частями слов вместе занимают куда меньше места, чем даже сравнительно небольшой словарь английских слов.
Так вот, в Hybrid Rainbow используется именно декартово мультипроизведение, как основной способ генерации релевантных комбинаций.
Значит, до начала генерации, необходимо определить все словари с "частичками", в порядке их произведения. Это и является первым параметром метода ( D = {D1, D2, D3, ... Dk} ).
4. Параметризация предвычислителя
После того как мы определили нужные нам словари ( D = {D1, D2, D3, ... Dk} ), необходимо задать способ, которым полученное произведение R = D1*D2*...*Dk будет сохранено на диск.
Объем полученного словаря |R| будет составлять |D1|*|D2|*...*|Dk|, то есть просто произведение объемов всех словарей. Пусть мы возьмем два словаря на 100 000 и 500 000 слов, и перемножим, получим словарь на 50 000 000 000 слов. Скорее всего, его уже не удастся записать в текстовом виде на диск. При средней длине слова в 9 символов, такой словарь потребует 480 Гб дискового пространства.
Для того чтобы сократить этот объем, можно пользоваться параметром длина цепочки. Как и в оригинальном методе Philippe Oechslin, установка длина цепочки в L сокращает объем словаря в L/16 раз. То есть, если в вышерассмотренном примере положить длину цепочки равной 2048, то объем файла на диске сократится до 380 Мб (50 000 000 000 * 16/2048 байт).
Однако, при увеличении длины цепочки, время криптоанализа (т.е. подбора пароля по готовой таблице) увеличивается. И если при длине цепочки равной 2048, в среднем на одно хеш-значение потребуется пара секнуд, то уже при длине цепочки равной 10 000, на один хеш придется потратить до пары минут. В общем случае, время криптоанализа зависит от длины цепочки квадратично. Обычно для цепочки, длиннее 100 000 криптоанализ перестает быть эффективным.
Один диапазон для предвычисления (R) не обязан быть предвычислен на одном компьютере за один раз. Естественно, метод поддерживает возобновление вычисления после остановки. А для того чтобы эффективней генерировать несколько таблиц по одному диапазону, введен параметр номер таблицы. Таблицы с разными именами и номерами, даже по одному диапазону (R) никогда не будут одинаковыми.
Также, следует отметить, что оптимальным образом криптоанализ происходит, если таблица целиком умещается в оперативную память компьютера. Для этого имеет смысл сделать несколько маленьких табличек с разными номерами таблицы, вместо одной большой.
А как сделать "маленькую" таблицу? Для этого поможет параметр под именем "Фактор выполнения". Установка в 100% предполагает где-то 45-55% покрытие R (т.е. Success Rate), что является обычно недостаточным. Для 90% Success Rate необходимо поставить фактор выполнения минимум на 300%. При этом время предвычисления будет в 3 (=300%/100%) больше чем время перебора по тому же диапазону.
Мы видим, что за то же время, что Прямой Перебор справляется с диапазоном, предвычисления (с фактором выполнения = 100%) покрывают лишь половину диапазона. Это неизбежная плата за уменьшение объема файла-таблицы и увеличение скорости криптоанализа.
Маленькие таблицы получаются, за счет установки фактора выполнения на небольшое значение 1% - 25%. У каждой такой таблицы будет свой небольшой Success Rate, но сложив все таблицы вместе мы получим общий Success Rate больше чем у одной таблицы того же объема. Подобный эффект подробно описан в работе Philippe Oechslin.