Подозреваю, что ответ "нет", но все же:
В WireGuard [1] есть концепция закрытых и открытых ключей для одноранговых узлов; открытый ключ является производным от закрытого, и связь между двумя сторонами может быть установлена только при совпадении ключей. Допустим, у нас есть два сверстника А и Б. Для их подключения каждый из них должен:
- сгенерировать закрытый ключ;
- сгенерировать открытый ключ, используя закрытый из предыдущего шага;
- поделиться открытым ключом с другой стороной.
Их конфигурация будет выглядеть так:
вглядеться А:
[Интерфейс]
PrivateKey = <закрытый ключ A>
[Вглядеться]
PublicKey = <открытый ключ B>
вглядеться Б:
[Интерфейс]
PrivateKey = <закрытый ключ B>
[Вглядеться]
PublicKey = <открытый ключ A>
Это очень просто и создает соединение один к одному.
Теперь, допустим, у нас есть набор сверстников Н, каждый со своей парой закрытый/открытый ключ. Есть также пэр Z, который поделился своим открытым ключом со всеми в Н, так Z может подключиться к любому из Н без проблем (с соответствующим изменением конфигурации [Вглядеться]
раздел).
Можно ли сделать что-то подобное для Z:
[Интерфейс]
PrivateKey = <закрытый ключ Z>
[Вглядеться]
Открытый ключ = f(N1, N2, ...Ni)
Где ф(...)
это функция, которая "объединяет" все открытые ключи в наборе Н, что позволяет Z подключиться к любому из Н без изменения конфигурации?
- https://www.wireguard.com/protocol/