Я хотел бы получить правильное представление о механизме заполнения, используемом в луковой маршрутизации. Следующее взято из оригинальной статьи о луковой маршрутизации [https://www.onion-router.net/Publications/IH-1996.pdf].
Обратите внимание, что при каждом прыжке луковица сжимается по мере того, как снимается слой. К
избегайте скомпрометированных узлов, выводящих информацию о маршруте из этого
монотонно уменьшающийся размер, случайная битовая строка размером
очищенный внешний слой добавляется в конец полезной нагрузки перед
пересылка. Ни один прокси, кроме последнего, не будет знать, какую часть полезной нагрузки он получает.
такое дополнение, потому что он не будет знать, где он находится в цепочке. Он просто «расшифровывает»
прокладка вместе с остальной частью лука
Чтобы конкретизировать мой вопрос, предположим, что цепочка имеет длину 3, состоящую из $Х$, $Y$, $Z$, куда $Z$ является последним узлом в цепочке. Предположим также, что ключи цепочки уже установлены. Насколько я понимаю, если источник хочет отправить $ млн $ к месту назначения, использующему эту цепочку, он шифрует $ млн $ следующее:
$$
O_Z = \left[\_,C_Z = E.K_{FZ}(M), T_Z=\text{MAC}.K'_{FZ}(C_Z)\right] \
O_Y = \left[Z, C_Y = E.K_{FY}(O_Z), T_Z=\text{MAC}.K'_{FY}(C_Y)\right] \
O_X = \left[Y, C_X = E.K_{FX}(O_Y), T_Z=\text{MAC}.K'_{FX}(C_X)\right]
$$
при условии, что для шифрования полезной нагрузки используется аутентифицированное шифрование.
Если $Х$ получает $O_X$ от отправителя, $Х$ раскаты наружного слоя и посылает $O_Y$ к $Y$ и так далее. Понятно, что размер луковицы уменьшится, если пересылать только расшифрованную луковицу.
Если X добавляет случайное дополнение к $O_Y$ перед отправкой в $Y$, как может $Y$ знаете размер прокладки? Если $Y$ можно как-то определить размер отступа, я думаю $Y$ может знать, где он находится в цепочке, что противоречит тому, что утверждается в оригинальной статье. Что мне здесь не хватает?