
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.197.111.121] |
![]() |
|
![]() |
|
|
Всем хай! Сходу к делу.
Кое-что непонятно по схеме разделения секрета Шамира. Более-менее понятно, когда шифруем целые числа. Например: secret = 100, N = 5, K = 3 секрет - число 100, делим на 5 фрагментов ( 5 кодов, частей ) и затем, используя 3 фрагмента, дешифруем число. Здесь больших проблем нет. Даже работает корректно вроде. ------------------------------- А если зашифровать надо строки, ну хотя бы строку для начала. Например, такая строка: "Apple for table". Во-первых, непонятно, на сколько частей колоть строку? Например, 1 часть такая "Apple" и что? Приводить строковую часть "Apple" к целому числу, например, суммой АСКИ-кодов? Это ведь не гарантирует однозначности строки. Концептуально непонятно, к чему стремиться. Во-вторых, вижу на данный момент лишь такой вариант шифрования строк - посимвольно. У каждого символа есть АСКИ-код - суть целое число. Когда секретом Шамира выступает целое число - все работает. Т е допустимо просто в цикле пробежать по заданной строке и для каждого символа вызвать алгоритм Шамира, передавая на вход целое число ( это ASCII-код символа )? или это бред тотальный??) спс. за внимание |
![]() |
Сообщ.
#2
,
|
|
А какая разница, числа или строки? Суть алгоритма в том, что имеется N чисел-паролей, причём каждому участнику известно только одно из них, и достаточно K из этих чисел для восстановления секрета.
Так что, получив строку, мы делим её по любому признаку на K частей (скажем, по словам, или по количеству символов), после чего каждая подстрока по некоему известному алгоритму преобразуется в число. И да, сумма ASCII для этого вполне подходит. Гарантия однозначности не нужна - от слова "совсем". Просто если алгоритм вычисления числа по заданной строке "спрятан", то получается ещё одна степень защиты, а если нет - то и неважно, запомнит участник свою подстроку или получаемое из неё число. Что до шифрования - шифруются однозначно числа. Если надо шифровать строку, то она делится на куски, каждый кусок конвертируется в число (преобразование в ASCII - вполне подходит), каждое число шифруется отдельно, итоговое шифрованное сообщение и есть совокупность этих чисел, в исходном порядке или перемешанных по определённому алгоритму (плюс ещё степень защиты). |
Сообщ.
#3
,
|
|
|
Akina, благодарен за четкое пояснение.
Ты очень правильно написал про степени защиты - у меня были похожие мысли, но не мог сформулировать. Условно говоря, если нужна ОДНА степень защиты, то суммируем АСКИ-коды символов строки, получая число, и отдаем на функцию encoding. И в принципе этого ДОСТАТОЧНО) Если нужна 2ая степень защиты, то дополнительно делаем то же самое для каждого символа. еще такой момент есть, думал, что, если делим ( кодируем ) на N частей число, то для его восстановления нужно N - 1 фрагментов. А в моем исходнике N = 5, а K = 3 ( а не 4! ). Но это ладно... зы: а вообще криптографические алгоритмы неприятные по своей сути)), особенно, когда я вижу готовый исходник какого-нибудь алгоритма - это дикий ужас, куча переменных аля x, y, z, c, k и какие-то бесконечные мат.преобразования над ними мутные) |
![]() |
Сообщ.
#4
,
|
|
Цитата FasterHarder @ думал, что, если делим ( кодируем ) на N частей число, то для его восстановления нужно N - 1 фрагментов. А в моем исходнике N = 5, а K = 3 ( а не 4! ). Ну это всё хорошо, с теорией и примером, расписано у википедиков - посмотри. Цитата FasterHarder @ криптографические алгоритмы неприятные по своей сути)), особенно, когда я вижу готовый исходник какого-нибудь алгоритма - это дикий ужас, куча переменных аля x, y, z, c, k и какие-то бесконечные мат.преобразования над ними мутные К реализации такого алгоритма предъявляется только одно требование - эффективно. А то, что ни хрена не читаемо - так это даже не недостаток... |