очень простая реализация лукового роутера - PullRequest
4 голосов
/ 20 января 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 20 января 2010

Независимо от упомянутой проблемы, как правило, рекомендуется включать проверку целостности всякий раз, когда вы шифруете / дешифруете данные.Однако контрольные суммы не очень подходят для этого.Взгляните на алгоритмы Secure Hash, такие как SHA-256 (есть реализации, встроенные в стандартную инфраструктуру криптографии Java).

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

Или, по крайней мере, я думаю, что именно так я и сделаю ...; -)

NB. Шифрование само по себе не так уж сложно, я не думаю, но здесь может быть одна или две тонкости, которые нужно соблюдать.Например, в обычном диалоге между клиентом и сервером одна тонкость, о которой вы должны быть осторожны, - никогда не шифровать один и тот же блок данных дважды одним и тем же ключом (или, по крайней мере, это то, что сводится к блоку исследования)режимы "и" векторы инициализации ", если вы не знакомы с этой концепцией).В одном диалоге клиент-сервер клиент и сервер могут диктовать части вектора инициализации.В луковом маршрутизаторе нужно будет найти какое-то другое решение (в худшем случае, я полагаю, с использованием сильно сгенерированных случайных чисел, сгенерированных одним клиентом).

0 голосов
/ 20 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...