|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
mayton Dima T Операций не куча, а ровно столько сколько разрядов То что ты сказал - справедливо только для сложения и вычитания. Там - линейная сложность. Умножение и деление двоичных чисел - имеет примерно от квадрата до икс в степени 1.2 complexity. Ну это же элементарно: для перевода числа в N-разрядность просто делим его на N: остаток это значение разряда, частное это все высшие разряды. Например 137 переводим в HEX: 137/16 = 8 частное 9 остаток 8 / 16 = 0 частное 8 остаток Итого 137 = 89h ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 20:51 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
mayton Dima T Для 137 это до 256, т.е. писать как есть. Потери всего 1 байт на 10 символов, т.е. таблица займет на 10% больше места. Да я думаю не о потерях 10% а о корректности и о возможных false-positive срабатываниях. Но если у меня будет алфавит из 129 символов то я точно буду брать расширять до байта. Делить по модулю 129 мне точно не захочется. Да и медленно. Какие ложные срабатывания? Если формат хранения допускает избыточность, то на берегу проверяй соответствие значения формату, т.е. в расчеты должны идти только правильные значения, мусор надо убирать на входе. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 20:58 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Делить не придется, надо будет складывать умножать. Мы же на вход получаем ключ в N-рязрядном представлении и его надо преобразовать в двоичное, т.е. в число, а для этого надо умножать, например 4 разряда: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2019, 09:44 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Еще подумал, если умножать и складывать так Код: plaintext
где N X заранее посчитано, то такая конструкция параллелится процом во время выполнения и займет пару тактов, т.е. не тормоз. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2019, 16:49 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Dima T mayton пропущено... Да я думаю не о потерях 10% а о корректности и о возможных false-positive срабатываниях. Но если у меня будет алфавит из 129 символов то я точно буду брать расширять до байта. Делить по модулю 129 мне точно не захочется. Да и медленно. Какие ложные срабатывания? Если формат хранения допускает избыточность, то на берегу проверяй соответствие значения формату, т.е. в расчеты должны идти только правильные значения, мусор надо убирать на входе. Давай рассуждать. Существуют ли такие редукты у которых разные хеши? Ключ (к примеру) имеет длину до 12 символов. Это разумная длина. Хеш SHA1 имеет длину 160 бит. Мощность множества хешей SHA1 во много раз превышает мощность множества 12 символьных ключей. Следовательно по принципу Дирихле существуют. Как 2 кролика в 1 клетке. Или как следствие из того что хширование - это сурьективная функция. И редуцирование - тоже сурьективная. Хотя если-бы мы увеличили длину ключа до 20 символов тогда возможно и редукция стала-бы однозначной. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2019, 18:05 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Ты меня запутал. Похоже мы по-разному понимаем твой пост 22051757 Я так понимаю что речь была о выходе за границы алфавита, т.е. при алфавите в 137 разрядов, чтобы не делить, делаем редукцию в 256, в результате часть разрядов ключа окажется за пределами алфавита, поэтому тут надо изобретать какое-то преобразование к алфавиту ключа. Причем алфавит еще и рваный, т.к. это строка. Можно без деления обойтись, например таблицей. mayton Dima T пропущено... Какие ложные срабатывания? Если формат хранения допускает избыточность, то на берегу проверяй соответствие значения формату, т.е. в расчеты должны идти только правильные значения, мусор надо убирать на входе. Давай рассуждать. Существуют ли такие редукты у которых разные хеши? Ключ (к примеру) имеет длину до 12 символов. Это разумная длина. Хеш SHA1 имеет длину 160 бит. Мощность множества хешей SHA1 во много раз превышает мощность множества 12 символьных ключей. Следовательно по принципу Дирихле существуют. Как 2 кролика в 1 клетке. Или как следствие из того что хширование - это сурьективная функция. И редуцирование - тоже сурьективная. Хотя если-бы мы увеличили длину ключа до 20 символов тогда возможно и редукция стала-бы однозначной. ИМХО Хэширование не гарантирует что два разных ключах будут иметь одинаковый хэш. Повышая мошность хэша мы снижаем вероятность возникновения такой ситуации, но не исключаем ее. То же с редукцией, обязательно будут разные хэши, которые дадут один и тот же ключ. Собственно поэтому в статье автор честно предупредил что будут возникать зацикливание и вырождение цепочек. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 08:21 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Как вариант алгоритма быстрой редукции 20 байт хэша в 12 байт алфавита: 1. При старте делаем таблицу 4 Кб (2 12 элементов) , где зациклен алфавит ключа: "1234567890123456....". 2. 12 раз от хэша взять по полтора байта (12 бит), использовать каждый как индекс массива, в итоге получаем разряд ключа. Никаких делений не надо. Получение элемента по индексу массива легкая операция и плюсом проц запараллелит получение разных разрядов. ИМХО одного байта для индекса недостаточно, т.к. тогда таблица будет 256 байт и значения будут неравномерно распределены, некоторые один раз, некоторые два, т.е. вероятность получения одних вдвое выше других. При 4 Кб (2 12 ) и алфавите 137 символов повторов будет 29-30, т.е. разброс 3%. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 10:03 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Мне кажется что тема кешей перекликается с этой. Если заниматься глубокой оптимизацией самого процесса генерации. Например. 1) Фаза №1. Для данного алфавита 8 alpha-numeric (к примеру) генерируем радужку с параметром t=10. 2) Получаем CSV-файл вида. В каждой строке - 10 редукций. Код: sql 1. 2. 3.
3) Некоторые key избыточны т.к. уже включены в цепочку редукций. Вопрос. Каким образом их искать? В процессе генерации? Или после? Где их хранить? База данных? Текстовый файл с сортировкой? Какие-то виды хеш-таблиц на диске? Специализированные key-value библиотеки. Может в фазе построения - хранить развёрнутую цепочку? Потом сворачивать после унификации? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 16:01 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Тут маленькая проблема, одна цепочка может быть миллиарды ключей, сохранить в памяти целиком не получится. Думаю надо точечно хранить, например каждую миллионную точку ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 17:26 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Да. Так вот вопрос. Как оптимально искать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 17:35 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
mayton Да. Так вот вопрос. Как оптимально искать? Я уже написал как: каждую миллионную точку, т.е. построить глобальное хранилище миллионных точек всех считающих потоков и синхронизировать в каждый. Т.е. в каждом считающем потоке будет миллион уже обсчитанных ключей, 10-12 Мб, возможно больше потребуется, тут все эмпирически определяется, хранилище надо будет синхронизировать регулярно и каждый свежий ключ проверять на наличие в хранилище. А может Амдал не даст развернуться и надо будет изобретать что-то еще. Собственно можно уже написать, но зачем? Уже написано. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 19:35 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Вот в смежном топике один господин беспокоился об использовании (утилизации) кешей. А я вижу в этой задаче краш-тест для кеша. Ну... помнишь по аналогии с CardRaytracer. Я его специально подбирал чтоб только CPU грузил но память и диск не трогал. А эта задача - будет шатать L1/L2/L3 с полной амплитудой. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 19:41 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
mayton А эта задача - будет шатать L1/L2/L3 с полной амплитудой. Не будет, тут объемы данных на порядки выше кэшей проца, тут бы в своп не уйти и то уже замечательно. Хотя уйти в своп в NMVe это не так уж и медленно. PS Интересно, есть ли управление некэшированием, т.е. дать понять процу не кэшировать то, что заведомо известно в кэше искать не потребуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 20:24 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
Не знаю. С моей точки зрения уход в своп - это потеря контроля над ситуацией. Кстати. Знаешь что в Linux (RHEL) существуют весьма скромные рекомендации по формуле размера своп-диска? Там он не выходит в терабайты. Смотри https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-swapspace Для моей конфигурации (не RHEL но похожей), я поставил RAM=8G, Swap=8G. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 21:42 |
|
Тяпничный криптунЪ и редукция
|
|||
---|---|---|---|
#18+
mayton Не знаю. С моей точки зрения уход в своп - это потеря контроля над ситуацией. Верно, в данной задаче надо просчитывать чтобы не было свопа, а не непопадание в кэши. mayton Кстати. Знаешь что в Linux (RHEL) существуют весьма скромные рекомендации по формуле размера своп-диска? Там он не выходит в терабайты. Смотри https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-swapspace Для моей конфигурации (не RHEL но похожей), я поставил RAM=8G, Swap=8G. Это общие рекомендации. Я их вообще не понимаю, хотя догадываюсь что они основаны на ожидании какой-нибудь задачи, которая увидит сколько есть реальной памяти и постарается занять ее всю. В виндовсе по умолчанию на всякий случай еще умножили на 1.5. Например если я воткнул 32 Гб оперативки в свой комп, то я ожидаю что свопа не будет вообще, но виндовс по дефолту займет 48 Гб под своп на моем SSD в 110 Гб ((( Я в виндовсе всегда принудительно выставляю минимальный размер свопа 16 Мб, максимальный - рекомендуемый 1.5 от размера памяти. Еще гибернайт выключаю, т.к. состояние памяти туда скидывается перед усыплением, но по факту он нафиг не нужен, т.к. все ширпотребные проги периодически сохраняют свое несохраненное состояние и при старте после сбоя предлагают к нему вернуться. Реальный размер свопа у меня обычно 16 Мб, иногда до 1 Гб вырастает на компах где памяти 2-4 Гб. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 22:11 |
|
|
start [/forum/topic.php?fid=16&msg=39910818&tid=1339856]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 229ms |
total: | 472ms |
0 / 0 |