шифрование межузловой связи geth (devp2p/rlpx)

В настоящее время я анализирую механизмы шифрования, используемые в geth.

В настоящее время я собрал следующую информацию из исходного кода ( https://github.com/ethereum/go-ethereum/blob/master/p2p/rlpx.go ):

  • связь зашифрована
  • нет сертификата сервера / цепочек ЦС, как в TLS
  • Обмен ключами через: ECDSA/secp256k1
  • ECDSA publicKeyLength: 256 бит
  • SharedSecretKeyLength: 16 байт

Пока это правильно?

Кто-нибудь знает, есть ли документация по шифрованию в межузловом протоколе?

Обновление с https://github.com/ethereum/devp2p/blob/master/rlpx.md (спасибо Ричарду Хорроксу за указание на него):

Рукопожатие RLPx считается «сломанной криптографией», поскольку aes-secret и mac-secret повторно используются как для чтения, так и для записи. Две стороны соединения RLPx генерируют два потока CTR из одного и того же ключа, nonce и IV. Если злоумышленник знает один открытый текст, он может расшифровать неизвестные открытые тексты повторно используемого ключевого потока.

Обновление спросили на crypto.stackexchange.com о уязвимости шифрования выше -> https://crypto.stackexchange.com/questions/63047/ethereum-rlpx-protocol-for-inter-node-communication-flaws-in-the-encryption

Ответы (1)

Кто-нибудь знает, есть ли документация по шифрованию в межузловом протоколе?

Возможно, вы уже нашли их, но вот несколько источников, которые я использовал в прошлом:

Канал Gitter: https://gitter.im/ethereum/devp2p

Диссекторы Consensys Wireshark для devp2p: https://github.com/ConsenSys/ethereum-dissectors